diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index cc17a9975c7..0e5b5ad3208 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -58,6 +58,9 @@ actual development. be a new proc that they both can use. - No magic numbers/strings. If you have a number or text that is important and used in your code, make a `#DEFINE` statement with a name that clearly indicates it's use. + - `if(condition)` must be used over `if (condition)` or any other variation. + - The same applies for `while` and `for` loops, they must have no space between the + keyword and condition brackets. `while(condition)`, `for(condition)` - If you want to output a message to a player's chat (this includes text sent to `world`), use `to_chat(mob/client/world, "message")`. Do not use `mob/client/world << "message"`. diff --git a/.gitignore b/.gitignore index 47ad360a40e..02f0c8cf790 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ #ignore any files in config/, except those in subdirectories. /config/* -!/config/*/* +!config/**/*/ #ignore other, specific files and folers data/ diff --git a/README.md b/README.md index ff8ab8f6d80..6f8195ab8ea 100644 --- a/README.md +++ b/README.md @@ -120,8 +120,11 @@ including addons and modifications you have made. See [this](https://www.gnu.org/licenses/why-affero-gpl.html) for more information. -Any files located in the `Paradise/icons/goonstation` and `Paradise/sound/goonstation` -folders, and any of their subdirectories, are licensed under the +Any files located in the +`Paradise/goon`, +`Paradise/icons/goonstation`, or +`Paradise/sound/goonstation` +directories, or any subdirectories of mentioned directories are licensed under the Creative Commons 3.0 BY-NC-SA license (https://creativecommons.org/licenses/by-nc-sa/3.0) diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index badefaf8999..dd54aea2e92 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 4f184355e5e..453554f5c69 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..02ea1f45638 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -38,7 +38,7 @@ "aaL" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/syndicate) "aaM" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "aaN" = (/obj/structure/closet/syndicate/suits,/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) -"aaO" = (/obj/structure/table,/obj/item/weapon/c4{pixel_x = 2; pixel_y = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) +"aaO" = (/obj/structure/table,/obj/item/weapon/grenade/plastic/c4{pixel_x = 2; pixel_y = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "aaP" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "aaQ" = (/obj/machinery/atmospherics/unary/tank/air{dir = 1},/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/shuttle/syndicate) "aaR" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1331; id_tag = "synd_pump"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) @@ -71,13 +71,13 @@ "abs" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access_txt = "150"},/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "abt" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/crowbar/red,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "abu" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area/solar/auxport) -"abv" = (/obj/machinery/sleeper/upgraded,/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) -"abw" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) +"abv" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/obj/machinery/sleeper/syndie{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) +"abw" = (/obj/machinery/sleeper/syndie{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "abx" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "aby" = (/obj/machinery/door/window{dir = 8; name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "abz" = (/obj/structure/closet/crate/internals,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "abA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating/airless/catwalk,/area/solar/auxport) -"abB" = (/obj/machinery/sleeper/upgraded,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) +"abB" = (/obj/machinery/sleeper{dir = 4; name = "Prisoner Sleeper"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitered"},/area/security/brig) "abC" = (/obj/structure/table,/obj/item/weapon/gun/syringe,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "abD" = (/obj/structure/table,/obj/item/weapon/reagent_containers/syringe/charcoal,/obj/item/weapon/reagent_containers/syringe/charcoal{pixel_y = 2},/obj/item/weapon/reagent_containers/syringe/charcoal{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "abE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) @@ -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) @@ -490,7 +490,7 @@ "ajv" = (/obj/structure/rack,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/suit/space/vox/carapace,/obj/item/clothing/head/helmet/space/vox/carapace,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ajw" = (/obj/structure/rack,/obj/item/weapon/gun/dartgun/vox/raider,/obj/item/weapon/gun/dartgun/vox/medical,/obj/item/weapon/dart_cartridge,/obj/item/weapon/dart_cartridge,/obj/item/weapon/dart_cartridge,/obj/item/weapon/dart_cartridge,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ajx" = (/obj/machinery/sleeper/upgraded,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"ajy" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"ajy" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitered"},/area/security/brig) "ajz" = (/obj/machinery/bodyscanner,/obj/machinery/light/spot,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ajA" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ajB" = (/turf/simulated/wall/r_wall,/area/maintenance/auxsolarport) @@ -745,9 +745,9 @@ "aoq" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/fore) "aor" = (/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/fore) "aos" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/fore) -"aot" = (/obj/machinery/sleeper{dir = 8; name = "Prisoner Sleeper"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitered"},/area/security/brig) +"aot" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whiteblue"},/area/medical/sleeper{name = "Sleepers"}) "aou" = (/obj/structure/table,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitered"},/area/security/brig) -"aov" = (/obj/machinery/sleep_console,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitered"},/area/security/brig) +"aov" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "whitebluefull"},/area/medical/sleeper{name = "Sleepers"}) "aow" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aox" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{dir = 4; icon_state = "neutralcorner"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aoy" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) @@ -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) @@ -1121,10 +1121,10 @@ "avC" = (/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/starboard) "avD" = (/obj/structure/rack,/obj/item/weapon/book/manual/engineering_guide{pixel_x = 3; pixel_y = 4},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/maintenance/starboard) "avE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/wall/r_wall,/area/engine/gravitygenerator) -"avF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/engine/gravitygenerator) -"avG" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/engine/gravitygenerator) -"avH" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/engine/gravitygenerator) -"avI" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/power/terminal,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/engine/gravitygenerator) +"avF" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/engine/gravitygenerator) +"avG" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/engine/gravitygenerator) +"avH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/engine/gravitygenerator) +"avI" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/power/terminal,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/engine/gravitygenerator) "avJ" = (/obj/machinery/firealarm{dir = 4; pixel_x = 28},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/stool/bed/chair/office/light,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/engine/gravitygenerator) "avK" = (/obj/machinery/power/apc{dir = 8; name = "Fore Starboard Solar APC"; pixel_x = -25; pixel_y = 3},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/auxsolarstarboard) "avL" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/maintenance/auxsolarstarboard) @@ -1193,7 +1193,7 @@ "awW" = (/obj/structure/dresser,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/carpet,/area/crew_quarters/sleep) "awX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/starboard) "awY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/engine/gravitygenerator) -"awZ" = (/obj/machinery/door/airlock/highsecurity{name = "Gravity Generator Room"; req_access_txt = "19;23"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/gravitygenerator) +"awZ" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/hologram/holopad,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/engine/gravitygenerator) "axa" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/gravitygenerator) "axb" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/table,/obj/item/weapon/paper/gravity_gen{layer = 3},/obj/item/weapon/pen/blue,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/gravitygenerator) "axc" = (/obj/machinery/space_heater,/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/starboard) @@ -1262,7 +1262,7 @@ "ayn" = (/obj/structure/closet,/obj/item/weapon/stock_parts/matter_bin,/turf/simulated/floor/plating,/area/maintenance/starboard) "ayo" = (/obj/machinery/door/airlock/maintenance{name = "Storage Room"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) "ayp" = (/obj/structure/closet/radiation,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; dir = 1; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/engine/gravitygenerator) -"ayq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/engine/gravitygenerator) +"ayq" = (/obj/machinery/door/airlock/highsecurity{name = "Gravity Generator Room"; req_access_txt = "19;23"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/gravitygenerator) "ayr" = (/obj/machinery/camera{c_tag = "Gravity Generator Foyer"},/obj/structure/closet/radiation,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; dir = 1; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 32},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/engine/gravitygenerator) "ays" = (/obj/structure/closet/secure_closet/security,/obj/item/device/spacepod_equipment/weaponry/laser,/obj/machinery/power/apc{dir = 4; name = "Security Podbay APC"; pixel_x = 25},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "ayt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) @@ -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"}) @@ -3373,7 +3373,7 @@ "bmS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/central) "bmT" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/bridge) "bmU" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/photo_album{pixel_y = -4},/obj/item/device/camera{pixel_y = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (Captain)"; pixel_x = -28},/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) -"bmV" = (/obj/machinery/light_switch{pixel_y = -25},/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/item/weapon/reagent_containers/food/drinks/flask{pixel_x = 8},/obj/item/weapon/razor{pixel_x = -4; pixel_y = 2},/obj/item/clothing/mask/cigarette/cigar,/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) +"bmV" = (/obj/machinery/light_switch{pixel_y = -25},/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/item/weapon/reagent_containers/food/drinks/flask/gold,/obj/item/weapon/razor{pixel_x = -4; pixel_y = 2},/obj/item/clothing/mask/cigarette/cigar,/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bmW" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bmX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bmY" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) @@ -3497,7 +3497,7 @@ "bpm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/engine/gravitygenerator) "bpn" = (/turf/simulated/floor/plasteel,/area/engine/break_room) "bpo" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 2},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/engine/gravitygenerator) -"bpp" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/engine/gravitygenerator) +"bpp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/engine/gravitygenerator) "bpq" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; dir = 1; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/maintenance/starboard) "bpr" = (/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area/space) "bps" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 1; pixel_y = 1},/turf/space,/area/space) @@ -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"}) @@ -6303,11 +6303,9 @@ "crk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/surgery) "crl" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/surgery) "crm" = (/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/sign/nosmoking_2{pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/surgery) -"crn" = (/obj/machinery/sleep_console{tag = "icon-console (EAST)"; icon_state = "console"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "whitebluefull"},/area/medical/sleeper{name = "Sleepers"}) -"cro" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whiteblue"},/area/medical/sleeper{name = "Sleepers"}) +"crn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "whiteblue"},/area/medical/sleeper{name = "Sleepers"}) +"cro" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/sleeper,/turf/simulated/floor/plasteel{icon_state = "whitebluefull"},/area/medical/sleeper{name = "Sleepers"}) "crp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/medical/sleeper{name = "Sleepers"}) -"crq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/sleeper,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whiteblue"},/area/medical/sleeper{name = "Sleepers"}) -"crr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/sleep_console,/turf/simulated/floor/plasteel{icon_state = "whitebluefull"},/area/medical/sleeper{name = "Sleepers"}) "crs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/effect/spawner/window{useFull = 1; tag = "fullWin"},/turf/simulated/floor/plating,/area/medical/sleeper{name = "Sleepers"}) "crt" = (/obj/structure/sink{dir = 8; icon_state = "sink"; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"},/area/medical/medbay{name = "Medbay Central"}) "cru" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"}) @@ -6468,7 +6466,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 +6902,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 +7378,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 +7701,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 +7898,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"}) @@ -8171,7 +8169,6 @@ "dbg" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating/airless/catwalk,/area/solar/starboard) "dbh" = (/obj/machinery/status_display,/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/shuttle/escape) "dbi" = (/obj/machinery/sleeper,/turf/simulated/shuttle/floor,/area/shuttle/escape) -"dbj" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor,/area/shuttle/escape) "dbk" = (/obj/machinery/optable,/turf/simulated/shuttle/floor,/area/shuttle/escape) "dbl" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor/preopen{id_tag = "xenobio2"; name = "containment blast door"},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "dbm" = (/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio2"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) @@ -8330,7 +8327,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) @@ -8384,7 +8381,7 @@ "dfl" = (/obj/structure/spacepoddoor,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "dfm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 7; on = 1},/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "dfn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/stool/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) -"dfo" = (/obj/machinery/door_control{id = "mechpod"; name = "Mechanic's Inner Door Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "70"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/engine/gravitygenerator) +"dfo" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/engine/gravitygenerator) "dfp" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/turf/simulated/floor/plating,/area/engine/mechanic_workshop) "dfq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/effect/landmark/start{name = "Mechanic"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "dfr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/main) @@ -8409,6 +8406,7 @@ "dfK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "dfL" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "dfM" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/engineering) +"dfN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/hallway/secondary/entry{name = "Arrivals"}) "dfO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6; level = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "dfP" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) "dfQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) @@ -8521,8 +8519,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaadaadaadaadaadaadabcaakaakaadaadaadaadaadaadaaMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdabeabfabdabdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiabgabgabhabiabjaaiabkaakaakaaiablabmabnaboabpaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdaaaabqaaaabeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaakaakaakaaIaakabraakaakaakabsaakaaIaakaaIabtaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabfabqabuabqabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiabvabwaakaakaakabxaakaakaakabyaakaakaakaakabzaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabeabdabfabfaaaaaaaaaabAaaaaaaaaaabfabeabdabdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiabBabwaakabCabDaaiabEabFabEaaiabGabHaakaakaakaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdaaaaaaabqabqaaaaaaaaaabAabqabqaaaabqabqaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiabvaakaakaakaakabxaakaakaakabyaakaakaakaakabzaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabeabdabfabfaaaaaaaaaabAaaaaaaaaaabfabeabdabdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiabwaakaakabCabDaaiabEabFabEaaiabGabHaakaakaakaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdaaaaaaabqabqaaaaaaaaaabAabqabqaaaabqabqaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaakaakabIaaiaadaaiaakabJabKaaiaadaaiaakaakaakaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabqabLabLabLabLabLabqabMabqabLabLabLabLabLaaaabeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiabNabOabPaaiaaaaaiabQabQabQaaiaaaaaiabRabSabTaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabqabUabVabVabVabVabWabXabYabZabZabZabZacaabqabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiabQabQabQaaiaaaaawacbaccacdaayaaaaaiabQabQabQaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabfabqaceaceaceaceaceabqabXabqaceaceaceaceaceabqabeabqabqabqabqabeabdabeabqabqabqaaaabqabqabqaaaabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8542,20 +8540,20 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaabqaaaabqabqabAabqabqabqabqacAagmagnagoagpagqafTagradsagsagtaguagvagwacQagxadsagwacQaeaacQagyagzagAacgaaaabqabqagBagBagBagBagBaaaabqaaaaaaagCagCagDagEagFagCagCavObHcaDgbPLbPLbTgbTfaidabqaaaaaaaaaabqaaaaaaaaaaaaabqaaaaaaaaaaaaafbagGagHafHafHagIaaaabqaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabeaaaaaaaaaabqaaaaaaaaaadFaaaaaaaaaabqaaaaaaaaaabdaaaaaaafhafJagJagJagJagJagJagJaehagKaehagJagJagJagJagJagJafJafkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqabqaaaabqaaaabqagLagMagLabqaaaaaaacAagNagOagPacAagQafTagRagSacQafyacQagTafyacQagRagUafyacQaeBacQafyagVagRacgabqabqagBagBagWagXagYagBagBabqabqagCagCagZahaahbahcahdagCagCbTjaytbTlbTkdeGdeCaidabqabqabqafbafcafbafcafcafcafbafcafcafcafbafbahgafbahhahiahiahjahiahiahkaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadjadjadjadjadjabqahlabqadjadjadjadjadjabqabfaaaaaaahmahnahoahpahqahraehaglaeFaglaeFaglaehahsahtahuahvahnahwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaabqabqabqagLahxagLabqabqaaaacAacAacAacAacAahyahzahAahBahCahDahEahFahGahHahIahJahKahLahMahNahOahPahQahRabqagBagBahSahTahUahUahVagBagBabqagCahWahXahYahZaiaaibaicagCdeIdePalSalSalSalSaidaaaaaaabqafbaigafbaihaiiaijafbaikailaimafbainaioajbaiqairairairairairaiqabqabqabqabqabqaaaaaaaaaaaaaaaabfabqadCadDadDadDadDadEadFadGadHadHadHadHadIabqabfaaaaaaafKahnaeGaeGaeGaisaehaeGaeGaeGaeGaeGaehaeGaeGaitaeGahnafNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabqabqabqagLagLaiuagLagLabqabqabqabqabqabqacnaivaiwaixaiyaizaiAaiBaiwaiCaiDaiEaiFaiGaiHaiwaiIaiJaiKaiLaiMabqagBaiNaiOaiPaiQaiRaiSaiTagBabqaiUaiVaiWaiXaiYaiZajaakcajcdeLdeKajdajeajfahfdeMajgajgajgafbajhajiajjajkajkajlajkajmajnajoajpajpajpaiqairairairairairaiqaaaaaaaaaaaaabqaaaaaaaaaaaaaaaabfabqaegaegaegaegaegabqadFabqaegaegaegaegaegabqabeabqaaaaehajqajrajsajtajuaehajvaeGaeGaeGajwaehajxajyajzajAajqaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabqabqabqagLagLaiuagLagLabqabqabqabqabqabqacnaivaiwaixaiyaizaiAaiBaiwaiCaiDaiEaiFaiGaiHaiwaiIaiJaiKaiLaiMabqagBaiNaiOaiPaiQaiRaiSaiTagBabqaiUaiVaiWaiXaiYaiZajaakcajcdeLdeKajdajeajfahfdeMajgajgajgafbajhajiajjajkajkajlajkajmajnajoajpajpajpaiqairairairairairaiqaaaaaaaaaaaaabqaaaaaaaaaaaaaaaabfabqaegaegaegaegaegabqadFabqaegaegaegaegaegabqabeabqaaaaehajqajrajsajtajuaehajvaeGaeGaeGajwaehajxaeGajzajAajqaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaaaaaaaabqajBajCajDajEajBaaaabqaaaaaaaaaabqacgacgajFajGajHacgajIajJajIacQacQacQacQajKajLajMajNajOajPajQacgabqagBajRaiOajSajTajUaiSajVagBabqajWajXajYajZakaakbajYanJajWdeLdeNajdakdajfaheajgajgakeakfafbafbafbakgakhakiakiakjakkaklakmakmaknakoaiqairairairairairakpafbafbafbaaaabqaaaaaaaaaaaaaaaabeaaaaaaaaaabqaaaaaaaaaadFaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaehakqakqaeFaeFaeFaehakraeGaeGaeGaksaehaeFaeFaeFakqakqaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqaktaktakuakuakuakuakuajBakvakwakxajBakyakzakyakyaaaabqaaaacgacgaiMacgacgacgaiMacgacgakAakBakCakDakEakFakGakHakHakHagBagBagBakIakJakKakLakMakNakOagBabqagCakPakQakRakSakTakUakVagCdeOdeNajdakdajfaheakWajgakXakYakZalaafbalbakhakialcaldaldaldaleakmalfalgalhairairairairairalialjalkafcaaaabqabqabqabqabqabqabfabqabqabqabqabqaaaaaaadFaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaflallallafgaaaaaaaehalmaeGaeGaeGalnaehaaaaaaaflallallafgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaloalpakualqalralsaltajBalualvalwajBalxalyalzakyakyabqaaaaaaaaaabqaaaaaaaaaabqabqalAalBalCalBalDalEalFalGakHalHalIalJagBagBagBalKalLagBagBagBagBagBalMagCagCalNalOalPalQalRagCagCdeQdePalTalUalVaheajgajgalWalWalXalYafbalZakhamaambamcamcamdameamfamgamhafcairairairairairafcamiamjafcaaaabqaaaabqaaaamkamkamkamkamkamkamkabqabqabqadFabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehamlaeGaeGaeGalnaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaktammaktamnamoampamqajBajBamramsajBamtamuamvamwakyabqabqabqabqabqabqabqabqamxamxamxakDakDakDakDamyamzamAakHamBamCamDagBamEamFamGamHamIamJamKamLagBamMamNamOamPamQamRamSamTamOamUdeRdePamWamXamYaheamZalWalWanaanLajgafbanbancandaneanfanfangameamjanhamhafcairairairairairafcanianjafcabqabqabqabqabqamkankanlanmannankamkabqaaaanoanpanoasTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehantanuaglantanuaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaakuanvanwanxanyanzanAanBanCanDanEakyanFanGanHanIakzabqaaaaaaabqaaaajgajgajgamxaotaovaouanKaphanManNanOanPakHanQamCanRagBanSanTanUanVanWanXanYanZaoaaobaocaodaoeaofaogaohaoiaojaokdeUdeTaonaooaopaheaoqaoraosapiapQajgapRaowakhaoxambaoyamcaozameaoAamgaoBaoCairairairairairaoDaoEaoFaoGaoHaoGaaaabqaaaamkaoIaoJankaoJaoKamkabqaaaaoLaoMaoLansaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehaoOaoPaeGaoQaoRaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaakuanvanwanxanyanzanAanBanCanDanEakyanFanGanHanIakzabqaaaaaaabqaaaajgajgajgamxabBajyaouanKaphanManNanOanPakHanQamCanRagBanSanTanUanVanWanXanYanZaoaaobaocaodaoeaofaogaohaoiaojaokdeUdeTaonaooaopaheaoqaoraosapiapQajgapRaowakhaoxambaoyamcaozameaoAamgaoBaoCairairairairairaoDaoEaoFaoGaoHaoGaaaabqaaaamkaoIaoJankaoJaoKamkabqaaaaoLaoMaoLansaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehaoOaoPaeGaoQaoRaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaktaoSaktaoTaoUaoVaoWaktaoXaoYaoZapaapbapcapdapeakyabqapfapfakzapfapfapgapgamxapSaqGaqFaqHapjapkaplapmapnapoappapqappaprapsapsaptapuapvapwapxapxapyapzapAapBapCapDapEapFapGapHapIdeYdeXapLapMapNaheapOapPalWarMarOajgaipaowakhajpapTapUapVapWapXapYamgapZaqaairairairairairaqbafbaqcaoGaqdaqeaefaefabqamkaqfaqgaqhaqiaqjamkabqanoaoLaqkaoLasTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehaqmaqnaeGaqoaqpaehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaktaqqaqraqraqraqsaqtaktaquaqvaqwakyaqxaqyaqzaqAakyapfapfaqBaqCanEapfaqDaqEamxamxamxarParSarQaqIaqJaqKaqLakHaqMaqNaqOagBaqPaqQaqRaqSaqTaqUaqVaqWakHaqXaqYaqZapCaraarbarcardarearfargalSalSarhaheaheajgariajgarjajgajgafbarkarlajpajparmarnaroarparparqapZaqaairairairairairaqbarrarsaoGaqeaoGaoGaoHaoGamkartaruankarvarwamkabqaoLaoLaoMaoLasTaoGaoGaoGafdacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaflaeFarxaryarzaeFafgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAarBaaaaaaarAaaaarAaaaaaaabqabqabqaaaaaaaaaaaaaaaabqaaaabqaaaabqaaaaktarCarDarEarFarGarHaktanHaqvapdapfarIapdapdapdarJapfarKarUarTarNapfatAarWauHarRaumazcaCTarVaCVarXarYarZagBamIasaamIagBagBasbascasbagBasdaseasfasgashaqYasiasjapCaslasmasnasoarfaspasqasrassastasuastasvaswasxasyaszaszasAasBasCasCasDasEasFasGasGasGasHaqaairairairairairaqbasIasJaoGarsasKasLasMasNamkasOasPasQasRasSamkabqasTasUasVasWaxhauodgCblyavNavNblzaaaaaaaaaaaaaaaaaaaaaaaaaaaaflaeFaeFaeFafgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAarAabqabqarAarAarAabqaaaarAarAataarAarAaaaabqapfapfakzapfabqaaaabqabqabqabqabqapfakzaktaktatbatcatdaktaktaktapdateaoZatfapbatgathapdatiapfaoXaElaEjapfapfatlatmatnatoamxamxamxakDakDatpatqatratsattatuatvatwatxatyaqUatzagBaqUanYaFCakHatBdfnatCatDatEatFatGatHatIarfatJatKatKamOamOamOamOatLafbafcatMafcafbatNatOatPatQatRatSatTatUatVatWatXatYatZatZatZatZatZauaaubayuaoGasJasJasJasJaudamkaueaufaugauhdfoamkabqasTaujaukaulaxhdgCdgCbnGblAblCblBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaupabqarAabqaupabqarAarAabqarAarAarAarAarAaaaaaaaaaapfauqaurapfausautautautautautauuapfarKauvapfauwauxaoXauyauzapfauAauBauCapfarIatjauDauEauFapfauGaNEaFEapfauIatmakeauJauKajgauLamxauMauNaqJatqapnauOauPauQauRauSauTauUauVauWauXaqUauYauZakHdfsdfravcavdaveavfavgavhavgaviavjavkavlavlavmavnamOatLafbavoavpavqavravravravravravsavtavuavvavvavvavvavvavwaoGavxavyavzaoGaoGasJaoGavAavBavCasJavDavEavFavGavHavIavJamkaoHasTavKavLavMaxhdgCdgCbnFavNavNbnHaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAabqarAabqarAarAarAataabqabqabqarAarAabqaaaabqabqakzavQavRavSavTavUavUavUavUavUavVavWavXavYavZawaawbavUawcavUawdaweawfajgajgajgajgajgajgajgajgajgajgawgajgawhajgajgajgajgajgajgamxawiawjaqJatqatratsawkawlawmawnawoawpawqawraqTawsawtawuasgawvdfvdfwawyawzawAawBawCawDawEawFatKawGawHawGawIamOawJawKawLawMavqavrawNawOawPawQawRawSawTavvawUawVawWavvaoGaoGasJaubavBasIaoGayvaoGavzasJawXasJaoGawYawZamkamkaxaaxbamkayxasTasTaxdaxeaxhaxhbnIaxhbnJbplaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAarAarAarAarAabqarAarAabqauparAarAabqabqabqabqapfapfaxiapfapfaxjaxkaxkaxkaxkaxkaxlapfapfapfapfaxmaxnaxoaxoaxoaxoaxpaxqajgaxraxsaxtaxuaxvaxwaxxaxyaxzaxAaxBaxCajgaxDaxEaxEaxEaxFamzaxGaxHaqJaxIaxJaxKaqTaxLagBagBaxMaxNaxOasgagBaxPaxMakHakHamOaxQaxRaxSaxQamOaxTaxUamOaxVatKatKaxWaxWaxWamOamOaxXafbdeeaxZdefavrayaaybayaawQaycaydayeayfaygayhayiavvayjaoGaykaylaymaynaoGasMaoGaoGaoGayoaoGaoGaypayqayramkamkamkamkazrasIazGazFbTiaxhdfCdgCdfEaxhaxhaxhabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqarAarAarAarAarAarAarAarAarAarAarAayyarAabqaupapfapfapfayzayAapfabqabqabqabqabqabqabqabqabqabqabqapfaqBayBapdaoXayCaoXayDayEayFayGayHayIajgajgajgayJayKayKayKayLajgajgayMayNayOayPayMamzamzakDayQayRapnaySaySayTayUaySayVaySayUaySayWaySayVayXayYayZayUazaazbaySaySaySayUaySaOPamxazdazeazeazeazeakDatLafbaxYavoavqavrazfazgazhavraziazjazkazlazmavvavvavvaznaoGasIazoawXasJaoGayvaoGazpaoGazqdfFazsbpmbppbpobqVbpqbqXbqWbqWbqWbqWdeSdgCdeVdgCdgCdgCaxgazHaxgaefaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAarAabqabqarAarAarAabqaaaarAarAataarAarAaaaabqapfapfakzapfabqaaaabqabqabqabqabqapfakzaktaktatbatcatdaktaktaktapdateaoZatfapbatgathapdatiapfaoXaElaEjapfapfatlatmatnatoamxamxamxakDakDatpatqatratsattatuatvatwatxatyaqUatzagBaqUanYaFCakHatBdfnatCatDatEatFatGatHatIarfatJatKatKamOamOamOamOatLafbafcatMafcafbatNatOatPatQatRatSatTatUatVatWatXatYatZatZatZatZatZauaaubayuaoGasJasJasJasJaudamkaueaufaugauhavFamkabqasTaujaukaulaxhdgCdgCbnGblAblCblBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaupabqarAabqaupabqarAarAabqarAarAarAarAarAaaaaaaaaaapfauqaurapfausautautautautautauuapfarKauvapfauwauxaoXauyauzapfauAauBauCapfarIatjauDauEauFapfauGaNEaFEapfauIatmakeauJauKajgauLamxauMauNaqJatqapnauOauPauQauRauSauTauUauVauWauXaqUauYauZakHdfsdfravcavdaveavfavgavhavgaviavjavkavlavlavmavnamOatLafbavoavpavqavravravravravravsavtavuavvavvavvavvavvavwaoGavxavyavzaoGaoGasJaoGavAavBavCasJavDavEavHavGawZavIavJamkaoHasTavKavLavMaxhdgCdgCbnFavNavNbnHaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAabqarAabqarAarAarAataabqabqabqarAarAabqaaaabqabqakzavQavRavSavTavUavUavUavUavUavVavWavXavYavZawaawbavUawcavUawdaweawfajgajgajgajgajgajgajgajgajgajgawgajgawhajgajgajgajgajgajgamxawiawjaqJatqatratsawkawlawmawnawoawpawqawraqTawsawtawuasgawvdfvdfwawyawzawAawBawCawDawEawFatKawGawHawGawIamOawJawKawLawMavqavrawNawOawPawQawRawSawTavvawUawVawWavvaoGaoGasJaubavBasIaoGayvaoGavzasJawXasJaoGawYayqamkamkaxaaxbamkayxasTasTaxdaxeaxhaxhbnIaxhbnJbplaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAarAarAarAarAabqarAarAabqauparAarAabqabqabqabqapfapfaxiapfapfaxjaxkaxkaxkaxkaxkaxlapfapfapfapfaxmaxnaxoaxoaxoaxoaxpaxqajgaxraxsaxtaxuaxvaxwaxxaxyaxzaxAaxBaxCajgaxDaxEaxEaxEaxFamzaxGaxHaqJaxIaxJaxKaqTaxLagBagBaxMaxNaxOasgagBaxPaxMakHakHamOaxQaxRaxSaxQamOaxTaxUamOaxVatKatKaxWaxWaxWamOamOaxXafbdeeaxZdefavrayaaybayaawQaycaydayeayfaygayhayiavvayjaoGaykaylaymaynaoGasMaoGaoGaoGayoaoGaoGaypbppayramkamkamkamkazrasIazGazFbTiaxhdfCdgCdfEaxhaxhaxhabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqarAarAarAarAarAarAarAarAarAarAarAayyarAabqaupapfapfapfayzayAapfabqabqabqabqabqabqabqabqabqabqabqapfaqBayBapdaoXayCaoXayDayEayFayGayHayIajgajgajgayJayKayKayKayLajgajgayMayNayOayPayMamzamzakDayQayRapnaySaySayTayUaySayVaySayUaySayWaySayVayXayYayZayUazaazbaySaySaySayUaySaOPamxazdazeazeazeazeakDatLafbaxYavoavqavrazfazgazhavraziazjazkazlazmavvavvavvaznaoGasIazoawXasJaoGayvaoGazpaoGazqdfFazsbpmdfobpobqVbpqbqXbqWbqWbqWbqWdeSdgCdeVdgCdgCdgCaxgazHaxgaefaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupabqarAataarAarAarAarAazIabqarAarAarAarAarAarAazJazKazJazLazMapfapfabqaaaaaaaaaaaaaaaaaaaaaaaaabqapfapfapfathaoXapdaoXazNazOazPazQazRazSajgaaaabqaaaaaaaaaaaaaaaabqaaaazTazUazVazWazXazYazeazZaAaaAbaAcaAdaAdaAeaAcaAdaAfaAgaAcaAhaAiaAdaAjaAkaAlaAdaAmaAnaAoaApaApaAqaAraAsaAtaAuaAvaAwaAxaAyaAzakDatLafbaxYaAAavqavraABaACaADaAEaAFaAGaAHavvaAIaAJaAKavvaALaoGaoGaoGayoaoGaoGasJaoGaucaoGaAMaxhaxhawYaANamkaxhaxhaxhaxhaxhaxhaxhaxhaxhayxaxhaxhaxhaxhaxhaAOaxhabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarAarAarAarAarAarAarAarAarAarAarAabqarAarAarAabqapfapfapfaAPazSapdapfaaaaAQaARaASaARaATabqabqabqabqapfaAUapfaAVavUavUavUaAWaAXapfaAYaAZaBaajgaaaaBbaBbaBbaBbaBbaBbaBbaaaayMaBcaBdaBeayMamzamzakDaBfaBgaBhaBiaBjaBkaBhaBlaBjaBgaBmaBnaBoaBpaBqaBraBsaBtaBuaBvaBwaBxaByaBwaBzaBAaBBaBCaBDaBEaBFaBGaBHakDatLaBIaBIaBIaBIavraBJaPWaBLaBMaBNaBOayeaBPaBQaBRaBSavvaBTaBUaBVaBWaBXaBWaBYaBWaBZaBWdgEaCaaCbaCcaCdaCeaCfaCgaChaCgaCiaCjaCkaCjaClaxhaxhaxhaCiaCjaClaCmaCmaCgabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqarAarAarAarAarAarAarAaCnarAabqabqabqabqapfaoXazSarIakzaaaaCoaCpaCqaCpaCoaCraCraCraCsaCsaCsaCsaCtaCsaCsaCuaCuaCuaCuaCvaCuaCwajgabqaBbaCxaCyaCzaCAaCBaBbaaaayMaCCaCCaCDayMaaaaaaaCEaCFaCGaCHakDaCFaCIaCHakDaCFaCJaCHakDaCKamzaCLakDamzaCMaCNamzamzaCOaCOaCPaCQaCRaCOaCOaCSakDakDakDakDakDatLaBIaQdaCUaQvavravravravravraCWaCXaCYazlazmavvavvavvaoGaCZasIarrasJasIaDadgIaxhaxhaxhaxhaxhaDbaDcaDdaDeaDfdfMaDfaDhaDiaDjaDiaDkaCjaDlaCjaDmaDiaDjaDiaCmaDnaDoabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8586,11 +8584,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablOblPblQblRbkbblSblTblSblTblSblTblSbkbblUblVbccbgVblWbgXblXblYblZbmabmbbmcbgXbmdbmebmfbmgbmhbmibmjbmkbmlbmmbmnbmobmpbmqbmrbmsbmtbmubmvbmwbmxbmybmzbmAbiVbfIbmSbhqbmQbmCbmDbmEbhqbmFbmGbjeabqabqbmHboBbopbpVboHbqfbqdbqhbqgbqkbqjbqlbmTabqabqbhwbmUbmVbmWbmXbmYbmZbnabhwbhybnbbncbndbnebnfbnebngbnhbnibnebnebnebnjbnebnkbnlbnmbnnbnebnebnobnkbngbnjbnpbnqbnobnrbnsbntbnubnvbnwbnxbnybnzbnAbnBbnCbnDdfpdfmdftdfqdfxdfudfydeZaoNdflabqaaaaaaaaaaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqaefblDblEbnKblEbnLaXOaaaaaaaaaaXLbnMbnNbdJbnObnPbnQbnRbnSbnTbdIbrQaXLaXLaXLaXLbnUaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabiqbkbbkbbipbkbblSblTblSbnVblSblTblSbkbblUblVbccbnWbnXbnYbnZboabobbocbobbiubiubodboebhcbfwbofbogbohboibojbokbolbfwbombonbojbkCboobfwbrXboqborbosbotbiUbkIbfIbkJbhqboubovbowboxbhqboybozbjebkWboAbkWbsbboCboDboEboDboFboDboEboDboGbscbkWboAbkWbhwboIboIboIboJboKboLboMbhwboNboOboPboQboRboSboRboTboRboUboRboRboRboVboRboWboXboYboZboRboRbpabpbbpcboVbpdboVbpebpfbpgbntbphbpibpibpjbpkbpibpidfzdfBdfAdfGdfDdfIdfHdfKdfJdgddfLdgKazDabqaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqbpraaaaaaaaaabqbjRbjRbjObpsaXIaXOaaaaaaaaaaXLaXLblHbdIbdIbdIbptbdIbdIbdIbdIbsebsdbsfaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablObpwbpxblRbkbblSblTblSblTblSblTblSbkbblUblVbccbpybpzbpAbpBbpCbpDbpDbpEbpFbpBbpGbpHbpIbfwbpJbpKbpLbpMbpNbpObpPbfwbpQbpRbpSbpTbpUbfwbsibpWbpXbpYbpZbfGbqabjnbqbbqcbqcbqcbqcbqcbhtbtPbqebhtbkWbtSbtRbtTboEboEboEboEbqiboEboEboEboEbtZbtYbubbkWbqmbqnbqobqpbqqbqrbqrbqsbhwbqtbqubqvbqwbqxbqybqxbqzbqxbqAbqxbqxbqBbqxbqxbqCbqDbqxbqEbqBbqFbqGbqCbqHbqxbqIbqJbqKbqLbqMbqNbqObqPbqQbqRbpnbqSbqSbqTdgMdgLdgOdgNdgPanqanqanqanqanqanqanqanqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaabqYbqZbrabrbbrcbrdbrebrfaXIaXLaXLaXLaXLaXLbrgbrhbrgbrgbribrjbribrkbrkbrlbrmbrnbudaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobiobjZbrpbkbbrqbkbbrrbrsbkbbrtbkbbkibrubccbgVbrvbrwbrxbrybrzbrAbrBbrCbrxbrDbrEbrFbfwbrGbhabrHbrIbfwbfwbfwbfwbfwbhabrJbrKbfwbfwbiUbrLbrMbiUbiUbzObehbfIbrObqcbrPbumbrRbqcbrSbrTbrUbrVbrWburbrYbrZbsabsabvWbwfbwebvWbvWbsabsabsgbshbwgbkWbhwboIboIboIbsjboIboIboIbhwbskbfIbslbZibsnbsobsnbsmbspbspbspbspbspbspaoGaoGbsqaoGaoGaoGbsrbThaoGaoGaoGbstaoGbsubsvbswbsxbsybszbsAbsBbqSbsCbsCbsDbqUbsEbjNbntbsFbsGbsHbsIbsJbsJbsKbsLabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabqYbsMbsNaaaabqbsObsPbsQbsRbsSbsTbrgbsUbsVbsWbsXbsYbsZbrgbtabtbbtcbtdbtebtfbtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobiobjZbrpbkbbrqbkbbrrbrsbkbbrtbkbbkibrubccbgVbrvbrwbrxbrybrzbrAbrBbrCbrxbrDbrEbrFbfwbrGbhabrHbrIbfwbfwbfwbfwbfwbhabrJbrKbfwbfwbiUbrLbrMbiUbiUbzObehbfIbrObqcbrPbumbrRbqcbrSbrTbrUbrVbrWburbrYbrZbsabsabvWbwfbwebvWbvWbsabsabsgbshbwgbkWbhwboIboIboIbsjboIboIboIbhwbskbfIbslbZibsnbsobsnbsmbspbspbspbspbspbspaoGaoGbsqaoGaoGaoGbsrbCiaoGaoGaoGbstaoGbsubsvbswbsxbsybszbsAbsBbqSbsCbsCbsDbqUbsEbjNbntbsFbsGbsHbsIbsJbsJbsKbsLabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabqYbsMbsNaaaabqbsObsPbsQbsRbsSbsTbrgbsUbsVbsWbsXbsYbsZbrgbtabtbbtcbtdbtebtfbtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobthbiobiqbiobiobiqbiobipbtibtjaWDbtkbtlbtmbfGbtnbtobtpbtobtqbfGbtrbtsbttbtubtvbtwbtxbtybtzbtwbtAbtBbtwbtvbtvbtCbtvbtDbtEbtFbtGbtHbtvbtIbtJbtKbkJbtLbtMbtNbtObqcbjebjebjebjebkWbwmbtQboEboEboEbtUboEbtVbtWbtXboEboEbwnbuabAkbucbhwbwobuebufbugbuhboIbuibhwbujbfIbukbuldedbunbuobsmbupbuqbwpbusbutbuubuvbuwbuxaoGbuybuzbuAbuBbuCaoGaxcbuDaoGbuEbuFbuGbnEbuHbuHbuHbuIbuJbqSbqSbuKbuLbuMbuNbuObuPbuQbuRbuSbuTbuTbuUbuVbuWbuWbuWbuXdgQbuWbuWbuWbuWbuWbuXbuWbuWbuWbuWbuWbuWbuXbuWbuYbuZbuTbuTbuTbvabvbbvcbvdbvdbvebvfbvgbvhbvibvjbvkbvlbvmbvnbvobvpbvqbvrbvsbvtbvubvvbbXbbXbvwaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqaaabccbdRbccbccbccbccbccbccbdRbccaaaaWDbvxbvybvzbfGbvAbvBbvCbvBbvDbfGbvEbvFbvGbvHbvHbvIbvJbvHbvHbvKbvLbvMbvNbvHbvHbvObvHbvHbvHbvPbvQbvRbvRbvSbvTbvUbvVbqcbyobvXbvYbqcbvZbwabwbbwcbwdboEbtQboEbypbywbwhbwibwjbwibwkbyJbyxbAbbyQbAkbwqbhwbwrbwsbwtbwubwvbhwbhwbhwbhybwwbwxbsmbwybwzbwAbsmbwBbwCbwDbwEbwFbwGbwHbwIbwJbwKbwLbwMbwNbwObwPbwQbwRbwSaoGbsubwTbwUbntbwVbwWbwXbwYbwZbxabxbbxcbxdbqUbxebxfbxgbxhbxiaWCaaaaaabxjbsNabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabxkbxlbsLaaaabqaZhbxmbxnbxobxpbxqbxrbxsbxtbxubxvbxwbxxbxybxzbxAbxBbxCbxDbtfbxEbxFaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccabqaaaabqaaabccbxGbccbxHbxIbfebxJbccbxGbccbccaWDbgVbxKbxLbfGbxMbvBbxNbvBbxObfGbxPbxQbxRbxSbxTbxUbxVbxWbxXbxYbxZbyabxTbxTbxTbybbxTbycbydbxVbyebxTbxTbyfbygbyhbvVbqcbyibyjbykbylbymbynbymbymbwdbAjbAebyqbyqbyqbyrbysbytbyubyvbyqbyqbyqbBWbCcbkWbhwbyybyzbyAbyBbyCbhwbyDbyEbyFbyGbwxbsnbyHbyIbCdbsmbyKbyLbyMbyNbspbspaoGaoGbyOaoGaoGaoGbyPbCeaoGaoGbyRbySaoGbyTbwTbyUbntbjNbjNbjNbjNbyVbjNbjNbyWbyXbyYbntbntbyZbzabzbbzcaaabqYbzdaaaabqaaaaaaabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaabxkbxlbsLabqbzebzfbzgbzhbzibzjbrgbzkbzlbzmbznbzobzpbrgbzqbzrbzsbrkbztbzubtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbccbdQbccaWDbccbdRbccbzvbaBbzwbzxbccbdRbccbzybzzbzAbtlbtmbfGbzBbzCbtpbzCbzBbfGbzDbzEbzFbfGbzGbzHbzIbfGapfbzJapfbzKbzKbzLbzMbzNbzLbzKbzKbzKbzKbzKbzKdeDbzPbzQbzRbzSbzTbzUbzVbzWbzVbzXbzYbzZbAabCfbAcbAdbCibAdbAdbAfbAgbAhbyqbyqbAibyqbCkbAkbhwbAlbAmbAnbAobApbAqbhwbArbhtbAsbbrbAtbsmbsmbsmbsmbsmbAubAvbspbspbspbAwbAxbspbAybAzbAAaoGazpbABaoGbACbADbAEbAFbAGbAHbAIbAJbAKbALbAMbAKbANbAObjNbAPbAQbARbASbATbAUbAVbAWbAXbsJbAYbAZabqabqabqabqabqaaaabqaaaabqaaaabqaaaabqaaaaaaaaaaaaaaaaaaabqbpraaabxkbBabrbbBbbBcbrebpsaXIaXLbBdbBebBfbBgbBhbBibrgbrgbBjbBkbBlbrkbrkbBmbBnbBoaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbccbdQbccaWDbccbdRbccbzvbaBbzwbzxbccbdRbccbzybzzbzAbtlbtmbfGbzBbzCbtpbzCbzBbfGbzDbzEbzFbfGbzGbzHbzIbfGapfbzJapfbzKbzKbzLbzMbzNbzLbzKbzKbzKbzKbzKbzKdeDbzPbzQbzRbzSbzTbzUbzVbzWbzVbzXbzYbzZbAabCfbAcbAdbThbAdbAdbAfbAgbAhbyqbyqbAibyqbCkbAkbhwbAlbAmbAnbAobApbAqbhwbArbhtbAsbbrbAtbsmbsmbsmbsmbsmbAubAvbspbspbspbAwbAxbspbAybAzbAAaoGazpbABaoGbACbADbAEbAFbAGbAHbAIbAJbAKbALbAMbAKbANbAObjNbAPbAQbARbASbATbAUbAVbAWbAXbsJbAYbAZabqabqabqabqabqaaaabqaaaabqaaaabqaaaabqaaaaaaaaaaaaaaaaaaabqbpraaabxkbBabrbbBbbBcbrebpsaXIaXLbBdbBebBfbBgbBhbBibrgbrgbBjbBkbBlbrkbrkbBmbBnbBoaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbBpbaBbaCbBqbBrbaBbaBbBsbBtbchbBubBvbBvbBvbBwbBxbBybBzbBAbBBbBCbBDbBEbBFbBGbBBbBHbBIbBJbBKbBKbBLbBKbBKarKbBMbBNbzKbBObBPbBQbBRbBSbzKbBTbBUbzKbBTbBUbzKbzPbfIbkJbqcbBVbClbBXbqcbBYbBZbCabCbbwdbAkbDrbyqboEbDVbCgboEboEbAkbChbDWbCjbyqbEfbEgbhwbCmbCnbCobCpbCqbCrbCsbCtbhtbhybbrbhzbspbCubCvbCwbCxbCybCzbCAbspbCBbCCbCDbCEbCFbCGbCHaoGaoGaoGaoGaoGaoGbCIaoGbCJbCKbCLbCMbCNbCNbCNbCNbCNbCMbCMbCNbCObCPbCQbCRbCSbCTbCUbCVbCMbCMbCMabqaaaaaaaaaabqaaaabqaaaabqaaaabeaaaabeaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabqarBbicaXIaXObCWaXLbCXbCYbCZbDabDbbDcbDdbDebDfbDgbDhbDibbXbbXbDjaXLaXLbnUaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbcdbcebcebDkbcebDlbDmbDnbDnbDobDnbDpbDqbEJbDsbDtbDubDvbDwbpBbDxbDybDzbDAbDBbDCbDDbDEbDFbDGbDHbDIbDJbBKbDKbDLanHbzKbDMbDNbBQbBRbBSbzKbDObDPbzKbDObDPbzKbDQbfIbkJbqcbqcbDRbqcbqcbqcbDSbDTbDUbqcbFJbtQbDXboEbwibwibDYbDZbEabEbbEcbEdbEebshbFUbEhbEibEjbEkbElbEmbEnbhwbEobhtbEpbbrbhzbspbEqbErbCybEsbCybEtbCybEubEvbCHbEwbExbEybEzbEAbEBbECbEDbEEbEFbEGbEHaoGbEIbwTbHCbCMbEKbELbEMbENbEObCMbEPbEQbERbESbETbEUbEVbEWbEXbEYbEZbFabCMabqabqabqabqabqabqabqaaaabeaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdaXOaaaaXLbFebFfbFgbDabFhbFibFjbFkbFlbFmbFnbDaaXLaaaaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccaWDbccbdQbccaWDbccbccbccaWDbccaWDaWDaWDbnWbnXapfbFoapfapfbFpbFqbFpbFrbFpbFpbFpbFpbBKbBKbFsbFtbBKbBKbBKbFuaoXbzKbFvbFwbBQbFxbzKbzKbFybzKbzKbFzbzKbzKbFAbfIbkJbFBbFCbFDbFEbFFbFGbFDbFDbFHbFIbAkbHDbAdbFKbFLbFMbFNbFObFPbFQbFRbFSbyqbFTbAkbhwbFVbFWbFXbFYbFZbGabhwbGbbhtbhybbrbhzbspbGcbGdbGebGdbGfbGgbGhbGibEvbCHbGjbGkbCHbEvbGlbGmbGnbGobGpbGqbEGbySaoGbGrbGsbGtbGubGvbGwbGxbGybGzbCMbGAbGBbGCbGDbETbGEbGFbGGbGHbGIbGJbGKbCMabqbGLbGLbGLbGLbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdaXOaaaaXLbGMbGNbGObDabGPbGQbGRbGSbGTbGUbGVbDaaXLaaaaaaaUUbjPaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8602,7 +8600,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccaWDbccbdQbccaWDbccbccbccaWDbccaWDaWDaWDdfRbPMbPNbPObPPbPQbFpbPRbPSbOibPTbPUbPVbFpbBKbBKbBKbBKbBKbBKbBKbFuanHbzKbPWbPXbJabBRbFwbFwbPYbFwbPZbQabzKbQbbzPbfIbQcbMSbQdbQebQfbQgbQhbOBbQibQjbQkbQlbQmbQnbQobQobQobQpbQqbQrbQsbQtbQsbQubQvbQwbQxbQybQzbQAbQBbQCbQDbNhbQEbhtbQFbQGbQHbQIbQIbQIbQJbQKbQLbQMbQNbQIbQObQIbQPbQQbQRbQSbQTbEGbEGbQUbEGbEGbEGbNFbQVbQWbQXbQVbCMbCMbCMbCMbCMbQYbNObVpbRabRbbGGbRcbRdbRebRfbInbRgbRhbRibETabqbETbRjbRkbRlbGLabqaaabFcaaabFbaaabRmarBarBarBarBabearBarBarBaaaaaaaaaabqabearBarBarBarBarBaZhaXIaXOaaaaXMbRnbRobRpbOabRqbOabRrbRsbRtaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbRubzzbaCbRvbaCbaBbaBbRwbaBbzzbaBbRxbzzbaBdfSbRyapfbRzaoXatkbFpbRAbRBbHfbHfbHfbRCbFpbRDbREbRFbRGbRHbRIapfbFuauCbzKbRJbRKbJabRLbRMbRMbRNbFwbFwbRObzKbRPbzPbfIbOvbMSbRQbRRbRSbRTbRUbOBbRVbRWbRXbRYbMWbRZbSabSbbSabScbNdbSdbSebSfbSebSgbNhbShbSibSjbSkbSlbSmbSnbSobNhbSpbhtbSqbbrbOWbQIbVrbVsbStbSubSvbSwbSwbSxbSybQIbQIbQIbQIbQIbQIbQIbEGbSzbSAbSBbEGbSCbQVbSDbSEbSFbQVbSGbSHasMbSIbCMbSJbSKbSLbSMbSNbSObSPbSQbSRbSSbRgbSTbSUbMibMjbMkbSVbPEbSWbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfcbicbSXbbXbbXbSYbpvbSZbTabOabTbbOabTcbTdbKjbSYbbXbbXbTeaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbcdbcebcebcebcedfUdfTdfWdfVdfYdfXdgadfZdgcdgbbTmapfbgYauyatkbFpbHhbTnbHfbHfbTnbTobFpbTparJarLbTqbPQbRHapfbFubTrbzKbTsbTtbTubTvbFwbTwbTxbTybTzbTAbzKbTBbzPbfIbTCbMSbTDbTEbTFbTGbOBbOBbTHbTIbTJbTKbMWbRZbSabSabSabTLbNdbSdbSebTMbTNbTObNhbTPbSibTQbTRbNhbTSbTTbTUbNhbTVbhtbTWbbrbTXbTYbUabUabUbbUcbUdbStbStbUebUfbQIbUgbUhbUibUhbUjbQIbUkbUlbUmbUnbEGbNFbQVbUobUpbUqbQVavBasJasJbUrbCMbSJbUsbUtbCNbCNbCNbUubGGbUvbGGbRgbUwbRibETabqbGLbGLbGLbGLbGLabqaaaabeaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIaXOaaaaaaaXMbUxbOabOabOabUybUzbUAaXMaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccbUBbUBbccbccdgeaWDdggdgRdggaWDaWDapfbUCapfapfapfbgYauCatkbFpbTobUDbUEbHfbUEbUFbFpbUGathapdatjbUHbXJapfbFuaoXbzKbzKbzLbUIbUJbzLbzKbzKbzKbzKbUKbzKbzKbULbjnbUMbMSbUNbUObUPbUQbURbOBbUSbUTbUUbUVbMWbUWbUXbUYbUZbVabNdbVbbSebVcbVdbVebNhbVfbSibVgbVhbVibVjbVkbVlbNhbVmbhtbVnbbrbOWbVobVtbVqbXcbYtbYsbVubVqbUebVvbQIbVwbVxbVybVzbUjbQIbVAbVBbVCbVDbVEbVFbQVbVGbVHbVIbQVbVJbVKbVLbVMbCMbVNbVObRabVPbCNbVQbSRbGGbSPbVRbVSbVTbPCbItbIubIvbVUbVVbVWbGLabqaaabFcaaabFbaaabFcaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIaXOaaaaaaaXMbVXbVYbVZbOabWabWbbVXaXMaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccbUBbUBbccbccdgeaWDdggdgRdggdfNaWDapfbUCapfapfapfbgYauCatkbFpbTobUDbUEbHfbUEbUFbFpbUGathapdatjbUHbXJapfbFuaoXbzKbzKbzLbUIbUJbzLbzKbzKbzKbzKbUKbzKbzKbULbjnbUMbMSbUNbUObUPbUQbURbOBbUSbUTbUUbUVbMWbUWbUXbUYbUZbVabNdbVbbSebVcbVdbVebNhbVfbSibVgbVhbVibVjbVkbVlbNhbVmbhtbVnbbrbOWbVobVtbVqbXcbYtbYsbVubVqbUebVvbQIbVwbVxbVybVzbUjbQIbVAbVBbVCbVDbVEbVFbQVbVGbVHbVIbQVbVJbVKbVLbVMbCMbVNbVObRabVPbCNbVQbSRbGGbSPbVRbVSbVTbPCbItbIubIvbVUbVVbVWbGLabqaaabFcaaabFbaaabFcaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIaXOaaaaaaaXMbVXbVYbVZbOabWabWbbVXaXMaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaabccbWcbfdbccdghdgjdgibBtdgkbBtdgldgmapfbWdbWebWfbWgbWhbWgbWibFpbFpbFpbFpbWjbFpbFpbFpbWkdeJdeHapdbWlbWmapfbWnbWobzKbWpbWqbWrbWsbWtbWubWvbzKbWwbWxbWybzKbzPbfIbWzbMSbQdbTEbWAbWBbQdbOBbWCbWDbWEbWFbMWbWGbWHbWIbWJbWKbWLbWMbWNbWObWPbWQbNhbWRbWSbWTbWUbWVbWWbWXbWYbWZbXabhtbXbbbrbOWbVobYubXdbXdbXebXfbXgbXhbXibXjbQIbXkbVxbXlbXmbXnbQIbXobXpbXqbXrbEGbNFbQVbQVbQVbQVbQVbXsasJasJbXtbCMbVNbVObRabXubXvbVQbXwbInbSPbXxbRgbXybRibETabqbETbXzbXAbXBbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIaXOaaaaaaaXMbXCbKlbXDbXEbXFbKlbXGaXMaaaaaaaZhaXIaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqbccbUBbUBbccdgndgjbBtbBtdgobBtdgpdgqapfbXHavUavUavUbDLathatkaoXaqBayBanHbXIauyauCapfapfapfapfapfbXKapfapfbFuatjbzKbXLbXMbXNbXNbWsbXObXPbzKbXQbXRbXSbzKbDQbfIbXTbMSbQdbXUbXVbXWbXXbOBbXYbXZbYabMWbMWbYbbYcbYdbYebYfbNdbYgbSdbYhbYibYjbNhbYkbYlbYmbYnbSlbYobYobYpbNhbYqbhtbYrbbrbOWbQIbYvbYEbYwbStcbacbbbUcbYxbYybYzbYAbYBbYCbYDccrbQIbEGbEGbEGbEGbEGbYFaoGbYGbUraucasJchGchFbYIasJbCMbCMbYJbNRbVPbCNbYKbYLbGGbYMbVRbRgbYNbSUbMibMjbMkbYObVVbYPbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBbicbYQaXLaXLaXLbpubbXbbXbbXbcabbXbbXbbXbDjaXLaXLaXLbnUaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabredgrdgtdgsdgvdgudgxdgwdgyapfapfapfapfbWmbYRavUbYSbYTbYUbYVbYVdfibYWbYXbYVbYTbYVbYYbYVbYZbYVaPTbZaapdbzKbZbbZcbZdbZebHrbZfbZgbzKbzKbzKbzKbzKbZhbfIbOvdeEbMSbZjbZjbZjbMSbMSbMWbMWbZkbMWbMWbZlbZlbZlbZmbZlbZnbZnbZobZpbZnbZnbNhbNhbNhbNhbNhbNhbZqbZqbZqbNhbZrdeFbZsbbrbZtbZubZvbZvbZvbZwbZvbZvbZxbZybZvbZvbZvbZvbQIbZzbZAbZBbZCbZDbZEasJbZFbZGaoGbVLbZHbZIasJbYHckgasJarrbCMbZJbJWbZKbCNbCNbCNbZLbGGbZMbZNbRgbUwbRibETabqbGLbGLbGLbGLbGLabqabqbRmabqbPGabqabeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhaXIaXOaaaaaaaaaaaaaaaaaabZOaaaaaaaaaaaaaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8619,7 +8617,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaarBaaacmRaaaabqaaaaaaabqaaabZUcmSbZUchnchocjecmTcjecjecmUcmVcmVcmVcmWcmVcmVcmVcmXcmYcmZcnacnbcnccndcnecnfckEcdTcngcnhcnicdTcjxcnjcnkcjxcnlcnmcmgcnncnocnpcnqcnrcmgcnscntcnucmocnvcnwcnxcnycnxcnzcmocnAcnBcnCcnDcnCcfxcfxcnEbZUcmzcnFcnGcnHcnIcnJcmBcnKcnKcnKcnLcnMcnNcnKcmBcmCbZUcnOasIcnPcnQaoGcnRcnScfKcnTcnUcnVclAclBcnWcnXclAabqbGLcnYbETcnYbGLcnYbETcnYbGLcnZbETcoabGLabqaaaabqabqabqcobcjacocabqabqabeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqarBaaacjcaaaabqaaaaaaabqaaabZUbZUbZUbZUbZUbZUbZUbZUbZUcodcoecoecofcogcogcogcogcohcogcogcogcoicojcokcolcomconcoocopcoqcorcoscotcoucovcowcoxcoycozcoAcoBcoCcoDcoEcmgcoFckVcmmcmpcoGcoHcoIcoJcoKcoLcmocoMcoNcoOcoPcmzcdNcjncrFcrvcmzcoRcoScoTcoUcoVcmBcnKcoWcoXcoYcnKcoZcpacmBcpbbZUbZUbZUbZUbZUaoGaoGaoGcfKcfKcfKcpcclAcpdcpecpfcpgabqbGLcphcpicpjbGLcpkcplcpmbGLcpncpocppbGLabqaaaabqaaabCMcpqcprcpscptaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabeaaackrabqabqabqabqabqaaabZUcpucpvcpwcpxcpycpzcpAbZUcodcoecpBcpCcpDcpEcpFcoecpGcpHcpIcoecpJcpKcpLcpMcpNcpOcpPcpQcpRcpScpTcpUcpTcpScpTcpVcpWcpXcpYcpZcqacqbcrVcmicnsckVcrWcmocqdcqecqfcqgcqhcqicqjcqkcqlcqmcqncmzcqocqpcqqcsncmzcqscqtcqucqvcqwcmBcnKcnKcqxcnKcnKcqycqzcmBcmCbZUcqAcqBbZUcqCcqDcqEcqFcqGcqHaoGcsoclAclAcsRclAclAabqbGLcqKcqLcqMbGLcqNcqOcqPbGLcqQcqRcqSbGLabqabqabqabqcptcqTcqUcqVcqWabqabeabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaarBaaackrabqaaaaaaaaaabqaaacqXcqYcqZcracrbcpycrccrdbZUcodcoecrecrfcrgcrhcricrjcrkcrlcrmcoecrncrocrpcrqcrrcrscrtcructAcrwcrxcrycrycrycrzcrAcrBcrCcrDcpZcrEctBcrGcmgcrHckVcrIcmocrJcrKcrLcrMcrNcrOcmocrPcrQcrRcrScmzcrTcrUctSctEcmzcrXcrYcrZcsacsbcmBcmBcsccsdcsecsecmBcsfcmBcsgcshcsicsjbZUcskasJasJasJcdKcslbZUcsmcynclAcyqclAcspabqbGLcqKcsqcqKbGLcqNcsrcqNbGLcsscstcssbGLabqaaaabqaaacqWcqUcsucqUcjaaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaarBaaackrabqaaaaaaaaaabqaaacqXcqYcqZcracrbcpycrccrdbZUcodcoecrecrfcrgcrhcricrjcrkcrlcrmcoeaovaotcrpcrncrocrscrtcructAcrwcrxcrycrycrycrzcrAcrBcrCcrDcpZcrEctBcrGcmgcrHckVcrIcmocrJcrKcrLcrMcrNcrOcmocrPcrQcrRcrScmzcrTcrUctSctEcmzcrXcrYcrZcsacsbcmBcmBcsccsdcsecsecmBcsfcmBcsgcshcsicsjbZUcskasJasJasJcdKcslbZUcsmcynclAcyqclAcspabqbGLcqKcsqcqKbGLcqNcsrcqNbGLcsscstcssbGLabqaaaabqaaacqWcqUcsucqUcjaaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabeabqckrabqaaaaaaaaaabqaaacqXcsvcrccqZcswcpycsxbZUbZUcsycoecszcsAcszcsBcszcoecszcsCcszcoeckEcsDcsEcsFckEckEcsGcsHcsIcsJcsJcsKcsLcsMcsJcsJcsNcmgcsOcsPcsQcyCcmgcmgcsSckVcsTcmocmocsUcsVcsWcsXcsYcmocsZcnBcfwcfwcmzctacmzctbcmzcmzcfwctcctdcfwcfwctectfctgcthctictjctkctlcmBctmbZUctnctobZUctpcdKchschyctqctrbZUctscttctuctvctuarAabqbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLabqabqabqabqcjacqUcqUcqUcqWabqbFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaabqaaaaaaarBaaaclIaaaaaaaaaaaaabqaaacqXctwcqZcswctxcpyctyctzcdOcodcoeczqczpctCctDczJcoectFctGctHcoectIctJctKctLctMctNctOcgrctPcsJctQctRcABctTctUcsJccvcmgctVctWctXctYcmictZcuacubcuccudcuecufcugcuhcuicujcukculcumcuncuocupciccuqcurcusciccutcuucuvciccuwctecuxcuycuzcuAcuBcuCcuDcmBcmCbZUbZUcuEbZUcuFcuGchychycuHcuIcqXabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaaabqaaacjacqWcptbCMcptaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqaaaaaaabqaaaaaaabeaaacmRabqaaaaaaaaaabqaaacqXcqXcqZcpycpycqZcqZcuJcdOcodcoecuKcuLcuMcuNcuOcoecuPcuQcuRcuScuTcuUcuVcuWcuXcuYcuZcgrcgscsKcvacvbcvccvdcvecsJchscmgcvfcvgcvhcvicvjcvkcvlckVcvmcvncvocvpcvqcvrcvscvtcvucvvcvwcvxcvycvzcvAcvBcvCcvDcvEcvDcvFcvGcvHcvIcvJcvKcvLcvMcvNcvOcvPcvQcvRcvSbZUcvTcvUcvVcbvctqchychycvWcvXbZUcvYabqaaaaaaaaaabqaaaaaaaaaaaaaaaabqaaaaaaaaaabqaaaaaaaaaaaaabqaaaabqaaaaaaabqaaaabqaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8666,7 +8664,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadazcZBcZBdaAdaBdaCcZBcZTcYFdaDcZVcZEdaEcZeaaaaaaabqaaacVGcZrcZrcZrcZrdaFdaGdaHdaIdaFcZrcZrcZrcZrcVGaaacmzcicdaJcmzcTZcmzcmzcTZcmzaaaaaaabqabqcZAcZAcZAcZAcZAaaacYBabqcZAcZAcZAcZAcZAaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacZedaKcZBcZTcYFcZUcZBdaLcZedaMdaNdaOdaPcZeaaaaaaabqaaacVGcZGcZHcZHdaQcZJdaRdaHdaSdaTdaUcZPcZPdancVGaaacmzcmzcmzcmzaaaaaaabqaaaaaaaaaaaaabqaaaabqaaaabqaaaabqaaacYBaaaabqaaaabqabqabqabqaupaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYFcZUcZBcZTcYFcZUcZBdaVdaWdaXcYFdaYdaZdbaaaaaaaabqaaacVGcZPcZPcZPdbbdbccZZdbddabdbedbfcZPcZPcZPcVGaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaabqaaacYAcYAcYAcYAcYAabqdbgabqcYAcYAcYAcYAcYAabqarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbhcZUcZBcZBcZBcZBcZBcZTcYFdbidbjcZBdbkcZeaaaabqabqabqcVGdancZPcZPdbldbmdaqdbndbodatdbpcZHcZHdavcVGaaaaaaabqaaaaaaabqaaaaaaaaaaaaaaaaaaarBabqcYXcYYcYYcYYcYYcYZcYBcZbcZccZccZccZccZdabqarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbhcZUcZBcZBcZBcZBcZBcZTcYFdbidbicZBdbkcZeaaaabqabqabqcVGdancZPcZPdbldbmdaqdbndbodatdbpcZHcZHdavcVGaaaaaaabqaaaaaaabqaaaaaaaaaaaaaaaaaaarBabqcYXcYYcYYcYYcYYcYZcYBcZbcZccZccZccZccZdabqarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYFcZUcZBcZTcYFcZUcZBcZBdaYcZBcZBcZBdbqcYFaaaabqaaacVGcVGcZrcZrcZrcZrdaFdbrdaHdbsdaFcZrcZrcZrcZrcVGcVGaaaabqabqabqabqaaaaaaaaaaaaaaaaaaabqabqcZAcZAcZAcZAcZAaaadbtaaacZAcZAcZAcZAcZAaaaarBabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacZmdaCcZBcZTcYFcZUcZBcZTcYFdbudbvdbwdbxcZeaaaabqaaacVGcZGcZHcZHdbycZJdbzdbAdaHdaScZMdbBdbCdbDcZPcZPcVGabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaabeaaaaaaabqabqabqaaaaaacVJabqaaaaaaabqabqaaaaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYGcZBcZBdaAdaBdaCcZBdbFdaWcYEcYEdbGcYEdbaaaaabqaaacVGcZPcZPcZPdbHdbIdabdabdbJdabdabdbKdbLdbMcZPcZPcVGaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabearBarBarBaaaaaaaaacVJaaaaaaaaaarBarBarBauparBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm index 288ac0f9044..0e4001575fc 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) @@ -580,7 +580,7 @@ "nD" = (/obj/structure/extinguisher_cabinet{pixel_y = -28},/turf/unsimulated/floor{tag = "icon-darkbrown"; icon_state = "darkbrown"; dir = 2},/area/centcom/ferry) "nE" = (/turf/unsimulated/floor{tag = "icon-darkred"; icon_state = "darkred"; dir = 2},/area/centcom/ferry) "nF" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/emps,/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry) -"nG" = (/obj/structure/table/reinforced,/obj/item/weapon/c4,/obj/item/weapon/c4{pixel_x = 7},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry) +"nG" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/plastic/c4,/obj/item/weapon/grenade/plastic/c4{pixel_x = 7},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry) "nH" = (/turf/unsimulated/floor{icon_state = "red"; dir = 10},/area/tdome/tdomeobserve) "nI" = (/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/tdome/tdomeobserve) "nJ" = (/turf/unsimulated/floor{icon_state = "green"},/area/tdome/tdomeobserve) diff --git a/_maps/map_files/MetaStation/z5.dmm b/_maps/map_files/MetaStation/z5.dmm index aaf53a80095..5b8760128df 100644 --- a/_maps/map_files/MetaStation/z5.dmm +++ b/_maps/map_files/MetaStation/z5.dmm @@ -478,8 +478,8 @@ "jj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/research_outpost/entry) "jk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/light_switch{pixel_y = -23},/turf/simulated/floor/plasteel,/area/research_outpost/entry) "jl" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/turf/simulated/floor/plasteel,/area/research_outpost/med) -"jm" = (/obj/machinery/sleeper{dir = 8},/obj/machinery/light_switch{pixel_y = -23},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/research_outpost/med) -"jn" = (/obj/machinery/sleep_console{dir = 8},/obj/machinery/light/small,/obj/machinery/camera{c_tag = "Research Outpost Medbay"; dir = 8; network = list("Research Outpost")},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/research_outpost/med) +"jm" = (/obj/machinery/light_switch{pixel_y = -23},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/research_outpost/med) +"jn" = (/obj/machinery/light/small,/obj/machinery/camera{c_tag = "Research Outpost Medbay"; dir = 8; network = list("Research Outpost")},/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/research_outpost/med) "jo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/research_outpost/tempstorage) "jp" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/research_outpost/tempstorage) "jq" = (/obj/machinery/conveyor{dir = 9; id = "anotempload"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/research_outpost/tempstorage) @@ -938,7 +938,7 @@ "sb" = (/obj/machinery/light/small{dir = 4},/obj/structure/stool/bed/roller,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp) "sc" = (/obj/structure/closet/crate/internals,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp) "sd" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp) -"se" = (/mob/living/simple_animal/bot/secbot/beepsky{desc = "Powered by tears and swet of laborer."; name = "Prison Ofitser"},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=2-NMine"; location = "1-Storage"},/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"; temperature = 273.15},/area/mine/laborcamp) +"se" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=2-NMine"; location = "1-Storage"},/mob/living/simple_animal/bot/secbot/beepsky{desc = "Powered by tears and swet of laborer."; name = "Prison Ofitser"},/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"; temperature = 273.15},/area/mine/laborcamp) "sf" = (/obj/structure/plasticflaps/mining,/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"; temperature = 273.15},/area/mine/laborcamp) "sg" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=3-SMine"; location = "2-NMine"},/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"; temperature = 273.15},/area/mine/laborcamp) "sh" = (/turf/simulated/floor/plating{icon_plating = "asteroidplating"; icon_state = "asteroidplating"; temperature = 273.15},/area/mine/explored) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm b/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm new file mode 100644 index 00000000000..0635ad2bcc7 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm @@ -0,0 +1,124 @@ +"aa" = (/turf/space,/area/space) +"ab" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/ruin/unpowered) +"ac" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/ruin/unpowered) +"ad" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/ruin/unpowered) +"ae" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/ruin/unpowered) +"af" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/ruin/unpowered) +"ag" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating,/area/ruin/unpowered) +"ah" = (/turf/simulated/mineral,/area/ruin/unpowered) +"ai" = (/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"aj" = (/obj/structure/flora/rock,/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"ak" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/ruin/unpowered) +"al" = (/obj/structure/flora/ausbushes/genericbush,/turf/unsimulated/floor/grass,/area/ruin/unpowered) +"am" = (/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/turf/unsimulated/floor/grass,/area/ruin/unpowered) +"an" = (/mob/living/simple_animal/hostile/poison/bees,/turf/unsimulated/floor/grass,/area/ruin/unpowered) +"ao" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/unsimulated/floor/grass,/area/ruin/unpowered) +"ap" = (/mob/living/simple_animal/hostile/asteroid/goldgrub{will_burrow = 0},/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"aq" = (/obj/structure/flora/ausbushes/grassybush,/turf/unsimulated/floor/grass,/area/ruin/unpowered) +"ar" = (/obj/structure/flora/rock/pile,/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"as" = (/mob/living/simple_animal/hostile/asteroid/basilisk,/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"at" = (/turf/simulated/wall/r_wall,/area/ruin/unpowered) +"au" = (/obj/structure/flora/ausbushes/leafybush,/mob/living/simple_animal/hostile/poison/bees,/turf/unsimulated/floor/grass,/area/ruin/unpowered) +"av" = (/obj/structure/flora/ausbushes/brflowers,/turf/unsimulated/floor/grass,/area/ruin/unpowered) +"aw" = (/obj/structure/flora/rock,/obj/machinery/light,/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"ax" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/clothing/mask/surgical,/obj/item/weapon/razor,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"ay" = (/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"az" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/box/beakers,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aA" = (/obj/structure/flora/ausbushes/ywflowers,/turf/unsimulated/floor/grass,/area/ruin/unpowered) +"aB" = (/obj/machinery/light,/mob/living/simple_animal/hostile/poison/bees,/turf/unsimulated/floor/grass,/area/ruin/unpowered) +"aC" = (/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor/grass,/area/ruin/unpowered) +"aD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/highsecurity{name = "Bio Containment"; req_one_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aE" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/ruin/unpowered) +"aF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/ruin/unpowered) +"aG" = (/obj/structure/table/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/item/weapon/gun/energy/floragun,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aI" = (/obj/structure/table/reinforced,/obj/machinery/computer/med_data/laptop,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aJ" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/ruin/unpowered) +"aK" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) +"aL" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/ruin/unpowered) +"aN" = (/obj/structure/table/reinforced,/obj/item/weapon/folder,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aO" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aP" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/bottle/liver_enhance_virion,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aQ" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space) +"aR" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aS" = (/obj/machinery/power/apc/worn_out{dir = 8; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/rack,/obj/item/weapon/melee/baton/cattleprod,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aT" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/rack,/obj/item/clothing/suit/space/rig/medical,/obj/item/weapon/tank/emergency_oxygen/double,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aU" = (/obj/structure/rack,/obj/item/weapon/crowbar,/obj/item/weapon/shield/riot,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aV" = (/obj/machinery/smartfridge/chemistry,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aW" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/syringe,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aX" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/chem_grenade/antiweed{pixel_x = 3; pixel_y = 5},/obj/item/weapon/grenade/chem_grenade/antiweed{pixel_x = 4},/obj/item/weapon/grenade/chem_grenade/antiweed{pixel_x = -3; pixel_y = -1},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aY" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/temperature,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"aZ" = (/obj/structure/table/reinforced,/obj/item/weapon/minihoe,/obj/item/weapon/shovel,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"ba" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bb" = (/obj/machinery/door/airlock/hatch{name = "Bio-Research Station"},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bd" = (/obj/machinery/power/terminal,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"be" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bf" = (/obj/machinery/power/smes/magical{desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit"},/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bg" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bh" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bi" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack,/obj/item/weapon/reagent_containers/glass/bottle/mutagen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bj" = (/obj/structure/table/reinforced,/obj/item/weapon/surgicaldrill,/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/item/weapon/surgical_drapes,/obj/item/weapon/retractor,/obj/item/weapon/cautery,/obj/item/weapon/circular_saw,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bk" = (/obj/machinery/optable,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bl" = (/obj/machinery/computer/operating,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bm" = (/obj/structure/closet/wardrobe/toxins_white,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bn" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/snacks/carrotfries,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bo" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/ruin/unpowered) +"bp" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/green,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bq" = (/obj/item/stack/cable_coil/cut,/obj/item/stack/tile/plasteel{pixel_x = 3; pixel_y = -4},/obj/item/weapon/wirecutters,/turf/simulated/floor/plating,/area/ruin/unpowered) +"br" = (/obj/structure/table/reinforced,/obj/machinery/microwave,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bs" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/shieldwallgen,/turf/simulated/floor/plating,/area/ruin/unpowered) +"bt" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/shieldwallgen,/turf/simulated/floor/plating,/area/ruin/unpowered) +"bu" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/plating,/area/ruin/unpowered) +"bv" = (/turf/simulated/floor/plating,/area/ruin/unpowered) +"bw" = (/obj/machinery/light{dir = 1},/mob/living/simple_animal/hostile/carp,/turf/simulated/floor/plating,/area/ruin/unpowered) +"bx" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/plating,/area/ruin/unpowered) +"by" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/ruin/unpowered) +"bz" = (/obj/machinery/space_heater,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bA" = (/obj/structure/table/reinforced,/obj/machinery/juicer,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"bB" = (/obj/structure/alien/weeds,/turf/simulated/floor/plating,/area/ruin/unpowered) +"bC" = (/obj/structure/alien/weeds/node,/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/ruin/unpowered) +"bD" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/plating,/area/ruin/unpowered) +"bE" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/plating,/area/ruin/unpowered) +"bF" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/ruin/unpowered) +"bG" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bH" = (/obj/structure/alien/resin/wall,/turf/simulated/floor/plating,/area/ruin/unpowered) +"bI" = (/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/plating,/area/ruin/unpowered) +"bJ" = (/mob/living/simple_animal/crab{faction = list("carp")},/turf/simulated/floor/plating,/area/ruin/unpowered) +"bK" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/space) +"bL" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bM" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bN" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating,/area/ruin/unpowered) +"bO" = (/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/ruin/unpowered) +"bP" = (/obj/structure/lattice,/turf/space,/area/space) +"bQ" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable,/turf/simulated/floor/plating,/area/ruin/unpowered) +"bR" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/simulated/floor/plating,/area/space) +"bS" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable,/obj/machinery/shieldwallgen,/turf/simulated/floor/plating,/area/ruin/unpowered) +"bT" = (/obj/structure/grille,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/ruin/unpowered) +"bU" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/ruin/unpowered) +"bV" = (/obj/machinery/shieldwallgen,/turf/space,/area/space) +"bW" = (/obj/item/weapon/shard,/turf/space,/area/space) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +abacacacacadaaaaaaaaaaaaaeacacacacafaaaa +agahahaiajakaaaaaaaaaaaaakalamanaoakaaaa +agaiapahaiakaaaaaaaaaaaaakanamaqanakaaaa +agaraiaiasakatagagagagatakanaoauavakaaaa +agahaiawarakataxayayazatakaAaBamaCakaaaa +abacaDacacaEaFaGaHaHaIaFaJacacaDacafaaaa +aaaKaLatataMataNaOayaPatatatataLaQaaaaaa +aaaKaRataSaTaUaVayayaWaXaYaZatbaaQaaaaaa +aaaKaLbbaybcayayayayayayayaybbaLaQaaaaaa +aaaKaLbbaybdayayayayayayayaybbaLaQaaaaaa +aaaKaRatbebfbgbhayaybibjbkblatbaaQaaaaaa +aaaKaLatataMatbmayaybnatatatataLaQaaaaaa +abacaDacacboaFbpaHbqbraFbsacacaDacbtaaaa +agbubvbwbxakbybzayaybAatakbBbCbDbBagaaaa +agbvbvbvbEakbFatbGbGatatakbBbHbBbBagaaaa +agbIbJbvbvakbKatbLbMataaakbDbHbvbvbNaaaa +agbvbvbvbvakbKatbGbGataaakbHbvbObvbPaaaa +abacacacacbQbRaaaaaaaaaabSacbTbUbPaabVaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/asteroid1.dmm b/_maps/map_files/RandomRuins/SpaceRuins/asteroid1.dmm new file mode 100644 index 00000000000..5792bd58b23 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/asteroid1.dmm @@ -0,0 +1,26 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"c" = (/turf/simulated/mineral/random/high_chance,/area/ruin/unpowered) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaabaa +aaaabbaaaaaaaaaaaaaa +aaaabbbaaaaaaaaaaaaa +aaaaaaaaabbcbaaaaaaa +aaaaaaaaaabbaaaaaaaa +aaaaaaaaaabaaaaaaaaa +aaaaaaabaaaaaaaaaaaa +aaaaabbcbaaaaabbbaaa +aaaaabccbaaaaabcbaaa +aaaaccccaaabbccbbaaa +aaabcccbaaabbccaaaaa +aaabccaaaaaabbaaaaaa +aaabbbaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaabcaaaaaaa +aaaabaaaaaabbaaaaaaa +aaaaaaaaaaaaaaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/asteroid2.dmm b/_maps/map_files/RandomRuins/SpaceRuins/asteroid2.dmm new file mode 100644 index 00000000000..25ae8bbeac5 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/asteroid2.dmm @@ -0,0 +1,27 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"c" = (/turf/simulated/mineral,/area/ruin/unpowered) +"d" = (/turf/simulated/mineral/random/high_chance,/area/ruin/unpowered) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaabbbbaaaaaaaaaab +aaabbbbbbbbaaaaabbaa +aabbbbbcbbbbbbaaabaa +abbbbbcccbbbbbaaaaaa +abbbcccccccddbbaaaaa +abbbcccccccddbbaaaaa +abbbcccdddccdbbbbaaa +aaabcccccdddcccbbaaa +aabbbddcccddccdbbbba +aabbbddcccddccccbbba +aabbbddccdddccccbbba +aabbbddcdddcccddbbba +aaabbddcdcccccddbbba +aaaabbbbdccccdddbbba +aaaaaabbcccdcccbbbba +aaabaabbbbbccccbbaaa +baaaaaaabbbbbccbaaaa +aaaaaaaaaaaabbbbaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/asteroid3.dmm b/_maps/map_files/RandomRuins/SpaceRuins/asteroid3.dmm new file mode 100644 index 00000000000..2188dbc63cd --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/asteroid3.dmm @@ -0,0 +1,29 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"c" = (/turf/simulated/mineral,/area/ruin/unpowered) +"d" = (/turf/simulated/mineral/random/high_chance,/area/ruin/unpowered) +"e" = (/obj/effect/decal/remains/human,/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"f" = (/obj/item/weapon/pickaxe/diamond,/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aabbbaaaaaaaaabaaaaa +aabbbbabbbbaaaaaaaaa +baabccbbbbbbbbbbaaba +aabbccbccccdddcbbaaa +aabccccccccdddcbbaaa +aabcccdccbcccccccaaa +aaabcccccbccccccccaa +abbbcccbbbccccccddaa +bbbcccbbbbbcdcccddaa +cdddccbbebbccccccaaa +cdddcbbfbbcccccccaaa +ccccccbbbbcccccbbaaa +cccccccbbccccccbbaba +bcdddccccccccbbaaaaa +acdddcccccddcbaaaaaa +acdddccbccddbbaaaaaa +aabbcbbbbcbbbaaaaaba +aaaaaaabbbbbaabaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/asteroid4.dmm b/_maps/map_files/RandomRuins/SpaceRuins/asteroid4.dmm new file mode 100644 index 00000000000..85d9cc75153 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/asteroid4.dmm @@ -0,0 +1,37 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/simulated/mineral,/area/ruin/unpowered) +"c" = (/turf/simulated/mineral/random/high_chance,/area/ruin/unpowered) +"d" = (/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"e" = (/turf/simulated/mineral/clown,/area/ruin/unpowered) +"f" = (/turf/simulated/floor/plating,/area/ruin/unpowered) +"g" = (/obj/item/weapon/shard,/obj/item/weapon/paper{info = "Extraction was successful! The disguise was perfect, the clowns never knew what hit 'em! Once I get back to base with the bananium samples I'll be rich, I tell you! RICH!"},/turf/simulated/floor/plating,/area/ruin/unpowered) +"h" = (/obj/item/stack/sheet/mineral/bananium{amount = 15},/turf/simulated/floor/plating,/area/ruin/unpowered) +"i" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/ruin/unpowered) +"j" = (/obj/item/weapon/shard,/turf/simulated/shuttle/floor,/area/ruin/unpowered) +"k" = (/turf/simulated/shuttle/floor,/area/ruin/unpowered) +"l" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/ruin/unpowered) +"m" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/turf/space,/area/ruin/unpowered) +"n" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/floor/plating,/area/ruin/unpowered) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aabbbaaaaaaaaaaaaaaa +acccbbbbaaaaaaaaaaaa +acccbbcbbbaaaaaabaaa +abbbbbbbbbbaaaabbaaa +abddbbbbbbcaaaabbbaa +aadddbbbbbcaaaabbaaa +aaadddddbaaaaabbbaaa +aaaaadddbaaaaabbaaaa +aaaaaaaaaaaaaabbaaaa +aaaaaaaaaaaaccbbaaaa +aaabaaaaaabbccbaaaaa +aaabaaaaabbbebbaaaaa +aabbbaaadbbeefbcaaaa +aabbbaaaddbghfbcaaaa +abbbbaaaddbijibbaaaa +abbaaaaaaabikibaaaaa +aaaaabaaaaalmnaaaaaa +aaabaaaaaaaaaaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/asteroid5.dmm b/_maps/map_files/RandomRuins/SpaceRuins/asteroid5.dmm new file mode 100644 index 00000000000..46ecaecff24 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/asteroid5.dmm @@ -0,0 +1,47 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/simulated/mineral,/area/ruin/unpowered) +"c" = (/turf/simulated/mineral/random/high_chance,/area/ruin/unpowered) +"d" = (/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabbbccccbaaaaaaaaaaaaaaaaa +aaaaaaaaaabbbbbbbbccccbbbbbbaaaaaaaaaaaa +aaaaaaaabbbbbbbbbbdddbbbbbbbbaaaaaaaaaaa +aaaaaccccbbbbbbdddddddddcbbccaaaaaaaaaaa +aaaaaccccbbbbccddddddddddbbccaaaaaaaaaaa +aaabbccccbbbddddddaaaaaddddbbaaaaaaaaaaa +aaabbbccbbcdddaaaaaaaaaadddbbbaaaaaaaaaa +aaacbbbbbdddaaaaaabbbaaadddbbbaaaaaaaaaa +aaacbbbbbddaaaaaaabbbaaaaaaabbaaaaaaaaaa +aaaabbbbdddaaaaaaaabbaaaaaaabbaaaaaaabaa +aaaaabbbddaaaaaaaaaaaaaaaaaabbaaaaaabcaa +aaaaabbbddaaaaabaaaaaaaaaaabbaaaaaabccca +aaaaabbbddddaaaaaaaaaaaaaaabbaaaaaabccca +aaaaaaccbdddaaaaaaaaaaaaaaaaaaaaaaabccca +aaaaaaccbdddaaaaaaabbaabaaaaaaaaadddbbba +aaaaaaccbbcbaaaaabbbbaaaaaaaaaadddddbbaa +aaaaaaaaaaaaaaaaabbcbaaaaaaaaaadddddbbaa +aaaaaaaaaaaaaaaaabbcaaaaaaaadddddddbbbaa +aaaaaaaaaaaaaaaaaabbaaaaaaaaddddbddbbbba +aaaaaaaaaaaaaaaaaaaaaaaaaaaaddddbddbbbba +aaaaaaaaaaaaaaaaaaaaaaaaaaaabcbbbdddbcba +aaaaaaaaaaaaabdddddbbbaaaaabbbbbbcdddcba +aaaaaaaaabdddddddddddddaaaaabbbbbcdddbba +aaaaaaabddddddbbbbbbdddaaaaaaabbbcddbbaa +aaaaaabddddbcccccbbbddddbaaaaabbbbbbbbaa +aaaaaabddbbbcccccbbbbccdcaaaaabbbbbbbbaa +aaaaddddbbcccbbbbbbbbccdddaaaaabccbbaaaa +aaaaddddbbccdddbbbdddccdddaaaaaaabbcaaaa +aaaddddbbbccdddbdddddbbdddaaaaaaaaaaaaaa +aaaddddcccccdcbbddddddddddaaaaaaaaaaaaaa +abbdddbccccdddddddcbddddddaaaaaaaaaaaaaa +accbbbbccccdddddddbbbbbbbcaaaaaaaaaaaaaa +acccbbbccccddddddbbbbbbbbcaaaaaaaaaaaaaa +acccbbbbbbbbbbbbbbccbbbbbbaaaaaaaaabbaaa +aaccbbbbbbbbbbbbbbccbbbbbaaaaaaaaabbbaaa +aabbbbbbccbbbbbbbbbbbbbbbaaaaaaaabbbbaaa +aaabbbbbccbabbbbbccccbbbbaaaaaaaabbbaaaa +aaabbbbbaaaaaaaabccccbbaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm new file mode 100644 index 00000000000..82ed8ece1a7 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm @@ -0,0 +1,179 @@ +"aa" = (/turf/space,/area/space) +"ab" = (/turf/simulated/mineral/random/low_chance,/area/ruin/unpowered) +"ac" = (/turf/simulated/wall/mineral/iron,/area/ruin/unpowered) +"ad" = (/obj/structure/closet/cardboard,/obj/item/stack/sheet/mineral/silver,/obj/item/stack/sheet/mineral/gold,/obj/item/stack/sheet/mineral/silver,/obj/item/stack/sheet/mineral/silver,/obj/item/stack/sheet/mineral/gold,/obj/item/stack/sheet/mineral/gold,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"ae" = (/obj/structure/closet/cardboard,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"af" = (/obj/structure/closet/cardboard,/obj/item/stack/sheet/cardboard,/obj/item/stack/cable_coil,/obj/item/stack/sheet/wood,/obj/item/stack/packageWrap,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"ag" = (/obj/structure/closet/cardboard,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/storage/box/zipties,/obj/item/weapon/kitchen/knife/combat,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"ah" = (/obj/structure/closet/cardboard,/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"ai" = (/obj/structure/closet/cardboard,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/clothing/shoes/combat,/obj/item/clothing/shoes/combat,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aj" = (/obj/structure/closet/cardboard,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/shovel,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"ak" = (/obj/structure/closet/cardboard,/obj/item/device/flashlight/lantern,/obj/item/device/flashlight/lantern,/obj/item/device/flashlight/lantern,/obj/item/device/tape/random,/obj/item/device/tape/random,/obj/item/device/tape/random,/obj/item/weapon/storage/box/rxglasses,/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/night,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"al" = (/obj/structure/closet/cardboard,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/box/bodybags,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"am" = (/obj/structure/closet/cardboard,/obj/item/weapon/kitchen/knife,/obj/item/weapon/kitchen/knife,/obj/item/weapon/hatchet,/obj/item/weapon/kitchen/rollingpin,/obj/item/weapon/minihoe,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"an" = (/obj/structure/closet/cardboard,/obj/item/weapon/defibrillator,/obj/item/weapon/storage/box/autoinjectors,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"ao" = (/obj/structure/closet/cardboard,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/ammo_box/c9mm,/obj/item/ammo_box/c9mm,/obj/item/ammo_box/c9mm,/obj/item/ammo_box/c9mm,/obj/item/ammo_box/c9mm,/obj/item/ammo_box/c9mm,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"ap" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aq" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"ar" = (/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"as" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"at" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"au" = (/obj/machinery/door/airlock/highsecurity{name = "Bunker"},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"av" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/ruin/unpowered) +"aw" = (/obj/structure/mirror{pixel_x = 30},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/ruin/unpowered) +"ax" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"ay" = (/obj/structure/table,/obj/item/weapon/gun/projectile/automatic/wt550{pixel_x = -3; pixel_y = 6},/obj/item/weapon/gun/projectile/automatic/wt550{pixel_x = 2; pixel_y = 0},/obj/structure/reagent_dispensers/peppertank{pixel_y = 30},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"az" = (/obj/structure/table,/obj/item/weapon/storage/backpack/duffel/security{pixel_y = 6},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aA" = (/obj/structure/table,/obj/item/device/radio{pixel_x = -4},/obj/item/device/radio,/obj/item/device/radio{pixel_x = 4},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aB" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aC" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/brute{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/firstaid/brute,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aD" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aE" = (/obj/structure/closet/crate/radiation,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aF" = (/obj/structure/closet/cardboard,/obj/item/weapon/reagent_containers/food/snacks/beans,/obj/item/weapon/reagent_containers/food/snacks/beans,/obj/item/weapon/reagent_containers/food/snacks/beans,/obj/item/weapon/reagent_containers/food/snacks/beans,/obj/item/weapon/reagent_containers/food/snacks/beans,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aG" = (/obj/structure/closet/cardboard,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aH" = (/obj/machinery/vending/clothing,/turf/simulated/floor/wood{tag = "icon-wood-broken"; icon_state = "wood-broken"},/area/ruin/unpowered) +"aI" = (/turf/simulated/floor/wood{tag = "icon-wood-broken2"; icon_state = "wood-broken2"},/area/ruin/unpowered) +"aJ" = (/obj/structure/stool/bed,/turf/simulated/floor/wood,/area/ruin/unpowered) +"aK" = (/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/ruin/unpowered) +"aL" = (/obj/machinery/light/small{dir = 4; pixel_y = -8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/ruin/unpowered) +"aM" = (/obj/structure/table,/obj/item/clothing/gloves/combat,/obj/item/clothing/gloves/combat,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aN" = (/obj/structure/table,/obj/item/device/mass_spectrometer/adv,/obj/item/device/mass_spectrometer/adv,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aO" = (/obj/structure/closet/radiation,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aP" = (/obj/structure/closet/cardboard,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aQ" = (/obj/structure/closet/wardrobe/pink,/turf/simulated/floor/wood{tag = "icon-wood-broken2"; icon_state = "wood-broken2"},/area/ruin/unpowered) +"aR" = (/turf/simulated/floor/wood,/area/ruin/unpowered) +"aS" = (/obj/structure/stool/bed,/turf/simulated/floor/wood{tag = "icon-wood-broken"; icon_state = "wood-broken"},/area/ruin/unpowered) +"aT" = (/obj/machinery/shower{dir = 4},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/ruin/unpowered) +"aU" = (/obj/machinery/shower{dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/ruin/unpowered) +"aV" = (/obj/machinery/light/small{dir = 8},/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/pill_bottle/charcoal,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aW" = (/obj/structure/table,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/weapon/crowbar/red,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aX" = (/obj/machinery/suit_storage_unit,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"aY" = (/obj/structure/closet/wardrobe/pink,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/ruin/unpowered) +"aZ" = (/turf/simulated/floor/wood{tag = "icon-wood-broken"; icon_state = "wood-broken"},/area/ruin/unpowered) +"ba" = (/obj/structure/stool/bed,/turf/simulated/floor/wood{tag = "icon-wood-broken2"; icon_state = "wood-broken2"},/area/ruin/unpowered) +"bb" = (/obj/machinery/shower{dir = 4},/obj/item/weapon/soap,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/ruin/unpowered) +"bc" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bd" = (/obj/structure/closet/cardboard,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"be" = (/obj/machinery/door/airlock/highsecurity{name = "Bunker"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/ruin/unpowered) +"bf" = (/obj/structure/closet/fireaxecabinet{tag = "icon-fireaxe0130"; icon_state = "fireaxe0130"; pixel_y = 28},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bg" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bh" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bi" = (/obj/machinery/light/small{dir = 4; pixel_y = -8},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bj" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bk" = (/obj/machinery/processor{name = "processor"},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bl" = (/obj/structure/table,/obj/item/weapon/storage/box/matches,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bm" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bn" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bo" = (/obj/machinery/portable_atmospherics/hydroponics{pixel_y = 9},/obj/machinery/light{dir = 1},/turf/simulated/floor/light,/area/ruin/unpowered) +"bp" = (/obj/machinery/portable_atmospherics/hydroponics{pixel_y = 9},/turf/simulated/floor/light,/area/ruin/unpowered) +"bq" = (/obj/machinery/blackbox_recorder,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"br" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bs" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/power/smes,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bt" = (/obj/machinery/telecomms/relay/preset/telecomms,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bu" = (/obj/machinery/light/small{dir = 1},/obj/structure/dispenser/oxygen,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bv" = (/obj/machinery/biogenerator,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bw" = (/obj/machinery/light,/obj/machinery/portable_atmospherics/hydroponics{pixel_y = 9},/turf/simulated/floor/light,/area/ruin/unpowered) +"bx" = (/obj/machinery/autolathe,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"by" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bz" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bA" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel{tag = "icon-bar"; icon_state = "bar"},/area/ruin/unpowered) +"bB" = (/turf/simulated/floor/plasteel{tag = "icon-bar"; icon_state = "bar"},/area/ruin/unpowered) +"bC" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/plasteel{tag = "icon-bar"; icon_state = "bar"},/area/ruin/unpowered) +"bD" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/beans,/turf/simulated/floor/plasteel{tag = "icon-bar"; icon_state = "bar"},/area/ruin/unpowered) +"bE" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-bar"; icon_state = "bar"},/area/ruin/unpowered) +"bF" = (/obj/machinery/seed_extractor,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bG" = (/obj/machinery/power/apc{dir = 8; name = "Bunker APC"; keep_preset_name = 1; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bI" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bJ" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bK" = (/obj/structure/table,/obj/item/weapon/kitchen/knife,/turf/simulated/floor/plasteel{tag = "icon-bar"; icon_state = "bar"},/area/ruin/unpowered) +"bL" = (/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-bar"; icon_state = "bar"},/area/ruin/unpowered) +"bM" = (/obj/structure/table,/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor/plasteel{tag = "icon-bar"; icon_state = "bar"},/area/ruin/unpowered) +"bN" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bO" = (/obj/machinery/space_heater,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bP" = (/obj/structure/stool/bed/chair/office/dark{tag = "icon-officechair_dark (EAST)"; icon_state = "officechair_dark"; dir = 4},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bQ" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bR" = (/obj/machinery/smartfridge,/turf/simulated/floor/plasteel{tag = "icon-bar"; icon_state = "bar"},/area/ruin/unpowered) +"bS" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{tag = "icon-bar"; icon_state = "bar"},/area/ruin/unpowered) +"bT" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bU" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bV" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bW" = (/obj/structure/computerframe,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bX" = (/obj/structure/table/reinforced,/obj/machinery/computer/security/telescreen{dir = 1; name = "Bunker Entrance"; network = list("Bunker1"); pixel_x = 0; pixel_y = 2},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bY" = (/obj/structure/table/reinforced,/obj/machinery/door_control{id = "bunker1"; name = "Inner Doors"; pixel_y = 6},/obj/machinery/door_control{id = "bunker2"; name = "Outer Doors"; pixel_y = -4},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"bZ" = (/obj/machinery/door/poddoor{id_tag = "bunker1"; name = "Bunker Door"; tag = "inner"},/turf/simulated/floor/plating,/area/ruin/unpowered) +"ca" = (/turf/simulated/floor/plating,/area/ruin/unpowered) +"cb" = (/obj/machinery/camera{network = list("Bunker1")},/turf/simulated/floor/plating,/area/ruin/unpowered) +"cc" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/ruin/unpowered) +"cd" = (/obj/machinery/door/poddoor{id_tag = "bunker2"; name = "Bunker Door"; tag = "outer"},/turf/simulated/floor/plating,/area/ruin/unpowered) +"ce" = (/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababab +aaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaababababab +aaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaa +aaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaababababababababababababababababaaaa +aaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaababababababababababababababababababaaaa +aaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa +aaabababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababababababababababababababababababababababababaaaaaa +aaabababababababababababababababababababababababababababababababababababababababacadaeafagahaiacabababababababababababababababababababababababababababababababababaaaaaaaa +aaabababababababababababababababababababababababababababababababababababababababacajakalamanaoacababababababababababababababababababababababababababababababababaaaaaaaaaa +ababababababababababababababababababababababababababababababababababababababababacapaqararasatacababababababababababababababababababababababababababababababababaaaaaaaaaa +ababababababababababababababababababababababababababababababacacacacacacacacacacacacacauacacacacacabababababababababababababababababababababababababababababababaaaaaaaaaa +aaabababababababababababababababababababababababababacacacacacavawacaxayazaAaBaCaDacaEaraFaFaGaGacabababababababababababababababababababababababababababababababaaaaaaaaaa +aaabababababababababababababababababababababababababacaHaIaJacaKaLacaMarararararaNacaOaraFaFaGaPacababababababababababababababababababababababababababababababababaaaaaaaa +aaaaababababababababababababababababababababababababacaQaRaSacaTaUacaVarararararaWacaXaraFaFaGaGacababababababababababababababababababababababababababababababababaaaaaaaa +aaaaaaabababababababababababababababababababababababacaYaZbaacbbaUacacbcbcaubcbcacacaXararbdbdbdacababababababababababababababababababababababababababababababababaaaaaaaa +aaaaaaaaabababababababababababababababababababacacacacacauacacacbeacbfarararararauararararbdbdbdacabababababababababababababababababababababababababababababababababaaaaaa +aaaaaaaaabababababababababababababababababababacbgaracarararbhararararararararbiacacacacacacacacacabababababababababababababababababababababababababababababababababaaaaaa +aaaaaaaaabababababababababababababababababababacbjarauarararararararbkblbmbnararacbobpbpboacababababababababababababababababababababababababababababababababababababaaaaaa +aaaaaaaaabababababababababababababababababababacacacacacacauacacararacacacacararauararararacabababababababababababababababababababababababababababababababababababababaaaa +aaaaaaaaaaababababababababababababababababababacbqbrbsbtararbuacarararararararbvacbwbpbpbwacabababababababababababababababababababababababababababababababababababababaaaa +aaaaaaaaaaaaabababababababababababababababababacbxarbyarararbzacbAbBbCbDbEararbFacacacacacacabababababababababababababababababababababababababababababababababababababaaaa +aaaaaaaaaaaaabababababababababababababababababacbGbHbIarararbJacbKbBbLbMbEararbNacabababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaababababababababababababababababacbOararararbPbQacbRbSbBbBbBararbTacabababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaababababababababababababababababacbUarararbVarbWacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaabababababababababababababababababacarararbXbWbYbQacababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaabababababababababababababababababacbZbZacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaabababababababababababababababababaccacacacbccacababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaababababababababababababababababaccacacacacaacababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaaaabababababababababababababababacacacaccdcdacababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaaaababababababababababababababababcecececececeabababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaaaaaaaaaaaaaabababababababababababababababcececececececeabababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaaaaaaaaaaaaaabababababababababababababababcecececececeabababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa +aaaaaaaaaaaaaaaaabababababababababababababababcecececececeabababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa +aaaaaaaaaaaaaaaaababababababababababababababcececececeababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaa +aaaaaaaaaaaaaaaaababababababababababababababcececececeababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaa +aaaaaaaaaaaaaaaaaaabababababababababababababcececececeabababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaababababababababababababababcececececeabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaababababababababababababababcecececececeababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaabababababababababababababcececececeababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababcececececeababababababababaaaaaaababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababcececececeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict1.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict1.dmm new file mode 100644 index 00000000000..bbbb2f1e366 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict1.dmm @@ -0,0 +1,61 @@ +"a" = (/turf/space,/area/space) +"b" = (/obj/structure/lattice,/turf/space,/area/space) +"c" = (/turf/simulated/wall,/area/ruin/unpowered) +"d" = (/obj/structure/alien/weeds,/obj/structure/alien/resin/membrane,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"e" = (/obj/structure/girder,/obj/structure/alien/weeds,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"f" = (/obj/structure/alien/weeds,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"g" = (/obj/structure/alien/weeds,/obj/structure/glasstable_frame,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"h" = (/obj/structure/alien/weeds/node,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"i" = (/obj/structure/alien/weeds,/obj/structure/stool/bed/nest,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"j" = (/obj/structure/alien/weeds,/obj/structure/stool/bed/nest,/obj/effect/decal/remains/human,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"k" = (/obj/structure/alien/resin/wall,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"l" = (/obj/structure/alien/resin/membrane,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"m" = (/obj/structure/alien/weeds,/obj/structure/table,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"n" = (/obj/structure/alien/weeds,/obj/effect/decal/remains/robot,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"o" = (/obj/structure/alien/weeds/node,/obj/structure/table,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"p" = (/obj/structure/girder,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"q" = (/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"r" = (/obj/structure/alien/weeds,/obj/structure/stool/bed/nest,/obj/effect/decal/remains/xeno,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaabbbaabbbbbbbaaaaaaaaaaaaaaa +aaaaaaaaaaabbbbbcccccdcccaaaaaaaaaaaaaaa +aaaaaaaaaabbbbbefcghcfijcbbbbbaaaaaaaaaa +aaaaaaaaabbbbkkffcffcfffccbbbbbaaaaaaaaa +aaaaaaaaabbbkffhfcffcfhffcclbbbaaaaaaaaa +aaaaaaaaaabkffiffcffcfffffmlbbbaaaaaaaaa +aaaaaaaaaabcfffffffffffffnopbbaaaaaaaaaa +aaaaaaaaaaaaecceccffcccecccpbaaaaaaaaaaa +aaaaaaaaaaaaacmfjffffffifcaaaaaaaaaaaaaa +aaaaaaaaaaabccmhfjffffhficaaaaaaaaaaaaaa +aaaaaaaaaabbdffffffffiffkqbaaaaaaaaaaaaa +aaaaaaaaaabbpcccccffccckqbbaaaaaaaaaaaaa +aaaaaaaaaabbbbbchfffficqpbaaaaaaaaaaaaaa +aaaaaaaaaabbbaacfffffgcbbbaaaaaaaaaaaaaa +aaaaaaaaaabbaaacelfrfdhbbaaaaaaaaaaaaaaa +aaaaaaaaaabaaaaabblddbbbbaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaabqbbbbbaaaaaaaaaaaaaaaa +aaaaaaaaabaaaaaaaabbbaaaaaaaaaaaaaaaaaaa +aaaaaaabbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaabaacbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aabbbcqqbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +abbqqqqqbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +bpcqqqqqbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +bpqqqqcbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +bpqqqqqbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +accccpbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaabbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict2.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict2.dmm new file mode 100644 index 00000000000..7979e6b5e9b --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict2.dmm @@ -0,0 +1,61 @@ +"a" = (/turf/space,/area/space) +"b" = (/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/space,/area/space) +"c" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/ruin/powered) +"d" = (/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/space,/area/space) +"e" = (/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/ruin/powered) +"f" = (/turf/simulated/wall,/area/ruin/powered) +"g" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating,/area/ruin/powered) +"h" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor/plasteel,/area/ruin/powered) +"i" = (/turf/simulated/floor/plasteel,/area/ruin/powered) +"j" = (/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor/plasteel,/area/ruin/powered) +"k" = (/obj/structure/window/reinforced,/turf/space,/area/space) +"l" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/ruin/powered) +"m" = (/obj/structure/stool/bed/chair{tag = "icon-chair (EAST)"; icon_state = "chair"; dir = 4},/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel,/area/ruin/powered) +"n" = (/obj/structure/table,/obj/item/candle{pixel_y = 5},/obj/item/trash/plate{pixel_x = 10},/obj/item/trash/plate{pixel_x = -10},/turf/simulated/floor/plasteel,/area/ruin/powered) +"o" = (/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel,/area/ruin/powered) +"p" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/space,/area/space) +"q" = (/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/turf/simulated/floor/plasteel,/area/ruin/powered) +"r" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel,/area/ruin/powered) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaabcdaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaabedaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaabedaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaabedaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaafgcgfaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaafhiiiifaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaafiiiiiijfaaaaaaaaaaaaaaa +aaaaaaaaaaaakkkkgiiiiiiigkkkkaaaaaaaaaaa +aaaaaaaaaaaaclllciimnoiiclllcaaaaaaaaaaa +aaaaaaaaaaaappppgiiiiiiigppppaaaaaaaaaaa +aaaaaaaaaaaaaaaafqiiiiiifaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaafiiiirfaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaafgcgfaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaabedaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaabedaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaabedaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaabcdaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict3.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict3.dmm new file mode 100644 index 00000000000..7838d369fda --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict3.dmm @@ -0,0 +1,48 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"c" = (/turf/simulated/wall,/area/ruin/unpowered) +"d" = (/obj/structure/lattice,/turf/space,/area/space) +"e" = (/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area/space) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaabbbbbbbaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaabbbcbbbaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaadbbbcccbbbdaaaaaaaaa +aaaaaaaaaaaaaaaaaaaadbbcbcbcbbdaaaaaaaaa +aaaaaaaaaaaaaaaaaaaadbbbbcbcbbddaaaaaaaa +aaaaaaaaaaaaaaaaaaadddbbbbbbbbdddaaaaaaa +aaaaaaaaaaaaaaaaaaadddddbbbddddbddaaaaaa +aaaaaaaaaaaaaaaaaadbddddddddddddddaaaaaa +aaaaaaaaaaaaaaaaadddddddddddddddddaaaaaa +aaaaaaaaaaaaaaaaddbbbbbddbdddbbbbdaaaaaa +aaaaaaaaaaaaaaaadbbccbbbdddbbbbbbdaaaaaa +aaaaaaaaaaaaaaaabbbcbbbbdddbbbbcbbaaaaaa +aaaaaaaaaaaaaaabbbbcbbbbddbbbbbcbbaaaaaa +aaaaaaaaaaaaaaabcccbbbddddbbbbcbbbaaaaaa +aaaaaaaaaaaaaadbbbbcbbddddbbbccccbaaaaaa +aaaaaaaaaaaaaadbbbbbbddbddbbbbcbbaaaaaaa +aaaaaaaaaaaaadddbbbbbdddddbbbbcbbaaaaaaa +aaaaaaaaaaaaaddddddddddaaddbbbbbaaaaaaaa +aaaaaaaaaaaaadddaaaaaaaaaaddabbaaaaaaaaa +aaaaaaaaaaaaddaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aacbbdddaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aacbbbdddddaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aacbbbddddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aacbbbbbddeaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aacbbbbbbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaacbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaacccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict4.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict4.dmm new file mode 100644 index 00000000000..4c278585ac7 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict4.dmm @@ -0,0 +1,63 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/simulated/mineral,/area/ruin/unpowered) +"c" = (/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"d" = (/turf/simulated/mineral/random/high_chance,/area/ruin/unpowered) +"e" = (/turf/simulated/shuttle/wall,/area/ruin/unpowered) +"f" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"g" = (/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"h" = (/turf/simulated/floor/plasteel/airless{icon_plating = "plating"; icon_regular_floor = "shuttlefloor"; icon_state = "shuttlefloor"},/area/ruin/unpowered) +"i" = (/obj/structure/stool/bed/chair,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plasteel/airless{icon_plating = "plating"; icon_regular_floor = "shuttlefloor"; icon_state = "shuttlefloor"},/area/ruin/unpowered) +"j" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel/airless{icon_plating = "plating"; icon_regular_floor = "shuttlefloor"; icon_state = "shuttlefloor"},/area/ruin/unpowered) +"k" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/simulated/floor/plasteel/airless{icon_plating = "plating"; icon_regular_floor = "shuttlefloor"; icon_state = "shuttlefloor"},/area/ruin/unpowered) +"l" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (WEST)"; icon_state = "propulsion"; dir = 8},/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"m" = (/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"n" = (/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"o" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"p" = (/obj/structure/table,/turf/simulated/floor/plasteel/airless{icon_plating = "plating"; icon_regular_floor = "shuttlefloor"; icon_state = "shuttlefloor"},/area/ruin/unpowered) +"q" = (/obj/item/weapon/shard,/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plasteel/airless{icon_plating = "plating"; icon_regular_floor = "shuttlefloor"; icon_state = "shuttlefloor"},/area/ruin/unpowered) +"r" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plasteel/airless{icon_plating = "plating"; icon_regular_floor = "shuttlefloor"; icon_state = "shuttlefloor"},/area/ruin/unpowered) +"s" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"t" = (/obj/structure/girder,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaabbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaabbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaacccbbbbaaaaaaaaaaaaaaabaaaaaaaaaaaa +aaaaacccbbbbaaaaaaaaaaaaaabbbaaaaaaaaaaa +aaaaaaccbbaaaaaaaaaaaaaaaabbbaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaabbdddddbbaaabbbbaaaaaaaaaaa +aaaaaaaaaaabbbbddddbbbbbbbbbbbaaaaaaaaaa +aaaaaaaaaaacbbbbbdbbbbbbbbbbbbbaaaaaaaaa +aaaaaaaaccccbbbbbbbbbccbbdddbbbaaaaaaaaa +aaaaaaaacccccbddbbccccccccccbccaaaaaaaaa +aaaaaaaaaccccbddbbeeeefeeeeecccaaaaaaaaa +aaaaaaaaacccccbbbgggghhijkelcccaaaaaaaaa +aaaaaaaaacccccbbbgmnhhhhhhelcccaaaaaaaaa +aaaaaaaaaccccbbbbopqhhhhhgelcccaaaaaaaaa +aaaaaaaaaccccbbdbbghhhhrsgelcaaaaaaaaaaa +aaaaaaaaaabccbbbbbeeeefetgeecaaaaaaaaaaa +aaaaaabaaabbbbbbbccccccccccccaaaaaaaaaaa +aaaaaaaaaabbbbbbbbbbcccccccccaaaaaaaaaaa +aaabaaaaaaaabbbbbbbbbccccaaaaaaaaaaaaaaa +aaaaaaaaaaaaabdbbdddbccccaaaaaaaaaaaaaaa +aaaaabbaaaaaaaaabdddbbbaaaaaaaaaaaaabaaa +aaaabbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaabbaaaaaaaaaaaaaaaabbbaaaaaaaaaccbbaa +aaaaaaaaaaaaaaaaaaaaadbbbbaaaaaaacccdbaa +aaaaaaaaaaaaaaaaaaadbbbbccaaaaaaacbdbaaa +aaaaaaaaaaaaaaaaaadbbbbcaaaaaaaaacbbbaaa +aaaaaaaaaaaaaaaaaddbbcccaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaababbbbbcccaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaabbbbbccccaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaabbbbdcccaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabbcccccaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaabccaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm new file mode 100644 index 00000000000..b37590b3578 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm @@ -0,0 +1,61 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/simulated/mineral,/area/ruin/unpowered) +"c" = (/turf/simulated/mineral,/area/space) +"d" = (/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"e" = (/turf/simulated/wall,/area/ruin/unpowered) +"f" = (/turf/simulated/wall/rust,/area/ruin/unpowered) +"g" = (/turf/simulated/floor/plating,/area/ruin/unpowered) +"h" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/ruin/unpowered) +"i" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/simulated/floor/plating,/area/ruin/unpowered) +"j" = (/obj/structure/barricade/wooden,/obj/structure/door_assembly,/turf/simulated/floor/plating,/area/ruin/unpowered) +"k" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/plating,/area/ruin/unpowered) +"l" = (/obj/effect/decal/remains/human,/turf/simulated/floor/plating,/area/ruin/unpowered) +"m" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/plating,/area/ruin/unpowered) +"n" = (/obj/structure/table,/turf/simulated/floor/plating,/area/ruin/unpowered) +"o" = (/obj/structure/barricade/wooden,/turf/simulated/floor/plating,/area/ruin/unpowered) +"p" = (/obj/structure/barricade/wooden,/obj/machinery/door/airlock/external,/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered) +"q" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/ruin/unpowered) +"r" = (/turf/simulated/floor/plating/airless/asteroid,/area/space) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbabbaaaa +aaaaaaaaaaaaaaaaaaaaaaaaacaaaabbbbaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbaaaaaa +aaaaaaaaaaabbbbbaaaaaaaaaaaaaaaaaaaabaaa +aaaaaaaabbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaabbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaa +aaaaaadbbbbbbbbbbbbbbbaaaaaaaaaaaabaaaaa +aaaaaadbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaa +aaaaaddbbbbbbbbbeefbbeebbbbbbbaaaaaaaaaa +aaaaaddbbbbbbbbgggeggghfibbbbbbbaaaaaaaa +aaaaaddddbbbbbfiggjggghfhebbbbbbaaaaaaaa +aaaaaddddbbbbbfigkfigggjgfbbbbbbbbaaaaaa +aaaaaaaddbbbbbelgmfhggnffebbbbbbbbaaaaaa +aaaaaaadddbbbbfghieiggggibbbbbbbbbbbaaaa +aaaaaaaaddbbbbeffeeeejeeebbbbbbbbbbbaaaa +aaaaaaaaddbbbbegggdggggdebbbbbbbbbbbaaaa +aaaaaaaaddddbbegggigdgdobbbbbbbbbbbbaaaa +aaabaaaaadddddbbebeffeepebbbbbbbbbbbaaaa +aaaaaaaaaaadddbbbbbbbbeoebbbbbbbbbbbbaaa +aaaaaaaaaaadddddddbbbbeqebbbbbbbbbbbbaaa +aaaaaaaaaaaaadddddbbbbbdbbbbbbbbbbbbbaaa +aaaaabaaaaaaadddddddddddddbbbbbbbbbbbaaa +aaaaaaaaaaaaaaaaadddddddddbccbbbbbbbbaaa +aaaaaaabbaaaaaaaaaddddddddbccbbbbbbbbaaa +aaaaaaabbbbaaaaaaarrrrrrrrrccddbbbbbbaaa +aaaaaaabbbbaaaaaaarrdddddddddddddbbbbbaa +aaaaaaaaabbaaaaaaaaddddddddddddddbbbbbaa +aaaaaaaaabbaaaaaaaaddddddddddddddbbbbbaa +aaaaaaaaaaaaaaaaaaaddddddddddddddbbbbbaa +aaaaaaaaaaaaaaaaabbdddddddddddddddbbbbaa +abbaaaaaaaaaaaaaabbdddddddddddddddbbbbaa +abbaaaaaaaaaaaaaabbbbdddddddddddbbbbbbaa +abbbaaaaaaaaaaaaaabbbdddddddddddbbbbbaaa +aaaaaaaaaaaaaaaaaabbbbbbbdddddbbbbbbbaaa +aaaaaaaaaaaaaaaaaaaabbbbbbddddbbbbbbbaaa +aaaaabaaaaaaaaaaaaaabbbbbbbbbbbbbbaaaaaa +aaabaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/emptyshell.dmm b/_maps/map_files/RandomRuins/SpaceRuins/emptyshell.dmm new file mode 100644 index 00000000000..57b0a43add2 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/emptyshell.dmm @@ -0,0 +1,28 @@ +"a" = (/turf/space,/area/space) +"b" = (/obj/structure/lattice,/turf/space,/area/space) +"c" = (/turf/simulated/wall/r_wall,/area/ruin/unpowered) +"d" = (/turf/simulated/floor/plating,/area/ruin/unpowered) +"e" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/simulated/floor/plating,/area/ruin/unpowered) +"f" = (/obj/item/ammo_box/magazine/sniper_rounds,/turf/simulated/floor/plating,/area/ruin/unpowered) +"g" = (/obj/item/stack/rods,/turf/simulated/floor/plating,/area/ruin/unpowered) +"h" = (/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"i" = (/obj/machinery/door/airlock,/turf/simulated/floor/plating,/area/ruin/unpowered) +"j" = (/obj/item/stack/cable_coil,/turf/simulated/floor/plating,/area/ruin/unpowered) + +(1,1,1) = {" +aaaaaaaaabaaaaaaa +aaabbaaababaabaaa +aaabccccccccccaba +aabccccccccccccaa +abacccdeddfdcccba +abaccddddddedccbb +bbbdcdgddddddccbb +aadhiddgdedddccaa +aadhiddedddddccbb +abbdcddddddgdccbb +aaaccjdeddeddccbb +aaacccdddddecccaa +aaaccccccccccccba +aabaccccccccccaaa +aaaabbaaaaaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/gasthelizards.dmm b/_maps/map_files/RandomRuins/SpaceRuins/gasthelizards.dmm new file mode 100644 index 00000000000..b9256b7c62f --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/gasthelizards.dmm @@ -0,0 +1,61 @@ +"a" = (/turf/space,/area/space) +"b" = (/obj/structure/lattice,/turf/space,/area/space) +"c" = (/turf/simulated/wall,/area/ruin/unpowered) +"d" = (/obj/machinery/light{dir = 1},/obj/structure/stool/bed,/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 8},/area/ruin/unpowered) +"e" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 4},/area/ruin/unpowered) +"f" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 1},/obj/structure/stool/bed,/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 8},/area/ruin/unpowered) +"g" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 1},/obj/structure/stool/bed,/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 8},/area/ruin/unpowered) +"h" = (/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 4},/area/ruin/unpowered) +"i" = (/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 8},/area/ruin/unpowered) +"j" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/machinery/atmospherics/unary/outlet_injector,/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 4},/area/ruin/unpowered) +"k" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 8},/area/ruin/unpowered) +"l" = (/obj/machinery/atmospherics/unary/outlet_injector,/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 4},/area/ruin/unpowered) +"m" = (/obj/structure/closet/crate/freezer,/obj/item/stack/sheet/animalhide/lizard,/obj/item/weapon/reagent_containers/food/snacks/lizardmeat,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"n" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/lizardmeat,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"o" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/lizardmeat,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"p" = (/obj/machinery/power/apc/worn_out{dir = 8; pixel_x = -24; pixel_y = 0; cell_type = 2500; operating = 1},/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/ruin/unpowered) +"q" = (/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/ruin/unpowered) +"r" = (/obj/machinery/door/window/brigdoor/northleft,/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/ruin/unpowered) +"s" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"t" = (/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"u" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"v" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"w" = (/obj/structure/kitchenspike,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"x" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/knife/butcher,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/reagent_containers/spray/pepper,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"y" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"z" = (/obj/machinery/gibber,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"A" = (/obj/structure/table/reinforced,/obj/item/clothing/suit/straight_jacket,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"B" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"C" = (/obj/machinery/door/airlock/security,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"D" = (/obj/item/weapon/reagent_containers/glass/bottle/morphine{pixel_x = -4; pixel_y = 1},/obj/item/weapon/reagent_containers/glass/bottle/toxin{pixel_x = 6; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/morphine{pixel_x = 5; pixel_y = 1},/obj/item/weapon/reagent_containers/glass/bottle/facid{name = "fluorosulfuric acid bottle"; pixel_x = -3; pixel_y = 6},/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"E" = (/obj/structure/rack,/obj/item/weapon/melee/baton/cattleprod,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"F" = (/obj/structure/table,/obj/item/weapon/pen/red,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"G" = (/obj/structure/table,/obj/item/weapon/paper_bin,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"H" = (/obj/structure/table,/obj/item/weapon/storage/box/prisoner,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"I" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/machinery/light,/obj/structure/table,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"J" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/ruin/unpowered) +"K" = (/obj/structure/table/reinforced,/obj/item/weapon/surgicaldrill,/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/item/weapon/surgical_drapes,/obj/item/weapon/retractor,/obj/item/weapon/cautery,/obj/item/weapon/circular_saw,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"L" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"M" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/glass/bottle/mutagen,/obj/item/weapon/reagent_containers/glass/bottle/mutagen,/obj/item/weapon/razor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"N" = (/obj/machinery/suit_storage_unit/security,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"O" = (/obj/machinery/light,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"P" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"Q" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/ruin/unpowered) +"R" = (/turf/simulated/floor/plating,/area/ruin/unpowered) + +(1,1,1) = {" +aaaababababbaaaaaaa +aaababbbbababbbbaaa +aaabccccccccccbbbba +abbbcdefegefhccccca +abbbcijkjkjklcmnocb +abcccprqrqrqrcssscb +abctutttttttvcwsxca +aacytttttttttczsAca +bbcBtttttttttCssDcb +abcEtttFGHIJJcKLMcb +abcNOtPcccccccccccb +aacccQccbbbbbbaabba +aabbcRcbbaaaaaaabaa +aaabcQcbaaaaaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/intactemptyship.dmm b/_maps/map_files/RandomRuins/SpaceRuins/intactemptyship.dmm new file mode 100644 index 00000000000..a276d0aa296 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/intactemptyship.dmm @@ -0,0 +1,44 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/ruin/powered) +"c" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/ruin/powered) +"d" = (/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/ruin/powered) +"e" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/space,/area/ruin/powered) +"f" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/turf/simulated/floor/plating,/area/ruin/powered) +"g" = (/obj/structure/table/woodentable,/obj/item/clothing/under/shorts/black,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"h" = (/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"i" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"j" = (/obj/structure/closet,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"k" = (/obj/machinery/vending/assist,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"l" = (/obj/structure/table/woodentable,/obj/item/clothing/shoes/sandal,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"m" = (/obj/machinery/light{dir = 8},/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"n" = (/obj/structure/table/woodentable,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"o" = (/obj/structure/table/woodentable,/obj/machinery/computer/library/checkout,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"p" = (/obj/structure/window/full/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/ruin/powered) +"q" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating,/area/ruin/powered) +"r" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"s" = (/obj/machinery/door/poddoor{id_tag = "strange ship"; name = "Strange Ship Blast Door"},/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"t" = (/obj/machinery/door/airlock/external,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"u" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"v" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"w" = (/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"x" = (/obj/machinery/door_control{name = "Strange Ship Door Control"; pixel_x = 6; pixel_y = 0; id = "strange ship"},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/ruin/powered) +"y" = (/obj/machinery/light,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"z" = (/mob/living/simple_animal/bot/medbot,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"A" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "diagonalWall3"},/area/ruin/powered) +"B" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) +"C" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/ruin/powered) +"D" = (/obj/machinery/light,/obj/structure/stool/bed,/turf/simulated/shuttle/floor{tag = "icon-floor5"; icon_state = "floor5"},/area/ruin/powered) + +(1,1,1) = {" +aabcccccdaaaa +aefghijkcaaaa +aeflhhhhccccd +bccccmhhcmhjc +cnophhhhqhhrc +shhthhhhuhvwc +xhypzhhhqhhnc +Accccmhhcmhjc +aefBhhhhccccC +aefnnDhjcaaaa +aaAcccccCaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm new file mode 100644 index 00000000000..e36e1170233 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm @@ -0,0 +1,62 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"},/area/ruin/powered) +"c" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/space,/area/ruin/powered) +"d" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"},/area/ruin/powered) +"e" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"},/area/ruin/powered) +"f" = (/obj/structure/closet/crate/secure/loot,/turf/simulated/shuttle/floor,/area/ruin/powered) +"g" = (/obj/structure/table,/obj/machinery/door_control{id = "mecha cargo"},/turf/simulated/shuttle/floor,/area/ruin/powered) +"h" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/ruin/powered) +"i" = (/obj/machinery/computer/shuttle,/turf/simulated/shuttle/floor,/area/ruin/powered) +"j" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/shuttle/floor,/area/ruin/powered) +"k" = (/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor,/area/ruin/powered) +"l" = (/turf/simulated/shuttle/floor,/area/ruin/powered) +"m" = (/obj/structure/stool/bed/chair/office/dark{tag = "icon-officechair_dark (NORTH)"; icon_state = "officechair_dark"; dir = 1},/turf/simulated/shuttle/floor,/area/ruin/powered) +"n" = (/obj/machinery/computer/mecha,/turf/simulated/shuttle/floor,/area/ruin/powered) +"o" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"},/area/ruin/powered) +"p" = (/obj/machinery/door/airlock/hatch,/turf/simulated/shuttle/floor{tag = "icon-floor3"; icon_state = "floor3"},/area/ruin/powered) +"q" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/ruin/powered) +"r" = (/turf/simulated/shuttle/floor{tag = "icon-floor3"; icon_state = "floor3"},/area/ruin/powered) +"s" = (/obj/effect/decal/mecha_wreckage/phazon,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/ruin/powered) +"t" = (/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/ruin/powered) +"u" = (/obj/effect/decal/mecha_wreckage/ripley/firefighter,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/ruin/powered) +"v" = (/obj/effect/decal/mecha_wreckage/ripley,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/ruin/powered) +"w" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/ruin/powered) +"x" = (/obj/effect/decal/cleanable/blood/gibs/robot/up,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/ruin/powered) +"y" = (/obj/machinery/door/poddoor{id_tag = "mecha cargo"; name = "Cargo Bay Door"; tag = ""},/turf/space,/area/ruin/powered) +"z" = (/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/ruin/powered) +"A" = (/obj/effect/decal/mecha_wreckage/durand,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/ruin/powered) +"B" = (/obj/item/stack/tile/plasteel{pixel_x = 7; pixel_y = 8},/turf/simulated/floor/plating/airless,/area/ruin/powered) +"C" = (/turf/simulated/floor/plating/airless,/area/ruin/powered) +"D" = (/obj/structure/lattice,/turf/space,/area/space) +"E" = (/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/ruin/powered) +"F" = (/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/floor/plating/airless,/area/ruin/powered) +"G" = (/obj/item/stack/tile/plasteel{pixel_x = 7; pixel_y = 8},/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/ruin/powered) +"H" = (/turf/unsimulated/floor/plating/airless{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/ruin/powered) +"I" = (/turf/unsimulated/floor/plating/airless{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/ruin/powered) +"J" = (/obj/effect/decal/mecha_wreckage/odysseus,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/ruin/powered) +"K" = (/obj/item/stack/sheet/metal,/turf/space,/area/space) +"L" = (/obj/effect/decal/mecha_wreckage/gygax,/turf/simulated/shuttle/floor{tag = "icon-floor3"; icon_state = "floor3"},/area/ruin/powered) +"M" = (/turf/unsimulated/floor/plating/airless,/area/space) +"N" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"},/area/ruin/powered) +"O" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"},/area/ruin/powered) +"P" = (/obj/item/stack/rods,/turf/space,/area/space) +"Q" = (/turf/simulated/shuttle/wall{tag = "icon-swall15"; icon_state = "swall15"},/area/ruin/powered) +"R" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/ruin/powered) + +(1,1,1) = {" +abcccccda +aeffghiea +aejklmnea +bopqqqqod +errrrrrre +esttutvte +ewtxtvtty +ezABtttty +BCtAtCtty +DECtFGtwy +HCIBJJtty +KDDCrCLre +aMDKECqNO +aPaaDabQd +aaaaaaRRR +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm new file mode 100644 index 00000000000..30445ea3b05 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm @@ -0,0 +1,196 @@ +"aa" = (/turf/space,/area/space) +"ab" = (/obj/structure/lattice,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/space,/area/space) +"ac" = (/obj/structure/lattice,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/space,/area/space) +"ad" = (/obj/structure/lattice,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/space,/area/space) +"ae" = (/obj/structure/lattice,/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/space,/area/space) +"af" = (/obj/structure/lattice,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/space,/area/space) +"ag" = (/turf/simulated/wall,/area/ruin/onehalf/dorms_med) +"ah" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating,/area/ruin/onehalf/dorms_med) +"ai" = (/obj/structure/lattice,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/space,/area/space) +"aj" = (/turf/unsimulated/floor/plating/airless,/area/ruin/onehalf/hallway) +"ak" = (/turf/simulated/wall,/area/ruin/onehalf/hallway) +"al" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-white"; icon_state = "white"},/area/ruin/onehalf/dorms_med) +"am" = (/turf/simulated/floor/plasteel{tag = "icon-white"; icon_state = "white"},/area/ruin/onehalf/dorms_med) +"an" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 5},/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor/plasteel{tag = "icon-white"; icon_state = "white"},/area/ruin/onehalf/dorms_med) +"ao" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/plasteel,/area/ruin/onehalf/dorms_med) +"ap" = (/turf/simulated/floor/plasteel,/area/ruin/onehalf/dorms_med) +"aq" = (/obj/machinery/door/airlock/external,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/ruin/onehalf/drone_bay) +"ar" = (/turf/simulated/wall,/area/ruin/onehalf/drone_bay) +"as" = (/obj/machinery/door/poddoor{id_tag = "bayext1"; name = "mining drone bay blast door"},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/ruin/onehalf/drone_bay) +"at" = (/obj/machinery/door/poddoor{id_tag = "bayext2"; name = "mining drone bay blast door"},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/ruin/onehalf/drone_bay) +"au" = (/obj/machinery/door/poddoor/preopen{id_tag = "bayext3"; name = "mining drone bay blast door"},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/ruin/onehalf/drone_bay) +"av" = (/obj/machinery/door/poddoor{id_tag = "bayext4"; name = "mining drone bay blast door"},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/ruin/onehalf/drone_bay) +"aw" = (/obj/structure/lattice,/turf/space,/area/space) +"ax" = (/obj/structure/lattice,/turf/space,/area/ruin/onehalf/hallway) +"ay" = (/obj/structure/glasstable_frame,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/ruin/onehalf/hallway) +"az" = (/obj/machinery/washing_machine,/turf/simulated/floor/plasteel/airless,/area/ruin/onehalf/hallway) +"aA" = (/obj/structure/stool/bed/roller,/turf/simulated/floor/plasteel{tag = "icon-white"; icon_state = "white"},/area/ruin/onehalf/dorms_med) +"aB" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/table,/obj/item/weapon/storage/firstaid/brute{pixel_x = 3; pixel_y = 6},/obj/item/weapon/storage/firstaid,/turf/simulated/floor/plasteel{tag = "icon-white"; icon_state = "white"},/area/ruin/onehalf/dorms_med) +"aC" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel,/area/ruin/onehalf/dorms_med) +"aD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/ruin/onehalf/drone_bay) +"aE" = (/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plating/airless,/area/ruin/onehalf/drone_bay) +"aF" = (/obj/structure/disposalpipe/trunk,/obj/item/weapon/ore/diamond,/turf/simulated/floor/plating/airless,/area/ruin/onehalf/drone_bay) +"aG" = (/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/ruin/onehalf/drone_bay) +"aH" = (/obj/item/stack/rods,/turf/space,/area/ruin/onehalf/hallway) +"aI" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/ruin/onehalf/hallway) +"aJ" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{tag = "icon-white"; icon_state = "white"},/area/ruin/onehalf/dorms_med) +"aK" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-white"; icon_state = "white"},/area/ruin/onehalf/dorms_med) +"aL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/power/apc{keep_preset_name = 1; name = "Hallway APC"; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel/airless,/area/ruin/onehalf/hallway) +"aM" = (/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{id_tag = "bayint1"; name = "mining drone bay blast door"},/turf/simulated/floor/plating,/area/ruin/onehalf/drone_bay) +"aN" = (/obj/machinery/door_control{id = "bayint1"; name = "Pod Bay 1 Internal"; pixel_x = -5; pixel_y = -6},/obj/machinery/door_control{id = "bayext1"; name = "Pod Bay 1 External"; pixel_x = -5; pixel_y = 6},/obj/machinery/door_control{id = "bayint2"; name = "Pod Bay 2 Internal"; pixel_x = 7; pixel_y = -6},/obj/machinery/door_control{id = "bayext2"; name = "Pod Bay 2 External"; pixel_x = 7; pixel_y = 6},/turf/simulated/wall,/area/ruin/onehalf/drone_bay) +"aO" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{id_tag = "bayint2"; name = "mining drone bay blast door"},/turf/simulated/floor/plating,/area/ruin/onehalf/drone_bay) +"aP" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{id_tag = "bayint3"; name = "mining drone bay blast door"},/turf/simulated/floor/plating,/area/ruin/onehalf/drone_bay) +"aQ" = (/obj/machinery/door_control{id = "bayint3"; name = "Pod Bay 3 Internal"; pixel_x = -5; pixel_y = -6},/obj/machinery/door_control{id = "bayext3"; name = "Pod Bay 3 External"; pixel_x = -5; pixel_y = 6},/obj/machinery/door_control{id = "bayint4"; name = "Pod Bay 4 Internal"; pixel_x = 7; pixel_y = -6},/obj/machinery/door_control{id = "bayext4"; name = "Pod Bay 4 External"; pixel_x = 7; pixel_y = 6},/turf/simulated/wall,/area/ruin/onehalf/drone_bay) +"aR" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{id_tag = "bayint4"; name = "mining drone bay blast door"},/turf/simulated/floor/plating,/area/ruin/onehalf/drone_bay) +"aS" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet{dir = 1},/turf/simulated/floor/plating/airless,/area/ruin/onehalf/drone_bay) +"aT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/ruin/onehalf/hallway) +"aU" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged1"},/area/ruin/onehalf/hallway) +"aV" = (/obj/machinery/door/airlock/glass_medical{name = "airlock"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-white"; icon_state = "white"},/area/ruin/onehalf/dorms_med) +"aW" = (/obj/machinery/door/airlock,/turf/simulated/floor/plasteel,/area/ruin/onehalf/dorms_med) +"aX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/ruin/onehalf/drone_bay) +"aY" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/closet/crate/medical,/obj/item/clothing/accessory/stethoscope,/obj/item/device/healthanalyzer,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/power/apc{dir = 4; keep_preset_name = 1; name = "Crew Quarters APC"; pixel_x = 27},/turf/simulated/floor/plasteel{tag = "icon-white"; icon_state = "white"},/area/ruin/onehalf/dorms_med) +"aZ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/ruin/onehalf/drone_bay) +"ba" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/ruin/onehalf/drone_bay) +"bb" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/ruin/onehalf/drone_bay) +"bc" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/ruin/onehalf/drone_bay) +"bd" = (/obj/item/stack/sheet/metal,/turf/unsimulated/floor/plating/airless{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/ruin/onehalf/hallway) +"be" = (/obj/structure/disposalpipe/broken{tag = "icon-pipe-b (EAST)"; icon_state = "pipe-b"; dir = 4},/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/unsimulated/floor/plating/airless,/area/ruin/onehalf/hallway) +"bf" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/ruin/onehalf/hallway) +"bg" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/ruin/onehalf/hallway) +"bh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/ruin/onehalf/hallway) +"bi" = (/obj/structure/disposalpipe/junction{tag = "icon-pipe-j1 (EAST)"; icon_state = "pipe-j1"; dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged1"},/area/ruin/onehalf/hallway) +"bj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel/airless,/area/ruin/onehalf/hallway) +"bk" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j1"; dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/ruin/onehalf/hallway) +"bl" = (/obj/machinery/door/airlock/glass{name = "glass airlock"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bn" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bo" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bp" = (/obj/machinery/door/airlock/maintenance_hatch{name = "maintenance hatch"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bq" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"br" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-y"; dir = 1},/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bs" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/plating,/area/ruin/onehalf/drone_bay) +"bt" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating,/area/ruin/onehalf/drone_bay) +"bu" = (/obj/structure/disposalpipe/broken{tag = "icon-pipe-b (EAST)"; icon_state = "pipe-b"; dir = 4},/turf/unsimulated/floor/plating/airless{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/ruin/onehalf/hallway) +"bv" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/ruin/onehalf/hallway) +"bw" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel/airless,/area/ruin/onehalf/hallway) +"bx" = (/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel/airless{icon_state = "damaged1"},/area/ruin/onehalf/hallway) +"by" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; keep_preset_name = 1; name = "Mining Drone Bay APC"; pixel_y = 26},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/ruin/onehalf/drone_bay) +"bz" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/ruin/onehalf/hallway) +"bA" = (/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel/airless,/area/ruin/onehalf/hallway) +"bB" = (/obj/machinery/door/airlock/glass{name = "glass airlock"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bD" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j1"},/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bF" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bG" = (/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bH" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bI" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel,/area/ruin/onehalf/drone_bay) +"bJ" = (/obj/structure/girder,/turf/unsimulated/floor/plating/airless,/area/ruin/onehalf/hallway) +"bK" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/ruin/onehalf/hallway) +"bL" = (/obj/machinery/vending/coffee{name = "\improper Solar's Best Hot Drinks"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged1"},/area/ruin/onehalf/hallway) +"bM" = (/obj/machinery/vending/snack,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/ruin/onehalf/hallway) +"bN" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/plasteel/airless,/area/ruin/onehalf/hallway) +"bO" = (/obj/structure/girder/reinforced,/obj/item/stack/sheet/plasteel,/turf/simulated/floor/plating/airless,/area/ruin/onehalf/hallway) +"bP" = (/obj/structure/girder/reinforced,/turf/simulated/floor/plating/airless,/area/ruin/onehalf/hallway) +"bQ" = (/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 1; keep_preset_name = 1; name = "Bridge APC"; pixel_y = 26},/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"bR" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/ruin/onehalf/hallway) +"bS" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/airless,/area/ruin/onehalf/hallway) +"bT" = (/turf/simulated/wall/r_wall,/area/ruin/onehalf/bridge) +"bU" = (/obj/item/stack/sheet/metal,/turf/space,/area/space) +"bV" = (/turf/unsimulated/floor/plating/airless{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/ruin/onehalf/hallway) +"bW" = (/obj/structure/girder/reinforced,/turf/unsimulated/floor/plating/airless,/area/ruin/onehalf/hallway) +"bX" = (/turf/simulated/wall/r_wall,/area/ruin/onehalf/hallway) +"bY" = (/turf/simulated/floor/plating/airless,/area/ruin/onehalf/hallway) +"bZ" = (/turf/simulated/floor/plating/airless{icon_state = "platingdmg3"},/area/ruin/onehalf/hallway) +"ca" = (/obj/structure/disposalpipe/segment,/obj/item/stack/rods,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/ruin/onehalf/hallway) +"cb" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/ruin/onehalf/hallway) +"cc" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/machinery/door/poddoor/preopen{id_tag = "onehalf bridge"; name = "bridge blast door"},/turf/simulated/floor/plating,/area/ruin/onehalf/bridge) +"cd" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"ce" = (/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cf" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cg" = (/obj/machinery/light{dir = 1; on = 1},/obj/structure/computerframe,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"ch" = (/obj/structure/computerframe,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cj" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/table,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c500{pixel_y = 9},/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"ck" = (/obj/structure/girder/reinforced,/turf/unsimulated/floor/plating/airless,/area/space) +"cl" = (/obj/structure/disposalpipe/junction{tag = "icon-pipe-j1 (NORTH)"; icon_state = "pipe-j1"; dir = 1},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{broken = 1; icon_state = "platingdmg1"},/area/ruin/onehalf/hallway) +"cm" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment{dir = 4},/obj/item/stack/rods,/turf/space,/area/ruin/onehalf/hallway) +"cn" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment{dir = 4},/obj/item/weapon/shard{tag = "icon-small"; icon_state = "small"},/turf/space,/area/space) +"co" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id_tag = "onehalf bridge"; name = "bridge blast door"},/turf/simulated/floor/plating,/area/ruin/onehalf/bridge) +"cp" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/table,/obj/item/weapon/paper_bin,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cq" = (/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cr" = (/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cs" = (/obj/structure/stool/bed/chair{tag = "icon-chair (NORTH)"; icon_state = "chair"; dir = 1},/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"ct" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/table,/obj/item/weapon/lighter/zippo,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cu" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/door/poddoor/preopen{id_tag = "onehalf bridge"; name = "bridge blast door"},/turf/simulated/floor/plating,/area/ruin/onehalf/bridge) +"cv" = (/obj/item/stack/rods,/turf/space,/area/space) +"cw" = (/turf/unsimulated/floor/plating/airless,/area/space) +"cx" = (/obj/structure/lattice,/obj/item/stack/sheet/plasteel,/turf/space,/area/space) +"cy" = (/obj/structure/lattice,/obj/item/weapon/shard{tag = "icon-medium"; icon_state = "medium"},/turf/space,/area/ruin/onehalf/hallway) +"cz" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/airless{icon_state = "damaged1"},/area/ruin/onehalf/hallway) +"cA" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cB" = (/obj/item/stack/tile/plasteel{pixel_x = 7; pixel_y = 8},/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cC" = (/obj/structure/cable,/obj/machinery/power/solar_control,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cD" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor/preopen{id_tag = "onehalf bridge"; name = "bridge blast door"},/turf/simulated/floor/plating,/area/ruin/onehalf/bridge) +"cE" = (/obj/item/stack/tile/wood,/turf/space,/area/space) +"cF" = (/turf/space,/area/ruin/onehalf/hallway) +"cG" = (/obj/structure/lattice,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/space,/area/ruin/onehalf/hallway) +"cH" = (/obj/structure/lattice,/obj/structure/disposalpipe/broken{tag = "icon-pipe-b (NORTH)"; icon_state = "pipe-b"; dir = 1},/obj/structure/disposalpipe/broken{tag = "icon-pipe-b (WEST)"; icon_state = "pipe-b"; dir = 8},/turf/space,/area/ruin/onehalf/hallway) +"cI" = (/obj/machinery/door/airlock/glass_command{name = "Bridge"},/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cJ" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cK" = (/obj/machinery/door/poddoor/preopen{id_tag = "onehalf bridge"; name = "bridge blast door"},/obj/machinery/door/airlock/glass_command{name = "Bridge"},/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cL" = (/obj/item/weapon/crowbar,/obj/item/device/multitool,/turf/simulated/floor/plating,/area/ruin/onehalf/bridge) +"cM" = (/obj/structure/safe/floor,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas/syndicate,/obj/item/clothing/suit/space/rig/syndi,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/obj/item/weapon/folder/syndicate/blue,/turf/simulated/floor/plating,/area/ruin/onehalf/bridge) +"cN" = (/obj/structure/stool/bed/chair/comfy/black{tag = "icon-comfychair (EAST)"; icon_state = "comfychair"; dir = 4},/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cO" = (/obj/structure/lattice,/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/space,/area/ruin/onehalf/hallway) +"cP" = (/turf/simulated/floor/plating/airless{broken = 1; icon_state = "platingdmg2"},/area/ruin/onehalf/hallway) +"cQ" = (/obj/machinery/light{dir = 8},/obj/machinery/vending/sovietsoda,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cR" = (/obj/item/stack/sheet/plasteel,/turf/space,/area/space) +"cS" = (/obj/structure/lattice,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/space,/area/ruin/onehalf/hallway) +"cT" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/ruin/onehalf/hallway) +"cU" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating,/area/ruin/onehalf/hallway) +"cV" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cW" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cX" = (/obj/structure/table,/obj/machinery/door_control{id = "onehalf bridge"; name = "Bridge Lockdown"; pixel_x = 0; pixel_y = 5},/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"cY" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id_tag = "onehalf bridge"; name = "bridge blast door"},/turf/simulated/floor/plating,/area/ruin/onehalf/bridge) +"cZ" = (/obj/structure/lattice,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/space,/area/space) +"da" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/ruin/onehalf/hallway) +"db" = (/obj/structure/table,/obj/item/device/flashlight,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"dc" = (/obj/structure/table,/obj/item/weapon/ore/bluespace_crystal,/obj/item/weapon/coin/plasma,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"dd" = (/obj/structure/closet/firecloset/full,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"de" = (/obj/machinery/light,/obj/structure/table,/obj/item/weapon/storage/firstaid,/turf/simulated/floor/plasteel,/area/ruin/onehalf/bridge) +"df" = (/obj/structure/lattice,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/space,/area/space) +"dg" = (/obj/structure/girder/reinforced,/obj/item/stack/sheet/plasteel,/turf/simulated/floor/plating/airless,/area/space) +"dh" = (/turf/simulated/floor/plating/airless{broken = 1; icon_state = "platingdmg2"},/area/space) +"di" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless{broken = 1; icon_state = "platingdmg1"},/area/ruin/onehalf/hallway) +"dj" = (/obj/structure/grille,/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/ruin/onehalf/hallway) +"dk" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor/preopen{id_tag = "onehalf bridge"; name = "bridge blast door"},/turf/simulated/floor/plating,/area/ruin/onehalf/bridge) +"dl" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/door/poddoor/preopen{id_tag = "onehalf bridge"; name = "bridge blast door"},/turf/simulated/floor/plating,/area/ruin/onehalf/bridge) +"dm" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/door/poddoor/preopen{id_tag = "onehalf bridge"; name = "bridge blast door"},/turf/simulated/floor/plating,/area/ruin/onehalf/bridge) +"dn" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id_tag = "onehalf bridge"; name = "bridge blast door"},/turf/simulated/floor/plating,/area/ruin/onehalf/bridge) +"do" = (/obj/structure/lattice,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/item/weapon/shard{tag = "icon-medium"; icon_state = "medium"},/turf/space,/area/space) +"dp" = (/obj/structure/lattice,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/item/stack/rods,/turf/space,/area/space) +"dq" = (/obj/structure/lattice,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/space,/area/space) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaabacacacacacacacacacadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaeacafagagagagagagahagagaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaajakakakagalamanagaoapaoagaqarasaratarauaravaraaaaaaaaaaaa +aaaaawaxaxayazagaAamaBagaCapaoagaDaraEaraFaraEaraEarawaraGaraaaa +aaaaaaaHajaxaIagaJaKaYagaoapaoagaqaraMaNaOaraPaQaRaraaaraSaraaaa +aaaaawajaxaTaUagagaVagagagaWagagaXbyaZbaaZbaaZbabbarararbcararaa +aaaaawbdbebfbgbhbhbibgbgbjbhbkblbmbnbobnbobnbobnbobnbpbqbrbsbtaa +aaaaaabubvbvbwbwbvbxbwbwaLbzbAbBbCbnbDbEbDbnbDbEbFbGarbHbGbIbtaa +aaaaaabJajakbKbLbMbNbObPbXbRbSbTbTbTbTbTbTbTbTbTbTbTararbtararaa +aaaaaaaabUbVbJakbWbXbYawbXbZcacbaacccdcecfcgchbQcjbTawaaaaaaaaaa +aaaaaaaaaaaaaaaackaaaabUaxaxclcmcncocpcqcrcscrcrctcuadaaaaaaaaaa +aaaaaaaaaaaaaacvcwcxaaaabYcyczbTbTbTcAcrcBcrcrcrcCcDaiaaaaaaaaaa +aaaaaaaaaaaaaaaaaaawcEaacFcGcHcIcJcKcrcBcLcMcrcNchcDaiaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaacvawbYcOcPbTbTbTcQcrcrcrcrcrchcDaiaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaacRcEaxcScTcUawcccVcqcrcWcrcrcXcYcZaaaaaaaaaa +aaaaaaaaaaaaaaaaaacvaaaabXdaaIcUaaccdbdcddchchcrdebTdfaaaaaaaaaa +aaaaaaaaaaaaaaaaaadgawdhbPdidjbTbTbTbTdkdldmdldnbTbTaiaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaacxdodpacacacacacdqacacacdqacacafaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + diff --git a/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm b/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm new file mode 100644 index 00000000000..1bab41147dc --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm @@ -0,0 +1,113 @@ +"aa" = (/turf/space,/area/space) +"ab" = (/turf/simulated/mineral,/area/space) +"ac" = (/turf/simulated/floor/plating/airless/asteroid,/area/space) +"ad" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating,/area/ruin/unpowered) +"ae" = (/turf/simulated/wall,/area/ruin/unpowered) +"af" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating,/area/ruin/powered) +"ag" = (/turf/simulated/floor/plating/airless/asteroid,/area/ruin/powered) +"ah" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating/airless/asteroid,/area/ruin/powered) +"ai" = (/turf/simulated/mineral,/area/ruin/powered) +"aj" = (/turf/simulated/floor/plating/airless/asteroid,/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/ruin/powered) +"ak" = (/obj/structure/grille,/obj/structure/window/full/shuttle,/turf/simulated/floor/plating,/area/ruin/powered) +"al" = (/turf/simulated/floor/plating/airless/asteroid,/turf/simulated/shuttle/wall{dir = 2; icon_state = "swall_f10"; layer = 2},/area/ruin/powered) +"am" = (/turf/simulated/wall,/area/ruin/powered{name = "Space Bar"}) +"an" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/ruin/powered) +"ao" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/ruin/powered) +"ap" = (/obj/structure/table,/obj/structure/reagent_dispensers/beerkeg,/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"aq" = (/obj/structure/table,/obj/machinery/vending/boozeomat,/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"ar" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"as" = (/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"at" = (/obj/structure/table,/obj/item/toy/figure/bartender,/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"au" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"av" = (/obj/effect/decal/remains/human,/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"aw" = (/obj/structure/reagent_dispensers/beerkeg,/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"ax" = (/turf/simulated/shuttle/floor,/area/ruin/powered) +"ay" = (/obj/machinery/door/airlock{name = "Bar Storage"; req_access_txt = "25"},/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"az" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"aA" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/ruin/powered) +"aB" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/turf/simulated/shuttle/floor,/area/ruin/powered) +"aC" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/ruin/powered) +"aD" = (/obj/machinery/door_control{name = "pod door cycle"; pixel_x = 6; id = "pod cycle"},/turf/simulated/wall,/area/ruin/powered{name = "Space Bar"}) +"aE" = (/obj/machinery/vending/boozeomat,/turf/simulated/wall,/area/ruin/powered{name = "Space Bar"}) +"aF" = (/obj/structure/closet/secure_closet/freezer/kitchen,/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"aG" = (/obj/machinery/light/small,/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"aH" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"aI" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 10},/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"aJ" = (/turf/simulated/wall,/area/ruin/powered) +"aK" = (/obj/structure/table,/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"aL" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/glass/rag,/turf/simulated/floor/wood,/area/ruin/powered{name = "Space Bar"}) +"aM" = (/obj/machinery/door/airlock{name = "Bar Storage"; req_access_txt = "25"},/turf/simulated/floor/plasteel{icon_state = "wood"},/area/ruin/powered{name = "Space Bar"}) +"aN" = (/obj/structure/stool,/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"aO" = (/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"aP" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"aQ" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating,/area/ruin/powered{name = "Space Bar"}) +"aR" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/wall,/area/ruin/powered{name = "Space Bar"}) +"aS" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/ruin/powered{name = "Space Bar"}) +"aT" = (/turf/simulated/floor/plating,/area/ruin/powered{name = "Space Bar"}) +"aU" = (/obj/structure/stool/bed/chair{tag = "icon-chair (EAST)"; icon_state = "chair"; dir = 4},/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"aV" = (/obj/structure/table/woodentable,/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"aW" = (/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"aX" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"aY" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"aZ" = (/obj/item/device/radio/beacon,/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"ba" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"bb" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"bc" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"bd" = (/obj/machinery/vending/snack,/obj/machinery/light,/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"be" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"bf" = (/obj/machinery/door/airlock{name = "Unisex Bathroom"},/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"bg" = (/obj/structure/urinal{pixel_x = -32},/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"bh" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"bi" = (/obj/structure/table/woodentable,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"bj" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"bk" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"bl" = (/obj/machinery/door/airlock{name = "Toilet"},/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"bm" = (/obj/effect/glowshroom/single,/turf/simulated/floor/plasteel,/area/ruin/powered{name = "Space Bar"}) +"bn" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/ruin/powered) +"bo" = (/turf/simulated/floor/plating,/area/ruin/powered) +"bp" = (/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/ruin/powered) +"bq" = (/obj/machinery/door/poddoor/preopen{id_tag = "pod cycle"; name = "airlock dock"},/turf/simulated/floor/plating,/area/ruin/powered) +"br" = (/obj/machinery/door/poddoor{id_tag = "pod cycle"; name = "airlock dock"},/turf/simulated/floor/plating,/area/ruin/powered) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacababacacacacacaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaacacacacacadadaeadadacacacacacacacacacacacacacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaacacacafafafagagagagagafafacacafafafafafafahacacacacaaaaaaaaaa +aaaaaaaaaaaaaaaaacacacafagagagagagagaiaiagagafafagagagagagagagafafacacacaaaaaaaa +aaaaaaaaaaaaaaacacacafagagagagagagaiaiaiaiagagagagagagagagagagagagafacacaaaaaaaa +aaaaaaaaaaacacacacafagajakalagagaiaiaiamamamamamamamamamamamamagagafacacaaaaaaaa +aaaaaaaaaaacacacafagaganaoanagagaiaiaiamapaqarasamatauavasawamagagafacacacaaaaaa +aaaaaaaaacacafafagagaganaxanagagaiaiaiamasasasasayasasasasazamagagagafacacaaaaaa +aaaaaaababacafagagagagaAaBaCagagagaiaiaDasasasasaEaFaGaHasaIamagagagafacacaaaaaa +aaaaaaaaabacaJagagagagagagagagagagagagamaKaKaLaKamamamamaMamamagagagaJacaaaaaaaa +aaaaaaaaabacafafagagagagagagagagagagagamaNaNaNaNaOaOaPaOaOaOamagagagafacabaaaaaa +aaaaaaaaacacacacafagagagagagagagamaQaRamaOaOaOaOaOaOaOaOaOaOaQagagafacacababaaaa +aaaaaaaaaaacacafagagagagagagagagaSaTaTaSaOaOaOaOaOaOaUaVaWaOaQagagafacabababaaaa +aaaaaaaaaaacacafagagagagagagagagamaQaQamaXaOaUaVaWaOaOaOaOaOaQagagafacacaaaaaaaa +aaaaaaaaacacafagagagagagagagagagagagagamaYaOaOaOaOaZaOaOaOaOaQagagafacacaaaaaaaa +aaaaaaaaabacafagagagagagagagagagagagagamaVaOaOaObabbbcbdaOaOamagagafacacacaaaaaa +aaaaaaababacafagagagagagagagagagagagagambeaOaOaOamamamamambfamaiagagafacacacaaaa +aaaaaaaaabacafagagagagagagagagajakalagamaOaOaOaOambgaOaOaOaOamaiagagagafacabaaaa +aaaaaaaaacacafagagagagagagagaganaoanagaQaOaOaOaYambgaOaOaObhamaiaiagagafacabaaaa +aaaaaaaaacacacafagagagagagagaganaxanagagaQaOaObiamamambjaObhamaiaiagagafacabaaaa +aaaaaaaaaaacacafagagagagagagagaAaBaCagagagaQaObeambkblaObmaOamaiaiagagafacacaaaa +aaaaaaaaaaacaJaJaJaJagagagagagagagagagagagagaQamamamamamamamamaiaiagafacacacaaaa +aaaaaaaaaaaabnbobobnagagagagagagagagagagaiaiagagagaiaiaiaiaiaiaiaiagafacacacaaaa +aaaaaaaaaaaaaJaJaJaJagagagagagagagagagaiaiaiagagagagagaiaiaiaiaiaiafacacacaaaaaa +aaaaaaaaaaaaacacaJagaJbpbpbpbpbpbpaJagagaiagagagagagagagagaiaiaiagafacacaaaaaaaa +aaaaaaaaaaaaacabaJagaJbqbqbqbqbqbqaJagagagagagagagagagagagagagagafaJacabaaaaaaaa +aaaaaaaaaaaaababaJaJaJboboboboboboaJaJaJaJafafafafafafafafafafaJacacacacaaaaaaaa +aaaaaaaaaaaaababababaJboboboboboboaJacacacacacacacacacacacacacacacacacaaaaaaaaaa +aaaaaaaaaaaaaaaaababaJboboboboboboaJacacacacacacacacabacacacacacacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaJboboboboboboaJacacacacaaaaaaacacacababaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaJbrbrbrbrbrbraJacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaJaaaaaaaaaaaaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm b/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm new file mode 100644 index 00000000000..87e1a46f41f --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm @@ -0,0 +1,66 @@ +"a" = (/turf/space,/area/space) +"b" = (/obj/structure/lattice,/turf/space,/area/space) +"c" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/ruin/unpowered) +"d" = (/turf/simulated/wall/r_wall,/area/ruin/unpowered) +"e" = (/obj/structure/table/reinforced,/obj/item/weapon/stock_parts/cell/hyper,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"f" = (/obj/structure/computerframe,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"g" = (/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"h" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"i" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/ruin/unpowered) +"j" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/ruin/unpowered) +"k" = (/turf/simulated/floor/plating,/area/ruin/unpowered) +"l" = (/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"m" = (/obj/structure/table/reinforced,/obj/item/weapon/folder,/obj/item/device/radio,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"n" = (/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"o" = (/obj/machinery/porta_turret,/turf/simulated/floor/plating/airless,/area/ruin/unpowered) +"p" = (/obj/structure/filingcabinet,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"q" = (/obj/machinery/light,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"r" = (/obj/structure/rack,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ruin/unpowered) +"s" = (/obj/item/weapon/rack_parts,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ruin/unpowered) +"t" = (/obj/item/weapon/rack_parts,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ruin/unpowered) +"u" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"v" = (/obj/machinery/door/airlock,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"w" = (/obj/machinery/power/apc{dir = 2; name = "Outpost APC"; keep_preset_name = 1; pixel_y = -24},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"x" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"y" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"z" = (/obj/structure/table/reinforced,/obj/item/clothing/head/ushanka,/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkredfull"},/area/ruin/unpowered) +"A" = (/obj/structure/table/reinforced,/obj/structure/reagent_dispensers/peppertank{pixel_y = 32},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"B" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/machinery/light{dir = 1},/obj/item/device/radio,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"C" = (/obj/machinery/vending/clothing,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"D" = (/obj/structure/rack,/obj/item/ammo_box/c9mm,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ruin/unpowered) +"E" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"F" = (/obj/structure/rack,/obj/item/clothing/head/helmet/swat,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ruin/unpowered) +"G" = (/obj/structure/rack,/obj/item/weapon/crowbar/red,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ruin/unpowered) +"H" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"I" = (/obj/structure/stool/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"J" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"K" = (/obj/structure/rack,/obj/item/weapon/grenade/chem_grenade/teargas,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ruin/unpowered) +"L" = (/obj/structure/table/reinforced,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkredfull"},/area/ruin/unpowered) +"M" = (/obj/structure/table/reinforced,/obj/machinery/light,/obj/item/device/camera_bug,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"N" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"O" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/blue,/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"P" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = -4; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = 3},/turf/simulated/floor/plasteel,/area/ruin/unpowered) +"Q" = (/obj/structure/rack,/obj/item/weapon/storage/belt/military,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ruin/unpowered) +"R" = (/obj/structure/rack,/obj/item/clothing/head/helmet/riot,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ruin/unpowered) +"S" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/rawcutlet,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/ruin/unpowered) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaabbab +aaaaabaabbaaaaabababbb +aaaaababbacccccccccccc +aaaaabbbbbcddddddddddd +aaaaabaaaacdefffghijki +aaalllllllcdmnggggikki +aaloddddddcdpqgggwdddd +aalddrstrdddddudvddkkc +aaldsxxxxydzABgdgCdddc +aaldrxrDxxuggggdgggEdc +bbldFxrGxxuggHgdIggJdc +abldrxxxxKdLMNOdPggJdc +ablddrsQRdddddddSggJdc +aaloddddddolllcddddddc +abbllllllllbbacccccccc +aabbbbbabbbbaabbbaaaba +aaabaabaaaabaababaaabb +aaaaaaaaaaaaaabaaaaaaa +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/way_home.dmm b/_maps/map_files/RandomRuins/SpaceRuins/way_home.dmm new file mode 100644 index 00000000000..c5c89f646d3 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/way_home.dmm @@ -0,0 +1,37 @@ +"a" = (/turf/space,/area/space) +"b" = (/turf/simulated/mineral/random,/area/ruin/unpowered/no_grav/way_home) +"c" = (/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered/no_grav/way_home) +"d" = (/obj/structure/signpost{name = "salvation"},/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered/no_grav/way_home) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaabaaaaaaaaaaaaaaa +aaaaaaaaaaaaabbbaaaaaaaaaaaaaa +aaaaaaaaaabbbbbbbbbaaaaaaaaaaa +aaaaaaaaaaabbbbbbbbaaaaaaaaaaa +aaaaaaaaaabbbbbbbbaaaaaaaaaaaa +aaaaaaaaabbbbbbbbbaaaaaaaaaaaa +aaaaaaaaabbbbbbbbbbaaaaaaaaaaa +aaaaaaaabbbbbbbbbbbbaaaaaaaaaa +aaaaaaabbbbbbbbcbbbaaaaaaaaaaa +aaaaaaabbbbbbbcccaaaaaaaaaaaaa +aaaaaabbbbbbbbccaaaaaaaaaaaaaa +aaaaaabbbbbbcccaaaaaaaaaaaaaaa +aaaaaaabbbcccccaaaaaaaaaaaaaaa +aaaaaaabbaacccccaaaaaaaaaaaaaa +aaaaaaaaaaaaaccccaaaaaaaaaaaaa +aaaaaaaaaaaaaccdccaaaaaaaaaaaa +aaaaaaaaaaaaaccccccaaaaaaaaaaa +aaaaaaaaaaaaaaccccccaaaaaaaaaa +aaaaaaaaaaaaaacccbccaaaaaaaaaa +aaaaaaaaaaaaaaaccbbccaaaaaaaaa +aaaaaaaaaaaaaaacbbbbbaaaaaaaaa +aaaaaaaaaaaaaaacbbbbbbaaaaaaaa +aabbaaaaaaaaaaaabbbbbbbaaaaaaa +aabbbaaaaaaaaaabbbbbbbbbaaaaaa +aaabaaaaaaaaaabbaaabbbabaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm index 5a371c50a06..500720c279f 100644 --- a/_maps/map_files/RandomZLevels/academy.dmm +++ b/_maps/map_files/RandomZLevels/academy.dmm @@ -341,6 +341,7 @@ "gC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) "gD" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) "gE" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."; name = "Summoning Midterm Exam"},/obj/item/weapon/gun/projectile/shotgun/toy/tommygun,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) +"gF" = (/obj/structure/window/reinforced,/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/trophy/gold_cup,/turf/simulated/floor/plasteel{icon_state = "red"},/area/awaymission/academy/academyaft) "gG" = (/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "gH" = (/obj/structure/window/reinforced,/obj/item/ammo_casing,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/awaymission/academy/classrooms) "gI" = (/mob/living/simple_animal/hostile/bear,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms) @@ -482,7 +483,6 @@ "jo" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/awaymission/academy/academyaft) "jp" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft) "jq" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/awaymission/academy/academyaft) -"jr" = (/obj/structure/window/reinforced,/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/golden_cup,/turf/simulated/floor/plasteel{icon_state = "red"},/area/awaymission/academy/academyaft) "js" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/awaymission/academy/academyaft) "jt" = (/obj/structure/cult/pylon,/turf/simulated/floor/plasteel{icon_state = "yellow"; dir = 10},/area/awaymission/academy/academyaft) "ju" = (/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/awaymission/academy/academyaft) @@ -633,7 +633,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaSaSaaaaaaaaaaaaaaaaaagZiViWiWiXgZaaaaaaiYhDiZjafLfCfDfDfDfDfDfDfDfDfDfLjbjcjdjeaaaaaagZiViWiWiXgZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagZjfjgjafLjhfBfBjifBfBjifBfBjjfLjbjkjlgZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYhDjmjafLfCfDjnhlkxhlhljofDfDfLjbjpjdjqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagZjrjsjafLfCfDjtjujujujujvfDfDfLjbjwjxgZjyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagZgFjsjafLfCfDjtjujujujujvfDfDfLjbjwjxgZjyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagZgZjzjafLfCjAfDfDfDfDfDfDjAfDfLjbjzgZgZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagZgZjBfLjCetjDfDfDfDfDjEetjDfLjBgZgZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagZgZfLjFjGgCgDfDfDfDfDjHfDfLgZgZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -672,3 +672,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm index e68167fea13..8f413b01937 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) @@ -101,7 +101,6 @@ "bW" = (/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft) "bX" = (/obj/machinery/door_control{id = "packerMed"; pixel_y = -24},/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft) "bY" = (/obj/machinery/sleeper{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft) -"bZ" = (/obj/machinery/sleep_console,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft) "ca" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "cb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/item/weapon/hand_labeler,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "cc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) @@ -116,7 +115,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 +127,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 +276,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 +316,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 +333,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 +448,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 +502,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 +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPbQbFbnarbRbRbSbRbRbTbUaaaaaaaEbVbtbuaHbWbXaHaHaHbYaHbWbYaHaPbccacbcccccdccccccccbyceaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfcgchcicjckclclclclclcmclclclcmcnaxaxaxaxaAcpcpcpaCaxaxaxaxbVcqcrcsctcrcrcucvcwcxcyczaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCcCcDcCcEcFcGcHcIcJcKcIcLcGcMcNcOcPcQcRcMcMcMcMcScTcUcScVcWaxaxaxaxaxaxaxaxayaAcXaCcncoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcYcZcYdacCcEcMdbcHdcdcdcdccLcMcMdddedededfcMcMcMcMdgdgcMdgcMdhdididjdkdldmdldnaPdodpdqdrazaxaycoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCdsdtdsdudvcEcMcMcHdcdwdcdccLcMcMdxdydzdAdBcMcMcMcMcMcMcMcMcMaPdjdCdjbJdDdEdFdGaPdHdpdododIdJcWazaxcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCcCdKdLdMdNdOcEcMcMdPdQdQdRdQdScMcMdTcMdUdVdVdVdVdVdVdVdVdVdWcMdhdjdXdjdraxaxaxaxbVdHdYdZeaebecbbedeeefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciegegegeheiejekelddemeneoeoeoeoeoeodWcMddcMepcMeqerererererererepcMaPdjesdjdjdjdjdjetaPeuevbdewbdexeyezeeefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAeBeCegcYcZcYcZeDeEeoeFererererereGeHcMeIcMepeJeKeLeKeKeKeKeMeNeOePbbdjeseQeReReSdjdjaPeTeUbdeVeWeXbJezeeefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeZfaegfbdtdsdtfcdTcMcMerfdfefdfffgepfhepcMepcMfierererererererepfjfkflfmfnfofpfqdjdjaPfreUbdewbdfscWayaxftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeZfaegcYfufvfwfxddcMcMerfdfdfgfffgfyeofzeofAcMcMcMcMcMfBcMcMcMepcMfCdjesfDfofofEdjdjaPfFevfoewbdfGcWazaxaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeZfaegcYfufvfwfxddcMcMerfdfdfgfffgfyeofzeofAcMcMcMcMcMfBcMcMcMepcMfCdjesfDfofofEdjdjaPfFevfoewbdfGcWazaxcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIfJegdsfKdsdtcCfLcMcMerfMfdfgfNfgepcMfOcMepcMcMfPcMcMcMcMcMcMfQdVfRfSfTfDfUfofEdjdjaPfFevfofVeWfWbbfXeeefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUegegegegfYegfZgadTemcMerfdfggbffgcepcMdTcMepcMeqerererererererepgdgeflfmfngffoggdjetaPeuevfobdbddJeyezeeefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaghahagaggigjagagaggkcMcMerfgfgfgglfgepgmddcMepgngogpgqgqgqgqeMeNeOgrbJdjesgsgtgtgudjdjaPdHeUbdgvbdgwbJgxeeefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -584,3 +583,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/RandomZLevels/centcomAway.dmm b/_maps/map_files/RandomZLevels/centcomAway.dmm index fe4583e5be0..2cc70f5d3ee 100644 --- a/_maps/map_files/RandomZLevels/centcomAway.dmm +++ b/_maps/map_files/RandomZLevels/centcomAway.dmm @@ -145,7 +145,7 @@ "cO" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/awaymission/centcomAway/hangar) "cP" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/awaymission/centcomAway/hangar) "cQ" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/shuttle/floor,/area/awaymission/centcomAway/hangar) -"cR" = (/obj/machinery/sleep_console{icon_state = "console"; dir = 8},/turf/simulated/shuttle/floor,/area/awaymission/centcomAway/hangar) +"cR" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/trophy/gold_cup,/turf/simulated/floor/carpet,/area/awaymission/centcomAway/general) "cS" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/awaymission/centcomAway/hangar) "cT" = (/turf/simulated/shuttle/wall{icon_state = "swallc2"; dir = 2},/area/awaymission/centcomAway/hangar) "cU" = (/turf/simulated/floor/plating,/area/awaymission/centcomAway/hangar) @@ -251,7 +251,7 @@ "eQ" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/awaymission/centcomAway/general) "eR" = (/obj/machinery/autolathe,/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/awaymission/centcomAway/general) "eS" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/centcomAway/general) -"eT" = (/obj/machinery/sleep_console{icon_state = "console"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/centcomAway/general) +"eT" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/sugar,/obj/item/weapon/reagent_containers/food/condiment/milk,/obj/item/weapon/reagent_containers/food/drinks/ice,/turf/simulated/floor/plasteel{tag = "icon-barber (WEST)"; icon_state = "barber"; dir = 8; heat_capacity = 1},/area/awaymission/centcomAway/thunderdome) "eU" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/centcomAway/general) "eV" = (/obj/structure/table/reinforced,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/centcomAway/general) "eW" = (/obj/machinery/implantchair,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/centcomAway/general) @@ -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) @@ -596,7 +596,6 @@ "lx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/centcomAway/general) "ly" = (/obj/structure/table/woodentable,/obj/item/clothing/accessory/medal,/turf/simulated/floor/carpet,/area/awaymission/centcomAway/general) "lz" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission/centcomAway/general) -"lA" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/golden_cup,/turf/simulated/floor/carpet,/area/awaymission/centcomAway/general) "lB" = (/obj/structure/table/woodentable,/obj/item/clothing/accessory/medal/gold,/turf/simulated/floor/carpet,/area/awaymission/centcomAway/general) "lC" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/centcomAway/general) "lD" = (/turf/simulated/wall/r_wall,/area/awaymission/centcomAway/thunderdome) @@ -624,7 +623,6 @@ "lZ" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/plasteel{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/awaymission/centcomAway/thunderdome) "ma" = (/obj/machinery/vending/snack,/turf/simulated/floor/plasteel{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/awaymission/centcomAway/thunderdome) "mb" = (/obj/structure/table,/obj/item/weapon/lipstick,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/thunderdome) -"mc" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/sugar,/obj/item/weapon/reagent_containers/food/drinks/milk,/obj/item/weapon/reagent_containers/food/drinks/ice,/turf/simulated/floor/plasteel{tag = "icon-barber (WEST)"; icon_state = "barber"; dir = 8; heat_capacity = 1},/area/awaymission/centcomAway/thunderdome) "md" = (/obj/machinery/icecream_vat,/turf/simulated/floor/plasteel{tag = "icon-barber (WEST)"; icon_state = "barber"; dir = 8; heat_capacity = 1},/area/awaymission/centcomAway/thunderdome) "me" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/thunderdome) "mf" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/awaymission/centcomAway/thunderdome) @@ -740,7 +738,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbDbEbEbEbFbGbH aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbDbUbUbVbWbXbYbZcacbbYbXcccdbUbUbDbfbfbfaWagagakaFaGaHakaiaiaIcecfaiaiaiaiakakakaKcgakakakakakchciciaKcjckckataaclagagcmagcncococococococococococococoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbDbUbUcpcqcqbYcqcqcqbYcqcqcpbUbUbDbfbfbfaWagagakaQaGaGaRaiaiaIcraJaiaiaiaiaKcscscsctcucucucucucvcwcwcwcwcwcwaBaacxagagcyababbmbTbTbTbTbTbTbTbTbTbTbTbTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfczcdbUcAcqbYbYbYbYbYbYbYcqcAbUbVcBbfbfcCaWcDcEakakakakakaiaiaIaJaJaiaiaiaicFcscscGcGcGcscscscscicwcHcIcJcKcwaBaacxagagabaabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfczbJcLcMcNcOcPbYcQcRbYcScTbJcBbfbfcUcUcmagagagcVaiaiaiaiaiaIaJaJaiaiaiaiaKcscscscWcucucucucucXcwcwcwcwcwcwaBaacxagagabaabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfczbJcLcMcNcOcPbYcQcqbYcScTbJcBbfbfcUcUcmagagagcVaiaiaiaiaiaIaJaJaiaiaiaiaKcscscscWcucucucucucXcwcwcwcwcwcwaBaacxagagabaabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbgbfbfbDcYcZdadbbYcqcqbYcSbDbfbfbfbfbfcUcmagagagcVaiaiaiaiaiaIaJaJaiaiaiaiakakakaKdcakakakakakchciciaKcjckckbbaaddagagcyababbmbTbTbTbTbTbTbTbTbTbTbTbTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbgcUbfbDdedfdfcPbYcSdgbYcScpdhbfbfdidicCaWaWcEakakakakakaiaiaiaiaiaiaiaiaIbhdjdkdldmakbObxbPakbQdndobBakakakacababagagcmagcmcococococococococococococoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfbfbfbDdpdfdfdqbYcSdgbYbYbHbfbfbfbodrdsdtaWagakaFduaHakaiaiaiaiaiaiaiaiaIbhdjaxaxdmdvbwbxbyakdwbAdxbBakbCagagagagagagabababbmbTbTbTbTbTbTbTbTbTbTbTbTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -751,9 +749,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfbfbfbDdEbYbY aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfbfbfbDdEbYdEdYbYcqcqcqcqdYbfbfbfaWaWaWaWaWagakakdZeaakakakdZebeaakaiaiaiakdjaxayazaxaxaxecaBauedeeauakefegehakagagabaaaabmbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfbfcUbDdEbYdEbDbYeiejekbXbDbfbgbfbuaWbdagagagacelemeneneoenepeneqacereseraketeuevewexeyezeAbbauavavauakakakakakagagababababababaTaUaUaVababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfbfcUeBeCeCbJeDeEbIbJeCeCcBbfbfbfbfaWagageFeFeFeFeFeFeFeFeFeFeFeFeFeGeGeGeFeFeFeFeFeFeFeFeFeFeFeFeFakakeHeIbdagagageJagagagagagagagagagagabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfbfcUcUeBbKeKcSbYeLeMbFcBbfbfbfbfcUaWagageFeNeOeOeOePeFeNeQeReQePeFeGeGeGeFeSeTeUeVeWeFeXeYeZfafbeFagagagagagagagagagagagagagagagagagagagageIabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfbfcUcUeBbKeKcSbYeLeMbFcBbfbfbfbfcUaWagageFeNeOeOeOePeFeNeQeReQePeFeGeGeGeFeSeUeUeVeWeFeXeYeZfafbeFagagagagagagagagagagagagagagagagagagagageIabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfbfbfcUcUbDekcqfccqeKbDbfbfbfbfcUcUaWagageFeOeOfdeOeOfeeOeOeOeOeOeFfffgffeFeUeUeUeUfhfieUeUeUfhfieFagfjfjfjfjfjfjfjfjfjfjfjfjfjfjfjfjfjfjagbdabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfcUbfbfcUbDfkflfmfnfobDbfbfbfbfcUcUaWagageFeOeOeOeOeOeFfpfqfrfrfseFfteOfueFeSeTeUeUeUfieUeUeUeUfieFagfjfvfwfxfjfyfyfyfjfyfyfyfyfyfyfyfyfjagagabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfcUbfbfcUbDfkflfmfnfobDbfbfbfbfcUcUaWagageFeOeOeOeOeOeFfpfqfrfrfseFfteOfueFeSeUeUeUeUfieUeUeUeUfieFagfjfvfwfxfjfyfyfyfjfyfyfyfyfyfyfyfyfjagagabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfbfbfbfbfczfzfAfAfAfBcBbfbfbfbfbfcUaWagageFeOfCfDfCeOeFfEfFfGfHfIeFeOeOeOeFfGfHfJfKfLeFfMfNeUfOfPeFagfjfQfQfQfRfyfyfyfSfyfTfUfTfyfVfWfXfjagagabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfbfbfbfbfbfbfbfbfbfbfbfbfcUbfbfbfbfaWagageFfpfYfZgagbeFeOgcgcgcgcgdeOeOeOgegfgfgfgfeOggeOgheUfhfieFagfjfjfjfjfjfyfyfyfjgigjfTgkgiglgmgmfjagagabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbobfbfbfbgbfbfbfbfbfbfbfbgbfbfbfbfbfbfbfaWagageFeFeFeFeFeFeFeOeOgngogogogogogogogogogpeOeOeFeFeFeFeFeFeFagfjgqfQfvfjfyfyfyfjgrgrgrgrgrglgmgmfjaggsabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -793,8 +791,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmbmeFjyjthgjsjsiElrlslsltksivgogojOiEjGjGjslueFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmeFeFeFeFeFeFeFeFeFeFlviclweFeFeFeFeFeFeFeFeFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmlxlyhkeGeGeGhklzlxbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmhylAhyeGeGeGhylAhybmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmkslAhyeGeGeGhylBksbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmhycRhyeGeGeGhycRhybmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmkscRhyeGeGeGhylBksbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmeFeFhylClxlChyeFeFbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalDlDlDlDlDlElFlGlDaaaaaaaaksfDksfDksaaaaaaaalDlElFlGlDlDlDlDlDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalDlDlHlIlIlDlDlDlDlDlDlDlDlDlDlJlDlJlDlDlDlDlDlDlDlDlDlDlKlLlMlDlDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -803,7 +801,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalDlNlNlDlPlDlDlDlDlDlDlDlDlDlDlDlQlRlSlDlDlDlDlDlDlDlNlTlTlTlNlNlNlNlDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalDlNlNlDlUlUlUlUlUlVlWlWlWlWlXlWlWlWlWlWlXlYlXlZmalDlNlLlLlLlNlNlNlNlDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalDlNlNlDlUlUlUlUlUlVlWlWlWlWlWlWlWlWlWlWlWlWlWlWlWlDlNmblLlLlNlNlNlNlDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalDlNlNlDmcmcmdmdlUlVlWlWlWlWlWlWlWlWlWlWlWlWlWlWlWlDlNmememelNlNlNlNlDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalDlNlNlDeTeTmdmdlUlVlWlWlWlWlWlWlWlWlWlWlWlWlWlWlWlDlNmememelNlNlNlNlDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalDlDlNlNlDlDlDlDlDlDlDmfmfmfmfmfmfmfmfmfmfmfmfmfmfmflDlDlDlDlDlDlNlNlNlDlDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalDlDmglNlNlDlDmhmhmhmhlDmimjmjmjmjmjmjmjmjmjmjmjmjmjmklDmhmhmhmhlDlNlNlNmllDlDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalDlDlDlDlDlDmglNlDlDlDmmmmmmmmlDmnmompmompmomqmrmsmtmumtmumtmvlDmmmmmmmmlDlDlDlNmllDlDlDlDlDlDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -832,3 +830,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/RandomZLevels/moonoutpost19.dmm b/_maps/map_files/RandomZLevels/moonoutpost19.dmm index 71c30499550..a2ac44e94d5 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"}) @@ -637,7 +637,7 @@ "mm" = (/obj/structure/table,/obj/item/weapon/storage/backpack/satchel/withwallet,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "mn" = (/obj/structure/closet/secure_closet{icon_state = "secure"; locked = 0; name = "kitchen Cabinet"; req_access_txt = "201"},/obj/item/weapon/reagent_containers/food/condiment/flour,/obj/item/weapon/reagent_containers/food/condiment/flour,/obj/item/weapon/reagent_containers/food/condiment/sugar,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "showroomfloor"; temperature = 273.15},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "mo" = (/obj/structure/closet/secure_closet{icon_broken = "fridgebroken"; icon_closed = "fridge"; icon_locked = "fridge1"; icon_off = "fridgeoff"; icon_opened = "fridgeopen"; icon_state = "fridge"; locked = 0; name = "meat fridge"; req_access_txt = "201"},/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "showroomfloor"; temperature = 273.15},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) -"mp" = (/obj/structure/closet/secure_closet{icon_broken = "fridgebroken"; icon_closed = "fridge"; icon_locked = "fridge1"; icon_off = "fridgeoff"; icon_opened = "fridgeopen"; icon_state = "fridge"; locked = 0; name = "refrigerator"; req_access_txt = "201"},/obj/item/weapon/reagent_containers/food/drinks/milk,/obj/item/weapon/reagent_containers/food/drinks/milk,/obj/item/weapon/reagent_containers/food/drinks/milk,/obj/item/weapon/storage/fancy/egg_box,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "showroomfloor"; temperature = 273.15},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) +"mp" = (/obj/structure/closet/secure_closet{icon_broken = "fridgebroken"; icon_closed = "fridge"; icon_locked = "fridge1"; icon_off = "fridgeoff"; icon_opened = "fridgeopen"; icon_state = "fridge"; locked = 0; name = "refrigerator"; req_access_txt = "201"},/obj/item/weapon/reagent_containers/food/condiment/milk,/obj/item/weapon/reagent_containers/food/condiment/milk,/obj/item/weapon/reagent_containers/food/condiment/milk,/obj/item/weapon/storage/fancy/egg_box,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "showroomfloor"; temperature = 273.15},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "mq" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/shuttle/floor,/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "mr" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "ms" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/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..f398c6134e5 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) @@ -419,11 +419,9 @@ "ic" = (/obj/effect/landmark/corpse/engineer{mobname = "Carth Robinson"; name = "Carth Robinson"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission/spacebattle/cruiser) "id" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission/spacebattle/cruiser) "ie" = (/obj/machinery/sleeper,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/spacebattle/cruiser) -"if" = (/obj/machinery/sleep_console,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/spacebattle/cruiser) "ig" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate7) "ih" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission/spacebattle/cruiser) "ii" = (/obj/machinery/sleeper,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/awaymission/spacebattle/cruiser) -"ij" = (/obj/machinery/sleep_console,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/awaymission/spacebattle/cruiser) "ik" = (/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/awaymission/spacebattle/cruiser) "il" = (/obj/effect/landmark/corpse/engineer{mobname = "Cyrion"; name = "Cyrion"},/obj/item/weapon/flamethrower/full,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) "im" = (/mob/living/simple_animal/hostile/syndicate/ranged,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) @@ -615,13 +613,13 @@ abababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababbUbVcdbZbZbZdedededfdfdgdgdhdhdhdididicbhOhPhQcbhRcbhRcbhRcbhRcbhRcbbZbZcbgFgFgFgFgFgFgFhScbbZbZcObSbSbSbSbSeGbSbSbSbScabSbSbSbSeGbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSeHcacacphTabababababababababababababababababababababababababdqdtbZbZbZbZbZbZbZbZbZbZbZbZcGcWcWababababababababababababababababababababababababababababhphehfhfhfhfhfhfhfgXgMabababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcdbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbhPhPhPcbhUhVhUhVhUhVhUhVhUcbbZbZcbgFhvgFgFgFgFhWhXcbbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcYbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbabababababababababababababababababababababababababababcbbZbZbZbZbZbZbZbZbZbZcYbZcVcWdbababababababababababababababababababababababababababababhphehfhfhfhfhfhfhfhghhabababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcdbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbhYhPhZcbhPhPhPhPhPhPiahPhPcabZchcbgFgFgFgFgFibgRgFcbbZcYbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbabababababababababababababababababababababababababababcbbZbZbZbZbZbZbZbZbZbZbZbZdacWcWababababababababababababababababababababababababababababhphehfhfhfhfhfhfhfhghqabababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcsbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbhPhPhPgDichPhPhPhPhPidhPhPcabZbZcbieifgFieifgFieifcbbZbZcrbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbShTabababababababababababababababababababababababababababdqbSbSbSbSbSbSbSbSbSbSbSbSbSbSfiababababababababababababababababababababababababababababiggXgXgXgXgXgXgXgXgXhzabababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcsbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbhPhPhPgDichPhPhPhPhPidhPhPcabZbZcbiegFgFiegFgFiegFcbbZbZcrbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbShTabababababababababababababababababababababababababababdqbSbSbSbSbSbSbSbSbSbSbSbSbSbShTababababababababababababababababababababababababababababiggXgXgXgXgXgXgXgXgXhzabababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcsbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbhYhPhQhVhPhPhPhPhPhPiahPihcbbZbZcbgFgFgFgFgFgFgFgFcbbZbZcGcHcHcHcHcHcHcGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgLhzababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcsbZbZbZbZbZbZbZcobZbZbZbZbZbZbZbZcbhPhPhPhUhPhPhPhPhPhPhPhPihcbbZbZcbiiijikiiijikiiijcbbZbZcGcHcHcHcHcHcHcGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcdbZbZbZbZbZbZbZbZbZilbZimcKcJbZcmcpbQbQbQbQbQbQbQbQbQbQbQbQbQeHbZbZcObSbSbSbSbSbSbSbSeHbZbZcpbQbQbQbQbQbQfiababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcsbZbZbZbZbZbZbZcobZbZbZbZbZbZbZbZcbhPhPhPhUhPhPhPhPhPhPhPhPihcbbZbZcbiiikikiiikikiiikcbbZbZcGcHcHcHcHcHcHcGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcdbZbZbZbZbZbZbZbZbZilbZimcKcJbZcmcpbQbQbQbQbQbQbQbQbQbQbQbQbQeHbZbZcObSbSbSbSbSbSbSbSeHbZbZcpbQbQbQbQbQbQhTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcdbZbZbZbZbZbZbZbZbZbZbZbZbZcKincKcabZbZbZbZimbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiobVbWipbZbZbZbZbZbZimbZbZbZcIcIcKcmcKcabZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZchbZbZbZbZbZbZbZbZbZbZbZcbabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdqbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQeGbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbSbSbSbSbSbSbSbSbSbSbSfiabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdqbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQeGbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbSbSbSbSbSbSbSbSbSbSbShTabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab @@ -730,3 +728,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..dce6e0a6499 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) @@ -617,7 +616,6 @@ "lX" = (/obj/structure/stool/bed/roller,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/southblock) "lY" = (/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 2},/area/awaymission/southblock) "lZ" = (/obj/machinery/sleeper{dir = 1},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 2},/area/awaymission/southblock) -"ma" = (/obj/machinery/sleep_console,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/southblock) "mb" = (/turf/simulated/floor/plasteel{icon_state = "warning"},/area/awaymission/southblock) "mc" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/awaymission/southblock) "md" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/light/small,/turf/simulated/floor/plasteel,/area/awaymission/gateroom) @@ -680,12 +678,13 @@ aafZgbgbgbgbgbfZhEiDilgzgzgzgzgzgzjogzgzgzjpjpiYiYjqiYiYiYiYjriYiYiYjsjtjujujuju aafZgcgcgbgcgcfZhVhuhqjyjzjAiljBhujChuhuhuhuhuiYjDjEjFiYjGjHjHjIjJiYjKjEjujLjMjNjOjPjujQjQjRjRjSjQjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa aafZgbgbgbgbgbfZjUjViDhqhWhujWjyhujXhuhuhuhuhuiYjYjZkaiYkbkckdkekfiYjKkgjujLkhkikjjPjujQjQjQjQjQkkjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa aafZklklklklklfZgzkmknkokmkngzgzgzgzgzjpgzgzgziYiYiYiYiYiYiYkpiYjriYjKjEjukqkrksktkujukvjQkwjQjQjQjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aagakxkykykykzgaaafLkAgRkBkCaagzkDkEkFhukGjzhuiYkfjHkfiYkHjHjHkIkfiYjKjEjukJkKkLkKkMjujQkkjQkNjQjQjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aagakxkykykykzgaaafLkAgRkBfQaagzkDkEkFhukGjzhuiYkfjHkfiYkHjHjHkIkfiYjKjEjukJkKkLkKkMjujQkkjQkNjQjQjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaafZkOkPkQfZaagzhuhujzhuhujzhuiYkRjKkSiYkRjKjKjKkTiYjKjEjukUkVkWkVkXjujQjQjSjQjQkkjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaafZkOgbkQfZaagzhujzhujzhuhuhuiYkfkdkfkpkRjKkYkZlaiYjKjEjulbkVkWkVlcjukkjQjQldkwjQjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaafZkOgckQfZaagzlehulfhulghuhuiYiYiYiYiYlhjKlijKljiYjKjEjulkkVkWkVlljujujujujulmlnloaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaalplqlrlqlsaagzlthuluhulvjzhuiYlwlxlyiYkRjKlijKlziYjKlAjujujulBjujujulClDlEjuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaahvlqlrlqhRaagzlthuluhulvjzhuiYlwlxlyiYkRjKlijKlziYjKlAjujujulBjujujulClDlEjuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaagzltlFlGlHhuhuhuiYlIkfkfkpkRjKlJjKlKiYlLlMlNlOlOlPlOlQlRlSlTlUjuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaagzgzgzgzgzgzgzgziYlVlWlXiYkfkdlYlZmaiYjKjKjKmbmbmbmbmcjulCmdmejuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaagzgzgzgzgzgzgzgziYlVlWlXiYkfkdlYlZkfiYjKjKjKmbmbmbmbmcjulCmdmejuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYjujujujujuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm index 9bae9a8215c..bf249399535 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"}) @@ -452,7 +452,7 @@ "iJ" = (/obj/machinery/door/firedoor,/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) "iK" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) "iL" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) -"iM" = (/obj/structure/closet/secure_closet{icon_broken = "fridgebroken"; icon_closed = "fridge"; icon_locked = "fridge1"; icon_off = "fridgeoff"; icon_opened = "fridgeopen"; icon_state = "fridge"; locked = 0; name = "refrigerator"; req_access_txt = "201"},/obj/item/weapon/reagent_containers/food/drinks/milk,/obj/item/weapon/reagent_containers/food/drinks/milk,/obj/item/weapon/reagent_containers/food/drinks/milk,/obj/item/weapon/storage/fancy/egg_box,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) +"iM" = (/obj/structure/closet/secure_closet{icon_broken = "fridgebroken"; icon_closed = "fridge"; icon_locked = "fridge1"; icon_off = "fridgeoff"; icon_opened = "fridgeopen"; icon_state = "fridge"; locked = 0; name = "refrigerator"; req_access_txt = "201"},/obj/item/weapon/reagent_containers/food/condiment/milk,/obj/item/weapon/reagent_containers/food/condiment/milk,/obj/item/weapon/reagent_containers/food/condiment/milk,/obj/item/weapon/storage/fancy/egg_box,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) "iN" = (/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,/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "iO" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/structure/sign/biohazard{pixel_x = -32},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaycontent/a6{has_gravity = 1; name = "UO45 Gateway"}) "iP" = (/obj/structure/table,/obj/item/device/radio/off,/obj/item/device/radio/off,/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; tag = "icon-floorscorched1 (WEST)"},/area/awaycontent/a6{has_gravity = 1; name = "UO45 Gateway"}) @@ -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..c4b556ae056 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -10,108 +10,108 @@ "aaj" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 2},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) "aak" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (NORTH)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) "aal" = (/turf/simulated/wall/r_wall,/area/security/permabrig) -"aam" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig) +"aam" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/wall/r_wall,/area/security/permabrig) "aan" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig) "aao" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig) -"aap" = (/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/security/permabrig) +"aap" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/permabrig) "aaq" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aar" = (/obj/item/device/radio/intercom/locked/prison{pixel_x = 0; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aas" = (/obj/machinery/camera{c_tag = "Prison Bedroom"; dir = 2; network = list("Prison","SS13")},/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor/plasteel,/area/security/permabrig) +"aar" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/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 = "floorgrime"},/area/security/permabrig) +"aas" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/item/seeds/appleseed,/obj/item/seeds/appleseed,/obj/item/seeds/appleseed,/turf/simulated/floor/grass,/area/security/permabrig) "aat" = (/turf/simulated/wall,/area/security/permabrig) -"aau" = (/obj/item/clothing/suit/ianshirt,/obj/machinery/computer/arcade,/turf/simulated/floor/plasteel,/area/security/permabrig) +"aau" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/item/seeds/orangeseed,/obj/item/seeds/orangeseed,/obj/item/seeds/orangeseed,/turf/simulated/floor/grass,/area/security/permabrig) "aav" = (/obj/structure/stool,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aaw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aax" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"aaw" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/item/seeds/cornseed,/obj/item/seeds/cornseed,/obj/item/seeds/cornseed,/turf/simulated/floor/grass,/area/security/permabrig) +"aax" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "aay" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aaz" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/security/permabrig) -"aaA" = (/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom/locked/prison{pixel_x = 0; pixel_y = 25},/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/security/permabrig) -"aaB" = (/obj/structure/table,/obj/structure/bedsheetbin,/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/security/permabrig) -"aaC" = (/obj/structure/stool/bed,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/security/permabrig) +"aaz" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/item/seeds/riceseed,/obj/item/seeds/riceseed,/obj/item/seeds/riceseed,/turf/simulated/floor/grass,/area/security/permabrig) +"aaA" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/security/permabrig) +"aaB" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/permabrig) +"aaC" = (/obj/machinery/atmospherics/unary/outlet_injector/on,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "aaD" = (/turf/simulated/floor/plasteel,/area/security/permabrig) -"aaE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aaF" = (/obj/machinery/door/airlock/glass{name = "Bedroom"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel,/area/security/permabrig) +"aaE" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/permabrig) +"aaF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_pump,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "aaG" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aaH" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aaI" = (/obj/machinery/washing_machine,/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/security/permabrig) +"aaH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"aaI" = (/obj/machinery/biogenerator,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "aaJ" = (/turf/space,/obj/machinery/gun_turret,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate) -"aaK" = (/obj/machinery/newscaster{pixel_y = -28},/obj/structure/table,/obj/item/weapon/pen{layer = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aaL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/security/permabrig) -"aaM" = (/obj/structure/table,/obj/item/weapon/dice,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/item/device/radio/intercom/locked/prison{pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/security/permabrig) -"aaN" = (/obj/structure/stool,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aaO" = (/obj/structure/table,/obj/item/weapon/dice/d20,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aaP" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aaQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/security/permabrig) -"aaR" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{layer = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/security/permabrig) -"aaS" = (/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aaT" = (/obj/machinery/light/small{dir = 1},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) -"aaU" = (/obj/item/weapon/soap/nanotrasen,/obj/structure/sink{pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) -"aaV" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; tag = "icon-shower (WEST)"},/obj/structure/curtain/open/shower,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) -"aaW" = (/obj/machinery/portable_atmospherics/scrubber/huge/stationary,/obj/machinery/atmospherics/pipe/simple/visible{dir = 6; level = 1},/turf/simulated/floor/plating,/area/security/permabrig) -"aaX" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/vending/sustenance,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aaY" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aaZ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aba" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"abb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"abc" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1443; icon_state = "on"; id = "air_in"; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"abd" = (/obj/machinery/hologram/holopad,/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 = "floorgrime"},/area/security/permabrig) -"abe" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"aaK" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/permabrig) +"aaL" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/camera{c_tag = "Prison Garden"; dir = 4; network = list("SS13")},/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"aaM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"aaN" = (/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"aaO" = (/obj/machinery/seed_extractor,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"aaP" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; tag = "icon-shower (EAST)"},/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) +"aaQ" = (/obj/structure/sink/kitchen{desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink"; pixel_y = 28},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) +"aaR" = (/obj/structure/mirror{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) +"aaS" = (/obj/machinery/portable_atmospherics/scrubber/huge/stationary,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"aaT" = (/obj/structure/table/glass,/obj/structure/table/glass,/obj/item/weapon/reagent_containers/glass/fertilizer/ez,/obj/item/weapon/reagent_containers/glass/fertilizer/ez,/obj/item/weapon/reagent_containers/glass/fertilizer/ez,/obj/item/weapon/plantspray/pests,/obj/item/weapon/plantspray/pests,/obj/item/weapon/plantspray/pests,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"aaU" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/structure/table/glass,/obj/item/weapon/minihoe,/obj/item/device/analyzer/plant_analyzer,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"aaV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"aaW" = (/obj/item/weapon/soap/nanotrasen,/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) +"aaX" = (/obj/machinery/atmospherics/unary/vent_scrubber,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) +"aaY" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) +"aaZ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/wall/r_wall,/area/security/permabrig) +"aba" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/glass{name = "Prison Garden"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abb" = (/obj/machinery/door/airlock/glass{name = "Prison Garden"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abc" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/security/permabrig) +"abd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/security/permabrig) +"abe" = (/obj/machinery/door/airlock{name = "Bathroom"; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "abf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"abg" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Washroom"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) +"abg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "abh" = (/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) -"abi" = (/obj/machinery/portable_atmospherics/scrubber/huge/stationary,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/security/permabrig) -"abj" = (/obj/machinery/vending/sustenance,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abi" = (/obj/machinery/computer/arcade,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abj" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/table,/obj/machinery/kitchen_machine/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "abk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"abl" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"abm" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abl" = (/obj/machinery/newscaster{pixel_y = 32},/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abm" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "abn" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"abo" = (/obj/machinery/camera{c_tag = "Prison Recreation Room"; dir = 1; network = list("Prison","SS13"); pixel_x = 22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"abp" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"abq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"abr" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/power/treadmill,/obj/machinery/treadmill_monitor{on = 1; pixel_x = 32; redeem_immediately = 1},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"abs" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/security/permabrig) +"abo" = (/obj/machinery/portable_atmospherics/scrubber/huge/stationary,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abp" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/device/radio/intercom/locked/prison{pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abq" = (/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/security/permabrig) +"abr" = (/obj/machinery/computer/library/public,/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abs" = (/obj/machinery/washing_machine,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/security/permabrig) "abt" = (/obj/machinery/door/airlock{name = "Toilet"; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) "abu" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/security/permabrig) "abv" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) -"abw" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"abw" = (/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/security/permabrig) "abx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/security/permabrig) -"aby" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig) -"abz" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) +"aby" = (/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/security/permabrig) +"abz" = (/obj/structure/holohoop,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/security/permabrig) "abA" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/vox) -"abB" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/security/permabrig) -"abC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) -"abD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/flasher{id = "permaflash"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) -"abE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/turf/simulated/wall,/area/security/permabrig) -"abF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall/r_wall,/area/security/permabrig) -"abG" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig) -"abH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) -"abI" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) -"abJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"abB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/stool,/obj/item/device/radio/intercom/locked/prison{pixel_x = -25; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abC" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abD" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 4; frequency = 1443; id = "air_in"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abF" = (/obj/structure/stool,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abG" = (/obj/structure/table,/obj/item/weapon/dice/d20,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abI" = (/obj/machinery/atmospherics/unary/outlet_injector/on,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abJ" = (/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "abK" = (/obj/structure/lattice{layer = 2.4},/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/space) "abL" = (/obj/structure/grille,/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/space) -"abM" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent{filled = 0.2},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/permabrig) -"abN" = (/obj/machinery/atmospherics/unary/portables_connector,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/security/permabrig) -"abO" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 30},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plating,/area/security/permabrig) -"abP" = (/obj/machinery/computer/area_atmos/area,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/security/permabrig) -"abQ" = (/obj/machinery/camera{c_tag = "Prison Air Control"; dir = 6; network = list("Prison","SS13")},/obj/machinery/flasher_button{id = "permaflash"; pixel_x = 0; pixel_y = 27},/obj/machinery/hologram/holopad,/turf/simulated/floor/plating,/area/security/permabrig) -"abR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/permabrig) -"abS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/permabrig) -"abT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/security/permabrig) -"abU" = (/obj/machinery/camera{c_tag = "Prison Solitary Confinement"; dir = 6; network = list("Prison","SS13")},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/security/permabrig) -"abV" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/table,/obj/item/weapon/paper,/obj/machinery/light/small{dir = 1},/obj/item/weapon/pen,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/security/permabrig) +"abM" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/security/permabrig) +"abN" = (/obj/structure/table,/obj/structure/bedsheetbin,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/security/permabrig) +"abO" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/security/permabrig) +"abP" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/security/permabrig) +"abQ" = (/turf/simulated/floor/holofloor,/area/security/permabrig) +"abR" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/gameboard,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abS" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abT" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "abW" = (/obj/structure/grille,/obj/structure/sign/securearea,/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/space) -"abX" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/machinery/light/small{dir = 8},/obj/item/weapon/screwdriver,/obj/item/device/radio/intercom/department/security{pixel_x = -28},/turf/simulated/floor/plating,/area/security/permabrig) -"abY" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/turf/simulated/floor/plating,/area/security/permabrig) -"abZ" = (/obj/machinery/atmospherics/binary/valve{dir = 4},/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plating,/area/security/permabrig) -"aca" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/visible{dir = 9},/turf/simulated/floor/plating,/area/security/permabrig) -"acb" = (/turf/simulated/floor/plating,/area/security/permabrig) -"acc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) +"abX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"abZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"aca" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"acb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"acc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "acd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) -"ace" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/permabrig) -"acf" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/security/permabrig) +"ace" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"acf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "acg" = (/turf/simulated/wall/r_wall,/area/security/execution{name = "\improper Prisoner Transfer Center"}) "ach" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) "aci" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) -"acj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/security/permabrig) +"acj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/security/permabrig) "ack" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plating,/area/security/permabrig) "acl" = (/obj/structure/stool/bed,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/security/permabrig) "acm" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "Brig Secure Armory Exterior North"; dir = 4; network = list("SS13")},/turf/space,/area/security/permabrig) @@ -133,14 +133,14 @@ "acC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) "acD" = (/obj/item/clothing/mask/muzzle/gag,/turf/simulated/floor/plating,/area/security/permabrig) "acE" = (/turf/simulated/wall/r_wall,/area/security/securearmoury) -"acF" = (/obj/structure/grille,/obj/structure/sign/securearea{name = "\improper ARMORY"; pixel_y = 32},/turf/space,/area/space) +"acF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall/r_wall,/area/security/permabrig) "acG" = (/obj/structure/grille,/turf/space,/area/space) "acH" = (/obj/structure/closet/secure_closet/hos,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "acI" = (/obj/machinery/computer/security{network = list("SS13","Research Outpost","Mining Outpost")},/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Security's Desk"; departmentType = 5; name = "Head of Security Requests Console"; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "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"}) @@ -176,11 +176,11 @@ "adt" = (/turf/simulated/floor/engine,/area/security/podbay) "adu" = (/obj/structure/spacepoddoor{luminosity = 3},/turf/simulated/floor/engine,/area/security/podbay) "adv" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/engine/vacuum,/area/security/podbay) -"adw" = (/turf/simulated/wall/r_wall,/area/security/interrogationobs) -"adx" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/machinery/light/small{dir = 8},/obj/item/device/radio/intercom/department/security{pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/interrogationobs) -"ady" = (/obj/machinery/camera{c_tag = "Brig Interrogation Observation"; network = list("SS13")},/obj/machinery/computer/security/telescreen{layer = 4; name = "Observation Screen"; desc = "Used for observing the brig's interrogation room."; network = list("Interrogation"); pixel_x = 0; pixel_y = 32},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/interrogationobs) -"adz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/computer/security/telescreen{layer = 4; name = "Observation Screen"; desc = "Used for observing the brig's interrogation room."; network = list("Interrogation"); pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/interrogationobs) -"adA" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/closet/secure_closet{name = "electropack storage"; req_access_txt = "63"},/obj/item/device/radio/electropack,/obj/item/device/assembly/signaler{code = 2; frequency = 1449},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/interrogationobs) +"adw" = (/turf/simulated/wall/r_wall,/area/security/prisonlockers) +"adx" = (/obj/structure/closet/secure_closet/brig,/turf/simulated/floor/plasteel,/area/security/prisonlockers) +"ady" = (/obj/item/device/radio/intercom/department/security{pixel_x = -28},/obj/structure/closet/secure_closet/brig,/turf/simulated/floor/plasteel,/area/security/prisonlockers) +"adz" = (/obj/machinery/light{dir = 8},/obj/structure/closet/secure_closet/brig,/turf/simulated/floor/plasteel,/area/security/prisonlockers) +"adA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/carpet,/area/security/hos) "adB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) "adC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) "adD" = (/obj/effect/decal/warning_stripes/northwest,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) @@ -197,10 +197,10 @@ "adO" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "adP" = (/obj/structure/rack,/obj/item/weapon/tank/oxygen,/obj/item/clothing/suit/space/rig/security,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/security,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/clothing/shoes/magboots,/obj/item/weapon/tank/jetpack/oxygen,/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/plasteel,/area/security/podbay) "adQ" = (/turf/simulated/wall/r_wall,/area/security/evidence) -"adR" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/stack/medical/bruise_pack{pixel_x = 10; pixel_y = 2},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/interrogationobs) -"adS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/interrogationobs) -"adT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/interrogationobs) -"adU" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/interrogationobs) +"adR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/camera{c_tag = "Brig Prison Hallway"; dir = 4; network = list("Prison","SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) +"adS" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/security/permabrig) +"adT" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Interrogation"; req_access = null; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/interrogation) +"adU" = (/obj/machinery/camera{c_tag = "Prisoner Lockers"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel,/area/security/prisonlockers) "adV" = (/obj/effect/decal/warning_stripes/west,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) "adW" = (/obj/structure/rack,/obj/machinery/light{dir = 8},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/gun/energy/gun{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury) "adX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/warning_stripes/southwest,/obj/structure/rack,/obj/item/key/security,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) @@ -210,20 +210,20 @@ "aeb" = (/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/item/clothing/suit/armor/riot,/obj/item/clothing/suit/armor/riot,/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury) "aec" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "Head of Security APC"; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "aed" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/carpet,/area/security/hos) -"aee" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/carpet,/area/security/hos) -"aef" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/mob/living/simple_animal/hostile/retaliate/araneus,/turf/simulated/floor/carpet,/area/security/hos) -"aeg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) -"aeh" = (/obj/structure/table/woodentable,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/item/device/radio,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) +"aee" = (/mob/living/simple_animal/hostile/retaliate/araneus,/turf/simulated/floor/carpet,/area/security/hos) +"aef" = (/obj/structure/table/woodentable,/obj/item/device/radio,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) +"aeg" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/securehallway) +"aeh" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "aei" = (/obj/machinery/space_heater,/obj/machinery/light_switch{pixel_x = -25},/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/plasteel,/area/security/podbay) "aej" = (/obj/spacepod/sec{req_access_txt = "71"},/turf/simulated/floor/engine,/area/security/podbay) -"aek" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"ael" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"aem" = (/obj/structure/closet{name = "Evidence Closet"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Evidence Storage APC"; pixel_x = 0; pixel_y = 25},/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"aen" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel,/area/security/interrogationobs) -"aeo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/security/interrogationobs) -"aep" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel,/area/security/interrogationobs) -"aeq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/security/interrogationobs) -"aer" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/camera{c_tag = "Brig Prison Hallway"; dir = 4; network = list("Prison","SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) +"aek" = (/turf/simulated/floor/plasteel,/area/security/prisonlockers) +"ael" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Prisoner Lockers"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonlockers) +"aem" = (/obj/machinery/power/apc{dir = 1; name = "Prisoner Lockers APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel,/area/security/prisonlockers) +"aen" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/permabrig) +"aeo" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/permabrig) +"aep" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/security/securehallway) +"aeq" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/security/prisonlockers) +"aer" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonlockers) "aes" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "Brig Secure Armory Exterior South"; dir = 8; network = list("SS13")},/turf/space,/area/security/permabrig) "aet" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/weapon/gun/energy/gun/advtaser{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/energy/gun/advtaser{pixel_x = 0; pixel_y = 0},/obj/item/weapon/gun/energy/gun/advtaser{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury) "aeu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/warning_stripes/southeast,/obj/vehicle/secway,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) @@ -233,13 +233,13 @@ "aey" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/decal/warning_stripes/blue/hollow,/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/plasteel,/area/security/podbay) "aez" = (/obj/structure/spacepoddoor{luminosity = 3},/obj/machinery/door/poddoor/multi_tile/four_tile_ver{id_tag = "secpodbay"; layer = 3.1; req_access_txt = "71"},/turf/simulated/floor/engine,/area/security/podbay) "aeA" = (/turf/simulated/wall/r_wall,/area/security/range) -"aeB" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/item/device/radio/intercom/department/security{pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"aeC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"aeD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"aeE" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Evidence Storage"; req_access = null; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"aeF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/interrogationobs) -"aeG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/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/plasteel,/area/security/interrogationobs) -"aeH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light/small,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Interrogation Observation APC"; pixel_x = 26; pixel_y = 0},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/security/interrogationobs) +"aeB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/closet/secure_closet/brig,/turf/simulated/floor/plasteel,/area/security/prisonlockers) +"aeC" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) +"aeD" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/security/securehallway) +"aeE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/interrogation) +"aeF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/warning_stripes/northwestcorner,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) +"aeG" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonlockers) +"aeH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5; level = 1},/obj/structure/closet/secure_closet/brig,/turf/simulated/floor/plasteel,/area/security/prisonlockers) "aeI" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{department = "Head of Security's Office"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "aeJ" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Armory APC"; pixel_x = -24; pixel_y = 0},/obj/machinery/camera/motion{c_tag = "Secure Armory"; dir = 4; network = list("SS13")},/obj/machinery/light_switch{pixel_x = -25; pixel_y = -10},/obj/effect/decal/warning_stripes/southwest,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) "aeK" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) @@ -259,10 +259,10 @@ "aeY" = (/obj/effect/decal/warning_stripes/northeast,/turf/simulated/floor/plasteel,/area/security/range) "aeZ" = (/obj/effect/decal/warning_stripes/northwest,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/range) "afa" = (/obj/effect/decal/warning_stripes/northeast,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/range) -"afb" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"afc" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"afd" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"afe" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Interrogation Observation"; req_access = null; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/interrogationobs) +"afb" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/securehallway) +"afc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) +"afd" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/interrogation) +"afe" = (/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "aff" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) "afg" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) "afh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/warning_stripes/southeastcorner,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) @@ -285,36 +285,36 @@ "afy" = (/turf/simulated/floor/plasteel,/area/security/range) "afz" = (/obj/machinery/magnetic_module,/obj/structure/target_stake,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/range) "afA" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/range) -"afB" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"afC" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/camera{c_tag = "Brig Evidence Storage"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"afD" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"afE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/security/evidence) -"afF" = (/obj/structure/closet/secure_closet/brig,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/prisonlockers) -"afG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prisonlockers) -"afH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/power/apc{dir = 1; name = "Prisoner Lockers APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel,/area/security/prisonlockers) -"afI" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass_security{name = "Prisoner Lockers"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonlockers) -"afJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/permabrig) +"afB" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonlockers) +"afC" = (/turf/simulated/floor/plasteel,/area/security/securehallway) +"afD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/sign/poster/legit{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/securehallway) +"afE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) +"afF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/wall,/area/security/prisonlockers) +"afG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/security/securehallway) +"afH" = (/turf/simulated/wall,/area/security/interrogationhallway) +"afI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) +"afJ" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/vending/security,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "afK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/permabrig) "afL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/permabrig) -"afM" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/permabrig) +"afM" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Armory"; req_access_txt = "3"},/turf/simulated/floor/plasteel,/area/security/armoury) "afN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Civilian"},/turf/simulated/floor/plating,/area/maintenance/genetics) "afO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/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/door/window/brigdoor{dir = 2; name = "Secure Armory"; req_access_txt = "3"},/obj/machinery/door/window/brigdoor{dir = 1; name = "Secure Armory"; req_access_txt = "3"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) "afP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/securearmoury) "afQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/securearmoury) -"afR" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/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{icon_state = "red"; dir = 1},/area/security/securehallway) -"afS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/securehallway) -"afT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) -"afU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/sign/poster/legit{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) -"afV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) +"afR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) +"afS" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/securehallway) +"afT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/securehallway) +"afU" = (/obj/machinery/door/airlock/multi_tile/glass{req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/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/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/main) +"afV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/securehallway) "afW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/camera{c_tag = "Brig North Hallway"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) "afX" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) "afY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) -"afZ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) +"afZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/wall,/area/security/main) "aga" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) "agb" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) -"agc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/securehallway) -"agd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/wall,/area/security/podbay) -"age" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/table/reinforced,/obj/item/clothing/suit/jacket/pilot,/obj/item/clothing/head/beret/sec,/obj/machinery/light_switch{pixel_x = -25},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/item/device/spacepod_key{id = 100000},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) +"agc" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/table/reinforced,/obj/item/clothing/suit/jacket/pilot,/obj/item/clothing/head/beret/sec,/obj/machinery/light_switch{pixel_x = -25},/obj/item/device/spacepod_key{id = 100000},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) +"agd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/wall,/area/security/podbay) +"age" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/securehallway) "agf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "agg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "agh" = (/obj/structure/closet/secure_closet/security,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Security Podbay APC"; pixel_x = 25},/obj/item/device/spacepod_equipment/weaponry/laser,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) @@ -323,158 +323,158 @@ "agk" = (/obj/effect/decal/warning_stripes/southeast,/turf/simulated/floor/plasteel,/area/security/range) "agl" = (/obj/effect/decal/warning_stripes/southwest,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/range) "agm" = (/obj/effect/decal/warning_stripes/southeast,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/range) -"agn" = (/obj/structure/closet/secure_closet/brig,/obj/item/device/radio/intercom/department/security{pixel_x = -28},/turf/simulated/floor/plasteel,/area/security/prisonlockers) -"ago" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prisonlockers) -"agp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prisonlockers) +"agn" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/deployable/barrier,/obj/machinery/light_switch{pixel_x = -25},/obj/effect/decal/warning_stripes/red/hollow,/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Armory APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) +"ago" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/securehallway) +"agp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/security/seceqstorage) "agq" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/prisonlockers) "agr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) "ags" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/security/permabrig) "agt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/security/permabrig) -"agu" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) +"agu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/security/seceqstorage) "agv" = (/turf/simulated/wall,/area/security/armoury) "agw" = (/obj/machinery/deployable/barrier,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) -"agx" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway) +"agx" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "agy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/warning_stripes/north,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "agz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/deployable/barrier,/obj/effect/decal/warning_stripes/northeastcorner,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) -"agA" = (/obj/structure/closet/bombcloset,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/security/armoury) -"agB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/vending/security,/obj/effect/decal/warning_stripes/northwestcorner,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) -"agC" = (/turf/simulated/wall,/area/security/securehallway) -"agD" = (/obj/structure/closet/l3closet/security,/turf/simulated/floor/plasteel,/area/security/armoury) -"agE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/securehallway) -"agF" = (/turf/simulated/floor/plasteel,/area/security/securehallway) -"agG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/securehallway) -"agH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/security/securehallway) -"agI" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/securehallway) -"agJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/security/securehallway) -"agK" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/securehallway) -"agL" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) +"agA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall,/area/security/main) +"agB" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plasteel,/area/security/prisonlockers) +"agC" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/main) +"agD" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/main) +"agE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) +"agF" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel,/area/security/prisonlockers) +"agG" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/main) +"agH" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/main) +"agI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 100; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) +"agJ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) +"agK" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Armory"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) +"agL" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Pods"; req_access_txt = "71"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "agM" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "agN" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Security Pod Pilot"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "agO" = (/obj/machinery/computer/security{network = list("SS13","Research Outpost","Mining Outpost")},/obj/machinery/camera{c_tag = "Brig Pod Pilot's Office"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "agP" = (/obj/structure/sign/nosmoking_2,/turf/simulated/wall/r_wall,/area/security/podbay) "agQ" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) "agR" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk2"; icon_state = "catwalk2"},/area/solar/auxstarboard) -"agS" = (/turf/simulated/wall/r_wall,/area/security/interrogation) -"agT" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/power/apc{dir = 1; name = "Interrogation APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/security/interrogation) -"agU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/security/interrogation) -"agV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/security/interrogation) -"agW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Interrogation"; req_access = null; req_access_txt = "63"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/interrogation) -"agX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/security/prisonlockers) -"agY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/security/prisonlockers) -"agZ" = (/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"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prisonlockers) +"agS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/interrogation) +"agT" = (/obj/item/weapon/restraints/handcuffs/pinkcuffs,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/security/prisonlockers) +"agU" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/interrogationhallway) +"agV" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/armoury) +"agW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/permabrig) +"agX" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) +"agY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/wall,/area/security/seceqstorage) +"agZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/seceqstorage) "aha" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/prisonlockers) "ahb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) -"ahc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/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 = ""},/turf/simulated/floor/plasteel,/area/security/permabrig) -"ahd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/permabrig) -"ahe" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Prison Wing APC"; pixel_x = 26; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) -"ahf" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/deployable/barrier,/obj/machinery/light_switch{pixel_x = -25},/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) -"ahg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/securehallway) +"ahc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/security/permabrig) +"ahd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/light{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/security/permabrig) +"ahe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/security/permabrig) +"ahf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/permabrig) +"ahg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Equipment Storage"; req_access_txt = "1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/seceqstorage) "ahh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "ahi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/deployable/barrier,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "ahj" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) -"ahk" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Armory"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/armoury) +"ahk" = (/obj/structure/closet/secure_closet/security,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/seceqstorage) "ahl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/securehallway) "ahm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) -"ahn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/securehallway) -"aho" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/power/apc{name = "Security Secure Hallway APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/securehallway) +"ahn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/permabrig) +"aho" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/main) "ahp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/securehallway) -"ahq" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/securehallway) -"ahr" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/securehallway) -"ahs" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/securehallway) -"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) +"ahq" = (/obj/machinery/light{dir = 4},/obj/structure/rack,/obj/item/weapon/storage/box/teargas,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) +"ahr" = (/obj/structure/sink{pixel_y = 18},/obj/structure/mirror{pixel_y = 32},/obj/item/device/radio/intercom/department/security{pixel_x = 28; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/seceqstorage) +"ahs" = (/obj/structure/disposalpipe/segment,/obj/structure/table,/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/main) +"aht" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/security/main) +"ahu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/main) "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) "ahA" = (/turf/simulated/wall/r_wall,/area/security/main) "ahB" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxstarboard) -"ahC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/security/interrogation) -"ahD" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/security/interrogation) -"ahE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/security/interrogation) -"ahF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/security/interrogation) -"ahG" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera{c_tag = "Brig Prison Lockers"; dir = 4; network = list("SS13")},/obj/machinery/light_switch{pixel_x = -25},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel,/area/security/prisonlockers) -"ahH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/prisonlockers) -"ahI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel,/area/security/prisonlockers) +"ahC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/interrogation) +"ahD" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door_control{id = "Interrogation"; name = "Interrogation Privacy Shutter"; pixel_x = -28; pixel_y = -3; range = 20; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/interrogation) +"ahE" = (/turf/simulated/wall,/area/security/processing) +"ahF" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/requests_console{department = "Security"; departmentType = 5; name = "Security Requests Console"; pixel_x = -30; pixel_y = 30},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/seceqstorage) +"ahG" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/seceqstorage) +"ahH" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/interrogationhallway) +"ahI" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/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/machinery/door/airlock/security{name = "Warden's office"; req_access = null; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "ahJ" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/door/airlock/glass_security{name = "Prisoner Lockers"; req_access_txt = "63"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/prisonlockers) -"ahK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) -"ahL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/permabrig) -"ahM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/permabrig) -"ahN" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 100; on = 1; pressure_checks = 1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) -"ahO" = (/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Armory APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) -"ahP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/securehallway) +"ahK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/main) +"ahL" = (/obj/machinery/vending/cigarette,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/main) +"ahM" = (/obj/structure/table,/obj/item/ashtray/bronze{pixel_x = 2; pixel_y = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/item/weapon/storage/fancy/cigarettes/cigpack_robust,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/main) +"ahN" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/permabrig) +"ahO" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/security/armoury) +"ahP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/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/security/seceqstorage) "ahQ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/effect/landmark{name = "blobstart"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "ahR" = (/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 = "floorgrime"},/area/security/armoury) "ahS" = (/turf/simulated/floor/plasteel,/area/security/armoury) -"ahT" = (/obj/machinery/light{dir = 4},/obj/structure/rack,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/storage/box/teargas,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) +"ahT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/permabrig) "ahU" = (/turf/simulated/wall,/area/security/main) -"ahV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/security/main) -"ahW" = (/obj/machinery/door/airlock/multi_tile/glass{req_access_txt = "1"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/security/securehallway) -"ahX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/security/securehallway) -"ahY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/securehallway) +"ahV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/seceqstorage) +"ahW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel,/area/security/seceqstorage) +"ahX" = (/obj/structure/stool,/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/seceqstorage) +"ahY" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/seceqstorage) "ahZ" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/securehallway) -"aia" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/securehallway) -"aib" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/securehallway) -"aic" = (/obj/machinery/door/airlock/multi_tile/glass{req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/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/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/securehallway) -"aid" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/securehallway) +"aia" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/main) +"aib" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) +"aic" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/main) +"aid" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/stool,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/main) "aie" = (/turf/simulated/floor/plasteel,/area/shuttle/gamma/station) -"aif" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/radio/intercom/department/security{pixel_x = -28},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/security/interrogation) -"aig" = (/obj/structure/table/reinforced{tag = "icon-table"; icon_state = "table"},/obj/item/device/flashlight/lamp,/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/security/interrogation) -"aih" = (/obj/machinery/camera{c_tag = "Brig Interrogation"; dir = 9; network = list("Interrogation","SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/security/interrogation) -"aii" = (/obj/structure/closet/secure_closet/brig,/turf/simulated/floor/plasteel,/area/security/prisonlockers) -"aij" = (/obj/structure/closet/secure_closet/brig,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/security/prisonlockers) -"aik" = (/obj/structure/closet/secure_closet/brig,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel,/area/security/prisonlockers) +"aif" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/seceqstorage) +"aig" = (/obj/machinery/power/apc{dir = 1; name = "Interrogation APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/interrogation) +"aih" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/security/armoury) +"aii" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/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/plasteel,/area/security/seceqstorage) +"aij" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/light{dir = 8},/obj/structure/closet/secure_closet/security,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/seceqstorage) +"aik" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/securehallway) "ail" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/security/prisonlockers) -"aim" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/permabrig) -"ain" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/permabrig) -"aio" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/permabrig) -"aip" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/permabrig) +"aim" = (/obj/machinery/camera{c_tag = "Brig Armory"; dir = 4; network = list("SS13")},/obj/machinery/flasher/portable,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) +"ain" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Interrogation"; name = "Interrogation Privacy Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/security/interrogation) +"aio" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/sign/securearea,/turf/simulated/floor/plating,/area/security/seceqstorage) +"aip" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/seceqstorage) "aiq" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/flasher/portable,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/device/radio/intercom/department/security{pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "air" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/security/armoury) "ais" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/flasher/portable,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "ait" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 100; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "aiu" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/lockbox/loyalty,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) -"aiv" = (/obj/structure/closet/wardrobe/red,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/device/radio/intercom/department/security{pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/main) -"aiw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/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{icon_state = "red"; dir = 1},/area/security/main) -"aix" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/main) -"aiy" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/main) -"aiz" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/main) -"aiA" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/main) -"aiB" = (/obj/structure/table/reinforced,/obj/item/device/radio,/obj/item/weapon/crowbar,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) +"aiv" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Interrogation"; name = "Interrogation Privacy Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/security/interrogation) +"aiw" = (/obj/machinery/hologram/holopad,/obj/machinery/camera{c_tag = "Brig Interrogation"; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/interrogation) +"aix" = (/obj/structure/disposalpipe/segment,/obj/structure/stool/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/main) +"aiy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) +"aiz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/wall,/area/security/interrogationhallway) +"aiA" = (/obj/structure/table/reinforced{tag = "icon-table"; icon_state = "table"},/obj/item/device/flashlight/lamp,/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/interrogation) +"aiB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Interrogation"; req_access = null; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/interrogation) "aiC" = (/turf/simulated/floor/plasteel,/area/security/main) -"aiD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/main) -"aiE" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/main) -"aiF" = (/obj/structure/table,/obj/item/weapon/folder/red,/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/main) -"aiG" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/plasteel,/area/security/main) -"aiH" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Security Officer"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/main) +"aiD" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) +"aiE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/table/reinforced,/obj/item/weapon/folder/red{pixel_y = 3},/turf/simulated/floor/plasteel,/area/security/main) +"aiF" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/paper/armory,/obj/machinery/requests_console{department = "Warden"; departmentType = 7; name = "Warden's Requests Console"; pixel_x = 30; pixel_y = 30},/obj/item/device/megaphone,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) +"aiG" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) +"aiH" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/red{pixel_y = 3},/turf/simulated/floor/plasteel,/area/security/main) "aiI" = (/turf/simulated/floor/plating/airless,/obj/structure/cable,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxstarboard) "aiJ" = (/obj/machinery/camera{c_tag = "Brig Firing Range West"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/range) "aiK" = (/obj/machinery/camera{c_tag = "Brig Firing Range East"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/range) -"aiL" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/security/interrogation) -"aiM" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/security/interrogation) -"aiN" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/security/interrogation) +"aiL" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/main) +"aiM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/seceqstorage) +"aiN" = (/obj/structure/stool,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/seceqstorage) "aiO" = (/turf/simulated/wall,/area/security/prisonlockers) -"aiP" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) -"aiQ" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/permabrig) -"aiR" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/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/plating,/area/security/permabrig) +"aiP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera{c_tag = "Brig Security Equipment Lockers"; dir = 4; network = list("SS13")},/obj/structure/sign/poster/legit{pixel_x = -32; pixel_y = 0},/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/seceqstorage) +"aiQ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/interrogationhallway) +"aiR" = (/turf/simulated/wall,/area/security/seceqstorage) "aiS" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) -"aiT" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/camera{c_tag = "Brig Armory"; dir = 4; network = list("SS13")},/obj/machinery/flasher/portable,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) +"aiT" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/seceqstorage) "aiU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/flasher/portable,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "aiV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/armoury) "aiW" = (/obj/structure/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/handcuffs,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "aiX" = (/obj/structure/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "aiY" = (/obj/structure/table,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/lock_buster,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) -"aiZ" = (/obj/machinery/recharger/wallcharger{pixel_x = -25; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) -"aja" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/main) -"ajb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel,/area/security/main) -"ajc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/main) -"ajd" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/main) -"aje" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/main) -"ajf" = (/obj/structure/table/reinforced,/obj/item/device/assembly/timer,/obj/item/device/megaphone,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) -"ajg" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) -"ajh" = (/obj/structure/table,/obj/item/weapon/folder/red,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/main) -"aji" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Security Officer"},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/turf/simulated/floor/plasteel,/area/security/main) +"aiZ" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/interrogationhallway) +"aja" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/security/seceqstorage) +"ajb" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/obj/machinery/sleeper/syndie{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) +"ajc" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/machinery/camera{c_tag = "Brig Medbay"; dir = 2; network = list("SS13")},/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/security/medbay) +"ajd" = (/obj/structure/table/reinforced{tag = "icon-table"; icon_state = "table"},/obj/machinery/door/window/brigdoor/southleft{dir = 4; req_access_txt = "63"},/obj/machinery/door/window/brigdoor{dir = 8; name = "Warden's Desk"; req_access_txt = "3"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) +"aje" = (/obj/machinery/sleeper/syndie{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) +"ajf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/security/seceqstorage) +"ajg" = (/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/seceqstorage) +"ajh" = (/obj/structure/stool/bed/chair/comfy/black,/obj/effect/landmark/start{name = "Head of Security"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) +"aji" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/red{pixel_y = 3},/obj/item/weapon/book/manual/security_space_law/black,/turf/simulated/floor/plasteel,/area/security/main) "ajj" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) "ajk" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxstarboard) "ajl" = (/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 = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxstarboard) @@ -487,25 +487,25 @@ "ajs" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/laser/practice,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/item/weapon/paper/firingrange,/turf/simulated/floor/plasteel,/area/security/range) "ajt" = (/turf/simulated/wall/r_wall,/area/security/medbay) "aju" = (/turf/simulated/wall,/area/security/medbay) -"ajv" = (/obj/structure/table,/obj/item/weapon/folder/red{pixel_y = 3},/obj/machinery/camera{c_tag = "Brig Prisoner Processing"; dir = 2; network = list("SS13")},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/processing) -"ajw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/processing) -"ajx" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/processing) -"ajy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/processing) -"ajz" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/processing) -"ajA" = (/turf/simulated/wall/r_wall,/area/security/warden) +"ajv" = (/obj/machinery/camera{c_tag = "Brig Briefing Room East"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/main) +"ajw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) +"ajx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/wall,/area/security/interrogationhallway) +"ajy" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/machinery/requests_console{department = "Brig Medbay"; departmentType = 3; name = "Brig Medbay Requests Console"; pixel_y = 30},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/security/medbay) +"ajz" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/interrogationhallway) +"ajA" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/machinery/light{dir = 1},/obj/structure/reagent_dispensers/peppertank{pixel_y = 30},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/security/medbay) "ajB" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/warden) "ajC" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/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/plating,/area/security/warden) -"ajD" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/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/machinery/door/airlock/glass_security{name = "Armory"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) +"ajD" = (/obj/effect/landmark{name = "revenantspawn"},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/security/medbay) "ajE" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/security/warden) "ajF" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/warden) "ajG" = (/turf/simulated/wall,/area/security/warden) -"ajH" = (/obj/machinery/recharger/wallcharger{pixel_x = -25; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/camera{c_tag = "Brig Security Equipment"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) -"ajI" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor/plasteel,/area/security/main) -"ajJ" = (/obj/structure/table,/obj/item/device/eftpos,/turf/simulated/floor/plasteel,/area/security/main) -"ajK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/security/main) -"ajL" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) +"ajH" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/interrogationhallway) +"ajI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Equipment Storage"; req_access_txt = "1"},/turf/simulated/floor/plasteel,/area/security/seceqstorage) +"ajJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/interrogation) +"ajK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/stool/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/main) +"ajL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/interrogationhallway) "ajM" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/security/main) -"ajN" = (/obj/machinery/camera{c_tag = "Brig Briefing Room"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel,/area/security/main) +"ajN" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/security/warden) "ajO" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/security/main) "ajP" = (/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/auxstarboard) "ajQ" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxport) @@ -515,33 +515,33 @@ "ajU" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/range) "ajV" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/range) "ajW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/range) -"ajX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/hologram/holopad,/obj/machinery/requests_console{department = "Security"; departmentType = 3; name = "Security Requests Console"; pixel_x = -30; pixel_y = -30},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) -"ajY" = (/obj/machinery/sleeper{dir = 8; name = "Prisoner Sleeper"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/security/medbay) -"ajZ" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-whiteblue"; icon_state = "whiteblue"},/area/security/medbay) -"aka" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/machinery/camera{c_tag = "Brig Medbay"; dir = 2; network = list("SS13")},/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) -"akb" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) +"ajX" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/security/main) +"ajY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/folder/red{pixel_y = 3},/obj/item/ashtray/bronze{pixel_x = -1; pixel_y = 1},/obj/item/device/megaphone,/turf/simulated/floor/plasteel,/area/security/main) +"ajZ" = (/obj/structure/disposalpipe/segment,/obj/item/roller,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/security/medbay) +"aka" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Equipment Storage"; req_access_txt = "1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/seceqstorage) +"akb" = (/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"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/table/reinforced,/obj/item/weapon/book/manual/sop_security,/turf/simulated/floor/plasteel,/area/security/main) "akc" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/table/reinforced,/obj/machinery/syndicatebomb/training,/obj/machinery/requests_console{department = "Security"; departmentType = 3; name = "Security Requests Console"; pixel_x = 30},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/range) -"akd" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) -"ake" = (/obj/structure/table,/obj/item/device/camera{name = "detectives camera"; desc = "A one use - polaroid camera. 30 photos left."; pixel_x = 0; pixel_y = 0; pictures_left = 30},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/processing) -"akf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/processing) -"akg" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor/plasteel,/area/security/processing) -"akh" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/security/processing) -"aki" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/processing) -"akj" = (/obj/machinery/photocopier,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/newscaster/security_unit{pixel_x = -32; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) +"akd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/stool/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) +"ake" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/security/main) +"akf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/security/main) +"akg" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/main) +"akh" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/main) +"aki" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/security/seceqstorage) +"akj" = (/obj/machinery/photocopier,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/newscaster/security_unit{pixel_x = -32; pixel_y = 32},/obj/machinery/power/apc{dir = 1; name = "Starboard Hall East APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "akk" = (/obj/structure/filingcabinet/chestdrawer,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera{c_tag = "Brig Warden's Office"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "akl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/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/plasteel{icon_state = "dark"},/area/security/warden) "akm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/closet/secure_closet/warden,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) -"akn" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/machinery/requests_console{department = "Brig Medbay"; departmentType = 3; name = "Brig Medbay Requests Console"; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) -"ako" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/closet/redcorp,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/main) -"akp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/main) -"akq" = (/obj/structure/table,/turf/simulated/floor/plasteel,/area/security/main) -"akr" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/main) -"aks" = (/obj/machinery/door/airlock/security{name = "Equipment Storage"; req_access_txt = "1"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/security/main) -"akt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/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,/area/security/main) -"aku" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/effect/landmark/start{name = "Head of Security"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) -"akv" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/device/taperecorder{pixel_y = 0},/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"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) -"akw" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/main) -"akx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel,/area/security/main) +"akn" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/power/apc{dir = 1; name = "Starboard Hall East APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/seceqstorage) +"ako" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Interrogation Hallway APC"; pixel_x = -24; pixel_y = 0},/obj/machinery/camera{c_tag = "Interrogation Hallway"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/interrogationhallway) +"akp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/book/manual/sop_legal,/turf/simulated/floor/plasteel,/area/security/main) +"akq" = (/obj/structure/reagent_dispensers/peppertank{pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/seceqstorage) +"akr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/interrogationhallway) +"aks" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/seceqstorage) +"akt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/obj/structure/sign/goldenplaque{pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/seceqstorage) +"aku" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/security/seceqstorage) +"akv" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/interrogationhallway) +"akw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/recharger/wallcharger{pixel_y = 25},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/recharger/wallcharger{pixel_y = 35},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/seceqstorage) +"akx" = (/obj/item/weapon/storage/box/masks{pixel_x = 6; pixel_y = 2},/obj/item/weapon/storage/box/gloves,/obj/structure/table/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/security/medbay) "aky" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel,/area/bridge) "akz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel,/area/security/main) "akA" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch/gamma{locked = 1; req_access_txt = "1"; use_power = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/main) @@ -561,29 +561,29 @@ "akO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) "akP" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 100; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) "akQ" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) -"akR" = (/obj/structure/stool/bed/roller,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) -"akS" = (/obj/structure/table,/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/item/weapon/storage/box/evidence,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/processing) -"akT" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/processing) -"akU" = (/obj/structure/table,/turf/simulated/floor/plasteel,/area/security/processing) -"akV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/security/processing) +"akR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/interrogationhallway) +"akS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/main) +"akT" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/seceqstorage) +"akU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/stool/bed/chair{dir = 1},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/main) +"akV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle) "akW" = (/obj/structure/table/reinforced{tag = "icon-table_vertical"; icon_state = "table_vertical"},/obj/machinery/door/window/brigdoor{dir = 4; name = "Warden's Desk"; req_access_txt = "3"},/obj/machinery/door/window/westright{name = "Reception Door"; req_access = null; req_access_txt = "0"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/warden) "akX" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "akY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "akZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "ala" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "alb" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 100; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) -"alc" = (/obj/structure/table/reinforced{tag = "icon-table_vertical"; icon_state = "table_vertical"},/obj/machinery/door/window/brigdoor{dir = 8; name = "Warden's Desk"; req_access_txt = "3"},/obj/machinery/door/window/eastleft,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/warden) -"ald" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) -"ale" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/main) -"alf" = (/obj/structure/table,/obj/machinery/media/receiver/boombox,/turf/simulated/floor/plasteel,/area/security/main) -"alg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/main) -"alh" = (/obj/structure/closet/secure_closet/security,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/main) -"ali" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/main) -"alj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom/department/security{pixel_x = -28},/turf/simulated/floor/plasteel,/area/security/main) -"alk" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 7},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) -"all" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) -"alm" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/security/main) -"aln" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel,/area/security/main) +"alc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/stool/bed/chair{dir = 1},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/main) +"ald" = (/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/main) +"ale" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/stool/bed/chair{dir = 1},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/main) +"alf" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/main) +"alg" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Office"; req_access_txt = "1"},/turf/simulated/floor/plasteel,/area/security/seceqstorage) +"alh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/item/device/radio/intercom/department/security{pixel_x = -28},/obj/machinery/camera{c_tag = "Brig Briefing Room West"; dir = 4; network = list("SS13")},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) +"ali" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/device/radio,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/seceqstorage) +"alj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/seceqstorage) +"alk" = (/obj/machinery/door/window/eastright{dir = 1; name = "Security Delivery"; req_access_txt = "1"},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/security/main) +"all" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel,/area/security/seceqstorage) +"alm" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/security/medbay) +"aln" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "Prisoner Processing APC"; pixel_x = 0; pixel_y = 25},/obj/machinery/camera{c_tag = "Brig Labor Camp Airlock North"; network = list("SS13")},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/table,/obj/item/weapon/storage/box/prisoner,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle) "alo" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxstarboard) "alp" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport) "alq" = (/turf/simulated/floor/plating/airless,/obj/structure/cable,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxport) @@ -596,24 +596,24 @@ "alx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/landmark/start{name = "Brig Physician"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) "aly" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) "alz" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) -"alA" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/device/radio/intercom/department/security{pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/processing) -"alB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/processing) -"alC" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 100; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel,/area/security/processing) -"alD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/processing) -"alE" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/processing) +"alA" = (/turf/simulated/wall,/area/security/brig) +"alB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) +"alC" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/security/seceqstorage) +"alD" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Brig"; name = "Interrogation Hallway"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/interrogationhallway) +"alE" = (/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"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/interrogationhallway) "alF" = (/obj/machinery/computer/secure_data,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "alG" = (/obj/structure/stool/bed/chair/office/dark,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/landmark/start{name = "Warden"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "alH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "alI" = (/obj/structure/table,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) -"alJ" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/paper/armory,/obj/machinery/requests_console{department = "Warden"; departmentType = 7; name = "Warden's Requests Console"; pixel_x = 30; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) -"alK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/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/security/main) -"alL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/main) -"alM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/main) -"alN" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/main) -"alO" = (/obj/structure/table/reinforced,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flash,/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) -"alP" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) -"alQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/security/main) -"alR" = (/obj/structure/closet/secure_closet/security,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel,/area/security/main) +"alJ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/main) +"alK" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/range) +"alL" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/glass_security{name = "Security Office"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/main) +"alM" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/disposalpipe/segment{name = "Sorting Office"},/turf/simulated/floor/plasteel,/area/security/main) +"alN" = (/obj/machinery/light/small{dir = 8},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/interrogationhallway) +"alO" = (/obj/structure/disposalpipe/segment{name = "Sorting Office"},/turf/simulated/wall,/area/security/main) +"alP" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 1; location = "Security"},/obj/structure/plasticflaps{opacity = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"alQ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Brig"; name = "Interrogation Hallway"; req_access_txt = "63"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/interrogationhallway) +"alR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/sign/poster/legit{pixel_x = 0; pixel_y = 32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) "alS" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk4"; icon_state = "catwalk4"},/area/solar/auxport) "alT" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/solar/auxport) "alU" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/solar/auxport) @@ -627,37 +627,37 @@ "amc" = (/turf/simulated/wall/r_wall,/area/space) "amd" = (/turf/simulated/wall,/area/security/range) "ame" = (/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass_security{name = "Firing Range"; req_access_txt = "1"},/turf/simulated/floor/plasteel,/area/security/range) -"amf" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/security/range) +"amf" = (/obj/structure/closet/secure_closet/brigdoc,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/security/medbay) "amg" = (/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_security{name = "Firing Range"; req_access_txt = "1"},/turf/simulated/floor/plasteel,/area/security/range) -"amh" = (/obj/structure/closet/secure_closet/brigdoc,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) +"amh" = (/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/reagent_containers/syringe/charcoal,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/security/medbay) "ami" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) "amj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) -"amk" = (/obj/item/clothing/accessory/stethoscope,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/glasses/hud/health,/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/security/medbay) -"aml" = (/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/reagent_containers/syringe/charcoal,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) -"amm" = (/obj/machinery/computer/med_data/laptop,/obj/structure/table/glass,/obj/item/device/radio/intercom/department/security{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/security/medbay) -"amn" = (/obj/item/weapon/storage/box/masks{pixel_x = 6; pixel_y = 2},/obj/item/weapon/storage/box/gloves,/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/security/medbay) -"amo" = (/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Prisoner Processing APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/processing) -"amp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/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/security/processing) -"amq" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/processing) -"amr" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/processing) +"amk" = (/obj/item/clothing/accessory/stethoscope,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/glasses/hud/health,/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/security/medbay) +"aml" = (/obj/machinery/computer/med_data/laptop,/obj/structure/table/glass,/obj/item/device/radio/intercom/department/security{pixel_x = 0; pixel_y = -28},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/security/medbay) +"amm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/interrogationhallway) +"amn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/interrogationhallway) +"amo" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/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{icon_state = "red"; dir = 1},/area/security/brig) +"amp" = (/obj/item/device/radio/intercom/department/security{pixel_x = -28},/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/camera{c_tag = "Brig Interrogation Observation"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/interrogationhallway) +"amq" = (/obj/structure/rack,/obj/item/weapon/reagent_containers/spray/pepper{pixel_x = -2; pixel_y = -2},/obj/item/weapon/reagent_containers/spray/pepper{pixel_x = -4; pixel_y = -4},/obj/item/weapon/reagent_containers/spray/pepper{pixel_y = -4},/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/seceqstorage) +"amr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) "ams" = (/obj/machinery/computer/security{network = list("SS13","Research Outpost","Mining Outpost")},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "amt" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/crowbar,/obj/item/device/radio,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "amu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/armoury) "amv" = (/obj/machinery/computer/prisoner,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) -"amw" = (/obj/structure/table,/obj/item/weapon/book/manual/sop_legal,/turf/simulated/floor/plasteel,/area/security/main) -"amx" = (/obj/machinery/vending/security,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/main) +"amw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/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/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig) +"amx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{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{icon_state = "red"; dir = 1},/area/security/brig) "amy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/main) "amz" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/main) -"amA" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/main) -"amB" = (/obj/structure/reagent_dispensers/peppertank{pixel_y = -30},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/main) -"amC" = (/obj/structure/closet/secure_closet/security,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/main) -"amD" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/main) -"amE" = (/obj/structure/table/reinforced,/obj/structure/table/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{name = "Security Office APC"; pixel_y = -24},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) -"amF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 0; pixel_y = -32; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/security/main) -"amG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/main) -"amH" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Security Officer"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plasteel,/area/security/main) -"amI" = (/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plasteel,/area/security/main) -"amJ" = (/obj/machinery/door/window/eastright{dir = 1; name = "Security Delivery"; req_access_txt = "1"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/security/main) +"amA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) +"amB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/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{icon_state = "red"; dir = 1},/area/security/brig) +"amC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/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"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) +"amD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/seceqstorage) +"amE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/light{dir = 1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) +"amF" = (/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"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) +"amG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/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/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig) +"amH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/sortjunction{dir = 1; icon_state = "pipe-j2s"; sortType = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) +"amI" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/security/brig) +"amJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/brig) "amK" = (/turf/simulated/wall/r_wall,/area/maintenance/fsmaint) "amL" = (/obj/structure/cable,/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport) "amM" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxport) @@ -671,25 +671,25 @@ "amU" = (/obj/machinery/computer/secure_data,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/prisonershuttle) "amV" = (/obj/machinery/computer/prisoner{req_access = null; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle) "amW" = (/obj/machinery/computer/shuttle/labor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle) -"amX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "Prisoner Processing APC"; pixel_x = 0; pixel_y = 25},/obj/machinery/camera{c_tag = "Brig Labor Camp Airlock North"; network = list("SS13")},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle) -"amY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle) +"amX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table/reinforced,/obj/item/stack/medical/advanced/bruise_pack,/obj/machinery/vending/wallmed1{dir = 2; name = "Emergency NanoMed"; pixel_x = -27; pixel_y = 0; req_access_txt = "0"},/obj/machinery/camera{c_tag = "Brig Security Equipment South"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/seceqstorage) +"amY" = (/obj/machinery/light,/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/obj/structure/rack,/obj/item/weapon/restraints/handcuffs{pixel_y = -4},/obj/item/weapon/restraints/handcuffs,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/seceqstorage) "amZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonershuttle) "ana" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle) "anb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonershuttle) "anc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/item/device/radio/intercom/department/security{pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/prisonershuttle) "and" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Brig Medical Bay"; req_access_txt = "0"; req_one_access_txt = "63"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) "ane" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Brig Medical Bay"; req_access_txt = "0"; req_one_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) -"anf" = (/obj/structure/sign/securearea,/turf/simulated/wall,/area/security/processing) -"ang" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Brig"; name = "Brig"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/processing) -"anh" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/processing) -"ani" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Brig"; name = "Brig"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/security/processing) +"anf" = (/obj/structure/disposalpipe/segment{name = "Sorting Office"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig) +"ang" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Prisoner Processing"; req_access_txt = "1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prisonershuttle) +"anh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/security/courtroomdandp) +"ani" = (/turf/simulated/wall,/area/security/courtroomdandp) "anj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/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/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Warden's Office"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) -"ank" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/security/main) -"anl" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Equipment Storage"; req_access_txt = "1"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/main) -"anm" = (/obj/structure/sign/securearea,/turf/simulated/wall,/area/security/main) +"ank" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) +"anl" = (/obj/machinery/light_switch{pixel_y = -25},/obj/structure/rack,/obj/item/device/flash,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/seceqstorage) +"anm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) "ann" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/security/main) -"ano" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Office"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/main) -"anp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Office"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/main) +"ano" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) +"anp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "anq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/mob/living/simple_animal/bot/floorbot{on = 0},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "anr" = (/obj/machinery/light/small{dir = 1},/obj/structure/closet/emcloset,/obj/machinery/camera{c_tag = "Security Pod"; dir = 2; network = list("SS13")},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "ans" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/shuttle/pod_3) @@ -720,31 +720,31 @@ "anR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/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 = ""},/turf/simulated/floor/plasteel,/area/security/brig) "anS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) "anT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) -"anU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) -"anV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/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 = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) -"anW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/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 = ""},/turf/simulated/floor/plasteel,/area/security/brig) -"anX" = (/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 = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) -"anY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/brig) -"anZ" = (/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 = "Brig Main Hall"; dir = 2; network = list("SS13")},/obj/machinery/hologram/holopad,/obj/structure/sign/poster/legit{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) -"aoa" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) -"aob" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) -"aoc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/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 = ""},/turf/simulated/floor/plasteel,/area/security/brig) -"aod" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) -"aoe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) -"aof" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) -"aog" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) -"aoh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/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 = ""},/turf/simulated/floor/plasteel,/area/security/brig) +"anU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/brig) +"anV" = (/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j1s"; sortType = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/brig) +"anW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/security/courtroomdandp) +"anX" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/security/lobby) +"anY" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/lobby) +"anZ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/security/lobby) +"aoa" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/glass_security{id_tag = "Brig"; name = "Prisoner Processing"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/processing) +"aob" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Brig"; name = "Prisoner Processing"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/processing) +"aoc" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/seceqstorage) +"aod" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "BrigFoyer"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/lobby) +"aoe" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/security/lobby) +"aof" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/courtroomdandp) +"aog" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/courtroomdandp) +"aoh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/courtroomdandp) "aoi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) "aoj" = (/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/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) "aok" = (/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{icon_state = "red"; dir = 1},/area/security/brig) "aol" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) "aom" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/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{icon_state = "red"; dir = 1},/area/security/brig) -"aon" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/sortjunction{dir = 1; icon_state = "pipe-j2s"; sortType = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) -"aoo" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/brig) -"aop" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig) -"aoq" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig) +"aon" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/item/flag/nt,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/courtroomdandp) +"aoo" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/lobby) +"aop" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = null; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/lobby) +"aoq" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/courtroomdandp) "aor" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = "63"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint) -"aos" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"aos" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/lobby) "aot" = (/obj/machinery/door/airlock/external{name = "Escape Pod"},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aou" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/shuttle/floor,/area/shuttle/pod_3) "aov" = (/turf/simulated/floor/plating,/area/maintenance/fsmaint) @@ -753,20 +753,20 @@ "aoy" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/pod_3) "aoz" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/shuttle/pod_3) "aoA" = (/turf/simulated/shuttle/wall,/area/shuttle/siberia) -"aoB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/prisonershuttle) +"aoB" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) "aoC" = (/turf/simulated/shuttle/floor,/area/shuttle/siberia) "aoD" = (/obj/machinery/mineral/labor_claim_console{machinedir = 1; pixel_x = 30; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/siberia) "aoE" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/siberia) "aoF" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/flasher{id = "gulagshuttleflasher"; pixel_x = 25},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor,/area/shuttle/siberia) "aoG" = (/obj/structure/closet/crate,/turf/simulated/shuttle/floor,/area/shuttle/siberia) -"aoH" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/table,/obj/item/weapon/storage/box/prisoner,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) -"aoI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonershuttle) -"aoJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/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 = ""},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) -"aoK" = (/obj/machinery/light,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) +"aoH" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/lobby) +"aoI" = (/obj/machinery/light_switch{pixel_x = -25},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/table,/turf/simulated/floor/plasteel,/area/security/processing) +"aoJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel,/area/security/processing) +"aoK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel,/area/security/processing) "aoL" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) -"aoM" = (/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) -"aoN" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) -"aoO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) +"aoM" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "Prisoner Processing APC"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/processing) +"aoN" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{name = "Security Office APC"; pixel_y = -24},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/main) +"aoO" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/security/courtroomdandp) "aoP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "aoQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "aoR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/brig) @@ -787,7 +787,7 @@ "apg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "aph" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "api" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/brig) -"apj" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/brig) +"apj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/door_timer/cell_3{dir = 8; id = "Cell 6"; layer = 4; name = "Cell 6"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) "apk" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/security/brig) "apl" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "apm" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint) @@ -799,12 +799,12 @@ "aps" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/syndicate_elite) "apt" = (/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Labor Shuttle Airlock"; req_access_txt = "2"},/obj/docking_port/mobile{dir = 8; dwidth = 2; height = 5; id = "laborcamp"; name = "labor camp shuttle"; rebuildable = 1; width = 9},/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 5; id = "laborcamp_home"; name = "fore bay 1"; width = 9},/turf/simulated/shuttle/floor,/area/shuttle/siberia) "apu" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/security/prisonershuttle) -"apv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonershuttle) +"apv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door_timer/cell_1{dir = 4; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) "apw" = (/turf/simulated/wall/r_wall,/area/security/prisonershuttle) -"apx" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/prisonershuttle) -"apy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Prisoner Processing"; req_access_txt = "1"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonershuttle) -"apz" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable,/turf/simulated/floor/plating,/area/security/prisonershuttle) -"apA" = (/turf/simulated/wall,/area/security/prisonershuttle) +"apx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/machinery/door_timer/cell_3{dir = 8; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) +"apy" = (/turf/simulated/floor/plasteel,/area/security/lobby) +"apz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/table,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) +"apA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/security/courtroomdandp) "apB" = (/turf/simulated/wall,/area/security/prison/cell_block/B) "apC" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "BrigWest"; name = "Brig"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) "apD" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "BrigWest"; name = "Brig"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) @@ -812,15 +812,15 @@ "apF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/security/prison/cell_block/A) "apG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "BrigEast"; name = "Brig"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) "apH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "BrigEast"; name = "Brig"; req_access_txt = "63"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) -"apI" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/glass_security{id_tag = "BrigFoyer"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/lobby) -"apJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/glass_security{id_tag = "BrigFoyer"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/lobby) -"apK" = (/turf/simulated/wall,/area/security/brig) -"apL" = (/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 1; icon_state = "rightsecure"; name = "Secure Door"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/brig) -"apM" = (/obj/machinery/door/window/brigdoor{dir = 1; req_access_txt = "63"},/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/brig) -"apN" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/glass_security{id_tag = "BrigFoyer"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/lobby) -"apO" = (/turf/simulated/wall,/area/security/prison/cell_block/C) -"apP" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Temporary Detainment"; name = "Temporary Detainment"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"apQ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Temporary Detainment"; name = "Temporary Detainment"; req_access_txt = "2"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) +"apI" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/stool/bed/chair,/obj/machinery/power/apc{dir = 4; name = "Courtroom Prosecution and Defense"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/courtroomdandp) +"apJ" = (/obj/structure/stool/bed/chair,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel,/area/security/courtroomdandp) +"apK" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/lobby) +"apL" = (/obj/item/device/radio/intercom/department/security{pixel_x = 28; pixel_y = 5},/obj/item/device/radio/intercom{pixel_x = 28; pixel_y = -10},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/lobby) +"apM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/security/lobby) +"apN" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/security/lobby) +"apO" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel,/area/security/processing) +"apP" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/security/processing) +"apQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/security/processing) "apR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/security/detectives_office) "apS" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/detectives_office) "apT" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/detectives_office) @@ -836,44 +836,44 @@ "aqd" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/shuttle/siberia) "aqe" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/siberia) "aqf" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/siberia) -"aqg" = (/obj/structure/closet/emcloset,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/item/device/radio/intercom/department/security{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/prisonershuttle) -"aqh" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle) -"aqi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonershuttle) -"aqj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle) -"aqk" = (/obj/machinery/vending/snack,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle) -"aql" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle) -"aqm" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/prisonershuttle) +"aqg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/processing) +"aqh" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"aqi" = (/obj/machinery/light{dir = 1},/obj/machinery/power/apc{dir = 1; name = "Detective APC"; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/table/woodentable,/obj/item/weapon/storage/photo_album{pixel_y = -10},/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"aqj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/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/structure/disposalpipe/segment{dir = 4},/obj/machinery/newscaster{pixel_y = 30},/obj/machinery/camera{c_tag = "Brig Main Hall 2"; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) +"aqk" = (/obj/structure/table/woodentable,/obj/structure/window/reinforced,/obj/item/weapon/folder{pixel_x = -4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/courtroomdandp) +"aql" = (/turf/simulated/wall/r_wall,/area/security/courtroomdandp) +"aqm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; layer = 2.4; on = 1},/obj/machinery/door/window/brigdoor/southleft{req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/courtroomdandp) "aqn" = (/obj/structure/closet/secure_closet/brig{id = "Cell 6"; name = "Cell 6 Locker"},/obj/machinery/camera{c_tag = "Brig Cell 6"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/B) "aqo" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B) "aqp" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/prison/cell_block/B) -"aqq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) +"aqq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/obj/structure/table/woodentable,/obj/structure/window/reinforced,/obj/item/weapon/folder{pixel_x = -4},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/courtroomdandp) "aqr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) "aqs" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) "aqt" = (/obj/structure/closet/secure_closet/brig{id = "Cell 3"; name = "Cell 3 Locker"},/obj/machinery/camera{c_tag = "Brig Cell 3"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/A) "aqu" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A) "aqv" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/security/prison/cell_block/A) -"aqw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) -"aqx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) +"aqw" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table/woodentable,/obj/structure/window/reinforced,/obj/item/weapon/folder/red,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/courtroomdandp) +"aqx" = (/obj/structure/table/woodentable,/obj/structure/window/reinforced,/obj/item/weapon/folder/red,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/courtroomdandp) "aqy" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/security/prison/cell_block/A) "aqz" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; layer = 2.4; on = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A) "aqA" = (/obj/structure/closet/secure_closet/brig{id = "Cell 1"; name = "Cell 1 Locker"},/obj/machinery/camera{c_tag = "Brig Cell 1"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison/cell_block/A) -"aqB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/lobby) -"aqC" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/lobby) -"aqD" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/brig) -"aqE" = (/obj/machinery/computer/station_alert/security,/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/brig) -"aqF" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/brig) -"aqG" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/security/brig) -"aqH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/lobby) -"aqI" = (/obj/structure/table,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"aqJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/item/device/radio/intercom/department/security{pixel_x = 0; pixel_y = 25},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"aqK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"aqL" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) +"aqB" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/security/lobby) +"aqC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B) +"aqD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) +"aqE" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/security/processing) +"aqF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/wall,/area/security/processing) +"aqG" = (/obj/machinery/computer/security{network = list("SS13","Research Outpost","Mining Outpost")},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{dir = 6; icon_state = "red"},/area/security/lobby) +"aqH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/stool/bed/chair/office/dark,/obj/machinery/door_control{desc = "A remote control switch for the brig foyer."; id = "BrigFoyer"; name = "Brig Foyer Doors"; normaldoorcontrol = 1; pixel_x = -5; pixel_y = -35; range = 10; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/lobby) +"aqI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/processing) +"aqJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/processing) +"aqK" = (/obj/structure/table,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel,/area/security/processing) +"aqL" = (/turf/simulated/wall/r_wall,/area/crew_quarters/courtroom) "aqM" = (/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Brig Detective's Office"; dir = 2; network = list("SS13")},/obj/structure/bookcase,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "aqN" = (/obj/structure/closet/secure_closet/detective,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "aqO" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/briefcase,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) -"aqP" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"aqP" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/courtroom) "aqQ" = (/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 = ""},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) -"aqR" = (/obj/machinery/light{dir = 1},/obj/machinery/power/apc{dir = 1; name = "Detective APC"; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/table/woodentable,/obj/item/weapon/storage/photo_album{pixel_y = -10},/obj/item/device/camera_film,/obj/item/device/camera_film,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"aqR" = (/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) "aqS" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aqT" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aqU" = (/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fsmaint) @@ -882,21 +882,21 @@ "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) "arg" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall/interior{tag = "icon-swall_f5"; icon_state = "swall_f5"},/area/shuttle/abandoned) -"arh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonershuttle) -"ari" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonershuttle) -"arj" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/sign/poster/legit{pixel_x = 32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prisonershuttle) +"arh" = (/obj/item/device/radio/intercom{dir = 4; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) +"ari" = (/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/lobby) +"arj" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/lobby) "ark" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/B) "arl" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B) "arm" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 6"; name = "Cell 6"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) "arn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) -"aro" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) +"aro" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/lobby) "arp" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) "arq" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/A) "arr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A) @@ -906,20 +906,20 @@ "arv" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 1"; name = "Cell 1"; req_access_txt = "2"},/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/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) "arw" = (/obj/machinery/light/small{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison/cell_block/A) "arx" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) -"ary" = (/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"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) -"arz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/lobby) -"arA" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/security/brig) -"arB" = (/obj/machinery/computer/secure_data,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/brig) -"arC" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/brig) -"arD" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig) -"arE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) -"arF" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/lobby) -"arG" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/C) -"arH" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"arI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"arJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"arK" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Prison Cell Block C APC"; pixel_x = 25},/obj/machinery/camera{c_tag = "Brig Temporary Detainment"; dir = 8; pixel_x = 0; pixel_y = -22; network = list("SS13")},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"arL" = (/obj/machinery/light_switch{pixel_x = -25; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"ary" = (/turf/simulated/floor/plasteel,/area/security/processing) +"arz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B) +"arA" = (/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A) +"arB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) +"arC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/processing) +"arD" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/security/processing) +"arE" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plating,/area/security/lobby) +"arF" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/table/reinforced{tag = "icon-table"; icon_state = "table"},/obj/machinery/door/window/brigdoor/southleft{req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/security/lobby) +"arG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/security/processing) +"arH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel,/area/security/processing) +"arI" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/courtroom) +"arJ" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) +"arK" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) +"arL" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/machinery/door/window/westright{dir = 1; name = "Judge Committee"; req_access = null; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "carpet"},/area/crew_quarters/courtroom) "arM" = (/turf/simulated/floor/carpet,/area/security/detectives_office) "arN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/security/detectives_office) "arO" = (/obj/structure/table/woodentable,/obj/machinery/requests_console{name = "Detective Requests Console"; pixel_x = 30},/obj/item/device/camera{name = "detectives camera"; desc = "A one use - polaroid camera. 30 photos left."; pixel_x = 0; pixel_y = 0; pictures_left = 30},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) @@ -930,35 +930,35 @@ "arT" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk13"; icon_state = "catwalk13"},/area/solar/auxstarboard) "arU" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk6"; icon_state = "catwalk6"},/area/solar/auxstarboard) "arV" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk13"; icon_state = "catwalk13"},/area/solar/auxstarboard) -"arW" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/abandoned) -"arX" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/prisonershuttle) -"arY" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) -"arZ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) -"asa" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/prisonershuttle) -"asb" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prisonershuttle) +"arW" = (/obj/machinery/sleeper/upgraded{dir = 4},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"arX" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/red,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plasteel{dir = 2; icon_state = "carpet"},/area/crew_quarters/courtroom) +"arY" = (/obj/structure/stool/bed/chair,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/processing) +"arZ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Prisoner Cell Block B APC"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) +"asa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/power/apc{dir = 4; name = "Prison Cell Block A APC"; pixel_x = 26; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A) +"asb" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) "asc" = (/obj/structure/stool/bed,/obj/machinery/flasher{id = "Cell 6"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/B) "asd" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/power/treadmill{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/treadmill_monitor{id = "Cell 6"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B) "ase" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/prison/cell_block/B) -"asf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) +"asf" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/security/lobby) "asg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) "ash" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/prison/cell_block/A) "asi" = (/obj/structure/stool/bed,/obj/machinery/flasher{id = "Cell 3"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/A) "asj" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/power/treadmill{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/treadmill_monitor{id = "Cell 3"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A) "ask" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) -"asl" = (/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) +"asl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 8},/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Security Lobby APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/flag/nt,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) "asm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/device/radio/intercom{pixel_x = 28},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) "asn" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) "aso" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/power/treadmill{dir = 8},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/treadmill_monitor{id = "Cell 1"; pixel_y = -32},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) "asp" = (/obj/structure/stool/bed,/obj/machinery/flasher{id = "Cell 1"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison/cell_block/A) -"asq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) -"asr" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/brig) -"ass" = (/obj/machinery/computer/security{network = list("SS13","Research Outpost","Mining Outpost")},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/brig) -"ast" = (/obj/machinery/door_control{desc = "A remote control switch for the brig foyer."; id = "BrigFoyer"; name = "Brig Foyer Doors"; normaldoorcontrol = 1; pixel_x = -5; pixel_y = -35; range = 10},/obj/machinery/door_control{desc = "A remote control switch for the brig doors leading to cells 1-4."; id = "BrigEast"; name = "Brig Cells 1-4 Hallway Doors"; normaldoorcontrol = 1; pixel_x = 5; pixel_y = -25; range = 10},/obj/machinery/door_control{desc = "A remote control switch for the brig doors leading to cells 5 and 6."; id = "BrigWest"; name = "Brig Cells 5-6 Hallway Doors"; normaldoorcontrol = 1; pixel_x = -5; pixel_y = -25; range = 20},/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/item/device/radio/intercom/department/security{pixel_x = 28},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/brig) -"asu" = (/obj/structure/sign/poster/legit{pixel_x = 32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/lobby) -"asv" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/lobby) -"asw" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/C) -"asx" = (/obj/machinery/door/window/brigdoor{dir = 2; name = "Secure Door"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/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/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"asy" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/C) +"asq" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/processing) +"asr" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/security/processing) +"ass" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/courtroom) +"ast" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) +"asu" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/lobby) +"asv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/main) +"asw" = (/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 = "Brig Main Hall 1"; dir = 2; network = list("SS13")},/obj/machinery/hologram/holopad,/obj/structure/sign/poster/legit{pixel_x = 0; pixel_y = 32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) +"asx" = (/obj/structure/table/woodentable,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/folder/blue{pixel_x = 5},/obj/item/device/megaphone,/turf/simulated/floor/plasteel{dir = 2; icon_state = "carpet"},/area/crew_quarters/courtroom) +"asy" = (/obj/structure/table,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/storage/box/evidence,/turf/simulated/floor/plasteel,/area/security/processing) "asz" = (/obj/item/weapon/storage/secure/safe{pixel_x = -23},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "asA" = (/obj/structure/stool,/turf/simulated/floor/carpet,/area/security/detectives_office) "asB" = (/obj/structure/table/woodentable,/obj/structure/noticeboard{pixel_x = 30; pixel_y = 0},/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/restraints/handcuffs,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) @@ -978,28 +978,28 @@ "asP" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_r (WEST)"; icon_state = "burst_r"; dir = 8},/turf/space,/area/shuttle/abandoned) "asQ" = (/obj/machinery/computer/med_data,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/abandoned) "asR" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area/shuttle/abandoned) -"asS" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prisonershuttle) -"asT" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prisonershuttle) +"asS" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/security/evidence) +"asT" = (/obj/structure/table,/turf/simulated/floor/plasteel,/area/security/processing) "asU" = (/turf/simulated/wall/r_wall,/area/security/prison/cell_block/B) -"asV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/door_timer/cell_3{dir = 8; id = "Cell 6"; name = "Cell 6"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) +"asV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/security/evidence) "asW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) -"asX" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/door_timer/cell_3{dir = 8; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) -"asY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door_timer/cell_1{dir = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) +"asX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/evidence) +"asY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/camera{c_tag = "Labor Shuttle Dock"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle) "asZ" = (/turf/simulated/wall/r_wall,/area/security/prison/cell_block/A) -"ata" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable,/obj/machinery/light{dir = 8},/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Security Lobby APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) -"atb" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/lobby) -"atc" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/brig) -"atd" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/brig) -"ate" = (/obj/structure/table,/obj/machinery/door/firedoor,/obj/machinery/door/window/brigdoor{dir = 2; name = "Secure Door"; req_access_txt = "63"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel,/area/security/brig) -"atf" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/structure/sign/securearea,/turf/simulated/floor/plating,/area/security/brig) -"atg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) -"ath" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; layer = 2.4; on = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/lobby) -"ati" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"atj" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"atk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"atl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"atm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/security/prison/cell_block/C) -"atn" = (/obj/machinery/newscaster{pixel_x = -28; pixel_y = 1},/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/flask/detflask,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"ata" = (/obj/machinery/light_switch{pixel_y = -24},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) +"atb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door_timer/cell_5{dir = 8; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) +"atc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/door_timer/cell_2{dir = 4; layer = 4; pixel_x = 30; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) +"atd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door_timer/cell_4{dir = 8; layer = 4; pixel_x = -30; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A) +"ate" = (/obj/structure/disposalpipe/segment{name = "Sorting Office"},/obj/structure/reagent_dispensers/peppertank{pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/main) +"atf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) +"atg" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/glass_security{name = "Equipment Storage"; req_access_txt = "1"},/turf/simulated/floor/plasteel,/area/security/seceqstorage) +"ath" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/security/lobby) +"ati" = (/obj/machinery/camera{c_tag = "Brig Lobby"; dir = 8; pixel_x = 0; pixel_y = -22; network = list("SS13")},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/lobby) +"atj" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) +"atk" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) +"atl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; initialize_directions = 10; level = 1},/obj/structure/window/reinforced{dir = 1; layer = 2.9},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) +"atm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/door/window/westright{dir = 8; name = "Witness Stand"},/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) +"atn" = (/obj/machinery/newscaster{pixel_x = -28; pixel_y = 1},/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/flask/detflask,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "ato" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/security/detectives_office) "atp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/table/woodentable,/obj/machinery/media/receiver/boombox,/turf/simulated/floor/carpet,/area/security/detectives_office) "atq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/security/detectives_office) @@ -1026,7 +1026,7 @@ "atL" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (EAST)"; icon_state = "wooden_chair_wings"; dir = 4},/turf/simulated/floor/wood,/area/maintenance/abandonedbar) "atM" = (/obj/structure/table/woodentable,/obj/item/trash/candle,/turf/simulated/floor/plating,/area/maintenance/abandonedbar) "atN" = (/obj/item/stack/rods,/turf/space,/area/space) -"atO" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prisonershuttle) +"atO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/security/detectives_office) "atP" = (/obj/structure/closet/secure_closet/brig{id = "Cell 5"; name = "Cell 5 Locker"},/obj/machinery/camera{c_tag = "Brig Cell 5"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/B) "atQ" = (/obj/structure/closet/secure_closet/brig{id = "Cell 4"; name = "Cell 4 Locker"},/obj/machinery/camera{c_tag = "Brig Cell 4"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/A) "atR" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/security/prison/cell_block/B) @@ -1035,19 +1035,19 @@ "atU" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B) "atV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) "atW" = (/obj/structure/closet/secure_closet/brig{id = "Cell 2"; name = "Cell 2 Locker"},/obj/machinery/camera{c_tag = "Brig Cell 2"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison/cell_block/A) -"atX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) -"atY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/lobby) -"atZ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/lobby) -"aua" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/lobby) -"aub" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/lobby) -"auc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/lobby) -"aud" = (/obj/machinery/camera{c_tag = "Brig Lobby"; dir = 8; pixel_x = 0; pixel_y = -22; network = list("SS13")},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/lobby) -"aue" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"auf" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"aug" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"auh" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"aui" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/computer/security/wooden_tv{network = list("SS13","Research Outpost","Mining Outpost")},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) -"auj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/landmark/start{name = "Detective"},/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/simulated/floor/carpet,/area/security/detectives_office) +"atX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"atY" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 4; name = "Courtroom APC"; pixel_x = 26; pixel_y = 0},/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel{dir = 2; icon_state = "carpet"},/area/crew_quarters/courtroom) +"atZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/table/woodentable,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/folder{pixel_x = -4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "carpet"},/area/crew_quarters/courtroom) +"aua" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor/plasteel,/area/security/processing) +"aub" = (/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/processing) +"auc" = (/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{icon_state = "floorgrime"},/area/security/prison/cell_block/B) +"aud" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) +"aue" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/landmark/start{name = "Detective"},/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/carpet,/area/security/detectives_office) +"auf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/security/brig) +"aug" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) +"auh" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/lobby) +"aui" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/computer/security/wooden_tv{network = list("SS13","Research Outpost","Mining Outpost")},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"auj" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) "auk" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/table/woodentable,/obj/item/ashtray/bronze,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/turf/simulated/floor/carpet,/area/security/detectives_office) "aul" = (/obj/structure/table/woodentable,/obj/item/clothing/glasses/sunglasses,/obj/item/device/radio/intercom/department/security{pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "aum" = (/obj/effect/decal/cleanable/generic,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fsmaint) @@ -1060,13 +1060,13 @@ "aut" = (/obj/item/trash/liquidfood,/turf/simulated/floor/wood,/area/maintenance/abandonedbar) "auu" = (/obj/structure/sink/kitchen{pixel_y = 25},/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) "auv" = (/turf/simulated/floor/plating/airless,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_tool_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = -25; req_access_txt = "13"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxport) -"auw" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prisonershuttle) -"aux" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prisonershuttle) -"auy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) +"auw" = (/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,/area/security/brig) +"aux" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel,/area/security/processing) +"auy" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/closet/redcorp,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/main) "auz" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 5"; name = "Cell 5"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) -"auA" = (/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,/area/security/prison/cell_block/B) +"auA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) "auB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) -"auC" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) +"auC" = (/obj/effect/decal/cleanable/cobweb{dir = 2},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) "auD" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/A) "auE" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) "auF" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 4"; name = "Cell 4"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) @@ -1075,22 +1075,22 @@ "auI" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 2"; name = "Cell 2"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/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,/area/security/prison/cell_block/A) "auJ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A) "auK" = (/obj/machinery/light/small{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison/cell_block/A) -"auL" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) -"auM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) +"auL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Brig"; name = "Interrogation Hallway"; req_access_txt = "63"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/interrogationhallway) +"auM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/window{dir = 2},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "auN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/lobby) -"auO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/security/lobby) -"auP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor/plasteel,/area/security/lobby) -"auQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/lobby) -"auR" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/C) -"auS" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"auT" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) -"auU" = (/obj/machinery/door/airlock{name = "Toilet"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) -"auV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/window/basic,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) -"auW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/window/southright,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"auO" = (/turf/simulated/wall/r_wall,/area/hallway/primary/fore) +"auP" = (/obj/structure/table/woodentable,/obj/item/device/flash,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/window/basic,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"auQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonershuttle) +"auR" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Courtroom"; req_access_txt = "63"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) +"auS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/prisonershuttle) +"auT" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/closet{name = "Evidence Closet"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) +"auU" = (/obj/machinery/light_switch{pixel_x = -25},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) +"auV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/security/evidence) +"auW" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) "auX" = (/obj/structure/window/basic,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) -"auY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/window/basic,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) -"auZ" = (/obj/machinery/door/window/southright,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) -"ava" = (/obj/structure/window/basic,/obj/structure/table/woodentable,/obj/item/device/flash,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"auY" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) +"auZ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) +"ava" = (/obj/structure/cable,/obj/item/device/radio/intercom{pixel_x = 28},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A) "avb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "avc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "avd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/fsmaint) @@ -1111,30 +1111,30 @@ "avs" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/patron,/obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims,/turf/simulated/floor/plating,/area/maintenance/abandonedbar) "avt" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "avu" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) -"avv" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/prisonershuttle) -"avw" = (/obj/machinery/door_control{id = "laborexit"; name = "Exit Door"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/prisonershuttle) -"avx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) +"avv" = (/obj/item/device/radio/intercom{pixel_x = -28},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) +"avw" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/vending/snack,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/lobby) +"avx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/lobby) "avy" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/security/prison/cell_block/B) -"avz" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/door_timer/cell_5,/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) -"avA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable,/obj/machinery/power/apc{name = "Prison Cell Block B APC"; pixel_y = -24},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) +"avz" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/lobby) +"avA" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/lobby) "avB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; layer = 2.4; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) -"avC" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_x = -28; pixel_y = -22},/obj/machinery/door_timer/cell_4{pixel_y = -30},/obj/item/device/radio/intercom{pixel_x = -28},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) -"avD" = (/obj/structure/cable,/obj/machinery/door_timer/cell_2{pixel_x = 0; pixel_y = -30},/obj/machinery/power/apc{dir = 2; name = "Prison Cell Block A APC"; pixel_x = 24; pixel_y = -24},/obj/item/device/radio/intercom{pixel_x = 28},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) +"avC" = (/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/light_switch{pixel_x = 26},/turf/simulated/floor/plasteel{dir = 6; icon_state = "red"},/area/security/lobby) +"avD" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) "avE" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) -"avF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/lobby) -"avG" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/lobby) +"avF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"avG" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) "avH" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/lobby) -"avI" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/lobby) +"avI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) "avJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) -"avK" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/prison/cell_block/C) -"avL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/closet{name = "Evidence Closet"},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/security/detectives_office) -"avM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/security/detectives_office) -"avN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/table,/obj/structure/table,/obj/item/weapon/folder/red{pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/security/detectives_office) -"avO" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/security/detectives_office) -"avP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/security/detectives_office) -"avQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/security/detectives_office) -"avR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Detective Maintenance"; req_access_txt = "4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) -"avS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"avK" = (/obj/structure/closet{name = "Evidence Closet"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) +"avL" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) +"avM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/security/detectives_office) +"avN" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall/r_wall,/area/security/evidence) +"avO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/security/detectives_office) +"avP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"avQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Detective Maintenance"; req_access_txt = "4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) +"avR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) +"avS" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Courtroom"},/turf/simulated/floor/plasteel{icon_state = "wood"},/area/clownoffice) "avT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall,/area/crew_quarters/mrchangs) "avU" = (/turf/simulated/wall,/area/crew_quarters/mrchangs) "avV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/civilian/barber) @@ -1155,25 +1155,25 @@ "awk" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "solar_tool_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_tool_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_tool_pump"; tag_exterior_door = "solar_tool_outer"; frequency = 1379; id_tag = "solar_tool_airlock"; tag_interior_door = "solar_tool_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "solar_tool_sensor"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "awl" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; initialize_directions = 10},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "awm" = (/turf/simulated/wall,/area/clownoffice) -"awn" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/security{id_tag = "laborexit"; name = "Labor Shuttle"; req_access_txt = "1"},/turf/simulated/floor/plasteel,/area/security/prisonershuttle) +"awn" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) "awo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/wall/r_wall,/area/security/prison/cell_block/B) -"awp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/security/prison/cell_block/B) -"awq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/turf/simulated/wall/r_wall,/area/security/prison/cell_block/B) +"awp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"awq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/turf/simulated/floor/plasteel,/area/security/brig) "awr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/security/prison/cell_block/A) "aws" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/turf/simulated/wall/r_wall,/area/security/prison/cell_block/A) "awt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall/r_wall,/area/security/prison/cell_block/A) -"awu" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/lobby) -"awv" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/lobby) -"aww" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Lobby"; req_access_txt = "0"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/lobby) +"awu" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/security/prison/cell_block/B) +"awv" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/security/prison/cell_block/B) +"aww" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) "awx" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva) -"awy" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/lobby) -"awz" = (/turf/simulated/wall/r_wall,/area/security/prison/cell_block/C) -"awA" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/light_switch{pixel_x = -25},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) -"awB" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) -"awC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) -"awD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) +"awy" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/security/prison/cell_block/A) +"awz" = (/obj/structure/disposalpipe/segment,/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/security/lobby) +"awA" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/security/lobby) +"awB" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor,/area/security/lobby) +"awC" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Lobby"; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/security/lobby) +"awD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Courtroom Prosecution and Defense"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/courtroomdandp) "awE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/security/detectives_office) -"awF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"awF" = (/obj/machinery/camera{c_tag = "Brig Prisoner Processing"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = -22},/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/security/processing) "awG" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/chickenstatue,/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "awH" = (/obj/machinery/vending/chinese,/obj/machinery/light{dir = 1},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "awI" = (/obj/machinery/camera{c_tag = "Mr. Chang's"; dir = 2; network = list("SS13")},/obj/structure/chickenstatue,/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) @@ -1195,16 +1195,16 @@ "awY" = (/turf/simulated/wall/r_wall,/area/maintenance/abandonedbar) "awZ" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "axa" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) -"axb" = (/obj/structure/table/woodentable,/obj/item/seeds/bananaseed,/turf/simulated/floor/wood,/area/clownoffice) -"axc" = (/obj/structure/table/woodentable,/obj/item/weapon/stamp/clown,/turf/simulated/floor/wood,/area/clownoffice) -"axd" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/clownoffice) -"axe" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/wood,/area/clownoffice) -"axf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light_switch{pixel_x = 0; pixel_y = 25},/turf/simulated/floor/wood,/area/clownoffice) -"axg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/clown{name = "Clown's Office"; req_access_txt = "46"},/turf/simulated/floor/plasteel,/area/clownoffice) +"axb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) +"axc" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) +"axd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/table,/obj/item/weapon/folder/red{pixel_y = 3},/obj/item/weapon/hand_labeler,/obj/item/weapon/storage/box/evidence,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) +"axe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) +"axf" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"axg" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) "axh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) -"axi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) -"axj" = (/obj/machinery/camera{c_tag = "Fore Primary Hallway West"; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) -"axk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) +"axi" = (/obj/machinery/light,/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/alarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) +"axj" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/stool/bed/chair/comfy/black{dir = 8},/obj/machinery/camera{c_tag = "Courtroom Judge Committee"; dir = 8; network = list("Toxins","Research","SS13")},/turf/simulated/floor/plasteel{dir = 2; icon_state = "carpet"},/area/crew_quarters/courtroom) +"axk" = (/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) "axl" = (/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) "axm" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) "axn" = (/obj/machinery/camera{c_tag = "Fore Primary Hallway North"; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) @@ -1212,20 +1212,20 @@ "axp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) "axq" = (/turf/simulated/floor/plasteel,/area/hallway/primary/fore) "axr" = (/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore) -"axs" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore) -"axt" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore) +"axs" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) +"axt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/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{icon_state = "red"; dir = 1},/area/security/brig) "axu" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore) -"axv" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore) -"axw" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore) -"axx" = (/obj/machinery/vending/snack,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore) -"axy" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) -"axz" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) -"axA" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) -"axB" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) +"axv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) +"axw" = (/obj/structure/table/woodentable,/obj/item/weapon/stamp/clown,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/clownoffice) +"axx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"axy" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prisonershuttle) +"axz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) +"axA" = (/obj/structure/sign/poster/legit{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore) +"axB" = (/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore) "axC" = (/obj/structure/stool,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) "axD" = (/obj/machinery/computer/med_data,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) "axE" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/security/detectives_office) -"axF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"axF" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/clownoffice) "axG" = (/obj/structure/stool/bed/chair/wood/wings,/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "axH" = (/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "axI" = (/obj/structure/stool/bed/chair/wood/wings,/obj/machinery/power/apc{dir = 4; name = "Chinese Restaurant APC"; pixel_x = 27; pixel_y = 2},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) @@ -1242,31 +1242,31 @@ "axT" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_tool_airlock"; name = "interior 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"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "axU" = (/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{dir = 1},/obj/machinery/portable_atmospherics/canister/air{filled = 0.05},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "axV" = (/turf/simulated/wall,/area/maintenance/fpmaint2) -"axW" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Clown"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "Clown Office APC"; pixel_x = -24},/turf/simulated/floor/wood,/area/clownoffice) -"axX" = (/obj/structure/table/woodentable,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/item/device/flashlight/lamp/bananalamp,/turf/simulated/floor/wood,/area/clownoffice) -"axY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/wood,/area/clownoffice) -"axZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/wood,/area/clownoffice) -"aya" = (/obj/item/flag/clown,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/wood,/area/clownoffice) -"ayb" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/clownoffice) -"ayc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) +"axW" = (/obj/item/flag/clown,/turf/simulated/floor/wood,/area/clownoffice) +"axX" = (/obj/machinery/photocopier,/obj/structure/sign/poster/legit{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) +"axY" = (/obj/structure/clownstatue,/turf/simulated/floor/wood,/area/clownoffice) +"axZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/wood,/area/clownoffice) +"aya" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/clownoffice) +"ayb" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/bananalamp,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/wood,/area/clownoffice) +"ayc" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Clown"},/turf/simulated/floor/wood,/area/clownoffice) "ayd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) -"aye" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) -"ayf" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) -"ayg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/hallway/primary/fore) -"ayh" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) -"ayi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) -"ayj" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 1; location = "Security"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint) -"ayk" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"aye" = (/turf/simulated/floor/wood,/area/clownoffice) +"ayf" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/clownoffice) +"ayg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"ayh" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"ayi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"ayj" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"ayk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonershuttle) "ayl" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) "aym" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) "ayn" = (/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; layer = 2.4; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) -"ayo" = (/obj/structure/table,/obj/item/weapon/storage/box/evidence,/obj/machinery/light,/obj/machinery/camera{c_tag = "Brig Detective's Office Evidence Processing"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) -"ayp" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_x = 0; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) -"ayq" = (/obj/machinery/photocopier,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) +"ayo" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"ayp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"ayq" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) "ayr" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) "ays" = (/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/intercom/department/security{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) "ayt" = (/obj/machinery/light,/obj/machinery/computer/secure_data,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/detectives_office) -"ayu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"ayu" = (/obj/structure/disposalpipe/junction{tag = "icon-pipe-j2 (EAST)"; icon_state = "pipe-j2"; dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) "ayv" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "ayw" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "ayx" = (/obj/structure/table/woodentable,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) @@ -1287,23 +1287,23 @@ "ayM" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "ayN" = (/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "ayO" = (/obj/structure/stool/bed,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) -"ayP" = (/obj/machinery/camera{c_tag = "Clown's Office"; dir = 4; network = list("SS13")},/turf/simulated/floor/wood,/area/clownoffice) -"ayQ" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/wood,/area/clownoffice) -"ayR" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/wood,/area/clownoffice) -"ayS" = (/obj/structure/rack,/obj/item/clothing/under/rank/clown,/obj/item/weapon/storage/backpack/clown,/obj/item/clothing/mask/gas/clown_hat,/obj/item/clothing/shoes/clown_shoes,/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/wood,/area/clownoffice) -"ayT" = (/obj/machinery/light,/obj/structure/clownstatue,/turf/simulated/floor/wood,/area/clownoffice) -"ayU" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) -"ayV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) -"ayW" = (/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{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) +"ayP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"ayQ" = (/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment{dir = 4},/mob/living/simple_animal/bot/secbot/beepsky{name = "Officer Beepsky"},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"ayR" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"ayS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/wood,/area/clownoffice) +"ayT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/wood,/area/clownoffice) +"ayU" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"ayV" = (/obj/machinery/power/apc{dir = 8; name = "Clown Office APC"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/camera{c_tag = "Engineering Equipment West"; dir = 4; network = list("SS13")},/turf/simulated/floor/wood,/area/clownoffice) +"ayW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/alarm{dir = 1; pixel_y = -24},/turf/simulated/floor/wood,/area/clownoffice) "ayX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) -"ayY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"ayY" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/courtroomdandp) "ayZ" = (/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 = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) -"aza" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) +"aza" = (/obj/structure/rack,/obj/item/clothing/under/rank/clown,/obj/item/weapon/storage/backpack/clown,/obj/item/clothing/mask/gas/clown_hat,/obj/item/clothing/shoes/clown_shoes,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/wood,/area/clownoffice) "azb" = (/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 = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) "azc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/light,/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) -"azd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) +"azd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/wall/r_wall,/area/security/prisonershuttle) "aze" = (/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 = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) -"azf" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) +"azf" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/wall/r_wall,/area/security/prisonershuttle) "azg" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) "azh" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=EVA"; location = "Security"},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) "azi" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/hallway/primary/fore) @@ -1380,7 +1380,7 @@ "aAB" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "magistrate"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/magistrateoffice) "aAC" = (/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/lawoffice) "aAD" = (/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = 32},/obj/structure/closet/lawcloset,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/lawoffice) -"aAE" = (/obj/structure/table,/obj/item/weapon/book/manual/sop_security,/turf/simulated/floor/plasteel,/area/security/main) +"aAE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/lobby) "aAF" = (/obj/machinery/photocopier,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 27},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/lawoffice) "aAG" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/lawoffice) "aAH" = (/obj/machinery/vending/coffee,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 25},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/lawoffice) @@ -1395,7 +1395,7 @@ "aAQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aAR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aAS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint) -"aAT" = (/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/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/fsmaint) +"aAT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel,/area/security/lobby) "aAU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aAV" = (/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/manifold/hidden/scrubbers{level = 1},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "aAW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) @@ -2022,7 +2022,7 @@ "aMT" = (/obj/machinery/camera{c_tag = "Bar Storage"; network = list("SS13")},/obj/structure/table/woodentable,/obj/machinery/reagentgrinder,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aMU" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/item/weapon/gun/projectile/revolver/doublebarrel,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/weapon/storage/fancy/candle_box/eternal,/obj/item/weapon/storage/fancy/candle_box/eternal,/obj/item/weapon/storage/fancy/candle_box/eternal,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aMV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aMW" = (/obj/effect/spawner/window/reinforced,/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"aMW" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aMX" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aMY" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aMZ" = (/obj/machinery/atmospherics/binary/valve,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -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) @@ -2105,7 +2105,7 @@ "aOy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/fsmaint2) "aOz" = (/obj/machinery/mass_driver{dir = 4; id_tag = "chapelgun"},/obj/machinery/door/window{dir = 8; name = "Mass Driver"; req_access_txt = "22"},/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/maintenance/fsmaint2) "aOA" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor/plating{tag = "icon-warnplate (EAST)"; icon_state = "warnplate"; dir = 4},/area/maintenance/fsmaint2) -"aOB" = (/obj/machinery/door/poddoor{id_tag = "chapelgun"; name = "Chapel Launcher Door"; protected = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aOB" = (/obj/machinery/door/poddoor{id_tag = "chapelgun"; name = "Chapel Launcher Door"; protected = 0},/obj/structure/fans/tiny,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aOC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "aOD" = (/turf/simulated/shuttle/wall{icon_state = "swall11"; dir = 2},/area/shuttle/arrival/station) "aOE" = (/obj/effect/landmark{name = "HONKsquad"},/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) @@ -2132,7 +2132,7 @@ "aOZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel,/area/hallway/secondary/construction{name = "\improper Garden"}) "aPa" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock{name = "Garden"; req_access_txt = "0"},/turf/simulated/floor/plating,/area/hallway/secondary/construction{name = "\improper Garden"}) "aPb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/storage/primary) -"aPc" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel,/area/storage/primary) +"aPc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/security/brig) "aPd" = (/turf/simulated/floor/plasteel,/area/storage/primary) "aPe" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/storage/primary) "aPf" = (/obj/machinery/lapvend,/turf/simulated/floor/plasteel,/area/storage/primary) @@ -2302,7 +2302,7 @@ "aSn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/landmark/start{name = "Civilian"},/turf/simulated/floor/plasteel,/area/hallway/secondary/construction{name = "\improper Garden"}) "aSo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/table/glass,/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/plantspray/pests,/obj/item/weapon/reagent_containers/glass/fertilizer/ez,/obj/item/weapon/reagent_containers/glass/fertilizer/rh,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/hallway/secondary/construction{name = "\improper Garden"}) "aSp" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/plasteel,/area/storage/primary) -"aSq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel,/area/storage/primary) +"aSq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Evidence Storage"; req_access = null; req_access_txt = "4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) "aSr" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/plasteel,/area/storage/primary) "aSs" = (/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/structure/stool,/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) "aSt" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/storage/primary) @@ -2334,7 +2334,7 @@ "aST" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/sign/securearea{desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; pixel_x = -28; pixel_y = 4},/obj/structure/reagent_dispensers/beerkeg,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aSU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aSV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/door/window/southleft{tag = "icon-left (WEST)"; name = "Bar Delivery"; icon_state = "left"; dir = 8; req_access_txt = "25"; base_state = "left"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel,/area/crew_quarters/bar) -"aSW" = (/obj/machinery/hologram/holopad,/mob/living/simple_animal/bot/secbot/beepsky{name = "Officer Beepsky"},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"aSW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/security/lobby) "aSX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aSY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aSZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -2392,7 +2392,7 @@ "aTZ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/hallway/secondary/construction{name = "\improper Garden"}) "aUa" = (/obj/machinery/atm{pixel_y = -32},/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/civilian/barber) "aUb" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/item/device/analyzer,/turf/simulated/floor/plasteel,/area/storage/primary) -"aUc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/storage/primary) +"aUc" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/security/lobby) "aUd" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/storage/primary) "aUe" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel,/area/storage/primary) "aUf" = (/obj/structure/table,/obj/item/weapon/crowbar,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/clothing/gloves/color/fyellow,/turf/simulated/floor/plasteel,/area/storage/primary) @@ -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) @@ -2480,7 +2480,7 @@ "aVJ" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/construction{name = "\improper Garden"}) "aVK" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Garden"},/turf/simulated/floor/plasteel,/area/hallway/secondary/construction{name = "\improper Garden"}) "aVL" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/storage/primary) -"aVM" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/storage/primary) +"aVM" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/clown{name = "Clown's Office"; req_access_txt = "46"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/wood,/area/clownoffice) "aVN" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/storage/primary) "aVO" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/storage/primary) "aVP" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/hallway/primary/port) @@ -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) @@ -2565,7 +2565,7 @@ "aXq" = (/turf/simulated/floor/plasteel,/area/hallway/primary/port) "aXr" = (/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,/area/hallway/primary/port) "aXs" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/hallway/primary/port) -"aXt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/hallway/primary/port) +"aXt" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/storage/primary) "aXu" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/port) "aXv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/hallway/primary/port) "aXw" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/port) @@ -2662,7 +2662,7 @@ "aZj" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel,/area/hallway/primary/port) "aZk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/hallway/primary/port) "aZl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/hallway/primary/port) -"aZm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/port) +"aZm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/storage/primary) "aZn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port) "aZo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/port) "aZp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port) @@ -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) @@ -3411,8 +3411,8 @@ "bnE" = (/obj/machinery/computer/arcade,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bnF" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bnG" = (/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bnH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/stool,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"bnI" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/gameboard,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"bnH" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/security/permabrig) +"bnI" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/security/permabrig) "bnJ" = (/obj/machinery/light,/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (EAST)"; icon_state = "wooden_chair_wings"; dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bnK" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/obj/machinery/vending/dinnerware,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bnL" = (/obj/machinery/icemachine,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) @@ -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) @@ -4020,7 +4020,7 @@ "bzp" = (/obj/machinery/optable,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/medical/morgue) "bzq" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/medical/morgue) "bzr" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/obj/machinery/light/small{dir = 4},/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor/plasteel,/area/medical/morgue) -"bzs" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"bzs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/light{dir = 1; on = 1},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "bzt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/assembly/chargebay) "bzu" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/bluegrid,/area/assembly/chargebay) "bzv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/bluegrid,/area/assembly/chargebay) @@ -4243,7 +4243,7 @@ "bDE" = (/obj/effect/spawner/window/reinforced,/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 = 0},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "bDF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "bDG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry) -"bDH" = (/obj/machinery/door/poddoor{id_tag = "trash"; name = "disposal bay door"; protected = 0},/turf/simulated/floor/plating/airless,/area/maintenance/disposal) +"bDH" = (/obj/machinery/door/poddoor{id_tag = "trash"; name = "disposal bay door"; protected = 0},/obj/structure/fans/tiny,/turf/simulated/floor/plating,/area/maintenance/disposal) "bDI" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/quartermaster/storage) "bDJ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/quartermaster/storage) "bDK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/storage) @@ -4359,7 +4359,7 @@ "bFQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/space,/area/space) "bFR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/closet/secure_closet/captains,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/carpet,/area/crew_quarters/captain/bedroom) "bFS" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 4},/obj/machinery/camera{c_tag = "Captain's Quarters"; dir = 1; network = list("SS13")},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain/bedroom) -"bFT" = (/obj/structure/table/woodentable,/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/obj/item/weapon/storage/box/matches,/obj/item/weapon/reagent_containers/food/drinks/flask{pixel_x = 8},/obj/item/clothing/mask/cigarette/cigar,/obj/item/weapon/razor{pixel_x = -4; pixel_y = 2},/turf/simulated/floor/carpet,/area/crew_quarters/captain/bedroom) +"bFT" = (/obj/structure/table/woodentable,/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/obj/item/weapon/storage/box/matches,/obj/item/weapon/reagent_containers/food/drinks/flask/gold,/obj/item/clothing/mask/cigarette/cigar,/obj/item/weapon/razor{pixel_x = -4; pixel_y = 2},/turf/simulated/floor/carpet,/area/crew_quarters/captain/bedroom) "bFU" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 1; icon_state = "left"; name = "Shower"; req_access_txt = "0"},/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/item/weapon/soap/deluxe,/obj/item/weapon/bikehorn/rubberducky,/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/captain/bedroom) "bFV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/crew_quarters/captain) "bFW" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/sign/poster/legit{pixel_x = -32},/turf/simulated/floor/plasteel,/area/hallway/primary/central/se) @@ -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) @@ -4816,7 +4816,7 @@ "bOF" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/crew_quarters/hor) "bOG" = (/obj/machinery/door_control{id = "Biohazard"; name = "Biohazard Shutter Control"; pixel_x = -4; pixel_y = 6; req_access_txt = "47"},/obj/item/weapon/folder/white{pixel_x = 4},/obj/item/weapon/stamp/rd{pixel_x = 5; pixel_y = -2},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bOH" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of his office."; name = "Research Monitor"; network = list("Research","Research Outpost","RD"); pixel_x = 0; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) -"bOI" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/machinery/requests_console{department = "Security"; departmentType = 3; name = "Security Requests Console"; pixel_y = 30},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/main) +"bOI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) "bOJ" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/rack,/obj/item/weapon/circuitboard/aicore{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/crew_quarters/hor) "bOK" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/hor) "bOL" = (/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/crew_quarters/hor) @@ -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) @@ -5004,7 +5004,7 @@ "bSl" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/hallway/primary/central/se) "bSm" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -25; pixel_y = 0; req_access_txt = "0"},/obj/machinery/light{dir = 8},/obj/structure/stool/bed,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitered"},/area/medical/sleeper) "bSn" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bSo" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bSo" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/security/medbay) "bSp" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "acute1"; name = "Acute 1 Privacy Shutters"; opacity = 0},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/sleeper) "bSq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bSr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2) @@ -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) @@ -5847,7 +5847,7 @@ "ciw" = (/obj/machinery/mass_driver{dir = 4; id_tag = "toxinsdriver"},/turf/simulated/floor/plating,/area/toxins/mixing) "cix" = (/turf/simulated/floor/plating,/area/toxins/mixing) "ciy" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/toxins/mixing) -"ciz" = (/obj/machinery/door/poddoor{id_tag = "toxinsdriver"; name = "Toxins Launcher Bay Door"; protected = 0},/turf/simulated/floor/plating,/area/toxins/mixing) +"ciz" = (/obj/machinery/door/poddoor{id_tag = "toxinsdriver"; name = "Toxins Launcher Bay Door"; protected = 0},/obj/structure/fans/tiny,/turf/simulated/floor/plating,/area/toxins/mixing) "ciA" = (/obj/machinery/door/poddoor{id_tag = "toxinsdriver"; name = "Toxins Launcher Bay Door"; protected = 0},/turf/simulated/floor/plating/airless,/area/toxins/test_area) "ciB" = (/obj/item/device/radio/beacon,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel/airless,/area/toxins/test_area) "ciC" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/toxins/test_area) @@ -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) @@ -5994,7 +5994,7 @@ "cln" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/storage/tech) "clo" = (/obj/structure/table,/obj/item/device/aicard,/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plating,/area/storage/tech) "clp" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/rdconsole{pixel_x = -4},/obj/item/weapon/circuitboard/rdserver{pixel_x = 4; pixel_y = -2},/obj/item/weapon/circuitboard/destructive_analyzer,/obj/item/weapon/circuitboard/protolathe{pixel_x = -2; pixel_y = 3},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/circuitboard/circuit_imprinter{pixel_x = -4; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) -"clq" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/obj/item/weapon/circuitboard/bodyscanner,/obj/item/weapon/circuitboard/bodyscanner_console,/obj/item/weapon/circuitboard/sleeper{pixel_x = 3},/obj/item/weapon/circuitboard/sleep_console{pixel_x = 3},/turf/simulated/floor/plating,/area/storage/tech) +"clq" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/security/medbay) "clr" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/message_monitor{pixel_y = -5},/obj/item/weapon/circuitboard/arcade/battle,/obj/item/weapon/circuitboard/arcade/orion_trail{pixel_x = -4; pixel_y = 2},/turf/simulated/floor/plating,/area/storage/tech) "cls" = (/obj/item/device/radio/intercom{pixel_x = 28},/turf/simulated/floor/plating,/area/storage/tech) "clt" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) @@ -6006,18 +6006,18 @@ "clz" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "clA" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "clB" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) -"clC" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 23},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -25; pixel_y = 0; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"clD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"clE" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"clF" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"clC" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 23},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -28; pixel_y = 0; req_access_txt = "0"},/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"clD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"clE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"clF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "clG" = (/obj/machinery/power/apc{dir = 1; name = "Recovery Ward APC"; pixel_y = 26},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/camera{c_tag = "Medbay Recovery Ward West"; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "clH" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"clI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"clI" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "clJ" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"clK" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"clL" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"clM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"clN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/computer/med_data,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"clK" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"clL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1; on = 1},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"clM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"clN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0; req_access_txt = "0"},/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "clO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/medical/ward) "clP" = (/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2) "clQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/medbay2) @@ -6078,7 +6078,7 @@ "cmT" = (/obj/machinery/computer/general_air_control{frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Waste Loop")},/turf/simulated/floor/plasteel,/area/engine/controlroom) "cmU" = (/obj/machinery/computer/atmos_alert,/turf/simulated/floor/plasteel{dir = 6; icon_state = "caution"},/area/engine/controlroom) "cmV" = (/obj/machinery/camera{c_tag = "Engineering Construction Area"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) -"cmW" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"cmW" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "cmX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "cmY" = (/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{icon_state = "white"},/area/medical/ward) "cmZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) @@ -6089,7 +6089,7 @@ "cne" = (/obj/machinery/camera{c_tag = "Research Shuttle Dock"; dir = 2; network = list("SS13","Research")},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cmo"},/area/medical/research_shuttle_dock) "cnf" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/genetics) "cng" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "Science Maintenance APC"; pixel_y = 24},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cnh" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"cnh" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "cni" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/medbay2) "cnj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/sign/nosmoking_2,/turf/simulated/wall/r_wall,/area/medical/biostorage) "cnk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/medical/virology) @@ -6143,14 +6143,14 @@ "cog" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "coh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "coi" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"coj" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"coj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "cok" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "col" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "com" = (/obj/structure/stool/bed/chair/comfy/black,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"con" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"coo" = (/obj/structure/stool/bed/chair/comfy/black,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"con" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"coo" = (/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "cop" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"coq" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera{c_tag = "Medbay Recovery Ward East"; dir = 8; network = list("SS13"); pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"coq" = (/obj/structure/stool/bed/chair/comfy/black,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "cor" = (/turf/simulated/wall/r_wall,/area/medical/ward) "cos" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/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) "cot" = (/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/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitered"},/area/medical/medbay2) @@ -6272,7 +6272,7 @@ "cqF" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "cqG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "cqH" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/obj/machinery/light_switch{pixel_x = -5; pixel_y = 27},/obj/machinery/holosign_switch{id = "surgery1"; pixel_x = 5; pixel_y = 27},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cqI" = (/obj/structure/table,/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/OPlus,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/camera{c_tag = "Medbay Surgery 1 North"; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cqI" = (/obj/structure/stool/bed/chair/comfy/black,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "cqJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cqK" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cqL" = (/obj/machinery/bodyscanner,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) @@ -6317,11 +6317,11 @@ "cry" = (/obj/structure/table,/obj/item/device/multitool,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "crz" = (/obj/structure/table,/obj/item/weapon/wirecutters,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "crA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) -"crB" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"crC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"crD" = (/obj/machinery/door_control{id = "surgeryobs1"; name = "Privacy Shutters Control"; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"crE" = (/obj/machinery/door_control{id = "surgeryobs2"; name = "Privacy Shutters Control"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"crF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"crB" = (/obj/machinery/light,/obj/structure/table,/obj/item/toy/cards/deck,/obj/structure/disposalpipe/junction{tag = "icon-pipe-j2 (EAST)"; icon_state = "pipe-j2"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"crC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera{c_tag = "Medbay Recovery Ward East"; dir = 8; network = list("SS13"); pixel_y = -22},/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"crD" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "surgeryobs1"; name = "Privacy Shutters"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/surgery) +"crE" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "surgeryobs2"; name = "Privacy Shutters"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/surgery) +"crF" = (/obj/structure/table,/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/OPlus,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/camera{c_tag = "Medbay Surgery 1 North"; network = list("SS13")},/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "crG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "crH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "crI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -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) @@ -6383,16 +6383,16 @@ "csM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/wall/r_wall,/area/atmos/control) "csN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/atmos/control) "csO" = (/turf/simulated/wall/r_wall,/area/atmos/control) -"csP" = (/obj/machinery/iv_drip,/obj/machinery/light{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"csP" = (/obj/machinery/body_scanconsole,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "csQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "csR" = (/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{icon_state = "white"},/area/medical/surgery) "csS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "csT" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"csU" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"csV" = (/obj/machinery/light{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"csU" = (/obj/machinery/bodyscanner,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"csV" = (/obj/structure/table,/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/OPlus,/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/camera{c_tag = "Medbay Surgery 2 North"; network = list("SS13")},/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "csW" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "csX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"csY" = (/obj/machinery/iv_drip,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"csY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "csZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Isolation A"; req_access_txt = "5"},/turf/simulated/floor/plasteel,/area/medical/patient_a) "cta" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "ctb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitered"},/area/medical/patient_a) @@ -6454,8 +6454,8 @@ "cuf" = (/obj/machinery/computer/operating,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cug" = (/obj/machinery/optable,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cuh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cui" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/FixOVein,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cuj" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/FixOVein,/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cui" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cuj" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cuk" = (/obj/machinery/computer/operating,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cul" = (/obj/structure/closet/crate/freezer,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cum" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -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) @@ -6512,8 +6512,8 @@ "cvl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cvm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/wall,/area/medical/surgery) "cvn" = (/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cvo" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/item/weapon/cautery,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cvp" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/item/weapon/cautery,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cvo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cvp" = (/obj/machinery/door_control{id = "surgeryobs1"; name = "Privacy Shutters Control"; pixel_x = 25; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cvq" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "cvr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cvs" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) @@ -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) @@ -6558,11 +6558,11 @@ "cwf" = (/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cwg" = (/obj/machinery/power/apc{dir = 2; name = "Surgery APC"; pixel_y = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cwh" = (/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{icon_state = "white"},/area/medical/surgery) -"cwi" = (/obj/structure/table,/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/advanced/bruise_pack,/obj/machinery/camera{c_tag = "Medbay Surgery 1 South"; dir = 1; network = list("SS13"); pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cwj" = (/obj/structure/table,/obj/item/weapon/bonegel,/obj/item/weapon/bonesetter,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cwk" = (/obj/structure/table,/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cwl" = (/obj/structure/table,/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cwm" = (/obj/structure/table,/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/advanced/bruise_pack,/obj/machinery/camera{c_tag = "Medbay Surgery 2 South"; dir = 1; network = list("SS13"); pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cwi" = (/obj/machinery/door_control{id = "surgeryobs2"; name = "Privacy Shutters Control"; pixel_x = -25; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cwj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cwk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cwl" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cwm" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 12; pixel_y = 2},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cwn" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/maintenance{name = "Medbay Maintenance"; req_access_txt = "5"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cwo" = (/obj/structure/closet/secure_closet/medical2,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cwp" = (/turf/space,/area/maintenance/asmaint) @@ -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,7 @@ "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) +"cwX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plasteel,/area/security/lobby) "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 +6767,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 +6783,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 +6828,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 +6855,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 +6962,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 +6987,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 +7105,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 +7209,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 +7452,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 +8191,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 +8216,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) @@ -8315,9 +8315,9 @@ "ddU" = (/obj/machinery/newscaster{pixel_y = -32},/turf/simulated/floor/plasteel{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit) "ddV" = (/obj/structure/closet/emcloset,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/machinery/light,/obj/effect/decal/warning_stripes/southeastcorner,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "ddW" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/closet/emcloset,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/effect/decal/warning_stripes/southeast,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) -"ddX" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"ddX" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) "ddY" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) -"ddZ" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"ddZ" = (/obj/machinery/sleeper/upgraded{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration) "dea" = (/obj/structure/stool/bed/roller,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) "deb" = (/turf/simulated/shuttle/floor4,/area/shuttle/escape) "dec" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor4,/area/shuttle/escape) @@ -8325,7 +8325,7 @@ "dee" = (/obj/structure/stool/bed/roller,/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0; req_access_txt = "0"},/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) "def" = (/obj/machinery/status_display{pixel_x = -30; pixel_y = 0},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor4,/area/shuttle/escape) "deg" = (/obj/item/device/radio/intercom{dir = 4; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/shuttle/floor4,/area/shuttle/escape) -"deh" = (/obj/structure/table,/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/OPlus,/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/camera{c_tag = "Medbay Surgery 2 North"; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"deh" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "dei" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "dej" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/device/radio/intercom{dir = 4; name = "station intercom (General)"; pixel_x = 28},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) "dek" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape) @@ -8337,8 +8337,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 +8358,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 +8408,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) @@ -8489,8 +8489,8 @@ "dhm" = (/obj/structure/rack,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhn" = (/obj/structure/rack,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/suit/space/vox/carapace,/obj/item/clothing/head/helmet/space/vox/carapace,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dho" = (/obj/structure/rack,/obj/item/weapon/gun/dartgun/vox/raider,/obj/item/weapon/gun/dartgun/vox/medical,/obj/item/weapon/dart_cartridge,/obj/item/weapon/dart_cartridge,/obj/item/weapon/dart_cartridge,/obj/item/weapon/dart_cartridge,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"dhp" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"dhq" = (/obj/machinery/sleeper/upgraded,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"dhp" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/obj/item/weapon/circuitboard/bodyscanner,/obj/item/weapon/circuitboard/bodyscanner_console,/obj/item/weapon/circuitboard/sleeper{pixel_x = 3},/turf/simulated/floor/plating,/area/storage/tech) +"dhq" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/security/permabrig) "dhr" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhs" = (/obj/machinery/bodyscanner,/obj/machinery/light/spot,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dht" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/shuttle/vox) @@ -8525,7 +8525,7 @@ "dhW" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "synd_outer"; locked = 0; name = "Ship External Access"; req_access = null; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "smindicate"; name = "Outer Airlock"; opacity = 0},/obj/machinery/door_control{id = "smindicate"; name = "External Door Control"; pixel_x = -26; pixel_y = -2; req_access_txt = "150"},/obj/docking_port/mobile{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate"; name = "syndicate infiltrator"; roundstart_move = "syndicate_away"; width = 18},/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_nw"; name = "northwest of station"; width = 18},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) "dhX" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "dhY" = (/obj/structure/closet/syndicate/suits,/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) -"dhZ" = (/obj/structure/table,/obj/item/weapon/c4{pixel_x = 2; pixel_y = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) +"dhZ" = (/obj/structure/table,/obj/item/weapon/grenade/plastic/c4{pixel_x = 2; pixel_y = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "dia" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "dib" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1331; id_tag = "synd_pump"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "dic" = (/obj/machinery/atmospherics/unary/tank/air{dir = 1},/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/shuttle/syndicate) @@ -8555,12 +8555,12 @@ "diA" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access_txt = "150"},/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "diB" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/crowbar/red,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "diC" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_northeast_lock"; locked = 1; req_access_txt = "152"; req_one_access = null; req_one_access_txt = "0"},/obj/docking_port/mobile{dir = 2; dwidth = 2; height = 18; id = "skipjack"; name = "Vox Skipjack"; roundstart_move = "skipjack_away"; width = 19},/obj/docking_port/stationary{dir = 2; dwidth = 2; height = 18; id = "skipjack_ne"; name = "northeast of SS13"; width = 19},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) -"diD" = (/obj/machinery/sleeper/upgraded,/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) -"diE" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) +"diD" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"diE" = (/obj/machinery/camera{c_tag = "Prison West"; dir = 1; network = list("SS13")},/obj/machinery/atmospherics/unary/vent_scrubber,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "diF" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "diG" = (/obj/machinery/door/window{dir = 8; name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "diH" = (/obj/structure/closet/crate/internals,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) -"diI" = (/obj/machinery/sleeper/upgraded,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) +"diI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "diJ" = (/obj/structure/table,/obj/item/weapon/reagent_containers/syringe/charcoal,/obj/item/weapon/reagent_containers/syringe/charcoal{pixel_y = 2},/obj/item/weapon/reagent_containers/syringe/charcoal{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "diK" = (/obj/structure/table,/obj/item/weapon/gun/syringe,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "diL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) @@ -8665,8 +8665,8 @@ "dkG" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration) "dkH" = (/obj/structure/window/plasmareinforced{color = "#FF0000"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) "dkI" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) -"dkJ" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration) -"dkK" = (/obj/machinery/sleeper/upgraded,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration) +"dkJ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dkK" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "dkL" = (/obj/machinery/chem_master,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration) "dkM" = (/obj/machinery/chem_dispenser,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration) "dkN" = (/obj/machinery/door/airlock/centcom{id_tag = "adminshuttle"; name = "Holding Cell"; opacity = 1; req_access_txt = "104"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) @@ -8721,7 +8721,7 @@ "dlK" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor/plasteel,/area/hydroponics) "dlL" = (/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/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) "dlM" = (/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/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A) -"dlN" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) +"dlN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) "dlO" = (/obj/machinery/light{dir = 8},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hydroponics) "dlP" = (/obj/structure/stool/bed,/obj/machinery/flasher{id = "Cell 5"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/B) "dlQ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/power/treadmill{dir = 4},/obj/structure/cable/yellow,/obj/machinery/treadmill_monitor{id = "Cell 5"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B) @@ -8729,7 +8729,7 @@ "dlS" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/power/treadmill{dir = 4},/obj/structure/cable/yellow,/obj/machinery/treadmill_monitor{id = "Cell 4"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A) "dlT" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/power/treadmill{dir = 8},/obj/structure/cable/yellow,/obj/machinery/treadmill_monitor{id = "Cell 2"; pixel_y = -32},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) "dlU" = (/obj/structure/stool/bed,/obj/machinery/flasher{id = "Cell 2"; pass_flags = 0; pixel_x = 0; pixel_y = -26},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison/cell_block/A) -"dlV" = (/obj/machinery/power/treadmill{dir = 4},/obj/machinery/treadmill_monitor{on = 1; pixel_y = -32; redeem_immediately = 1},/obj/structure/cable/yellow,/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C) +"dlV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/clownoffice) "dlW" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "dlX" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/item/weapon/book/manual/sop_engineering,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) "dlY" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/book/manual/sop_engineering,/turf/simulated/floor/plasteel,/area/engine/break_room) @@ -8742,7 +8742,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 +8767,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 +8796,209 @@ "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) +"doF" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/fore) +"doG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/crew_quarters/courtroom) +"doH" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/vending/security,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/seceqstorage) +"doI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/sortjunction{dir = 1; icon_state = "pipe-j2s"; sortType = 7},/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/main) +"doJ" = (/turf/simulated/wall,/area/crew_quarters/courtroom) +"doK" = (/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/obj/machinery/camera{c_tag = "Courtroom"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) +"doL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/crew_quarters/courtroom) +"doM" = (/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 = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"doN" = (/obj/machinery/light_switch{pixel_y = -25},/obj/structure/closet/wardrobe/red,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/main) +"doO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/seceqstorage) +"doP" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/seceqstorage) +"doQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/vending/snack,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) +"doR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/wall,/area/mimeoffice) +"doS" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Office"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/main) +"doT" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Evidence Storage"; req_access = null; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/evidence) +"doU" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) +"doV" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/hallway/primary/fore) +"doW" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) +"doX" = (/obj/item/toy/prize/honk,/turf/simulated/floor/plating,/area/space) +"doY" = (/obj/item/weapon/pen,/obj/structure/closet{name = "Evidence Closet"},/obj/structure/cable,/obj/machinery/power/apc{dir = 4; cell_type = 15000; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) +"doZ" = (/obj/machinery/camera{c_tag = "Fore Primary Hallway Courtroom"; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) +"dpa" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"dpb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"dpc" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/fore) +"dpd" = (/turf/simulated/wall/r_wall,/area/clownoffice) +"dpe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light,/turf/simulated/floor/wood,/area/clownoffice) +"dpf" = (/obj/structure/table,/obj/item/weapon/storage/box/evidence,/obj/machinery/camera{c_tag = "Brig Evidence Storage"; dir = 1; network = list("SS13")},/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_x = 0; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) +"dpg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/storage/primary) +"dph" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/storage/primary) +"dpi" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/storage/primary) +"dpj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/port) +"dpk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/hallway/primary/port) +"dpl" = (/obj/machinery/camera{c_tag = "Fore Primary Hallway West"; dir = 4; network = list("SS13")},/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) +"dpm" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/quartermaster/miningdock) +"dpn" = (/obj/structure/closet/wardrobe/miner,/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/quartermaster/miningdock) +"dpo" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpp" = (/obj/machinery/atmospherics/unary/vent_scrubber,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpq" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpr" = (/obj/machinery/camera{c_tag = "Prison East"; dir = 1; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dps" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpu" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpv" = (/obj/machinery/door/airlock/glass{name = "Prison Basketball Court"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpw" = (/obj/machinery/atmospherics/unary/vent_scrubber,/turf/simulated/floor/holofloor,/area/security/permabrig) +"dpx" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/security/permabrig) +"dpy" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/holofloor,/area/security/permabrig) +"dpz" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/security/permabrig) +"dpA" = (/obj/machinery/vending/sustenance,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5; level = 1},/turf/simulated/wall/r_wall,/area/security/permabrig) +"dpC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpF" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Lockdown 1"; name = "Prison Lockdown Door"; opacity = 0},/obj/machinery/door/airlock/glass{name = "Cell Door"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Lockdown 2"; name = "Prison Lockdown Door"; opacity = 0},/obj/machinery/door/airlock/glass{name = "Cell Door"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpH" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Lockdown 2"; name = "Prison Lockdown Door"; opacity = 0},/obj/machinery/door/airlock/glass{name = "Cell Door"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpI" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Lockdown 3"; name = "Prison Lockdown Door"; opacity = 0},/obj/machinery/door/airlock/glass{name = "Cell Door"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpJ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Lockdown 3"; name = "Prison Lockdown Door"; opacity = 0},/obj/machinery/door/airlock/glass{name = "Cell Door"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpK" = (/obj/machinery/camera{c_tag = "Prison Basketball Court"; dir = 4; network = list("SS13")},/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/security/permabrig) +"dpL" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/permabrig) +"dpM" = (/obj/machinery/vending/sustenance,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/wall/r_wall,/area/security/permabrig) +"dpP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/flasher{id = "permaflash1"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/wall/r_wall,/area/security/permabrig) +"dpS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/flasher{id = "permaflash2"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpT" = (/obj/machinery/flasher{id = "permaflash3"; pixel_x = 28; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dpU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/item/clothing/mask/gas/clown_hat,/turf/simulated/floor/plating,/area/space) +"dpV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plating,/area/space) +"dpW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/holofloor{dir = 2; icon_state = "red"},/area/security/permabrig) +"dpX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/holofloor{dir = 10; icon_state = "red"},/area/security/permabrig) +"dpY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/holofloor{dir = 2; icon_state = "red"},/area/security/permabrig) +"dpZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/holofloor{dir = 2; icon_state = "red"},/area/security/permabrig) +"dqa" = (/turf/simulated/floor/holofloor{dir = 6; icon_state = "red"},/area/security/permabrig) +"dqb" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"dqc" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dqd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/permabrig) +"dqe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/permabrig) +"dqf" = (/obj/machinery/door/airlock/glass_security{name = "Prison 1"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dqg" = (/obj/machinery/door/airlock/glass_security{name = "Prison 2"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dqh" = (/obj/machinery/door/airlock/glass_security{name = "Prison 3"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dqi" = (/obj/structure/sign/securearea{name = "\improper ARMORY"; pixel_y = 32},/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/space) +"dqj" = (/obj/machinery/atmospherics/unary/portables_connector,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"dqk" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent{filled = 0.2},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/permabrig) +"dql" = (/obj/machinery/computer/area_atmos/area,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"dqm" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 30},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"dqn" = (/obj/machinery/camera{c_tag = "Prison Air Control"; dir = 6; network = list("Prison","SS13")},/obj/machinery/portable_atmospherics/scrubber/huge/stationary,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"dqo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/light_switch{pixel_y = 25},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"dqp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dqq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"dqr" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"dqs" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; layer = 2.4; on = 1},/obj/machinery/door_control{id = "Prison Lockdown 1"; name = "Cell 1 Lockdown"; pixel_x = -3; pixel_y = 24; range = 5; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"dqt" = (/obj/machinery/door_control{id = "Prison Lockdown 2"; name = "Cell 2 Lockdown"; pixel_x = -3; pixel_y = 24; range = 5; req_access_txt = "2"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"dqu" = (/obj/machinery/door_control{id = "Prison Lockdown 3"; name = "Cell 3 Lockdown"; pixel_x = 24; pixel_y = 3; range = 5; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/permabrig) +"dqv" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/permabrig) +"dqw" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/item/device/radio/intercom/department/security{pixel_x = -28},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/permabrig) +"dqx" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/visible{dir = 9},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/permabrig) +"dqy" = (/obj/machinery/atmospherics/binary/valve{dir = 4},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/permabrig) +"dqz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dqA" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/permabrig) +"dqB" = (/obj/machinery/power/apc{name = "Prison Wing APC"; pixel_y = -24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/permabrig) +"dqC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"dqD" = (/obj/machinery/flasher_button{id = "permaflash1"; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/permabrig) +"dqE" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/permabrig) +"dqF" = (/obj/machinery/camera{c_tag = "Prison South"; dir = 1; network = list("SS13")},/obj/machinery/flasher_button{id = "permaflash2"; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/permabrig) +"dqG" = (/obj/machinery/flasher_button{id = "permaflash3"; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/permabrig) +"dqH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) +"dqI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) +"dqJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) +"dqK" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/permabrig) +"dqL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) +"dqM" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/security/permabrig) +"dqN" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/camera{c_tag = "Prison Solitary Confinement"; dir = 6; network = list("Prison","SS13")},/turf/simulated/floor/plating,/area/security/permabrig) +"dqO" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/security/permabrig) +"dqP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/security/permabrig) +"dqQ" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/table,/obj/item/weapon/paper,/obj/machinery/light/small{dir = 1},/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/security/permabrig) +"dqR" = (/obj/structure/sign/securearea{name = "\improper ARMORY"; pixel_y = -32},/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/space) +"dqS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/permabrig) +"dqT" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) +"dqU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/permabrig) +"dqV" = (/obj/machinery/iv_drip,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"dqW" = (/obj/item/weapon/circular_saw,/obj/item/weapon/FixOVein,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"dqX" = (/obj/item/weapon/circular_saw,/obj/item/weapon/FixOVein,/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = -28},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"dqY" = (/obj/item/weapon/retractor,/obj/item/weapon/cautery,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"dqZ" = (/obj/item/weapon/retractor,/obj/item/weapon/cautery,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"dra" = (/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/advanced/bruise_pack,/obj/machinery/camera{c_tag = "Medbay Surgery 1 South"; dir = 1; network = list("SS13"); pixel_x = 0},/obj/machinery/light,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"drb" = (/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"drc" = (/obj/item/weapon/bonegel,/obj/item/weapon/bonesetter,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"drd" = (/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"dre" = (/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/advanced/bruise_pack,/obj/machinery/camera{c_tag = "Medbay Surgery 2 South"; dir = 1; network = list("SS13"); pixel_x = 0},/obj/machinery/light,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) (1,1,1) = {" bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8818,7 +9021,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaraaaeaaeaaeaaearbarcbikbikbikbikbikbikbikaraarcbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaraaaeareardardarfarWargasOarbarcbikbikbikbikaraasOasPbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaraaaeareardardarfardargasOarbarcbikbikbikbikaraasOasPbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaraasRasQardardardardardardcUJargcUKarcbikbikaraddsdeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaracUKasOdeWardardardarddeXardardarddeYcUKarcaraddsdeZdeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaadbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaracUKaredfaargaaearbdfcdfbdfdaaeaaedfeasOasOasOasRdffdeZdeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8829,75 +9032,75 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfvdfydfaardardarddfzardarddfhdfAdfBdftdfhardarddfCardardardardargcUKaaecUKareardardarddfDardardardargasRbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfvdfFdfEardardarddfrardarddfhardardarddfhardarddfGardardardardarddfHdfIdfHardardardardardardardardarddfJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfvdfidfiardardarddfzardarddfhdfKdfwarddfhardarddfCardardardarddfscUKaaecUKdeWardardardardardarddfLdfsasRbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfvardardardardarddfhardardargaaeaaedfrareardarddfhdfxardarddfscUKdfMbikdfNasOaaeaaeaaeaaeaaeaaeaaeasOdfMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfOardardardarddfPdeYdeWardardardardardardardarddfharddfsarbasOdfMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfhdfRdfQdfSarddfscUKasOaaeaaearbdeWardardardarddeYaaecUKdfMdfobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdeYdeWdfadfTdfscUKaredfVdfUdfWargasRardarddfkdfXdfldeZdfYaaeasPbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfNasOaaedfZasOareardardardardarddfhardarddfsarbasRdffdgadeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgbardardardardardardarddgcdfKdfscUKdfMdfNdgedgddeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgfarddggardardardardarddeYarbcUKdfMbikbikdfNdgedeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaagaafaajaaiaaiaaiaakaafaaJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfNaaearbdeWarddghdgidfscUKasOdfMbikbikbikbikdfNarbdfnbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlbmOcaVbZycaXcaWccwccwbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfNasOaaeaaeaaeasOdfMbikbikbikbikbikbikbikdfNdfMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlccxcaVcaVccycaVcaVcczbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlcyacSKcaVcaVcTOcaVcTWbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcVGaafaafaafddwaafaafaafdelbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldeqcaVdgkbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhNcaVdhObFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdhPaafaafaafaafbFldhNcaVdhOdhQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikaalaalaalaalaalaalaalaamaanaaoaapaalaalaalaalbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhRcaVcaVdhSbFldhNcaVdhObFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaaqaaraasaataauaaybnHbnIaavaayaazaaAaaBaalbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhRcaVayLdhTbFldhNcaVdhObFlaafdhWdhVdhXbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaaCaaDaaEaaFaayaayaawaaGaaHaayaazaazaaIaalbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhYcaVcaVdhZbFldiacaVcczdicdibdibdibbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaaqaayaaKaaLaaMaayaaNaaOaavaaPaataataalaalbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhRcaVcaVcaVdidcaVcaVdiedigdifdifdihbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdiibikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaataataataaQaaRaaSaawaaGaaHaaxaaTaaUaaVaalbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhRcaVcaVcaVdijcaVcaVcaVaVUdikdikdimbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaaWaaXaaYaaZabaabbabcabdabeabfabgabhabhaalbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdhPaafaafaafaafaafaafdincaVcaVaafaafaafaafaafaafdhXbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalabiabjabkablabmabnaboabpabqabraatabsabtaalbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdiobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldipdipdiqdisdirbFlditcaVcaVbFldiudiwdivdiydixbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikaalabuaalabvabwabxabxaalaalabyaaoaalaalabzaalbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlcaVcaVcaVayLcaVdizcaVcaVcaVdiAcaVayLcaVayLdiBbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalabBaatabCabDabEabFbikbikbikbikbikaalabGaalbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikabAcQScJadgjbikbikbikabAbikbikbikdgjbikbikbikabAdiCdgldgjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiDdiEcaVcaVcaVdiFcaVcaVcaVdiGcaVcaVcaVcaVdiHbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalabBaatabCabHaalbikbikbikbikbikbikaalaalaalbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdgodgndgmbikbikabAdgmdgpdgrdgqdgmdgjbikbikdgmdgsdgtdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiIdiEcaVdiKdiJbFldiLdiMdiLbFlaWldiOcaVcaVcaVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikaalaalaalaalabuaatabIabJaalaalaalaalbikbikbikabKabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdgvdgudgmbikabAdgwdgydgxdgAdgzdgydgwdgjbikdgmdgBdgCdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlcaVcaVdiPbFlaafbFlcaVdiRdiQbFlaafbFlcaVcaVcaVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalabMabNabOabPabQabRabSabTabUabVaalbikbikbikbikabKabLabWabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdgEdgDdgFbikdgHdgGdgydgydgIdgydgydgGdgJbikdgLdgKdgMdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiSdiUdiTbFlbikbFldiVdiVdiVbFlbikbFldiWdiYdiXbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalabXabYabZacaacbaccacdaceacfacfaalbikbikbikbikbikabKabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwbikbikdgOdgGdgydgPdgQdgydgydgGdgRbikbikdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiVdiVdiVbFlbikcVGdiZdjbdjadelbikbFldiVdiVdiVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgachaciacjackaclaalacmbikbikbikbikbikabKabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwdgwdgwdgwdgwdgwdgwdgSdgwdgwdgwdgwdgwdgwdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacnacoacpacqacracsacdaalaalaalaalbikbikbikbikbikbikbikabKabLabLabKactactactacuacvactactactabKabKabKabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgHdgNdgTdgTdgTdgTdgTdgTdgmdgUdgmdgTdgTdgTdgTdgTdgTdgNdgJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacwacxacyaczacAacBacCaalacDacEacEacEacEacEbikbikbikbikbikabKacFacGactacHacIacJacKacLacMactabLabLabLabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgVdgXdgWdgZanqdhadgmdgSdgwdgSdgwdgSdgmdhcdhbdhedhddgXdhfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikacgacNacOacPacQacRacSacCaalacEacEacUacTacVacEacEacEbikbikbikbikabKacGactacWacXacYacXacXacZactadaadaadaadaadaadaabLadbbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgOdgXdgydgydgydhgdgmdgydgydgydgydgydgmdgydgydhhdgydgXdgRbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgadcaddacEacEadeadgadfadiadhacEacEbikbikbikbikbikabKactadjadkadladmadnadoactadpadqadradsadtaduadvbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhjdhidhldhkdhmdgmdhndgydgydgydhodgmdhqdhpdhsdhrdhjdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikadwadxadyadzadAadwadBadCacEadEadDadGadFadIadHadJacEbikbikbikbikbikbikactadKadLadMadNacXadOactadPadtadtadtadtaduadvbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhtdhtdgwdgwdgwdgmdhudgydgydgydhvdgmdgwdgwdgwdhtdhtdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikadQadQadQadQadQadRadSadTadUadwachacdacEadWadVadYadFaeaadZaebacEbikbikbikbikbikaesactaecaedaeeaefaegaehactaeiadtaejadtadtaduadvbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgLdhwdhwdgFbikbikdgmdhxdgydgydgydhydgmbikbikdgLdhwdhwdgFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikadQaekaelaemadQaenaeoaepaepaeqaeracCacEaetadVadYadFaeaadZaevacEbikbikbikbikbikbikactaeIadLaewadNacXaexactaeyadtadtadtadtaezadvbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhzdgydgydgydhydgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAaeAaeAaeAaeAaeAaeAaeAaeAbikadQaeBaeCaeDaeEaeFaeGaeFaeHaeqacSacCacEacEaeJaeLaeKafhaeMacEacEbikbikbikbikbikbikactaeNaeOaePacXaeQaeRactaeSaeTaeUaeUaeVadaabLabWbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhBdhAdgSdhBdhAdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAaeWaeXaeYaeAaeZaeXafaaeAbikadQafbafcafdadQadwafeadwadwadwaffafgaalacEafiadXafjaeuaflacEafmafmafmafmafmafmafmactafnafoafpafqafractactafsaftafuafuafwadabikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxafxafxacGacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhDdhCdgydhEdhFdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafyafzafAaeAafyafzafAaeAbikadQafBafCafDafEafFafGafHafIafJafKafLafMacEacEafPafOafQacEacEafmafSafRafUafTagxafVafWafXafYafZagaagaagbagcagdageagfaggaghadabikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikafxbikaabbikagibikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhHdhGdgydhIdhJdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAagjafAagkaeAaglafAagmaeAbikadQadQadQadQadQagnagoagpagqagragsagtaguagvagwagzagyagBagAagDagCahgagEagFagFagFagGagHagIagJagFagFagFagFagKafuagLagMagNagOagPbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQaabagRaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgLdgwdhKdhMdhLdgwdgFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafAafyafAaeAafAafyafAaeAbikagSagTagUagVagWagXagYagZahaahbahcahdaheagvahfahiahhahmahjahjahkahlahPahnahnahnahoahpahqahrahsahnahnahtahuahvahwahxahyahzadaahAahAahAahAbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQagQafxbikahBbikafxagQagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgLdgwdgwdgwdgFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafyafAafyaeAafyafAafyaeAbikagSahCahDahEahFahGahHahIahJahKahLahMahNagvahOahRahQairahSahTahUahVahWahXahYahZahUaiaaibaicaidahYahZahUahUahAadaadaadaadaadaaieaieaieahAbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQaabaabaabahBaabaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxacGacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafyafyafAaeAafyafyafAaeAbikagSaifaigaihagSaiiaijaikailaimainaioaipagvaiqaisahhamuaitaiuahUaivaiwaixaiyaizaiAaiBaiCaiDaiEaiFaiGbOIaiHahAaieaieaieaieaieaieaieaieahAbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQbikbikbikaiIbikbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafAafyaiJaeAafAafyaiKaeAbikagSaiLaiMaiNagSaiOaiOaiOaiOaiPaiQaiRaiSagvaiTaiUaiVaiWaiXaiYahUaiZajaajbajcajdajeajfajgaiDaiEajhaiGajhajiahAaieaieaieaieaieaieaieaieahAagQagQajjaabagQagQagQagQagQagQagQagQagQagQagQagQagQagQaabaabajkajlajmaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmidmddmkdmjdmldmddmddmmdmddmddmnbikbikbikbikbikbikbikbikbikafxaabajnaabafxbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaeAajoajpajqajrajoajpajqajsajtajuajuajuajuajuajuajuajuajvajwajxajyajzajAajBajCajDajEajFajGahUajHajIajJajKajdajeajKajgajLaiEaiCaiCajMajNajOaieaieaieaieaieaieaieaieahAaabaabaabaabaabaabbikaabbikaabaabaabaabaabaabaabaabbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmpdmodmrdmqdmtdmsdmsdmsdmvdmudmwbikbikbikacGacGacGafxafxaabaabbikajQbikaabaabafxafxacGacGacGbikbikbikbikbikbikbikbikbikbikbikbikaeAajRajSajTafyajUajVajWakcajtajYajZakaakbaknakdakdajuakeakfakgakhakiajBakjakkaklakmalJajFakoakpamwakqajKakraksaktakuakvakwakxakxakzaiCakAaieaieaieaieaieaieaieaieahAaabakBakCakCakCakDakCakCakCakCakDakCakCakCakCakEaabbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmxdmodmzdmydmsdmAdmAdmAdmAdmAdmBbikbikbikacGbikbikaabbikaabbikbikajQbikbikaabbikaabbikbikacGbikbikbikbikbikbikbikbikbikbikbikbikaeAakFafyakGakHakIakJakKakLajtakMakNakOakOakPakQakRajuakSakTakUakVakiakWakXakYakZalaalbalcaldaleaAEalfalgalhalialjalkallalmaiCaiCaiCalnajOaieaieaieaieaieaieaieaieahAaabaloaabaabaabaloaabbikbikaabaloaabaabbikbikaloaabbikaabaabajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmCdmodmEdmDdmAdmAdmAdmAdmGdmFdmwbikbikbikacGaabalpalpalpalpalpbikalqbikalpalpalpalpalpaabacGbikbikbikbikbikbikbikbikbikbikbikbikaeAalralsakGafyaltakJalualvajtalwalxalyalzakQakQakRajualAalBalCalDalEajBalFalGaklalHalIajFajXalKalLalLalMajdalNalOalPalQaiCaiFaiGaiCalRahAahAahAahAahAahAahAahAahAahAaabaloaabbikajkajlajmbikbikajkajlajmbikbikajkajlajmaabaabbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmHdmddmddmddmldmddmddmmdmddmddmIbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamaalZaowanxambbikbikbikamcaeAaeAaeAamdamdameamfamgamdajuamhamiamjamkamlammamnajuamoampamqakVamrajGamsamtaXNamvaYjajGamxamyamzamAamBamCamDamEamFamGaiCajhamHamIamJahAamKamKamKamKamKbikbikbikbikaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikamOamNamQamPamOamRamSamSamTamUamVamWamXamYamZanaanbancajuajuandaneajuajuajuajuajuanfanganhanianfajGajBajCanjajEajFajGankanlanmannahUahUahUahUannanoanpanmahUahAayjahAanrantansansanubikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikaabbikbikbikaEEanwanzanyanBanAanDanCanAanGanGanHanIanJanKanLanManNanOanPanQanRanSanTanSanSanUanVanWanXanYanSanZaoaaobaocaodaoeaofaogaohanSaoiaojaokaolaomaonaooaopaoqaoraosaplaotaovaEHaouaoyaoxbikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabalpalpalpalpalpbikamMbikalpalpalpalpalpaabacGbikbikbikamOanEaoAanFamOamRamSamSamSaoBaoHaoIaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoWaoZapaaoTapbapcapdaoTaoTapdaoXapcapeaoTaoTapbapcaoVapfapgaphapiapjapkaplapmapnaovaozansansapobikaacapqaacbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikaabaabajkajPajmaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsdmMdmLdmOdmNbikbikbikbikbikbikajjbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamOaoCaoCaoDamObikbikbikapwapwapxapyapzapAapAapAapBapBapBapBapCapDapEapEapEapFapGapHapFapEapEapEapIapJapKapLapMapKapNapJapOapOapOapPapQapOapRapSapTapUapVapWapXapmapnapYapYamKapZapZapZamKaqaamKaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmaabaabbikaabaiIaabbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmQdmQdmQdmPbikbikbikbikbikbikacGaqbamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikaEEaoEaoCaoFamOamRamSamSamSaqgaqhaqiaqjaqkaqlaqmapBaqnaqoaqpaqqaqraqsaqtaquaqvaqwaqxaqyaqzaqAaqsaqBaqCaqDaqEaqFaqGaqHaqCapOaqIaqJaqKaqLapOaqMaqNaqOaqPaqQaqRapXapmaqSaqTaqUaqVaqWaqWaqXamKaqYamKaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikaabaloaabbikbikaqZbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmRdmRdmRdmPbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikacGbikbikbikamOaoGaoCaoCaptanAapuanCanAapvanLarharianGanGarjapBarkarlarmarnaroarparqarrarsartaruarvarrarwarxaryarzarAarBarCarDarEarFarGarHarIarJarKapOarLarMarMarNarMarOapXapmaovaovaovaovarPaovarQarRarSamKakBarTakEbikbikaiIaabaabaabaabaiIaabaabaabaabaiIaabaabaabaabarUarVakEaabbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmTdmSdmUdmPbikbikbikbikbikbikacGaabalpalpalpalpalpbikamMbikalpalpalpalpalpaabacGbikbikbikamOaqcaqcaqcamOamRamSamSamSarXarYaoMarZasaanGasbapBascasdaseasfasgashasiasjaskaslasmasnasoaspashasqarFasrassastasrarEasuapOarGaswasxasyapOaszasAarMarNarMasBapXasCasDasEasFasEasGasHamKamKapnamKaloasIasJakCakCarTakCakCakCakCarTakCakCakCakCarTakCakCakCasKasLasIaloaabbikagQaabbikbikbikbikbikbikbikbikbikbikaabbikaabbikasMasMasNasNasNasNasNasNasMasMaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmVdmSdmUdmPbikbikbikbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikaqeaqdaqdaqdaqfbikbikbikapwapwapwapwapwasSanGasTasUapBatRapBasVasWapEapEatSapEasXasYapEatSapEasZataatbatcatdateatfatgathapOatiatjatkatlatmatnatoatpatqarMatrapXatsattatuatvatwatxatyatzatAatBamKatCarTatDaabaabbikaabbikbikbikbikbikbikbikbikaabaabaabaabaabatEatFatDaabaabaabaabaabbikbikbikbikbikbikbikbikbikaabbikaabasMasMatGatHatIatJatKatLatMatIasMasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmVdmSdmUdmPbikbikbikbikbikbikaabatNamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapwatOanGasTasUatPatUatTauyatVaqsatQauJauEavxauTavEavBatWaqsatXatYatZauaaubaubaucaudapOaueaufaugauhapOauiaujaukarNarMaulapXatsarPattattattaumaovaunauoaupamKbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikaabaabaabaabauqaabaabbikbikaabaabaabbikbikbikbikbikbikbikbikasMasMasMasMauratJausatJausautatJatJatJauuasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmSdmSdmSdmWbikbikbikbikbikbikacGbikbikaabbikaabbikbikauvbikbikaabbikaabbikbikacGbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikapwauwanGauxasUarkavJauzauAauBauCauDdlLauFauGauHauIdlMauKauLauMauNauNauOauNauNauPauQauRauSdlNapOauUapOauVauWauXauYauZavaapXatsavbavcavcavcavdaveavfavgavhamKbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabbikbikbikaabaabaabaviaabaabbikbikaabbikaabaabbikbikbikbikbikbikbikasMavjavkavlavmavnavoavpatJatJavqavratJavsasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmXdmSdmSdmYbikbikbikbikbikbikacGacGacGaabaabaabaabavtavuavtaabaabaabaabacGacGacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapwavvanGavwasUdlPdlQavyavzavAashdlRdlSashavCavDashdlTdlUashavFavGavHavGavGavHavGavIapOatidlVapOavKapOavLavMavNavOavPavQavRavSavTavUavUavUavVavWavXavYavYavYbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikaabaabavZawaavZaabaabbikaabbikbikaabaabbikbikbikbikbikbikasMawbawcawdaweawfawgatJatJatJawhawiatJawjasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmZdmSdnadmPbikaahbikbikbikbikaabbikaabbikbikaabbikavtawkawlbikbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikawmawmawmawmawmawmapwapwawnapwasUasUasUawoawpawqawrawrawsawrawsawrawrawtasZasZasvawvawwawuawvawwawuawyawzawzawzawzawzapOawAawBawCawCawDawCawEawFavUawGawHawIavVawJawKawLawMavWbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikaabbikavZawNavZbikaabbikaabbikbikbikaabaabbikbikbikbikbikasMawOawPavlawQawRawSawTatJawUawVawWawXasMawYaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdnbdnddncdnddnebikbikbikbikbikbikaabbikaabbikbikaabavtavtawZaxaavtbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikawmaxbaxcaxdaxeaxfaxgaxhaxiaxhaxjaxhaxhaxkaxlaxlaxlaxlaxlaxmaxnaxoaxlaxlaxlaxlaxpaxlaxlaxlaxlaxqaxraxsaxtaxuaxvaxwaxxapWaxyaxzaxAaxBaxCaxDaxEaxFavUaxGaxHaxIavVaxKaxLaxJaAZavWbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikaabavZavZaxMavZavZaabbikaabbikbikbikbikaabaabbikbikbikbikasMaxNaxOavlasMavlavlaxPaxQasMasMasMasMasMasMaabaabbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdnbdnfdnebikbikbikbikbikbikaabaabbikaabbikbikaabaxRaxSaxTaxUaxRaxVaxVbikbikaabbikbikbikbikbikbikbikbikbikbikawmaxWaxXaxYaxZayaaybaycaydayeayfaxqaxqaygaxqaxqaxqaxqaxqayhaxqaxqaxqaxqaxqaxqayiaxqaxqaxqaxqaSWaxqaykaxqaylaxqaymaynapWayoaypayqayraysaytaxEayuavUayvaywayxayyayzayAayBawMavWbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikaabayCayDayEayFayCaabbikaabbikbikaabbikbikaabaabbikbikayGasMavlasMavlayHayIayHayJayHayHayHayKayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaxVaxVaxVaxVaxVaabaabaxRazsayMayNaxRayOaxVbikbikaabbikbikbikbikbikbikbikbikbikbikawmayPayQayRaySayTawmayUayVayWayXayYayZazaazbazcayXayXayXazdayXayXayXayXayXayXazeazfazgazgazgazhaziazjaziazkazlazmaznapWazoazoazoazoazoazoaxEaxFavUazpaxHazqavVcscazraxJcvYavWbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikbikaabayCaFCaztazuayCaabbikaabbikbikaabbikbikayGazvayGazvayGayKayHayHayHayHayHayHayHayHayHazwazxayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikazyazzazybikbikbikaxVaxVaxVaxVazAazBazCaxVbikbikaxRazDazEazFazGazHaxVbikbikaabbikbikbikbikbikbikbikbikbikbikawmawmawmawmawmawmawmazIazIazJazKazKazLazMazNazOazPazPazOazQazOazRazRazRazRazRazRazSazRazRazTazUazVazWazIazXazIazYazIazIaqVazZaovaovaovaovaAaaxFavUaAbaxHaAcavVaAdayAayBawMavWbikbikbikbikbikbikbikbikaabaabbikbikbikbikazyaAeazybikaabayCaAfaAgaAhayCaAiaAiaAiaAiaAiazvazvazvayGaAjayHazwazxayJayHayJayJayJayGaAkayGayGayGayGayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikaAlaAmaAlbikbikaabaxVaAnaAoaApazHaAqazHaxVaAlaAlaxRaxRaAraAsazGazHaxVaxVaAlaAlaAlaxVaxVbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikazJaAtaAuaAvazMaAwazOaAxaAyaAzaAAaABaACaADbfTaAFaAGaAHaAIaAJaAKaALaxqaxraAMaANaAOaAPaAQaAPaAPaAPaARaAPaAPaAPaAPaASaATaAUaAVaAWaAXaAYcNsaBaaUadcuavWaabaBbaBcaBcaBcaBcaBcaBdaabaabbikbikbikbikazvaBeazvbikaAiayCayCaBfaBgayCaBhayHayHayHayJaBiayHaBjayGayHayHayHaBkayJayHayGaBlaBmayGayHaBnayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikappaBpaBobikaBqaBsaBraabaabaAlazHaAlbikbikaabaxVaBuaBvaBwaBxaByaBzaxVaBAazHaBBaBCaBDaBEaBEaBEaBEaBEaBEaBEaBEaBFaxVbikaBGbikbikbikbikbikbikbikbikbikbikbikbikbikbikaBHaBIaBJaBKazMaAwazOaBLafvaBNaAAaABaBOaBPaBPaBPaBPaBPaAIbjlaAKaxlaxqaxrazIaBQaBRaBSaBTaBSaBSaBUaBVaBWaBWaBWaBWaBWaBWaBXaBYaBZaCaaCbaCcaCdaCeavWavWaCfaCgaChaChaChaChaChaCgaCfaabbikbikbikbikazvaCiaCjbikaAiaCkaClaCmaCnayHayHayHayJayHayJaCoayHayHayGayHaCpaCqaCoaAkayHayGaCraCsayGayHaCtayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaCuaBtaCvaBtaCuaCwaCxaCwaCuaabaAlaCzaCAbikbikaxVaxVaxVaxVaxVaCBaCCaCDaCEaCFaCGaCGaCHaCIaCIaCJaCKaxVazHaxVaxVaxVaCLaxVbikaabbikbikbikbikbikbikaabaabaabaabaabaabaabaabaCMaCNaCOaBKazMaAwazOaCPaCQaCRaAAaCSaCTaBPaCUaBPaCVaCVaAIaBPaAKaxlaxqaCWazIaCXaBRaCYaCZaDaaDbaDcaDdaDeaDfaDgaDhaDiaDjaDkaDlaDmaDnaDoaDpaDqaDraDsaDtaCfaCgaChaChaChaChaChaCgaCfaabaabaabaabazvazvaDuaDvazvaAiaDwayHaDxayHayKayHayGayGaDyayGayGaDzayJayJaCoaDAaDBayHayGayHaDCaDCaDCaDCaDCaDCaDCaDCaDCaDDaDDaDDaDDaacaDDaDDaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaDEaBtaCyaBtaDEaCwaDFaCwaDEaxVaAlaDHaDIaAlaAlaxVazHazHazHazHazHazHazHaCBaCLaxVaxVaxVaxVaxVaDJaxVaxVazHaDKaxVaDLaCLaxVaxVaxVbikbikbikbikbikaDMaDMaDMaDMaDMaDMaDMaDMaabaCMaDNaDOaDPaDQaDRaDSaDTaDUaDVaDWaABaDXaBPaDYaDZaEaaEbaEcaEdaAKaxlaxqaxrazIatsaEeaEfaCZaDaaDbaEgaEhaEhaEhaEhaEhaEhaEhaEhaEhaEhaEiaEjaEkaElaEmaEnaEoaEpaCgaChaChaChaChaChaCgaCfaCfaCfbikbikazvayHaEqaEraBhaEsaDAaCoaDxayHaEtayIaEuaAkayHayHayHayHaEvayHayHaDAaEwayHaDzayHaDCaExaEyaEzaDCaEAaEBaECaDCaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaDEaDGcUCaEDaDEaEFddzaEGaEJaEKazHaELaEMaENaDKaEOazHaxVaxVaxVaxVaxVaxVaxVaCLaxVaEPaEQaERaxVaESaETaEUazHaEOaxVaENaEVaBEaBFaEWbikbikbikbikbikaEXaEYaEZaFaaFbaFcaFdaDMaabaCMaFeaFfaFgaCMaFhazOaFiaFjaFkaFlaABaFnaBPaFoaFpaFqaFraFsaFtaFuaFvaydaFwaFxaFyaFzaFAaCZaDaaDbaFBaEhaHTaHTaHTaEhaEhaFDaFEaFEaFFaEiaFGaFHaFIaFIaFJaFKaFLaFMaChaChaChaChaChaFNaFOaFPaFQbikbikazvayHayHaFRayHaEsaFSayHaFTaFUaFUaFUaFUaFVaFUaFWayHayHayHayHayHayHayHayHayJayIaDCaFXaFYaFYaDCaFZaGaaGbaDCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfvardardardardarddfhardardargaaeaaedfrareardarddfhdfxardarddfscUKaNhbikaNnasOaaeaaeaaeaaeaaeaaeaaeasOaNhbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfOardardardarddfPdeYdeWardardardardardardardarddfharddfsarbasOaNhbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfhdfRdfQdfSarddfscUKasOaaeaaearbdeWardardardarddeYaaecUKaNhdfobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdeYdeWdfadfTdfscUKaredfVdfUdfWargasRardarddfkdfXdfldeZdfYaaeasPbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNnasOaaedfZasOareardardardardarddfhardarddfsarbasRdffdgadeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikaabbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikdgbardardardardardardarddgcdfKdfscUKaNhaNndgedgddeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgfarddggardardardardarddeYarbcUKaNhbikbikaNndgedeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaagaafaajaaiaaiaaiaakaafaaJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaapaamaaoaalaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNnaaearbdeWarddghdgidfscUKasOaNhbikbikbikbikaNnarbdfnbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlbmOcaVbZycaXcaWccwccwbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaalaasaaraauaalaalaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNnasOaaeaaeaaeasOaNhbikbikbikbikbikbikbikaNnaNhbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlccxcaVcaVccycaVcaVcczbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaawaayaaxaayaazaalbikbikaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlcyacSKcaVcaVcTOcaVcTWbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaaBaaAaayaaxaayaaAaaBbikbikbikaabaabaabbikbikaabbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcVGaafaafaafddwaafaafaafdelbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaaEaaCaaHaaFaaHaaIaaKbikbikbikaalaalaalaalaalaabaabbikbikbikbikaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldeqcaVdgkbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabaabaalaaLaaNaaMaayaaOaalbikbikaabaalaaPaaRaaQaalaalaalbikbikaabaabaabaacbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhNcaVdhObFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikaalaaSaaTaaMaaVaaUaalbikaabaabaalaaWabhaaXabtaaYaalbikaabaabaacaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdhPaafaafaafaafbFldhNcaVdhOdhQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaalaaBaalaaZaalabaabbaalaalabcaanaaoaalabdabeabxaalaalaalaalaalaalaalaalaalaalaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhRcaVcaVdhSbFldhNcaVdhObFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaabaabaalabgabiaaSabiaaMabfabjablaaxaavaayaboabmaaDabpabrabqabsaalabwabwabzabyabyaalaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhRcaVayLdhTbFldhNcaVdhObFlaafdhWdhVdhXbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalabBabDabCaaDaaMabEaayaayabFabGaavabIabHabJaaGaavabMabNaalabOabOabQabPabPaaBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhYcaVcaVdhZbFldiacaVcczdicdibdibdibbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikaalabRaaHabSaaHabTabVabUabYabXacaabZaccacbacfaceabZacjacjacFahdahcbnHahedhqbnIbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhRcaVcaVcaVdidcaVcaVdiedigdifdifdihbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdiibikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaavdiEdiDdkJdiIdpodkKdkJdkJdpqdppdpsdprdkJdptdpudkJdkJdpvdpxdpwdpydpwabPdpzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhRcaVcaVcaVdijcaVcaVcaVaVUdikdikdimbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaaldpBdpAdpDdpCdpEaaldpFdpFaaldpGdpHaaldpJdpIaalaalaalaaldpKagtaaDagtabPdpLbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdhPaafaafaafaafaafaafdincaVcaVaafaafaafaafaafaafdhXbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaaldpMaaydpNabndpOdpDdpPdpOdpQdpSdpRdpDdpTdpOdpUdpVdpOdpXdpWdpZdpYdqaaalbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdiobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldipdipdiqdisdirbFlditcaVcaVbFldiudiwdivdiydixbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalabuaalabvdqbaaldqcaaqaaldqcaaqabxdqcaaqaalbikaEQaalaalaalaalaalaalaalaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlcaVcaVcaVayLcaVdizcaVcaVcaVdiAcaVayLcaVayLdiBbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaalaalaalaalabuaaldqddqeaaldqfdqfaaldqgdqgabxdqhdqhaalbikaEQabKabKabKdqiaEQaEQaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikabAcQScJadgjbikbikbikabAbikbikbikdgjbikbikbikabAdiCdgldgjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlajbcaVcaVcaVcaVdiFcaVcaVcaVdiGcaVcaVcaVcaVdiHbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaaldqkdqjdqmdqldqnabkdqpdqodqqdqqdqsdqrdqrdqtdqrdquaalbikbikbikaEQabKabKaEQaabbikbikaabbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdgodgndgmbikbikabAdgmdgpdgrdgqdgmdgjbikbikdgmdgsdgtdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlajecaVcaVdiKdiJbFldiLdiMdiLbFlaWldiOcaVcaVcaVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikaaldqwdqvdqydqxdqAdqzdqCdqBdqAdqDdqAdqEdqFdqAdqAdqGaalbikbikbikbikaEQabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdgvdgudgmbikabAdgwdgydgxdgAdgzdgydgwdgjbikdgmdgBdgCdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlcaVcaVdiPbFlaafbFlcaVdiRdiQbFlaafbFlcaVcaVcaVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaalaalaalaalaaldqHdqIaalaalaalaalaalaalaalaalaalaalbikbikbikbikaEQabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdgEdgDdgFbikdgHdgGdgydgydgIdgydgydgGdgJbikdgLdgKdgMdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiSdiUdiTbFlbikbFldiVdiVdiVbFlbikbFldiWdiYdiXbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaaldqJdqLdqKdqNdqMdqOaalaabaabaabbikbikbikbikbikbikbikabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwbikbikdgOdgGdgydgPdgQdgydgydgGdgRbikbikdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiVdiVdiVbFlbikcVGdiZdjbdjadelbikbFldiVdiVdiVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgachacidqPackacldqQaalacmbikbikbikbikbikbikbikbikbikdqRabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwdgwdgwdgwdgwdgwdgwdgSdgwdgwdgwdgwdgwdgwdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacnacoacpacqacracsacdaalaalaalaalaalbikbikbikbikbikbikbikbikbikbikactactactacuacvactactactabKabKabKabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgHdgNdgTdgTdgTdgTdgTdgTdgmdgUdgmdgTdgTdgTdgTdgTdgTdgNdgJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacwacxacyaczacAacBacCaalacDacEacEacEacEacEbikbikbikbikbikbikbikbikactacHacIacJacKacLacMactabLabLabLabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgVdgXdgWdgZanqdhadgmdgSdgwdgSdgwdgSdgmdhcdhbdhedhddgXdhfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikacgacNacOacPacQacRacSacCaalacEacEacUacTacVacEacEacEbikbikbikbikbikbikactacWacXacYacXacXacZactadaadaadaadaadaadaabLadbbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgOdgXdgydgydgydhgdgmdgydgydgydgydgydgmdgydgydhhdgydgXdgRbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgadcaddacEacEadeadgadfadiadhacEacEbikbikbikbikbikbikactadjadkadladmadnadoactadpadqadradsadtaduadvbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhjdhidhldhkdhmdgmdhndgydgydgydhodgmarWdgydhsdhrdhjdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabaaladBadCacEadEadDadGadFadIadHadJacEbikbikbikbikbikbikactadKadLadMadNacXadOactadPadtadtadtadtaduadvbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhtdhtdgwdgwdgwdgmdhudgydgydgydhvdgmdgwdgwdgwdhtdhtdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikaabaalachacdacEadWadVadYadFaeaadZaebacEbikbikbikbikbikaesactaecaedadAaeeacXaefactaeiadtaejadtadtaduadvbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgLdhwdhwdgFbikbikdgmdhxdgydgydgydhydgmbikbikdgLdhwdhwdgFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabbikaabbikbikbikaabaaladRacdacEaetadVadYadFaeaadZaevacEbikbikbikbikbikbikactaeIadLaewadNacXaexactaeyadtadtadtadtaezadvbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhzdgydgydgydhydgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAaeAaeAaeAaeAaeAaeAaeAaeAaabbikbikbikaabaabaabaabaabaabaaladBacdacEacEaeJaeLaeKafhaeMacEacEbikbikbikbikbikbikactaeNaeOaePacXaeQaeRactaeSaeTaeUaeUaeVadaabLabWbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhBdhAdgSdhBdhAdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAaeWaeXaeYaeAaeZaeXafaaeAaabbikbikaabadwadwadwadwadwadwaalaffafgadSacEafiadXafjaeuaflacEafmafmaepaeDahZafmafmactafnafoafpafqafractactafsaftafuafuafwadabikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxafxafxacGacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhDdhCdgydhEdhFdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafyafzafAaeAafyafzafAaeAbikbikbikaabadwadxaekadUaemaelaenafKafLaeoacEacEafPafOafQacEacEafmafDafcafRagaafIafEafWafXafYaegagaagaagbafVagdagcagfaggaghadabikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikafxbikaabbikagibikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhHdhGdgydhIdhJdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAagjafAagkaeAaglafAagmaeAaabbikbikbikadwadyaeraeqaeBagqagragsagtaeCagvagwagzagyaeFaehafeafMahlafSageafSafSafTahpafbafGafCafSafSaikagoagLagxagMagNagOagPbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQaabagRaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgLdgwdhKdhMdhLdgwdgFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafAafyafAaeAafAafyafAaeAbikbikaabaabadwadzaeraeGaeHahaahbdqSdqUdqTagvagnahiahhahmahjafJagvagpagYahgaguaguagAagDagCafUagEagHagGahUafZahvahwahxahyahzadaahAahAahAahAbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQagQafxbikahBbikafxagQagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgLdgwdgwdgwdgFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafyafAafyaeAafyafAafyaeAbikaabbikbikadwadxafBagBagFahJahfagWahnagIagKagJahRahQairahSahqagVagZahFahGahrahkahUahoahsahuahtahKahKahMahLahAadaadaadaadaadaaieaieaieahAbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQaabaabaabahBaabaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxacGacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafyafyafAaeAafyafyafAaeAaabaabbikbikadwadwaiOafFailailadTaatahTahNagvaiqaisahhamuaitaiuahOahVahPahXahWahYaifaibaiaamyamzamzaicaiCaidahAaieaieaieaieaieaieaieaieahAbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQbikbikbikaiIbikbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafAafyaiJaeAafAafyaiKaeAamcaabaabaabaabadwagTaiOaigaiwaeEaatagXaiSagvaimaiUaiVaiWaiXaiYaihaijaiiajgajfahYaioaiyaixaiEaiDaiHaiGaiCaiLahAaieaieaieaieaieaieaieaieahAagQagQajjaabagQagQagQagQagQagQagQagQagQagQagQagQagQagQaabaabajkajlajmaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVydmddmkdmjdmldmddmddmmdmddmddmnbikbikbikbikbikbikbikbikbikafxaabajnaabafxbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaeAajoajpajqajrajoajpajqajsajtajtajtajtajtajtajuajuafdaiAagSafHakoagUajGajGajNahIajEajFajGaiRaiPaiMaiNaipaiTajaajwaixaiEajhajiaiGajMajvajOaieaieaieaieaieaieaieaieahAaabaabaabaabaabaabbikaabbikaabaabaabaabaabaabaabaabbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmpdmodmrdmqdmtdmsdmsdmsdmvdmudmwbikbikbikacGacGacGafxafxaabaabbikajQbikaabaabafxafxacGacGacGbikbikbikbikbikbikbikbikbikbikbikbikaeAajRajSajTafyajUajVajWakcajtbSoclqajcajAajyajDajuahDahCajJajxajLahHajBakjakkaklakmaiFajFaiRakiakaaiRajIaiRahUalhajKakbajYakpakdakzaiCakAaieaieaieaieaieaieaieaieahAaabakBakCakCakCakDakCakCakCakCakDakCakCakCakCakEaabbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmxdmodmzdmydmsdmAdmAdmAdmAdmAdmBbikbikbikacGbikbikaabbikaabbikbikajQbikbikaabbikaabbikbikacGbikbikbikbikbikbikbikbikbikbikbikbikaeAakFafyakGakHakIakJakKakLajtakMakNakOakOakPajZajuaivainaiBaizakrahHakWakXakYakZalaalbajdaknakwakuakqaksaktakTalBakSalcakUalealdaiCalfajOaieaieaieaieaieaieaieaieahAaabaloaabaabaabaloaabbikbikaabaloaabaabbikbikaloaabbikaabaabajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmCdmodmEdmDdmAdmAdmAdmAdmGdmFdmwbikbikbikacGaabalpalpalpalpalpbikalqbikalpalpalpalpalpaabacGbikbikbikbikbikbikbikbikbikbikbikbikaeAalralsakGafyaltakJalualvajtalwalxalyalzakQakxajuampaiQakRaiZalEajzajBalFalGaklalHalIajFaliahPaljaljallalCalgalJajXakfakealMakeakhakgahAahAahAahAahAahAahAahAahAahAaabaloaabbikajkajlajmbikbikajkajlajmbikbikajkajlajmaabaabbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaXhdmddmddmddmldmddmddmmdmddmddmIbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamaalZaowanxambbikbikbikamcaeAaeAaeAamdamdamealKamgamdajuamfamiamjamkamhamlajualNajHammalQamnakvajGamsamtaXNamvaYjajGamXamDamqanlamYdoHaocaoNdoIasvaiCateauydoNalkahAamKamKamKamKamKbikbikbikbikaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikamOamNamQamPamOamRamSamSamTamUamVamWalnakVamZanaanbancajuajuandaneajuajualmajualAalAaufalAauLalDajGajBajCanjajEajFajGdoOatgdoPaiRaiRaiRahUahUannalLdoSalOahUahAalPahAanrantansansanubikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikaabbikbikbikaEEanwanzanyanBanAanDanCanAanGanGanHanIanJanKanLanManNanOanPanQanRanSanTaoiaokalRaqjaxtaojaPcauwaswamoamxamwamBamAamEamCamGamFaokaojaokaolaomamHamJamIanfaoraovapmaotaovaEHaouaoyaoxbikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabalpalpalpalpalpbikamMbikalpalpalpalpalpaabacGbikbikbikamOanEaoAanFamOamRamSamSamSauQasYamrankauSaoLaoLanoanmaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoWaoZapaaoTavRapcawqanpaoTapdanUaoTapeaoTapcapbaoTaoVapfapgaphapianVapkaplapmapnaovaozansansapobikaacapqaacbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikaabaabajkajPajmaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsdmMdmLdmOdmNbikbikbikbikbikbikajjbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamOaoCaoCaoDamObikbikbikapwanganianhanWawDanianiapBapBapBapBapCapDapEapEapEapFapGapHapFapEapEapEaoeaodaodanXanZanYaopaooahEahEaobaoaahEahEapRapSapTapUapVapWapXapmapnapYapYamKapZapZapZamKaqaamKaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmaabaabbikaabaiIaabbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmQdmQdmQdmPbikbikbikbikbikbikacGaqbamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikaEEaoEaoCaoFamOamRamSamSamSaxyaniaofaohaogaoqaonapBaqnaqoaqpapjaqraqsaqtaquaqvapxapvaqyaqzaqAaqsapzapyapyaosaoHaoBapMapLahEaoIaoKaoJaoMahEaqMaqNaqOaqhaqQaqiapXapmaqSaqTaqUaqVaqWaqWaqXamKaqYamKaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikaabaloaabbikbikaqZbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmRdmRdmRdmPbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikacGbikbikbikamOaoGaoCaoCaptanAapuanCanAaykaniayYapAaoOapJapIapBarkarlarmarnaqCarparqarrarsartaruarvarrarwarxaqDapyapyaosapNapKaqHaqGapPapOaqgapQawFahEaszasAarMarNarMarOapXapmaovaovaovaovarPaovarQarRarSamKakBarTakEbikbikaiIaabaabaabaabaiIaabaabaabaabaiIaabaabaabaabarUarVakEaabbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmTdmSdmUdmPbikbikbikbikbikbikacGaabalpalpalpalpalpbikamMbikalpalpalpalpalpaabacGbikbikbikamOaqcaqcaqcamOamRamSazdazdazfaqlaqkaqqaqmaqxaqwapBascasdasearzasgashasiasjaskarAasmasnasoaspasharBapyapyaosaqBaooarFarEaqFaqEaqJaqIaqKahEatnatoatparNarMasBapXasCasDasEasFasEasGasHamKamKapnamKaloasIasJakCakCarTakCakCakCakCarTakCakCakCakCarTakCakCakCasKasLasIaloaabbikagQaabbikbikbikbikbikbikbikbikbikbikaabbikaabbikasMasMasNasNasNasNasNasNasMasMaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmVdmSdmUdmPbikbikbikbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikaqeaqdaqdaqdaqfbikbikaqLaqPaqPaqPaqRaqRaqRaqRarhapBapBatRapBarZasWapEapEatSapEasbasaapEatSapEasZaslasfapyariaroarjaAEasuahEaryarDarCarHarGauiaueaukatqarMatrapXatsattatuatvatwatxatyatzatAatBamKatCarTatDaabaabbikaabbikbikbikbikbikbikbikbikaabaabaabaabaabatEatFatDaabaabaabaabaabbikbikbikbikbikbikbikbikbikaabbikaabasMasMatGatHatIatJatKatLatMatIasMasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmVdmSdmUdmPbikbikbikbikbikbikaabatNamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikbikbikbikbikbikbikbikarIaqPaqPaqParJaqRarKarXarLapBatPatUatTatbatVaqsatQauJauEatdatcavEavBatWaqsatfaATapyapyapyathaSWatiahEarYaryasqasrahEatXatOarMarNarMaulapXatsarPattattattaumaovaunauoaupamKbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikaabaabaabaabauqaabaabbikbikaabaabaabbikbikbikbikbikbikbikbikasMasMasMasMauratJausatJausautatJatJatJauuasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmSdmSdmSdmWbikbikbikbikbikbikacGbikbikaabbikaabbikbikauvbikbikaabbikaabbikbikacGbikbikbikbikbikbikaahbikbikbikarIassaqPaqPastaqRaqRasxaxjapBarkavJauzaucauBaudauDdlLauFauGauHauIdlMauKaujaugauNauNauNauNauNcwXauhahEasyasqaryasTasSasXasVasSauMauXauPapXatsavbavcavcavcavdaveavfavgavhamKbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabbikbikbikaabaabaabaviaabaabbikbikaabbikaabaabbikbikbikbikbikbikbikasMavjavkavlavmavnavoavpatJatJavqavratJavsasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmXdmSdmSdmYbikbikbikbikbikbikacGacGacGaabaabaabaabavtavuavtaabaabaabaabacGacGacGbikbikbikbikbikbikbikbikbikbikaqLatadoKatkatjatmatlatZatYapBdlPdlQavyauZasgashdlRdlSashavvavaashdlTdlUashavxavwavAavzapyavHapyavCahEauaauxaubasqdoTauCauAaSqavMavOavOavQavPavTavUavUavUavVavWavXavYavYavYbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikaabaabavZawaavZaabaabbikaabbikbikaabaabbikbikbikbikbikbikasMawbawcawdaweawfawgatJatJatJawhawiatJawjasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmZdmSdnadmPbikaahbikbikbikbikaabbikaabbikbikaabbikavtawkawlbikbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikauOauOazIazIazIavSdoJdoGdoLauRasUasUasUawoawvawuawrawrawsawrawyawwawrawtasZasZaUcawzawAawBawCawBawCawAahEahEahEahEahEasSauUauTauVaxbaxeaxdawEaxfavUawGawHawIavVawJawKawLawMavWbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikaabbikavZawNavZbikaabbikaabbikbikbikaabaabbikbikbikbikbikasMawOawPavlawQawRawSawTatJawUawVawWawXasMawYaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdnbdnddncdnddnebikbikbikbikbikbikaabbikaabbikbikaabavtavtawZaxaavtbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikauOauWavDauYavGavFavIaxvdoQaxxdoZaxhaxhaxzaxlaxlaxlaxlaxlaxmaxnaxoaxlaxlaxlaxlaxpdoUaxlaxlaxqdoVaxqaxraxraxAaxraxBaxuadQavLavKavNaxXaxCaxDaxEapmavUaxGaxHaxIavVaxKaxLaxJaAZavWbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikaabavZavZaxMavZavZaabbikaabbikbikbikbikaabaabbikbikbikbikasMaxNaxOavlasMavlavlaxPaxQasMasMasMasMasMasMaabaabbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdnbdnfdnebikbikbikbikbikbikaabaabbikaabbikbikaabaxRaxSaxTaxUaxRaxVaxVbikbikaabbikbikbikbikbikbikbikbikbikbikdoFdoWaxqawnayjawpayjaygayiayhayoayjayjaypayjayjayjayjayjayqayjayjayjayjayjayjayPayuayjayjayjayQayjayRaxqaylaxqaymaynadQdpfdoYadQayraysaytaxEayUavUayvaywayxayyayzayAayBawMavWbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikaabayCayDayEayFayCaabbikaabbikbikaabbikbikaabaabbikbikayGasMavlasMavlayHayIayHayJayHayHayHayKayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaxVaxVaxVaxVaxVaabaabaxRazsayMayNaxRayOaxVbikbikaabbikbikbikbikbikbikbikbikbikbikdoFdplaxgaxcaxkaxiaxsazgdpabOIayXayXayZdlNazbazcayXayXayXdpbayXayXayXayXayXayXazedpcazgazgazgazhaziazjaziazkazlazmaznadQadQadQadQazoazoazoaxEapmavUazpaxHazqavVcscazraxJcvYavWbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikbikaabayCaFCaztazuayCaabbikaabbikbikaabbikbikayGazvayGazvayGayKayHayHayHayHayHayHayHayHayHazwazxayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikazyazzazybikbikbikaxVaxVaxVaxVazAazBazCaxVbikbikaxRazDazEazFazGazHaxVbikbikaabbikbikbikbikbikbikbikbikbikbikauOauOauOdpdawmdlVayaayaaVMazJazKazKazLazMazNazOazPazPazOazQazOazRazRazRazRazRazRazSazRazRazTazUazVazWazIazXazIazYazIazIaqVazZaovaovaovaovaAaapmavUaAbaxHaAcavVaAdayAayBawMavWbikbikbikbikbikbikbikbikaabaabbikbikbikbikazyaAeazybikaabayCaAfaAgaAhayCaAiaAiaAiaAiaAiazvazvazvayGaAjayHazwazxayJayHayJayJayJayGaAkayGayGayGayGayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikaAlaAmaAlbikbikaabaxVaAnaAoaApazHaAqazHaxVaAlaAlaxRaxRaAraAsazGazHaxVaxVaAlaAlaAlaxVaxVbikaabbikbikbikbikbikbikbikbikdpdaxFaxwaxYaxWaxZazJaAtaAuaAvazMaAwazOaAxaAyaAzaAAaABaACaADbfTaAFaAGaAHaAIaAJaAKaALaxqaxraAMaANaAOaAPaAQaAPaAPaAPaARaAPaAPaAPaAPaASdoMaAUaAVaAWaAXaAYcNsaBaaUadcuavWaabaBbaBcaBcaBcaBcaBcaBdaabaabbikbikbikbikazvaBeazvbikaAiayCayCaBfaBgayCaBhayHayHayHayJaBiayHaBjayGayHayHayHaBkayJayHayGaBlaBmayGayHaBnayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikappaBpaBobikaBqaBsaBraabaabaAlazHaAlbikbikaabaxVaBuaBvaBwaBxaByaBzaxVaBAazHaBBaBCaBDaBEaBEaBEaBEaBEaBEaBEaBEaBFaxVbikaBGbikbikbikbikbikbikbikbikdpdaycaybayfayeaySdoRaBIaBJaBKazMaAwazOaBLafvaBNaAAaABaBOaBPaBPaBPaBPaBPaAIbjlaAKaxlaxqaxrazIaBQaBRaBSaBTaBSaBSaBUaBVaBWaBWaBWaBWaBWaBWaBXaBYaBZaCaaCbaCcaCdaCeavWavWaCfaCgaChaChaChaChaChaCgaCfaabbikbikbikbikazvaCiaCjbikaAiaCkaClaCmaCnayHayHayHayJayHayJaCoayHayHayGayHaCpaCqaCoaAkayHayGaCraCsayGayHaCtayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaCuaBtaCvaBtaCuaCwaCxaCwaCuaabaAlaCzaCAbikbikaxVaxVaxVaxVaxVaCBaCCaCDaCEaCFaCGaCGaCHaCIaCIaCJaCKaxVazHaxVaxVaxVaCLaxVbikaabbikbikbikbikbikbikaabaabdpdayVayTdpeayWazaaCMaCNaCOaBKazMaAwazOaCPaCQaCRaAAaCSaCTaBPaCUaBPaCVaCVaAIaBPaAKaxlaxqaCWazIaCXaBRaCYaCZaDaaDbaDcaDdaDeaDfaDgaDhaDiaDjaDkaDlaDmaDnaDoaDpaDqaDraDsaDtaCfaCgaChaChaChaChaChaCgaCfaabaabaabaabazvazvaDuaDvazvaAiaDwayHaDxayHayKayHayGayGaDyayGayGaDzayJayJaCoaDAaDBayHayGayHaDCaDCaDCaDCaDCaDCaDCaDCaDCaDDaDDaDDaDDaacaDDaDDaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaDEaBtaCyaBtaDEaCwaDFaCwaDEaxVaAlaDHaDIaAlaAlaxVazHazHazHazHazHazHazHaCBaCLaxVaxVaxVaxVaxVaDJaxVaxVazHaDKaxVaDLaCLaxVaxVaxVbikbikbikbikbikaDMaDMaDMaDMaDMaDMaDMaDMawmaCMaDNaDOaDPaDQaDRaDSaDTaDUaDVaDWaABaDXaBPaDYaDZaEaaEbaEcaEdaAKaxlaxqaxrazIatsaEeaEfaCZaDaaDbaEgaEhaEhaEhaEhaEhaEhaEhaEhaEhaEhaEiaEjaEkaElaEmaEnaEoaEpaCgaChaChaChaChaChaCgaCfaCfaCfbikbikazvayHaEqaEraBhaEsaDAaCoaDxayHaEtayIaEuaAkayHayHayHayHaEvayHayHaDAaEwayHaDzayHaDCaExaEyaEzaDCaEAaEBaECaDCaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaDEaDGcUCaEDaDEaEFddzaEGaEJaEKazHaELaEMaENaDKaEOazHaxVaxVaxVaxVaxVaxVaxVaCLaxVaEPaEQaERaxVaESaETaEUazHaEOaxVaENaEVaBEaBFaEWbikbikbikbikbikaEXaEYaEZaFaaFbaFcaFdaDMdoXaCMaFeaFfaFgaCMaFhazOaFiaFjaFkaFlaABaFnaBPaFoaFpaFqaFraFsaFtaFuaFvaydaFwaFxaFyaFzaFAaCZaDaaDbaFBaEhaHTaHTaHTaEhaEhaFDaFEaFEaFFaEiaFGaFHaFIaFIaFJaFKaFLaFMaChaChaChaChaChaFNaFOaFPaFQbikbikazvayHayHaFRayHaEsaFSayHaFTaFUaFUaFUaFUaFVaFUaFWayHayHayHayHayHayHayHayHayJayIaDCaFXaFYaFYaDCaFZaGaaGbaDCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaDEaGcaGdaGeaDEaGcaGdaGeaEJaBzazHaGfazHazHazHazHazHaxVaGgaGhaGiaGjaGkaxVaCLaxVaEQaGlaEPaGmaGnaGoaxVaGpaxVaxVaxVaxVaGpaCLaEWbikazyazyazyazyaGqaEYaGraGsaGtaGuaGvaGwaDMaCMaBHaGxaGxaGxaGyaGzaGAaGzaGzaGzaGBaGCaGDaGEaGFaGFaGFaGFaGGaGHaGIaxqaGJazIatsaGKaGLaCZaDaaDbaEgaHTaGMaGMaGNaHTaEhaGOaGPaGPaGQaGRaFGaGSaGTaGUaGVaEhaGWaFQaChaChaChaChaChaFQaGXaGYaFQaabaabayGayHayHayJayJaEsaGZaGZaAiaAiaAiaEsaEsaEsayGaHaaHbayGayJayJayGayJayJayGayGaHcaHdaHeaHfaHgaHhaHiaFXaHjaDCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbjNaInaCuaDEaEIaHlaCuaDEaEIaHlaCuaxVaCBaxVaxVaxVaxVaxVazHaxVazHaHnaHoazHazHaxVaCLaxVaHpaabaHpaxVaBvaGoaxVaHqaHraxVaENaBzaxVaAwaDMaDMaHsaHsaHsaHsaHsaHsaHsaHsaHsaGvaGvaGwaHtaHuaHvaHwaHxaHyaHzaHAaHBaHBaHBaHBaHCaHDaHEaHFaHGaHBaHBaHHaHHaHIaHJaHKaHLaHMaHNaGKaHOaHPaHPaDbaEgaHTaHQaHRaHSaHTaEhaGOaGPaGPaGQaKhaFGaGSaGUaGUaGVaEhaGWaFQaChaChaChaChaChaFQaHUaGYaFQbikbikayGaHVayHayHaHWayJaHXazwaHYaHZayKayGaFSayKayGaIaayHayGaIbayHayGaIcaIdaIeaFUaIfaFUaIgaIhaIiaIjaIkaIlaImaDCaDDaDDaacaacaDDaDDaDDaDDaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmJdmKaGddmKaIoaIoaIoaIqaIoaIoaIoaIsaItaIuaIuaIuaIuaIvaxVazHaxVaIwaIxaIyazHaIzaGpaCLaxVaxVaxVaxVaxVaxVaGpaxVazHaIyaCBazHazHaGvaIAaIBaICaIDaIDaIDaIDaIEaIDaIDaIFaIGaICaIHaIIaIIaIIaIIaIIaIIaIIaIJaIKaIKaIKaIKaILaIMaIKaINaIKaIOaILaIKaIKaIKaIKaIPaIQaIRaISaITaFzaIUaIVaHPaIWaEgaHTaIXaIYbvsaHTaEhaIZaJaaJaaJbaEiaFGaJcaJdaJdaJeaEhaJfaJgaChaChaChaChaChaJhaJiaJjaFQbikbikayGayHayHayHayHayHayHaIeaFUaFUaFUaFUaFUaFUaFUaCmayHayHayHayHaDzayHayHaDxayHaJkaJlaJmaJnaJoaFYaFYaFYaJpaDCaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8905,14 +9108,14 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaDEaKzaKAaKzaKBaJraJraKCaKzaKAaKzaKDaKEaKFaKGaxVazHaGpaGpaxVaxVaxVaKHaKHaKHazNaKHaKHaKHaKHaKHaGvaDMaDMaDMaDMaDMaDMaDMaJFaKIaJGbikaabbikaabbikaabbikaabbikaJGaJLaJMaKJaKKaKLaKMaKNaJMaGvaIKaKOaKOaKPaKQaKRaKSaKTaKSaKUaKVaKWaKOaKOaIKaJZaxqaKXazIaKbaGKaGLaCZaDaaDbaEgaKYaKZaLaaLbaLcaLcaLdaLeaLcaLeaLfaLgaLhaLiaLjaLkaLlaCfaKraChaChaChaChaChaKrayGaCtayHaLmaLnayJayGayJaCtayHayGaCtaDxayGaLoayHayGaLpayHayJaLqaLrayGaLsayHayJaAkaAkaDxaAkaLtaDCaLuaIhaLvaLwaLvaIhaLxaDCaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaLyaCuaLzaGdaKzaLAaLBaLCaLDaKzaGdaLEaInaCuaLFaLGaxVazHazHazHazHazHazHaKHaLHaLIaLJaLKaLLaLMaLHaKHaLNaLOaIDaIDaIDaIDaIDaIDaLPaLQaJGaabaLRaLRaLRaLRaLRaLRaLRaabaJGaJLaJMaLSaLTaLUaLVaLSaJMaGvaIKaIKaIKaIKaLWaLXaJOaLYaJOaLXaLZaIKaIKaIKaIKaJZaxqaMaazIaKbaGKaFAaCZaDaaDbaFBaMbaMcaMcaMcaMcaMcaMcaMcaMdaMcaMeaMeaMeaMeaMeaMfayGaCfaKraChaChaChaChaChaKrayGayGayHaMgaLnayJaMhayGayHayHayGayHaDxayJayHayHayGayHayHayJaDxayIayGayHayHayJaMiayHaDxayHaMjaMkaMkaDCaDCaDCaDCaDCaDCaDCaDDaDDaDDaDDaDDaabbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaKAaKzaKzaKzaKzaKzaKzaKAaInaMlaCuaMmaMnaMoaMoaMoaMoaMoaMoaMpaKHaLHaMqaLJaMraMqaMqaLHaKHaMsaMtaMuaMuaMuaMuaMuaMuaMuaMuaMvbikaLRaMwaMxaMyaMzaMAaLRbikaJGaJLaJMaMBaMCaMDaMEaLSaJMaGvaIKaMFaMFaKPaMGaMHaKSaKTaKSaMHaMIaMJaKOaKOaIKaJZaxqaKaazIaMKaBRaMLaCZaDaaDbaEgaMbaMcaMMaMNaMOaMOaMcaMPaMQaMRaMeaMSaMTaMUaMeaMVayGbikaMWaMXaMXaMXaMXaMXaMYbikayGayHaMZaNaayJayJayGayGayJayJaNbaNcayJayGazxayGayGayJayJaNdaNeayGayGayGaHYaMiayHaDxayHaMjazwayKaFSayGaNfaNgaNfayGayGayGaabaabaabaabaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNhaNiaNjaNiaNiaNkaNlaNiaNiaNjaNmaNnaCuaKBaNoaMoaNpaNqaNraNsaNtaNuaKHaLHaMqaLJaNvaMqaMqaLHaKHaNwaNxaNyaNzaNAaNBaNCaNDaNEaNFaMvaabaLRaNGaNHaNIaNJaNKaLRaabaJGaJLaJMaNLaNMaNNaNOaNPaJMaGvaIKaJNaJOaNQaNRaLXaJOaNSaJOaLXaNTaNUaJOaJYaIKaJZaxqaNVazIaKbaEeaEfaCZaDaaDbaNWaNXaMcaNYaMQaMQaMQaNZaOaaObaOcaMeaOdaOeaOfaOgaOhazxbikbikbikbikbikbikbikbikbikayGaOiaOjaOkaOlaOmayGaEtayHaHVaDxayHayGbikayGayHayHayHayHaDxaOnaOoaOpaOpaOpaOpaOqaOraOsaOtaOuaOvaOuaOwaOxaOxaOyaOzaOAaOBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNhaNmaNiaODaOEaOFaOGaOHaOIaOJaOKaOLaOMaONaOOaKzaKBaOPaMoaOQaORaOSaOTaOSaOUaKHaOVaMqaOWaOXaOYaOXaOZaPaaPbaPcaPdaPdaPdaPdaPdaPdaPeaPfaMvbikaLRaPgaNHaPhaNJaPiaLRbikaJGaJLaJMaPjaPkaPlaPmaPnaJMaGvaIKaPoaPoaKPaPpaMHaKSaPqaKSaMHaPraKWaPsaPsaIKaPtazUaPuazIaKbaEeaPvaPvaPvaPvaPwaPxaPyaPzaPAaPBaPBaPBaPCaPBaPDaPEaPFaPGaPHaPEaPIaPJazxayGayGayGayGayGayGayGayGayGayGayGayGaBMayGayGayGayGayHaDxaOiazvaabazvayHaPLaPMaPNaPOaPPaPQaPRaPRaPRaPRaPSaPTaPUaPVaPWaPXaPWaPYaPWaPWaPZaQabpqaQbaQcaQdaQeaQeaQeaQeaQeaQeaQeaQeaQeabLadbbikbikbikbikbikbikbikaaabdBaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaONaQgaQhaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaQmaMoaQnaQoaQpaQqaQraQsaKHaQtaMqaQuaQvaQwaQxaQyaKHaQzaPdaPdaPdaPdaPdaPdaPdaPeaQAaMvaabaLRaQBaQCaQDaQEaQFaLRaabaJGaJLaJMaQGaQHaQIaQJaQKaJMaGvaIKaIKaIKaIKaQLaLXaJOaLYaJOaLXaQMaIKaIKaIKaIKaQNaQOaQPazIaMKaQQaQRaQRaQRaQSaQTaQUaQVaQWaQXaQVaQYaQZaRaaQVaRbaRcaRdaReaRfaMeaRgaRhaRiaRjaRjaRhaRkaRlaRlaRlaRlaRlaRmaRnaRlaRoaRpaRqaRraRsaRvaRuaTkaRwaRxaRwaRyaRzayHayGaRAaRBaRCaRDaREaRFaRGaRHaRIaRJaRIaRKaRLaRMaRNaROaRPaOCbbVaTCaRTaRUaQdaRVaRWaRXaRYaRZaSaaSbaScaSdaprbikbikbikbikbikbikbikaaabfmbifbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSfaOFaOFaNjaOMaQjaOFaQjaSgaQjaOFaQjaOMaQkaQlaKzaKBaShaMoaMoaSiaSjaSkaSjaMoaKHaKHaKHaKHaSlaSmaSnaSoaKHaSpaSqaSraPdaPdaZVaPdaStaSuaSvaMvbikaLRaLRaSwaSxaSwaLRaLRbikaJGaJLaJMaSyaSzaSAaQJaSBaJMaGvaIKaJNaJOaSCaNRaLXaJOaLYaJOaLXaNTaSDaIKaIKaIKaSEaSFaSGaSHaSIaSJamKamKaSKaSLaSMaSNaMcaSOaMQaMcaSPaMcaSQaMcaSRaSSaSTaSUaSVaTeaSXaSYaSZaTaaTbaTcaTdaTbaTbaUjaTbaSYaTfaSYaOvaTgaSYaThaTiaTjaTmaTlaToaTnaTqaTpaWIaTraOuaTsaTtaTuaTvaTwaTxaTyaTzaRHaTAaTBaRIcLhaTDaTEaTFaROaTGaRQaRRaRSaTHaTIaQdaTJaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikaaabfmbigbijbihbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaONaTMaTNaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaTOaTPaTQaTRaTSaTSaJraTTaTUaTVaTWaTXaTYaTZaMqcoCaKHaUbaUcaUdaUeaUfaUgaUhaUiaUZaUkaMvbikaabbikaUlaUmaUlbikaabbikaJGaJLaJMaUnaUoaUpaUqaUraJMaGvaIKaUsaUtaKPaUuaUvaKSaUwaKSaUxaUyaUzaIKaUAaUBaUCaUDaUEaUFaUGaUHbikbikaSKaUIaUJaUKaMcaULaUMaMQaMQaUNaMQaMQaMQaUOaMeaUPaMeaUQaURaMeaUSaMeaUTaUUaUVaUWaUXaUYaUTbwNaVaaVbaVcaVbaVbaVbaVbaVdaWLaVbaVeaVfaWFaWBaVbaVhayHaRDaViaTvaVjaVkaVlaVmaVnaVoaVpaVqaRIaVraVsaVtaVuaVvaTGaRQaRRaRSaRTaVwaQdaVxaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikbdBblqbjMbmKbjMbqQbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVyaVzaNiaODaOMaOFaVAaVBaOFaOFaVCaVAaOMaONaVDaKzaKBaVEaVFaVGaVHaVGaVGaVGaVGaVGaVIaJraKHaVJaVKaVJaKHaKHaVLaVMaVLaMuaMuaMuaMuaVLaVNaVOaMvaVPaVQaVQaVRaVSaVRaVQaVQaVTaJGaVVaJMaVWaJMaVXaVYaVZaJMaWaaIKaIKaIKaIKaWbaWcaWdaWeaWdaWcaWbaIKaIKaWfaUDaUDaUDaUDaWgaWhaWiaWjaWkaSKbKgaUJaWmaMcaMcaMcaMcaMcaMcaMcaMeaMeaUOaWnaWoaWpaWqaWraWsaWuaWtaUTaWvaWwaWxaWyaWzaUTaWAaWGaWCaWDaWCaWEaWHaYDaWNaYFaWJaWKaYGaWMaYEaVbaWOaRtaWPaWQaWRaVjbtTcvIaVmaWTaRIaWUaWVaWWaWXaWYaTFaTFaRIaRIaRQaRRaRSaTHaWZaQdaXaaXbaXcaXdaXeaXfaScaScaXgaprbikbikbikbikbikaaabfmbqRbmKbmKbmKbqSbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVyaNiaNjaNiaNiaNkaNlaNiaNiaNjaVzaXhaCuaXiaVEaInaXjaXjaXkaXjaXlaDEaXmaXnaJraXoaXpaXqaXqaXraXsaXqaXtaXqaXqaXqaXuaXqaXqaXvaXwaXxaXyaXzaXAaXyaXBaXyaXyaXyaXyaXCaXDaXEaXqaXqaXFaXGaXHaXIaXJaXKaXLaXMaXRaXPaXPaXPaXPaXPaXPaXPaXQaXWaXXaXSaXTaXUaXVaXYaZHaXZaUDaUDaYaaYbaYcaYbaYcaYdaYeaYfaYgaYhaYiaMeaYkbBvaYmaYlaYnaYnaYoaYpaYqaYraUTaYsaYtaYuaYuaYvaUTaYwaYxaYyaYzaYAaYAaYBaYCaYHbbFbalbbHbbGbbJaVgaVbaVhaKsaRDaYIaYJaYJaYKaYLaYJaYMaRIaYNaYOaRIaYPaYQaTFaYRaRIaYSaYTaYUaRSaQbaQbaQdaYVaQeaYWaYXaQeaQeaQeaQeaQeabLadbbikbikbikbikbqUbqTbqVbmKbmKbrUbthbmKbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaYYaKzaKzaKzaKzaKzaKzaYYaInaMlaCuaYZaZaaInaZbaZcaZdaZdaZeaDEaZfaXnaZgaZhaXpaZiaZjaZkaZlaZlaZmaZnaZnaZnaZoaZpaZpaZqaZraZsaZlaZlaZtaZpaZvaZwaZxaZxaZyaZzaZAaZuaZuaZuaZBaXGaXHaXIaXJaXJaXJaXJaZCaXJaXJaXJaXJaXJaXJaZDaZEaZNaZFaZGaZJaZIaZLaZKaZMaZNaZNaZNaZOaZPaZPaZPaZQaYiaYiaYiaZRaZSaYiaMebbsaZUaYnaYnbcMaYnaZWaZXaYqaZYaUTaZZbaababbacbadaUTbaebafbagbahbaibajaVbaVbbbKbbLaVbaVbbakbbMbakaVbaVhayHaRDbamaTvaTvaTvbanaTvbaoaRIaRIaRIaRIaRIaRIaRIbapaRIaRSaRSaRRaRSbaqbaraQbbasbatbaubavbawbaxbaybazbaAbikbikbikbikaaabtibtjbtibtibtibtkbtibtlbtibtjbtiaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdetaNiaNjaNiaNiaNkaNlaNiaNiaNjaNmdeuaCuaKBaNoaMoaNpaNqaNraNsaNtaNuaKHaLHaMqaLJaNvaMqaMqaLHaKHaNwaNxaNyaNzaNAaNBaNCaNDaNEaNFaMvaabaLRaNGaNHaNIaNJaNKaLRaabaJGaJLaJMaNLaNMaNNaNOaNPaJMaGvaIKaJNaJOaNQaNRaLXaJOaNSaJOaLXaNTaNUaJOaJYaIKaJZaxqaNVazIaKbaEeaEfaCZaDaaDbaNWaNXaMcaNYaMQaMQaMQaNZaOaaObaOcaMeaOdaOeaOfaOgaOhazxbikbikbikbikbikbikbikbikbikayGaOiaOjaOkaOlaOmayGaEtayHaHVaDxayHayGbikayGayHayHayHayHaDxaOnaOoaOpaOpaOpaOpaOqaOraOsaOtaOuaOvaOuaOwaOxaOxaOyaOzaOAaOBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdetaNmaNiaODaOEaOFaOGaOHaOIaOJaOKaOLaOMaONaOOaKzaKBaOPaMoaOQaORaOSaOTaOSaOUaKHaOVaMqaOWaOXaOYaOXaOZaPaaPbaXtaPdaPdaPdaPdaPdaPdaPeaPfaMvbikaLRaPgaNHaPhaNJaPiaLRbikaJGaJLaJMaPjaPkaPlaPmaPnaJMaGvaIKaPoaPoaKPaPpaMHaKSaPqaKSaMHaPraKWaPsaPsaIKaPtazUaPuazIaKbaEeaPvaPvaPvaPvaPwaPxaPyaPzaPAaPBaPBaPBaPCaPBaPDaPEaPFaPGaPHaPEaPIaPJazxayGayGayGayGayGayGayGayGayGayGayGayGaBMayGayGayGayGayHaDxaOiazvaabazvayHaPLaPMaPNaPOaPPaPQaPRaPRaPRaPRaPSaPTaPUaPVaPWaPXaPWaPYaPWaPWaPZaQabpqaQbaQcaQdaQeaQeaQeaQeaQeaQeaQeaQeaQeabLadbbikbikbikbikbikbikbikaaabdBaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaONaQgaQhaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaQmaMoaQnaQoaQpaQqaQraQsaKHaQtaMqaQuaQvaQwaQxaQyaKHaQzaZmaPdaPdaPdaPdaPdaPdaPeaQAaMvaabaLRaQBaQCaQDaQEaQFaLRaabaJGaJLaJMaQGaQHaQIaQJaQKaJMaGvaIKaIKaIKaIKaQLaLXaJOaLYaJOaLXaQMaIKaIKaIKaIKaQNaQOaQPazIaMKaQQaQRaQRaQRaQSaQTaQUaQVaQWaQXaQVaQYaQZaRaaQVaRbaRcaRdaReaRfaMeaRgaRhaRiaRjaRjaRhaRkaRlaRlaRlaRlaRlaRmaRnaRlaRoaRpaRqaRraRsaRvaRuaTkaRwaRxaRwaRyaRzayHayGaRAaRBaRCaRDaREaRFaRGaRHaRIaRJaRIaRKaRLaRMaRNaROaRPaOCbbVaTCaRTaRUaQdaRVaRWaRXaRYaRZaSaaSbaScaSdaprbikbikbikbikbikbikbikaaabfmbifbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSfaOFaOFaNjaOMaQjaOFaQjaSgaQjaOFaQjaOMaQkaQlaKzaKBaShaMoaMoaSiaSjaSkaSjaMoaKHaKHaKHaKHaSlaSmaSnaSoaKHaSpdpgaSraPdaPdaZVaPdaStaSuaSvaMvbikaLRaLRaSwaSxaSwaLRaLRbikaJGaJLaJMaSyaSzaSAaQJaSBaJMaGvaIKaJNaJOaSCaNRaLXaJOaLYaJOaLXaNTaSDaIKaIKaIKaSEaSFaSGaSHaSIaSJamKamKaSKaSLaSMaSNaMcaSOaMQaMcaSPaMcaSQaMcaSRaSSaSTaSUaSVaTeaSXaSYaSZaTaaTbaTcaTdaTbaTbaUjaTbaSYaTfaSYaOvaTgaSYaThaTiaTjaTmaTlaToaTnaTqaTpaWIaTraOuaTsaTtaTuaTvaTwaTxaTyaTzaRHaTAaTBaRIcLhaTDaTEaTFaROaTGaRQaRRaRSaTHaTIaQdaTJaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikaaabfmbigbijbihbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaONaTMaTNaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaTOaTPaTQaTRaTSaTSaJraTTaTUaTVaTWaTXaTYaTZaMqcoCaKHaUbdphaUdaUeaUfaUgaUhaUiaUZaUkaMvbikaabbikaUlaUmaUlbikaabbikaJGaJLaJMaUnaUoaUpaUqaUraJMaGvaIKaUsaUtaKPaUuaUvaKSaUwaKSaUxaUyaUzaIKaUAaUBaUCaUDaUEaUFaUGaUHbikbikaSKaUIaUJaUKaMcaULaUMaMQaMQaUNaMQaMQaMQaUOaMeaUPaMeaUQaURaMeaUSaMeaUTaUUaUVaUWaUXaUYaUTbwNaVaaVbaVcaVbaVbaVbaVbaVdaWLaVbaVeaVfaWFaWBaVbaVhayHaRDaViaTvaVjaVkaVlaVmaVnaVoaVpaVqaRIaVraVsaVtaVuaVvaTGaRQaRRaRSaRTaVwaQdaVxaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikbdBblqbjMbmKbjMbqQbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdeOaVzaNiaODaOMaOFaVAaVBaOFaOFaVCaVAaOMaONaVDaKzaKBaVEaVFaVGaVHaVGaVGaVGaVGaVGaVIaJraKHaVJaVKaVJaKHaKHaVLdpiaVLaMuaMuaMuaMuaVLaVNaVOaMvaVPaVQaVQaVRaVSaVRaVQaVQaVTaJGaVVaJMaVWaJMaVXaVYaVZaJMaWaaIKaIKaIKaIKaWbaWcaWdaWeaWdaWcaWbaIKaIKaWfaUDaUDaUDaUDaWgaWhaWiaWjaWkaSKbKgaUJaWmaMcaMcaMcaMcaMcaMcaMcaMeaMeaUOaWnaWoaWpaWqaWraWsaWuaWtaUTaWvaWwaWxaWyaWzaUTaWAaWGaWCaWDaWCaWEaWHaYDaWNaYFaWJaWKaYGaWMaYEaVbaWOaRtaWPaWQaWRaVjbtTcvIaVmaWTaRIaWUaWVaWWaWXaWYaTFaTFaRIaRIaRQaRRaRSaTHaWZaQdaXaaXbaXcaXdaXeaXfaScaScaXgaprbikbikbikbikbikaaabfmbqRbmKbmKbmKbqSbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdeOaNiaNjaNiaNiaNkaNlaNiaNiaNjaVzdeQaCuaXiaVEaInaXjaXjaXkaXjaXlaDEaXmaXnaJraXoaXpaXqaXqaXraXsaXqdpjaXqaXqaXqaXuaXqaXqaXvaXwaXxaXyaXzaXAaXyaXBaXyaXyaXyaXyaXCaXDaXEaXqaXqaXFaXGaXHaXIaXJaXKaXLaXMaXRaXPaXPaXPaXPaXPaXPaXPaXQaXWaXXaXSaXTaXUaXVaXYaZHaXZaUDaUDaYaaYbaYcaYbaYcaYdaYeaYfaYgaYhaYiaMeaYkbBvaYmaYlaYnaYnaYoaYpaYqaYraUTaYsaYtaYuaYuaYvaUTaYwaYxaYyaYzaYAaYAaYBaYCaYHbbFbalbbHbbGbbJaVgaVbaVhaKsaRDaYIaYJaYJaYKaYLaYJaYMaRIaYNaYOaRIaYPaYQaTFaYRaRIaYSaYTaYUaRSaQbaQbaQdaYVaQeaYWaYXaQeaQeaQeaQeaQeabLadbbikbikbikbikbqUbqTbqVbmKbmKbrUbthbmKbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaYYaKzaKzaKzaKzaKzaKzaYYaInaMlaCuaYZaZaaInaZbaZcaZdaZdaZeaDEaZfaXnaZgaZhaXpaZiaZjaZkaZlaZldpkaZnaZnaZnaZoaZpaZpaZqaZraZsaZlaZlaZtaZpaZvaZwaZxaZxaZyaZzaZAaZuaZuaZuaZBaXGaXHaXIaXJaXJaXJaXJaZCaXJaXJaXJaXJaXJaXJaZDaZEaZNaZFaZGaZJaZIaZLaZKaZMaZNaZNaZNaZOaZPaZPaZPaZQaYiaYiaYiaZRaZSaYiaMebbsaZUaYnaYnbcMaYnaZWaZXaYqaZYaUTaZZbaababbacbadaUTbaebafbagbahbaibajaVbaVbbbKbbLaVbaVbbakbbMbakaVbaVhayHaRDbamaTvaTvaTvbanaTvbaoaRIaRIaRIaRIaRIaRIaRIbapaRIaRSaRSaRRaRSbaqbaraQbbasbatbaubavbawbaxbaybazbaAbikbikbikbikaaabtibtjbtibtibtibtkbtibtlbtibtjbtiaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaLyaCuaInaGdaKzbaBbaCbaDbaEaKzaGdaInaInaCubaFaVEaInbaGbaHaZdaZdaZeaDEbaIaXnaJraZhaXpaXqbaJbaKbaLbaLbaMbaNbaObaLbaPbaLbaQbaLbaRbaSbaLbaLbaWbaLbaLbaUbaVbaLbaWbaXbaYbaZaXqaXqbbabbbbbcbbdbbebbfbbebbgbbhbbgbbgbbgbbgbbgbbgbbibbjbbkbbkbbkbbkbblbbkbbmbbnbbkbbkbbobbpbbqbbqbbqbbqbbqbbqbbqbbraYiaYiaMebcTbbtbbubbvbbvbbwbbxaZXaYqbbyaUTaUTaUTaUTaUTbbzaUTbbAbbBbbCbbDaWCbbEaVbbdfbdcbdgbbIbkZbjrcSNcIgaVbaVhaHYaRDbbNbbOaTvbbPbbQaTvbbRbbRaRDbbSbbTbbUaQbdilbbWbbXaRSaRSbbYbbZaQbbcaaQbbcbbatbccbcdbcebatbatbcfbaAbikbikbikbikbqUbtmbwlbutbwmbtmbmKbutbwmbtmbwlbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaDEaInaYYaKzaKBaJraJraKCaKzaYYaKzbcgbchbcibcjaInbckbckaXkbckaXlaDEbclaXnaJraDEbcmbcmbcnbcobcobcobcobcobcobcpbcqbcobcobcobcobcobcobcrbcsbctbctbcubctbcvbcwbcxbcvbcvbcybczbcAbcmbcBbcBbcCbcCbcCbcDbcDbcDbcDbcDbcDbcDbcDbcEbcFbcFbcGbcFbcHbcHbcHbcHbcIbcJbcHbcEbcKbcKbcKbcKbcKbcKbcKbcKbcLbcLbcLaMebcObcNbcPbcPbcPbcPbgRbcQbcRbmwbcUaZTbcVbcWbcXbcYaUTaUTbcZbdabdbbdabdaaVbcYtbdddcnbdebdebdecZrcZqaVbbdhbdiaRDbdjaTvbbPbbPbbQbbPaTvbdkaRDbdlbdmbdnaQbaRSbdobdpbdqbdqbdrbdsbdtbdubdvbdwbdxbdybdzbavbatbatbdAbaAbikbikbikbikbqUbwnbmKbutbBQbtmbmKbutbBQbtmbmKbFmbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbdCbdDaJrbdEbdFbdGbdHbdIbdJbdHbdKbdLbdHbdHbdMbdNbdObdPbdQbdQbdQbdRbdQbdSbdTaDEbdUbdVbdWbcobdXbdYbdZbeabebbecbedbeebefbegbehbeibcobejbekbctbelbembenbcvbeobepbeqbcvberbesbetberberberbeuaXJaXObcDbikbikbikbikbikbikbikbcEbevbewbexbeybezbeAbeBbeCbeDbeEbeFbcEbikbikbikbikbikbikbikbcKbeGaYibeHaMebeIbcNbmwbmwbmwbmwbmwbeJbeKbmwbmwbmwbnMbeMbeMbeNbeObePbeQbeRbeSbeTbeUaVbbeVbeWdlHbeYbeYbeXbeZbfaaVbaVhayHaRDbfbbfcaTvbbPbbQaTvbfdbfdaRDaRDbfeaRDaQbbffbbWbbZbfgbfgbfhbbZaQbaQbaQbbfibatbfjbfjbfkbfjbatbflbaAaabbikbikaabbdBbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8925,62 +9128,62 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbltbltblubltbltbltblvbltbltbtnaabaInboibdFbokbgNbjObjObjObimbolbombonboobgNbopboqbjWblCborblCbosbotblCboubovbowbcobnbbncbndbiCbcobejbnfbngboxboybozboAboBbngboCboDboEbSVbyzbyzbyzbuVboGboHboIbnqboJboKboLboMboNboOboPboQbmgboRbnvboSboTboUboTboSbnvboVbmgboWboXboYboZbpabpbbpcbpdbnAbpebpfbpfbpgaMeaMeaMeaMebphbjfbphbpiaMeaURaMeaMeaUTaUTaUTaUTbplbpkbpkbpkbpkbpmbpJaVbbakbpnbakbpobpobakbpnbakaVbbnSbmFbmFbppbnTaRDaRDaRDaRDaRDbjvaRDaRDaRDaRDaQbbpqaQcaQcaQcaQcaQcaQcaQbaQbbprbpsbatbatbatbavbatbatddAbaAbaAbaAbaAbgKbqUddFbmKbmKbmKbmKbmKbmKbmKbmKbmKddGbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbtobpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbejbejbpxblCbpybpzbosbpAblCdlEbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbAibmubpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqnbqnbqsbqnbqnbqnbqnbqnbqnbqnbqndcZbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqyaHkbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbKnddHbPfddIbiibPfdlbbmKbmKbmKbmKddKbmKddKbmKbmKbmKddGbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbtpbtqbtqbtqbtqbwpbwpbtqbtqbxZbikaabaInaLAaJtbzPbzObzRbzQbzQbzQbzQbzSbzUbzTbcsbdVbBFbrhblCblCblCbribotblCbcobcobcobcobnbbrjbrkbrlbcobrmbrnbngbrobrpboAbpFbrqbngboCbrrbpHbAibpIbrsbrtbnmbrubpNboIbpObrvbrwbrxbrybrzbrAbpTbrBbmgbrCbpWbnvbrDbrEbrDbnvbpWbrFbnzbrGbqbbqbbqcbrHbqebqbbrIbnAbrJbqibqibqjbqkbqlbqnbqnbqnbqnbqnbqnbqnbrKbqnbqnbqnbqnbqnbqnbrLbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrNbrObrPbqKbqKbrQbmFbmFbmFbmFbmFbmGbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbrRbmFbrSbrTbatbatbatbatbatbatbatddLbaAbgKbaAbaAbaAbqUddMddOddNbdBddPbdBddPbdBddQddMddObqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCbBHdjhbDDdjidjidjkdjjbtqbxZbjNaInaInaKBbrWbrXbrYbrXbrXbrXbrXbrZbsabsbbcsbcsbscbsdblCbmUbsebsfbpAblCbsgbshbsgbcobcobcobcobsibcobsjbskbngbslbsmbpFbsnbsobngboCbnmbspbAibpIbpIbsqbnmbsrbpNboIbpObWDbrwbrxbstbsubrAbpTbsvbmgbswbsxbnvbsybszbsAboSbsBbsCbsDbsEbsFbsGbsHbsIbsJbqbbsKbnAbsLbsMbqibqjbqkbqlbqnbsNbqnbqnbqnbqnbsObsPbsPbsPbsPbsQbqnbqnbqnbqnbsRbqnbsNbsSbqnbsTbsUbsVbqnbsWbsXbsXbsYbsZbtabtbbmFbmFbmFbmFbmFbmFbmFbtcbtdbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbtebtfbtfbtgddSddRddUddTddTddTddTddVddWbaAaabbikbikaabbqUddXddZddYdeabqUbikbqUdecdebdecdecbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCbBHdjhbDDdjidjidjkdjjbtqbxZbjNaInaInaKBbrWbrXbrYbrXbrXbrXbrXbrZbsabsbbcsbcsbscbsdblCbmUbsebsfbpAblCbsgbshbsgbcobcobcobcobsibcobsjbskbngbslbsmbpFbsnbsobngboCbnmbspbAibpIbpIbsqbnmbsrbpNboIbpObWDbrwbrxbstbsubrAbpTbsvbmgbswbsxbnvbsybszbsAboSbsBbsCbsDbsEbsFbsGbsHbsIbsJbqbbsKbnAbsLbsMbqibqjbqkbqlbqnbsNbqnbqnbqnbqnbsObsPbsPbsPbsPbsQbqnbqnbqnbqnbsRbqnbsNbsSbqnbsTbsUbsVbqnbsWbsXbsXbsYbsZbtabtbbmFbmFbmFbmFbmFbmFbmFbtcbtdbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbtebtfbtfbtgddSddRddUddTddTddTddTddVddWbaAaabbikbikaabbqUddXddYddYdeabqUbikbqUdecdebdecdecbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjldjidjidjidjidjidjidjideHdjnaGddjnaJrbtrbrXbtsbttbtubtvbtwbrZbtxbtybtzbtzbtAbtBblCblCblCbosbtCborbcsbcsbcsbcsbtDbejbejbskbejbsjbskbngbtEbtFbtGbtHboAbngbtIbnmbtJbAibpIbpIbtKbtLbtMbpNbtNbnqbtObtPbpRbpRbpRbpRbpTbtQbmgbtRbtSbmgbmgbmgbmgbmgbmgbmgbnzbnAbqrbtUbtVbtWbtXbtYbtZbnAbvubuabuabucbucbucbucbucbucbucbudbudbuebufbugbugbufbuebudbudbuhbuhbuhbuhbuhbuhbuibuibujbuibuibuibuibuibukafkbumbunbmFbmFbuobuobupbupbupbupbupbuqbtfbtfbtebtfbmFbtfbtfbtfbtfburbusbusbusbusdedbuubuubuubuubuubuubuubuubuubikbikbikbikbdBddYddYddYdeebqUbikbqUdefdebdebdegbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjodjpdjpdjidjpdjpdjpbtqdjqaInaInaInaKBbuvbrXbuwbuxbuxbuxbuybrZbejbuzbuAbuBbuCbuDblCbmUbuEbosbuFborbuGbuHbuIbuJbuKbuLbuLbuMbuLbuNbuObngbuPbuQbuRbuSbuTbuUdngbyzdnidnhbpIbuXbuYbuZbtMbpNbvabnqbvbbvcbvdbvebvfbvgbvhbnqbnqbvibvjbvkbvlbvmbvlbvnbvjbikbvobnAbvpbvqbvrccIbtXbqbbvtbnAbxebvwbxfbucbzcbvybvzbvAbvBbvCbvDbvEbvFbvGbvHbvHbvGbvIbvJbvKbuhbvLbvMbvNbvObuhbvPbvQbvRbvSbvTbvUbvUbvVbukafNbvXbvYbvZbvYbwabwabupbwbbwcbwdbupbwebwfbwebupbwgbtfburbusbwhbwibwhbusbwjbwkbusdeicngbxXbwobikbikbikbikbikbikbikbikbikbikbqUddXddZddYdejbqUbikbqUdekdekdekdekbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjodjpdjpdjidjpdjpdjpbtqdjqaInaInaInaKBbuvbrXbuwbuxbuxbuxbuybrZbejbuzbuAbuBbuCbuDblCbmUbuEbosbuFborbuGbuHbuIbuJbuKbuLbuLbuMbuLbuNbuObngbuPbuQbuRbuSbuTbuUdngbyzdnidnhbpIbuXbuYbuZbtMbpNbvabnqbvbbvcbvdbvebvfbvgbvhbnqbnqbvibvjbvkbvlbvmbvlbvnbvjbikbvobnAbvpbvqbvrccIbtXbqbbvtbnAbxebvwbxfbucbzcbvybvzbvAbvBbvCbvDbvEbvFbvGbvHbvHbvGbvIbvJbvKbuhbvLbvMbvNbvObuhbvPbvQbvRbvSbvTbvUbvUbvVbukafNbvXbvYbvZbvYbwabwabupbwbbwcbwdbupbwebwfbwebupbwgbtfburbusbwhbwibwhbusbwjbwkbusdeicngbxXbwobikbikbikbikbikbikbikbikbikbikbqUddXddYddYdejbqUbikbqUdekdekdekdekbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjrbtqbtqbtqbtqbtqbtqbtqbtqdjqbikbikaInbwqbdFbwrbrXbwsbrXbwtbuxbwubwvbrZbwwbwxbwybwzbuDblCblCblCblCblCblCbwAbwBbwCbwDbwEbngbngbngbngbngbngbngbwFbngbngbngbwGbngbwHbwIbwJbpIbpIbpIbwKbtLbwLbpNbwMbnqbIDbvcbnrbnrbnrbnqbwObnqbwPbwQbwRbwSbwTbwUbwVbwWbwXbwYbwZbnAbxabqbbxbbxcbtXbxdbqbbnAbzbbxgbANbucbxhbxibxjbxkbxlbxmbxnbvHbvHbvHbvHbvHbvHbvHbvHbxobxpbxqbxrbxsbxtbuhbxubxvbxwbxxbxybxzbxvbxAbukbDdbvXbxCbxDbxEbxFbxFbxGbxHbxIbxJbxKbxLbxMbxNbupbxObxPbxQbusbxRbxSbxTbLSbxUbxVbusbxWbxXbxYbwobikbikbikbikbikbikbikbikbikbikbDybtldemdemdemdenbikdeodepdepdepbtlbDzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaInaInaInaInaInaInaInaKBaJrbyabrXbybbycbydbyebyebyfbygbyhbyibyibyjbykbtzbtzbtzbtzbtzbtzbylbymbymbynbyobngbypbyqbyrbysbytbyubyvbywbngbyxbyybyzbuVbtLbwJbpIbpIbyAbnmbnmbyBbyCbyDbyEbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObwXbyPbyQbyPbyQbyRbwXbwYbySbyTbyUbyVbyWbyXbyYbyZbzabyTbAObvwbvwbucbzebzdcSCbzfbzgbucbxnbvHbvHbvHbvHbvHbvHbvHbzhbzibzjbzkbzlbxqbzmbuhbznbzobzpbxxbxAbxzbzqbzrbukbIbbztbzubzvbzvbzwbzxbzybzzbzAbzAbzAbzBbzAbzCbzDbzEbzFbzGbzHbzIbzJbzKbzKbzKbzLbusbzMbxXbzNbwobikbikbikbikbikbikbikbikbikbikbikbDyderderderbDzbikbDyderderderbDzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjtdjsdjuaIoaIoaIobdFaJraJrbrXbzVbrXbzWbzXbzYbzZbrXbcsbAabAabAbbAcbAbbAbbAbbAcbAbbcsbcsbngbngbngbAdbngbAebAebAebAebAebAebyvbAfbAgbAhbAibAjbAkbAlbAmbAnbAobApbAqbArbAsbAtbAubAvbAwbAwbAxbAybAzbAAbABbACbADbAEbvjbAFbwVbAGbwTbAHbvjbikbAIbAJbAKbALbAJbAJbAJbAJbAMbnAbCBbvwbCCbAPbAQbARbASbATbAUbucbAVbAWbAXbAYbAZbBabBbbBcbvHbBdbuhbBebzlbBfbBgbuhbBhbBibxwbxxbxAbxzbxvbxAbukbDdbvXbBjbBkbBlbBmbBnbBobBpbBqbBrbBsbBtbBubKpbupbBwbBxbBybusbBzbBAbBBbxUbBCbKwbusbzMbxXbBEbwobikbikbikbikaabaabaabaabaabaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjwdjvdjuaJqaJqbBIbBJaJqbBKbrXbBLbycbBMbBNbBObBPbrXbikaabaabdetdesdesdesdesdesdeubikbikbBRbBSbBTbBUbBVbAebAebAebAebAebAebBWbBXbBYbBZbCabCbbCcbCdbnmbnmbCebCfbnmbnmbCgbChbCibCjbCkbClbClbCmbClbCnbCobCpbCqbAEbvjbCrbvlbvlbvlbCsbvjbikbAIbAJbCtbCubCvbCwbCxbCybCzbCAbEsbvwbEtbucbvxbCDbCEbCFbCGbCHbCIbCJbCKbCLbCMbCNbCObCPbCQbCRbCSbCTbzlbCUbCVbuhbCWbCXbCYbCZbDabDbbDcbvVbukbIcbDebDfbDgbDgbDhbDibDjbDkbDlbDmbDnbDobDpbDqbupbDrbBxbDsbusbDtbDubDvbxUbxUbDwbusbxWbxXbDxbwobikbikbikbikaabbDAbFfbDBbFfbDBbFfbFgaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjwdjvdjuaJqaJqbBIbBJaJqbBKbrXbBLbycbBMbBNbBObBPbrXbikaabaabdfMdesdesdesdesdesdfNbikbikbBRbBSbBTbBUbBVbAebAebAebAebAebAebBWbBXbBYbBZbCabCbbCcbCdbnmbnmbCebCfbnmbnmbCgbChbCibCjbCkbClbClbCmbClbCnbCobCpbCqbAEbvjbCrbvlbvlbvlbCsbvjbikbAIbAJbCtbCubCvbCwbCxbCybCzbCAbEsbvwbEtbucbvxbCDbCEbCFbCGbCHbCIbCJbCKbCLbCMbCNbCObCPbCQbCRbCSbCTbzlbCUbCVbuhbCWbCXbCYbCZbDabDbbDcbvVbukbIcbDebDfbDgbDgbDhbDibDjbDkbDlbDmbDnbDobDpbDqbupbDrbBxbDsbusbDtbDubDvbxUbxUbDwbusbxWbxXbDxbwobikbikbikbikaabbDAbFfbDBbFfbDBbFfbFgaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjudjubDEaInaInaLyaCubDFbDGbrXbDHbycbycbycbrXbrXbrXbikbikbikdewdevdevdexdevdevdewbikbikbBRbDIbAebDJbDKbDKbDKbDKbDKbDLbDMbDKbDNbDObDPbDQbDRbDSbDTbnmbDUbpIbDVbDWbtLbDXbDYbDZbCjbCjbCpbEabEbbEcbEdbEebCpbvibAEbvjbEfbEgbEhbqtbEjbvjbikbEkbAJbElbEmbEnbEobEpbEobEqbErbFWbvwbHBbucbEubEubEvbEwbExbEybEzbEAbEBbECbEDbEDbEEbEFbEGbEHbuhbCTbEIaJSbuhbuhbuibEKbELbEMbuibukbukbukbENbIdbvXbEPbBkbBlbEQbDgbDjbERbESbESbETbxJbEUbEVbEWbEXbxPbEYbusbEZbFabxUbFbbFcbFdbusbzMbFebwobwobikbikbikbikaabbFhbFjbFibGSbFkbGTbFhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjydjydjydjAdjzdjydjydjydjydjBbikbikbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdewbFnbBRbBRbFobFpbFqbFrbFrbFrbFpbAebyvbAfbAebAebAgbFsbFtbFubFvbFwbFxbFybpIbpIbFzbtLbDXbDYbFAbFBbFCbFDbFEbFFbFGbFHbFIbCpbFJbFKbwRbFLbFMbFNbFObFPbwXbwYbFQbAJbFRbFSbFTbEobFUbEobFVbErbJebvwbKObucbFYbFZbGabGbbGcbGdbGebGfbGgbGgbGhbGibGgbGgbGjbGkbGlbGmbGnbGobGpbGqbGrbGsbGtbGubGvbGwbKhbIebKjbKibvXbGBbGCbGDbGEbGFbxGbGGbESbESbGHbGIbEUbGJbupbGKbGKbGLbusbGMbGNbGObGPbxUbGQbusbzMbGRbwobikbikbikbikbikaabbGUbIybFibFkbFibKkbDBaabbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjCdjEdjDdjGdjFdjIdjHdjFdjJdjLdjKdjydjydjBbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbGWbmrbNkbmrbGXbGYbGZbGYbGYbGYbGYbHabyvbAfbHbbngbngbHcbpIbAibFvbHdbtLbHebHfbHfbHgbHhbHibHjbHkbHlbHmbHnbHobHpbHqbHrbHsbCpbCqbAEbvjbEibHubHvbHwbHxbvjbikbEkbHybHzbHybHybHybHybHybHAbHybKPbvwbKObucbHCbHDbHDbHEbHFbEybHGbHHbHIbHJbHKbHLbHMbHIbHNbHObHPbHQbHRbHSbHTbHTbHUbHVbHWbHXbHYbLibLCbLBbNdbNcbNebIfbIfbIgbIhbIibxGbIjbxJbxJbIkbIlbEUbImbInbIobIpbIqbIrbIsbItbIubIvbIubusbusbIwbEXbGxbLDbLDbLDbLDbLDbGxbFhbFkbFibFkbFkbGTbFhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjHdjHdjHdjMdjFdjNdjNdjFdjOdjHdjHdjQdjPdjydjBbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbLFbKmbIAbKmbIBbAebFqbFrbFrbFrbAebAebyvbAfbICbKobngbIEbpIbAibFvbIFbtLbIGbpIbrsbpIbIHbDXbvvbIIbHlbHmbIJbIKbILbIMbINbIObIPbIQbIRbISbISbITbIUbIVbvjbvjbikbEkbHybIWbIXbIYbIZbJabJbbJcbJdbMhbvwbKObCHbJfbJgbJhbJibJjbEybJkbJlbJmbJnbJobJpbJqbJrbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbGwchEbIecnfcjubvYbJIbJJbJKbJLbJLbxGbJMbJNbJObxGbJPbEUbJQbxGbJRbJSbJTbJUbJVbJWbJXbJYbJZbKabKbbKcbKdbKebKfbKfbIxbJFbJHbGzbKlbFfbDBbNhbDBbFfbLEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjSdjRdjUdjTdjVdjFdjWdjHdjXdjHdjHdjHdjHdjHdjMdjFbikbikbikbikbikbikbikbikbikbikdewdeCdevdevdevcOfdewbFnbBRbBRdezbAebFqbAebAebAebAebAebyvbAfbICbLwbngbLQbpIbKqbKrbpIbKsbpHbpIbpIbKtbtLbDXbvvbIIbHlbHmbCpbKubKvbqzbKxbKybKzbKAbKBbKCbKDbwXbKEbKFbwXbwYbwYbKGbHybKHbKIbKJbKKbKLbKLbKMbKNbMibvwbMjbucbEybKQbEubKRbKSbEybJkbKTbKUbKVbKWbKXbKYbKUbJkbKZbLabLbcchbLbbLcbLbbLdbLdbLebLfbLgbLhbLhcpLbLgbLgbLhbLhbLjbLkbLjbLjbxGbxGbxGbxGbxGbLlbLmbBobxGbLnbLobLpbLqbLqbLrbLsbLtbLubLvbLIbLxbLybLzbLAbLAbEObGAbHZbGxbGzbGzbGzbIabGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdjHdjHdkadkadkadjFdjHdjHdjFdkbdkddkcdkfdkedkgdjFbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbWobKmbIAbKmbFobLGbLHbAebAebAebLGbAebyvbAfbICbNrbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPdiNbLRcobbKzbLTbLUbLVbLWbLXbLYbLZbMabikbikbikbHybMbbMcbMdbMdbMebMfbMgbHybNSbNRbKObNTbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbLgbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbiTbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbGxbLDbLDbGxcnccndcnebOQbOSbUHbYdbGzbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdjHdjHdkadkadkadjFdjHdjHdjFdkbdkddkcdkfdkedkgdjFbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbWobKmbIAbKmbFobLGbLHbAebAebAebLGbAebyvbAfbICbNrbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPdiNbLRcobbKzbLTbLUbLVbLWbLXbLYbLZbMabikbikbikbHybMbbMcbMdbMdbMebMfbMgbHybNSbNRbKObNTbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbPEbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbiTbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbGxbLDbLDbGxcnccndcnebOQbOSbUHbYdbGzbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdjHdjHdjHdjHdjHdkidjHdjHdjFdjydjydjydjydjydjydkjbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdeEdeDdeGdeDbNlbNmbNnbNnbNnbNnbNnbNobNpbNqbICbWSbngbNsbNtbNubNvbNwbNxbNybNybNybNzbNzbNAbvvbNBbNCbHmbCpbNDbNEbNFbKvbNGbKzbNHbNIbNJbNKbNLbFNbNMbMabikbikbikbHybNNbNObNPbNQbMebMfbMgbHybPibNUbQObPjbNVbNWbNXbNYbNZbOabObbOcbKUbKUbOdbOebKUbKUbJkbKZbOfbOgbOhbOibOjbOkbLdbOlbOmbOnbOobOpbOqbOrbOrbOsbOtbOubOvbOwbJVbJVbOxbJVbOybJVbOzbJVbOAbOBbOBbOCbODbOEbOFbOGbOHcsjbOJbOKbOLbNabOMcxHbikbikbikbGxbORbJFbOPbOQbGzbOObNibGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkmdkldkodkndjHdjFdjHdjHdjFdjHdkqdkpdkrbikbikbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdewbFnbBRbBRbngbngbBRbBRbBRbBRbBRbngbngbBRbBRbBRbngbOVbOVbOVbOWbOVbNzbOXbOYbOZbPabNzbDXbvvbPbbPcbPcbCpbCpbCpbCpbCpbPdbKzbISbIRbPebNKbPgbPhbMabMabvjbvjbvjbHybHzbHybHybHybHybHybHybHybQPbvwbQQbPkbPlbPmbPnbPlbPlbPobPpbPqbPrbPsbPtbPubPvbPwbMqbPxbPybPzbPAbPBbPCbPDbPEbPFbPGbPHbPIbPJbPKbPLbMHbPMbLhbLhbPNbPObPNbPPbPQbPPbPPbPPbPRbPSbPTbPTbPUbPVbPWbPXbOFbPYbPZbQabQbbQcbQdbNabOMcxHbikbikbikbGxbNfbNgbGxbGzbGxbGxbGzbGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjydjydjydjydjydjydjFdjOdjHdksdjHdkudktdkvbikbikbikbikbikbikbikbikbikbikbikbikbikdeJdeIdevdeKdevdeLdeMbikbikbikbikbikbikbikbikbikbikbQgaabbikbikbikbikbOVbQhbQibQjbQkbNzbQlbQmbQnbQobNzbDXbvvbQpbQqbQrbQsbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbQEbQFbQGbQHbQIbQJbQKbQLbQMbQRbuabQSbvwbShbSgbSibvwbSjbPlbQTbQUbQVbQWbQXbJkbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibLbbRjbOibRkbRlbRmbRnbRobRpbLgbRqbMHbMHbMHbRrbLhbPNbRsbRtbRubRvbRwbRxbRybPPbRzbRAbRBbPTbPTbRCbPWbRDbREbWHbRGbRHbRIbRJbRKbNabRLbwobikbikbikbGxbGxbGxbGxbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydkxdkwdkydkxdkzdjFdjHdjHdjFdjHdkBdkAdkCbikbikbikbikbikbikbikbikbikbikbikbikbikdeOdeNdePdePdePdeNdeQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbOVbRMbRNbRObRPbNybRQbRRbRSbRTbNzbDXbRUbRVbvvbvvbFXbRWbubbQNbQMbRXbRYbRXbRZbSabSabSbbScbSdbSabSabSebSabSfbSabQMbQRbuabSlbSkbTJbTIbTLbTKbvwbPlbSmbQUbSnbSobSpbJkbSqbSrbSsbStbSubSvbSwbSxbJkbSybSzbLbbSAbSBbSBbSCbSDbSEbSFbSGbLgbSHbSIbMHbSJbSKbLhbPNbSLbSMbSNbSObSPbSQbSRbPPbSSbRAbSTbSTbPTbSUdnjbSWbSXbSYbSZbTabTbbTcbTdbNabOMbwobTebikbikbikbikbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdkDdkDdkDdkDdkDdkEdjHdjHdjFdjydjydjydjydjydjydjBbikbikbikbikbikbikbikbikbikbikbikdeRdeSdeSdeSdeTbikbikbikbikbikbikbikbikbOUbOTbQebOTbQfbikbikbikbOVbOVbTjbTkbRObTlbNybTmbQnbTnbTobNzbDXbTpbTqbTrbTsbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTCbTDbTEbTEbTEbTEbTEbTEbTFbTGbTHbTNbTMbTPbTOdlidjmdlkdljdllbPlbTQbQUbQVbTRbSpbJkbSqbSrbTSbTTbTUbTVbTWbTXbJsbTYbTZbLbbLbbUabUabLbbSDbLdbUbbUcbLgbUdbUebUfbUgbUhbLhbPNbUibUjbUkbUlbUmbUnbUobPPbUpbRAbSTbSTbPTbUqbUrbUsbUtbUubUvbUwbUxbUybUzbNabOMbUAbUBbUAbUCbUDbUCbUCbUCbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdkDdkDdkDdkFdkGdjFdjHdjHdjFdjHdjHdjHdkHdjHdkIdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbTfbTibThbTgbUIbUIbUIbOVbUJbUKbULbUMbUNbUObUPbUQbUQbURbNzbUSbUTbUUbUVbUVbUWbUXbUYbUVbUZbUZbVabVbbONbUZbUZbVdbQMbQMbVebVfbVfbVfbVgbVhbVfbVfbVibVjbVkbVkbVlbVkbVmbVnbVkbVobVpbVqbPlbVrbVsbSqbVtbVubVvbVwbVxbVybVubJkbSybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbVObLhbPNbPNbVPbVQbVRbVSbVRbVTbPPbVUbVVbVWbVWbPTbVXbVYbVZbNabNabNabNabNabNabNabNabOMbUAbWabWbbWcbWdbWdbWebUCbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikaabbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkKdkJdkDdkLdkMdjFdjHdjHdkNdjHdjHdjHdkOdjHdkPdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUEbUFbUEbQebUIbWmbWlbOVbWnbWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBbWCbUZdmbbWEbWFbWGcAzbUZbWIbWJbWKbVfbWLbWMbWObWNbWPbWQbWRceLbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAbXBbLhbXCbXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbPTbXNbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXWbXVbUCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -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 +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkmdkldkodkndjHdjFdjHdjHdjFdjHdkqdkpdkrbikbikbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdewbFnbBRbBRbngbngbBRbBRbBRbBRbBRbngbngbBRbBRbBRbngbOVbOVbOVbOWbOVbNzbOXbOYbOZbPabNzbDXbvvbPbbPcbPcbCpbCpbCpbCpbCpbPdbKzbISbIRbPebNKbPgbPhbMabMabvjbvjbvjbHybHzbHybHybHybHybHybHybHybQPbvwbQQbPkbPlbPmbPnbPlbPlbPobPpbPqbPrbPsbPtbPubPvbPwbMqbPxbPybPzbPAbPBbPCbPDbRpbPFbPGbPHbPIbPJbPKbPLbTdbXBbLhbLhbPNbPObPNbPPbPQbPPbPPbPPbPRbPSbPTbPTbPUbPVbPWbPXbOFbPYbPZbQabQbbQcbQdbNabOMcxHbikbikbikbGxbNfbNgbGxbGzbGxbGxbGzbGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjydjydjydjydjydjydjFdjOdjHdksdjHdkudktdkvbikbikbikbikbikbikbikbikbikbikbikbikbikdeJdeIdevdeKdevdeLdeMbikbikbikbikbikbikbikbikbikbikbQgaabbikbikbikbikbOVbQhbQibQjbQkbNzbQlbQmbQnbQobNzbDXbvvbQpbQqbQrbQsbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbQEbQFbQGbQHbQIbQJbQKbQLbQMbQRbuabQSbvwbShbSgbSibvwbSjbPlbQTbQUbQVbQWbQXbJkbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibLbbRjbOibRkbRlbRmbRnbRobRqbPEbSFbMHbMHbMHbUzbLhbPNbRsbRtbRubRvbRwbRxbRybPPbRzbRAbRBbPTbPTbRCbPWbRDbREbWHbRGbRHbRIbRJbRrbNabRLbwobikbikbikbGxbGxbGxbGxbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydkxdkwdkydkxdkzdjFdjHdjHdjFdjHdkBdkAdkCbikbikbikbikbikbikbikbikbikbikbikbikbikdmideNdePdePdePdeNdmHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbOVbRMbRNbRObRPbNybRQbRRbRSbRTbNzbDXbRUbRVbvvbvvbFXbRWbubbQNbQMbRXbRYbRXbRZbSabSabSbbScbSdbSabSabSebSabSfbSabQMbQRbuabSlbSkbTJbTIbTLbTKbvwbPlbSmbQUbSnbQVbSpbJkbSqbSrbSsbStbSubSvbSwbSxbJkbSybSzbLbbSAbSBbSBbSCbSDbSEbSHbSGbPEcgQbSIbMHbSJbSKbLhbPNbSLbSMbSNbSObSPbSQbSRbPPbSSbRAbSTbSTbPTbSUdnjbSWbSXbSYbSZbTabTbbTcbRKbNabOMbwobTebikbikbikbikbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdkDdkDdkDdkDdkDdkEdjHdjHdjFdjydjydjydjydjydjydjBbikbikbikbikbikbikbikbikbikbikbikdeRdeSdeSdeSdeTbikbikbikbikbikbikbikbOUbOTbQebOTbQfbikbikbikbOVbOVbOVbTjbTkbRObTlbNybTmbQnbTnbTobNzbDXbTpbTqbTrbTsbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTCbTDbTEbTEbTEbTEbTEbTEbTFbTGbTHbTNbTMbTPbTOdlidjmdlkdljdllbPlbTQbQUbQVbTRbSpbJkbSqbSrbTSbTTbTUbTVbTWbTXbJsbTYbTZbLbbLbbUabUabLbbSDbLdbUbbUcbLgbUdbUebUfbUgbUhbLhbPNbUibUjbUkbUlbUmbUnbUobPPbUpbRAbSTbSTbPTbUqbUrbUsbUtbUubUvbUwbUxbUybVObNabOMbUAbUBbUAbUCbUDbUCbUCbUCbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdkDdkDdkDdkFdkGdjFdjHdjHdjFdjHdjHdjHdkHdjHdkIdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbTfbTibThbTgbUIbUIbUIbOVbUJdpmbUKbULbUMbUNbUObUPbUQbUQbURbNzbUSbUTbUUbUVbUVbUWbUXbUYbUVbUZbUZbVabVbbONbUZbUZbVdbQMbQMbVebVfbVfbVfbVgbVhbVfbVfbVibVjbVkbVkbVlbVkbVmbVnbVkbVobVpbVqbPlbVrbVsbSqbVtbVubVvbVwbVxbVybVubJkbSybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbPMbLhbPNbPNbVPbVQbVRbVSbVRbVTbPPbVUbVVbVWbVWbPTbVXbVYbVZbNabNabNabNabNabNabNabNabOMbUAbWabWbbWcbWdbWdbWebUCbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikaabbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjyddZdkDdkDdkLdkMdjFdjHdjHdkNdjHdjHdjHdkOdjHdkPdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUEbUFbUEbQebUIbWmbWlbOVbWnbTkbWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBbWCbUZdmbbWEbWFbWGcAzbUZbWIbWJbWKbVfbWLbWMbWObWNbWPbWQbWRceLbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAdoEbLhbXCbXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbPTbXNbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXWbXVbUCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkQdkDdkDdkRdjFdjHdjHdjFdkSdjHdjHdkUdkTdjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbUGbUEbUEdeycOWbTkbTkdeAbZAbTkbTkbWqbYhbYibNzbNzbNzbNzbNzbNzbYjbUTbYkbYlbYmbYnbYnbYnbYobUZbYpbYqbYqbYqbYrbYsbYtbYubYvbYwbYxbYybYzbYAbYBbYCbVfbVibYDbVkbYEbYFbYGbYHbYIbVkbSmbQVbSnbQVbYJbYKbYLbYMbYNbYObYPbYQbYRbVubYSbYTbYUbYVbYWbYXbYYbYZbZabZbbLgbLgbLgbLgbLgbZcbZdbZebLhbZfbXEbXEbZgbZhbXEbZibZjbZkbZlbRAbZmbZmbPTbPVbZnbPXbEXbUAbZobUAbUAbUAbUAbUAbUAbUAbZpbZqbUCbZrbZtbZsbUCaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbZubXXbXXbZvbWhbWhbXZbXZbZwbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkWdkVdkXdjFdjHdkYdjFdkZdladjHdjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUFbUFbUFbQebUIbYfbYebZzbZAbTkbTkbZBbZCbZDbZEbZFbZFbZFbZGbUTbUTbUTbWxbUVbZHbYnbZIbYnbZJbUZbYpbYqbZKbYqbZLbUZbZMbZNbZObVfbZPbZQbZRbZSbZTbZUbZVbZWbZXbZYbZZcaacabcaccadbVkbTQbQVbQVcaebYJbYKcafcagcahbXjcaicajcElcalcamcancaocapcaqcarcIfcasbXscatbVAcaucavcawcaxcaycazcaAbZjbZfcaBbXEbXEbXEcaCcaDbZjbZkcaEbRAbZmbZmbPTcaFcaGbPXbEXcaHcaIcaJbUAcaKcaLcaMcaNcaOcaPcaQbUCcaRcaScaTbUCbUAbUAbUAbUAbUAbUAbUAbUAbikbikbikbikbikaabbikbikbikbikbikbikbikcaUbWhbZubWhbWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydjydjydjydjydjydjydjydjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaacbUTcjMcjMbUTcjMcjMbUTbikbikbTgbWjbYbbWkbTgbUIbUIbUIbOVcaYdpncaZcaZcaZbOVbOVbUTcbbcbaccAcbcbUTcbdcbebUVbZHbYnbYnbYncbfbUZbYpbYqbYqcbgcbhcbicbjcbkcblbVfbVfbVfbVfbVfcbmbVfbVfcbncbobVkbVkcbpbVkbVnbVkbVkbPlcbqcbqbPlccicbrcbscbtcbucbvcbwcbxcbycbzcbAcbBcaocapcbCcbDcbEcbFcbGcbHbVAcbIcbJcbKcbLcbMcbNcbOcbPcbQcbPcbRcbRcbRcbPcbScbPcbPcbTcbUbZmbZmbPTcbVbZnbPXcbWcbXcbYcbZccaccbccccccccdcceccfccgcckccjcdqcclcfeccmccnccoccpccqccrccscctaabaabaabaabaabaabaabaabbikbikbikbikbikbWgbWhccuccvccvbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbUTccBcqsbUTccBcqsbUTbikbikbYcbOTbYgbOTbZxbikaabbikbOVbOVbOVbOVbOVbOVbOVclabUTcuRcsuccCccDbZFccEccFbUVccGccHdmcbYnccJccKccLccMccNccOccPbUZccQccRccSccTccUccUccUccUccVccWccXccYccYccZccZcdacdbcdcbVibPlcddcdecdfcdgcdhbYKcdicbtcdjcdkcdlcdmbSwcdncdocdpcffcdrcdrcdscdrcdrcdrcdtbVAcducdvcdwcdxcdycdzcdAcbPcdBcdCcdDcdEcdFcdCcdGcdHcdCcdIcdJbRBbPTbPTcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdUcdVcdWcdXcdYcdZceacebceaceccebcebcebcedceecefcegcehaabbikbikbikbikaabbikbikbikbikbikbikbikbWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaacbikaacbUTcfQcqsbUTcfQcqsbUTbikbikaabaabaabaabaabaabaabaabaabbUTcqscAjcwNbUTcEvcEwbUTcGJbUTbUTcekbUTbUTcelbUVcemcenceocepceqcercescetceucevcewccKcexceycezceAceBceBceBceBceCceDceEceFceGceFceHceIceJceKchvceMceNceOcePceQceRceSceTceUceVceWceXceYceZcfacfbcfccfgbMmbMmcfichOcgHceYchVcfjcfjcfkcfjcflcfmcfncfocbPcfpcfqcfrcfscfrcftcfucfvcdCbPTcfwbPTbPTcfxcfybZnbBxbEXbUAcfzbUAbUAcfAcfBcfCcfDcfEcebcfFcfGcfHcdUcfHcdUcfIcdUcdUbUAcfJcfKcfLcfMaabaabaabaabaabaabaabaabbikbikbikbikbikbWhbXZbXZbXZbXZbXZbXZcfNbXZcfObXZbXZbXZbXZbXZbWhbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabdnkaacaabaDDaDDaacbUTbUTcekbUTbUTcekbUTbUTbUTcjMcjMcjMbUTbUTbUTbUTbUTbUTbUTcqschodnmbUTdnnbUTbUTdnobUTcfPbVccqsbUTcfSbUVcfTcfUcfVbZHcfWcfXcfYbYpcfZcgacgbcfXcgccgdcgecgfcgfcggcghcgicgjcgkcglcgmbGycgnbVicgobGybGycgpcgqcgrcgscgtceQcgucgvcgwcgxcgycgzbMVcgBcgCcgzcgzcgDcgEcgEcgEcgEcgEcgGcgFciOcgJcgJcgKcgLcgMcgNcgOcgPcbPdomcgRcgScgTcgScgUcgVcfrcgWcgXcgYbBxcgZbBxcfybZnbBxbEXchachbchcbUAbUAbUAbUAbUAchdcdUchechfcfIcdUchgcdUbZpcdUchhbUAchichjchkbUAaabbikbikbikbikaabbikbikbikbikbikbikbikbWhchlchlchlchlchlchlchmbXZchnchlcfObXZbXZbXZbXZbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaaccjMcqscqscqscqsdoadnxcqscqscuRdnpdnpdowdnpdnpdnpdnpdnpdnpdnpdnpdnpdnpdnpdnpcsubUTchocfQchpbUTcfSchrchrchrchrchrchrbUZbUZbUZbUZbUZbUZbUZchschtchucWpchwchxchychychzchAcglbGybGychBchCchDbGybGybGycqOchFchGceOchHchIchJcgEchKchLchMbSqchLchNcfdcfdcfdcjncjlcjlcjlcjlckacgIbSqclPchPchQchRchSchTchUclQcbPchWchXcfrchYcfrchZciacibciccidciecifbBxcigcfybZncihbEXbFeciicijcikbwobxXbxXbUAcilcimcinciocipciqcirciscitciucivbUAciwciycixcizbikbikbikbikaahbikbikbikbikbikbikbikbikciAbXXbXXbXXbXXbXXbXXbXXciBciCbXZbXZbXZbXZciDbYabWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaabaabaaccjMdnrdnqdnscqscqsdoxcqscqsdnobUTbUTbUTbUTbUTbUTcekbUTbUTbUTbUTdntdntdntdntdntdntdntdntdntbUTcfScejbikbikbikbikciEbaTciGciHciIciJciKciLciMciNcmPciPciQciRciSciSciTciUciVciWciWciWciWciXciWbGybGybPlciYciZcjacjbcjccjdchScjecjfcjgcjhcjicjjcjkcjlcfdcnicjpcjpcjpcjpckNclSckUcnjcjqcjrcjscjtcbAcwncjvcbPcjwcjxcjycjzcjAcfrcjBcbPcbPbEXcjCbEXbEXbEXcjDcjEcjFbEXbxXciicjGcjHbwobwobwobUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbikbikbikbikbikaabbikbikbikbikbikbikbikbWhccvccvccvccvccvccvcjIbXZccuccvcjJbXZbXZbXZbXZbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbUTcjKcjKcjKcjKcjKcjKcjLcjKdnodnubUTcqsdoydnwdnycqsdnydnvdnzdnwdntdnAdnAdntdnBdntdnDdnCdntcqscelcjMbikcjNcjOcjPcjQcjRcjScjTcjUcjVcjWcjXcjYcjZcosckbckcckdckeckfckgckhciVckickjckjckjckkciWbGybGycklcklcklcklckmcklckncknckocklcklckpcklckqckrckscktcksclZaPKcmacmmcmlcmocmnckzckAckBckCckDckEckFcdccbPcbPckGcbPckHcbPckIckJckKcgnckLckMckvckOckPckQckRckSckPbxXciickTbxXbxXckVckWckXchabxXbxXbxXbxXbxXbxXbxXckYckZcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhbXZbXZbXZbXZbXZbXZcfNbXZcjJbXZbXZbXZbXZbXZbWhbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdnEclbclbclbclbclbclbclccldcleclfclgclhclicjLdnocnRbUTcqsdozdnwcqscqscqsdnvcwNdnwdntdnAdnFdnCdnCdnGdnCdnHdntcljcelcjMbikclkcllclmclnclocjSclpdhpclrclsciLcltcgdcoaciPcluchyclvchyclwclxclyclzclAclAclAclBciWbGybGycklclCbzsclEclDclGclHclIclFclJclKclMclLclNclOcotcfhcpwcmpcmrcmqctbcsZcuoctcckDclVclWclXckzclYcmtcmscmbcmbcmccmdcmecmfcmgcmhcmfcmfcmfcmicmfcmfcmjcmucnpcnlcqRcoXcrGcqScrHcrHcrIcrHcrHcrHcrHcrJcrKcrHcrHcrHcrMcmvbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcmwcmxcmxcmxcmxcmycmzcmAcmBcmCcmCcmDcjKdnocqscekcqscqscqscqscqscqscqscqscqsdntdntdnCdnIdnCdntdnCdnIdntcmEcfScjMbikclkcmFcmGcmHcmIcmJcmKcmLcmIcmIcmMcmNcmOcpxcmQcmQcmRbHtchycmTcmUclyclAclAclAclAcmVciWbGybGycklcmWcmXcmYcmZcnacnbcojcnhbvWbulbxBclHconcklcqQcfdcrLcjpcwscvxcwEcwCcxNcxIckDcnmcnncnockDbJGcumctecnqcnqcnqcnqcnqcnrcnscntcnucnvcnvcnwcnwcnvcnxcnycnzcnAcnBcnCcnDcnEcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcuncnFcnGcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcaUbWhbWhchlchlbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcnIcnJcnKcnJcnLcnMcnNcnOcnPcnQcjKdnobUTbUTdnJcjMcjMcjMcjMcjMcjMcjMdnKdntdnCdnCdnCdnCdnLdnCdnCdntcnRcelcjMbikclkcnScnTcnUcnVcjScnWcnXcnYcnZciLcltcgdcbkchqcgfcoccodciPciPciPcoecofclAclAcogcohciWbGycoicklcoocokcolcomcomcoqcrBcqIcomcomcopclHcrCcorcrNcfdcupcjpcxVcxUcxVcxVcxNcEickDcowcoxcoyckDcozcuscoicoAcoAcoAcoAcoAcoDcoDcoDcoAcoAbikbikbikbikckPcoEcoFcoGcnCcoHcoIcoJcoKcoLcoMcoNcoOcoPcoQcoRcoScoTcoUcnCcuncoWcvtcoYcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcpacpbbWhbZubWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcpccpdcpecpfcmBcpgcphcpicmBcpjcpkdnMchobUTcqscjMbikbikbikbikbikcjMcqsdnldnAdnOdnCdnCdnCdnCdnPdnNcplcpmcjMbikcpncjOcpocjQcppcjScjScpqcprcpscptcpucpvcwqchqcgfcpycpzcpAcpBcpCciVcpDclAclAclAcpEciWbGybGycpFcpFcpGcpHcpIcpIcrDcyFcrEcpJcpJcpKcpFcpGcpMcqQcfdcrLcEjbjVcEYdbndbmcxNclRckDcoucpNcovckDbGycuscoAcoAaabaabbikbikbikbikbikbikbikbikbikbikbikcpRcpScpTcpUcpVcpWcpXcpXcpYcpXcpXcpXcpXcpXcpZcqacqbcqccqdbwocvvbXSbwobwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhcqhcqicqjbWhbWhbXZbXZcqkbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcqlcnJcqmcnJcqncqocqpcqqcnNcqrcjKdoAcwNbUTcfQcejbikbikbikbikbikcejdnRdntdnSdnSdnAdnUdnTdnCdnVdntcqscelcejbikbikbikbikciEcqtcqucqvcqvciLcqwciLcqxcgdcbkcqycqzcqAcqBcqCcqCcqCcqDcqEclAcqFclAcqGciWbGybGycpFcqHcrFcqJcqKcqLcsPcpFcsUcqMcqKcqNcsVcqPcpMczecyWczgcEjdbpdbodbrdbqdbsctcckDcpOcpPcpQckDbGycuscoAcvyaabaabaabbikbikbikbikbikbikbikbikbikbikcpRcqUcqVcqWcqXcqYcqZcracrbcpXcpXcrccpXcpXcpZcqbcqbcqbcrdbwocvzbxXbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfcrhcribZvbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcjKcjKcjKcjKcjKcjKdnWcrjcrjcrjcrjcrjdnQcrjcrjcrjcrjcrjcrjcrjcrjcrkcrkcrkcrkcrkdnYdnYdnYdnYdnYdnYdnYcekcrlcrmcrmcrmcrmcrmciEciLciLciLciLciLciLciLcrncgdcbkcrocrpcrqcrrcrscrtcrucrvcrwcrxcrycrzcrAciWbGybGycpFcuicsYcvocujcujcvpcpFcwicujcujcwjcujcwkcpMbGwbGwbGwcEjdbudbtdbvdbmdbxctcdbydbydbycoAcoAbGycuscoDcwpbikaabaabaabbikbikbikbikbikbikbikbikbikcpRczNczPcoBcrOcrPcrQcrRcrScpXcpXcpXcpXcrTcrUcrVcrWcrXcrYbwocvzbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaSecsdctvdnZctvdoBcsdcsecsfcsgcsgcshcsicspcskcslcsmcsncsocsrcsqcsqcsscsqcstctzctzctAcsvcswcsxcsycsxcsxcsxcswcsxcsxcszcsAcsBcsCcgdcbkcsDcsEcsFcsGcgfcsHcmQcsIcsJcsKcsLcsMcsNcsObGybGycpFcwlcsQcsRcsScsTcwmcpFdehcsTcsWcsXdlFdqVcwrbikbikbikcEjdbAdbzdbAdbAdbCdbBdbEdbDdbycwFbVibGycuscoDcwpbikbikaabaabaabbikbikbikbikbikbikbikbikctdckPcxGckSctdctfctgcthctictjctkctlcpXcpXctmctnctoctpctqbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSecsdctvctvctvdoBcsdctuctvctwctvctxctyctDctCdmedcYdmedmfcxnctEctFctEctEctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNctOctPctQctRctSctTctUctVctWctXciFctZcuacnqcubcuccudcuecufcugcuhdqWcpFdqXcqKcugcukcqKculcwrbikbikbikdbFcmkdbGdbJdbIdbCdbKdbMdbLdbOdbNceFceJdbPcoDcwpbikbikbikaabaabaabbikbikbikbikbikbikbikckPcurczQcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSedobctvdocctvdoBcuBdodcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQdoeceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcvmcvncqKcqJcqKcqKdqYcpFdqZcqKcqKcqNcqKcyGcwrbikbikbikdbFdbRdbQdbTdbSdbVdbUdbXdbWdbybGychCcyHcuscoAbikbikbikbikbikaabckPckPckPckPckPckPckPckPckPcvucxScvwckPcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdogdofcrjcrjcrjcrjdnQcrjcrjcrjcrjdnXcrjcvFcvGcvGcvHctBdlXcrjcrmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvWcvWcvZcwacwbcwccwdcsObGycvrcwecwfcwgcwhdradrcdrbcpFdrddrcdrecqNcqKcwocpMbikbikbikdbFdbZdbYdcadbIdccdcbdbUczRdbycyObVibVicuscoAbikbikbikbikbikbikckPcwtcwucwvcwwcwxcwycwzcwAcwBczScwDckPcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +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..c644a9afd3d 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) @@ -683,13 +688,13 @@ "nl" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows2 (NORTH)"; icon_state = "fakewindows2"; dir = 1},/area/trader_station/sol) "nm" = (/obj/machinery/light{dir = 4},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/trader_station/sol) "nn" = (/obj/docking_port/stationary/transit{dir = 8; dwidth = 2; height = 11; id = "trade_sol_transit"; name = "trade_sol in transit"; turf_type = /turf/space/transit/horizontal; width = 5},/turf/space/transit/horizontal,/area/space) +"no" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/centcom/evac) "oB" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (WEST)"; icon_state = "fakewindows"; dir = 8},/area/syndicate_mothership) "oC" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (EAST)"; icon_state = "fakewindows"; dir = 4},/area/syndicate_mothership) "oH" = (/obj/structure/table,/obj/item/weapon/storage/fancy/crayons,/obj/item/weapon/storage/fancy/crayons,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) "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 +713,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 +937,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) @@ -1067,8 +1070,6 @@ "zV" = (/obj/structure/grille,/obj/structure/window/full/shuttle,/turf/simulated/floor/plating,/area/centcom/evac) "zW" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/centcom/evac) "zX" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "15"},/turf/simulated/floor/plating,/area/centcom/evac) -"Aj" = (/obj/machinery/sleeper/upgraded,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/centcom/evac) -"Ak" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/centcom/evac) "Al" = (/obj/machinery/door/airlock/hatch{name = "Infirmary"; req_access_txt = "0"},/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/centcom/evac) "Aw" = (/turf/unsimulated/wall,/area/centcom) "AD" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -30; pixel_y = 0; req_access_txt = "0"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/centcom/evac) @@ -1354,7 +1355,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 +1426,12 @@ aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckck aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaiaNaNaNaNaNaNaNaiacabababababajagagakagakababafabnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNnlnmataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalabababacamnjnjoBoCnjnjanagagagnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNnlmEataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalabababaonjnjoHoIoIoJnjnjnjnjnjnjnjnjaNaNaNaNaNaNaNaNaNaNaNaNnlmEataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalababadaonjaLoOoOoOoOoPoQoRnjfYjMfZnjaNaNaNaNaNaNaNaNaNaNaNaNnlmEataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalababadaonjaLoOoOoOoOfZoQoRnjfYjMmgnjaNaNaNaNaNaNaNaNaNaNaNaNnlmEataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaiaNaNaNaNaNaNaNaiababababaSnjpaoOmfmfpcoOpdpepWpXpXganjnjnjnjnjnjnjnjnjnjnjnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababaNaNaNaNaNaTagagababaUamnjplmfpmjNmfoOmkppnjpXggnjnjghgjgigxgxhggxgxhxhGnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababaNaNaNaNaNpupvpvpvpvpvoCnjoOmfpwpxmfoOmkppnjnjnjnjnjgjgiiuiwiviFiviHiGhxnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababaNaNaNaNaNpupvpvpvpvpvoCnjmhmfpwpxmfoOmkppnjnjnjnjnjgjgiiuiwiviFiviHiGhxnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaiaNaNaNaNaNaNaNaNaNpypzpApzpzpzpzpCoOJboOoOoOoOmkppnjnjnjnjnjgjiIiwiviJiSiKiviHiTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNpFaVoBpvpvpvoCnjpHmfmfmfoOoOmkppoBpvpvpvpvpvpviviJiSiUiSiKiviTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNpFaVoBpvpvpvoCnjmimfmfmfmhoOmkppoBpvpvpvpvpvpviviJiSiUiSiKiviTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNaNaWaNaiababaXnjpRpSpTpSjOoOpUpViWiViViXiViViWiFiSiYjjjiiSiFiTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjaYabaNaNaNaNaNaNaNaNaNaNaNaNaNaNaZabaonjqfqgqhqiqjoOoOoOoBpvpvpvpvpvpviviJiSjkiSiSiviTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNaNaNaNaNalabaonjnjppqtqrqunjqwoOnjnjnjnjnjgjiIjsiviJiSiKivjtiTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN @@ -1514,7 +1514,7 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXuWsXsXujuXuRuYuZvavbujvcvdvdvdvdvesXuosXsXsXsXsqtQtRtZsuvfuuvgvgvgvhvisutQtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXvjvkvlsXujujvauRvmuRujujvnvdvovpvqvdsXsXsXvrtTtUsqtQtRtZsqsqvsvtvuvvvwsqsqtQtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXvkvkvkvxujujujvyvyujujujvzvdvAvBvCbesXvEtTuEtRtRvFtRtRtZsqsqsusususususqsqtQtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXvGvHsXvIvJujujujujvLujsXvdvMvNvOvPsXvQtRtRtRtZsutQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXvGvHsXvIvJujujujujvLujsXvdvMmjvOvPsXvQtRtRtRtZsutQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXbfbfsXsXsXvSvTvUvVvdsXvWtRtRtRvXsutQtRtRtRtRtRtRtRtRtRtRtRtRtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwbwcwdwbwesXiDwgwhwiwjsXwkudududwlsuwmudududududuetRucudududududwnsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwrwswtwrwesXsXsXsXsXsXsXsqsqsqsqsqsqsqsqsqsqsqsqsqwusqsqsqsqsqsqsqsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN @@ -1536,9 +1536,9 @@ aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbW aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwKztzezezezezewKwKzBwKwKxLwKwNwNwNyHxzxzxzaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNykylylylyoyNzazbyNzHyiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcjcjcjcjcjcjcjcjcjcjcjcjcjcjcjytytytwKxLwKxZxZxZxZwKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyizOzOzPzQyNzazbyNzRyiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcjcpcpcpcpcpcpcpcpcpcpcpcpcpcqytytytwKxLwKxzxzxzxzwKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNzVzWzWzWzXyNzazbyNyMyiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcjcpcraNaNaNaNaNaNaNaNaNcrcpcsytytytwKxLxLxLxLxLxLwKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyiAjAkzWAlyNyNyNyNyNaBaDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcjcpcraNaNaNaNaNaNaNaNaNcrcpcsytytytwKxLxLxLxLxLxLwKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyinozWzWAlyNyNyNyNyNaBaDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcjcraNaNaNaNaNaNaNaNaNaNaNcCcBytytytwKwKwKwKwKwKwKAwaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyiADzWzWzQyNyMyMyMyPyiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcjaNaNaNaNaNaNaNaNaNaNaNcEcGcFytytytcHwKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyiAjAkzWzXyNAMANAOyyyiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcjaNaNaNaNaNaNaNaNaNaNaNcEcGcFytytytcHwKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyinozWzWzXyNAMANAOyyyiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcjcraNaNaNaNaNaNaNaNaNaNaNcCcIytytytytwKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNySAXAXylylAYylylAXAXyUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcjcpcraNaNaNaNaNaNaNaNaNcrcpcsytytytytwKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNySyoBbzayNzbBcykyUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNcjcpcpcpcpcpcpcpcpcpcpcpcpcpcJytytytcKwKaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyiAMyMBeyMBfyiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN @@ -1617,7 +1617,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..c8ef280d538 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) @@ -237,7 +237,7 @@ "eC" = (/obj/machinery/computer/shuttle/engineering,/turf/simulated/floor/plasteel,/area/engiestation) "eD" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor/plasteel,/area/engiestation) "eE" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/decal/cleanable/dirt,/obj/machinery/light,/obj/item/device/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plasteel,/area/engiestation) -"eF" = (/obj/item/weapon/storage/fancy/egg_box,/obj/item/weapon/storage/box/drinkingglasses,/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/milk,/turf/simulated/floor/plasteel,/area/engiestation) +"eF" = (/obj/item/weapon/storage/fancy/egg_box,/obj/item/weapon/storage/box/drinkingglasses,/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/milk,/turf/simulated/floor/plasteel,/area/engiestation) "eG" = (/obj/machinery/light_switch{pixel_x = -28; pixel_y = 0},/turf/simulated/floor/plasteel,/area/engiestation) "eH" = (/obj/machinery/status_display{layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/engiestation) "eI" = (/obj/docking_port/stationary{dir = 8; dwidth = 10; height = 35; id = "whiteship_z4"; name = "east of engistation"; width = 21},/turf/space,/area/space) @@ -245,6 +245,8 @@ "eK" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/engiestation) "eL" = (/obj/docking_port/stationary{dir = 2; dwidth = 3; height = 5; id = "engineering_away"; name = "engineering outpost dock"; width = 7},/turf/space,/area/space) "eM" = (/obj/machinery/field/generator,/turf/simulated/floor/plating/airless,/area/space) +"eN" = (/obj/item/weapon/grenade/chem_grenade/drugs,/turf/simulated/floor/plating,/area/exploration/methlab) +"eO" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/drugs/meth,/obj/item/weapon/reagent_containers/glass/beaker/drugs/meth,/obj/item/weapon/reagent_containers/glass/beaker/drugs/meth,/turf/simulated/floor/plating,/area/exploration/methlab) "fe" = (/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/constructionsite/medical) "ff" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/constructionsite/medical) "fg" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/constructionsite/medical) @@ -301,13 +303,11 @@ "gk" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plating,/area/exploration/methlab) "gl" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plating,/area/exploration/methlab) "gm" = (/obj/machinery/door/airlock/external{name = "Crackden Airlock"},/turf/simulated/floor/plating,/area/exploration/methlab) -"gn" = (/obj/item/weapon/reagent_containers/drugs/baggie,/turf/simulated/floor/plating,/area/exploration/methlab) "go" = (/turf/simulated/floor/plating,/area/exploration/methlab) "gp" = (/obj/machinery/door/airlock/external{name = "Plain Airlock"},/turf/simulated/floor/plating,/area/exploration/methlab) "gq" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/simulated/floor/plating,/area/exploration/methlab) "gr" = (/obj/item/ammo_casing{pixel_y = 3},/turf/simulated/floor/plating,/area/exploration/methlab) "gs" = (/obj/effect/decal/cleanable/blood/oil,/obj/item/ammo_casing{pixel_x = -4; pixel_y = -6},/turf/simulated/floor/plating,/area/exploration/methlab) -"gt" = (/obj/structure/table,/obj/item/weapon/reagent_containers/drugs/baggie/meth,/obj/item/weapon/reagent_containers/drugs/baggie/meth,/obj/item/weapon/reagent_containers/drugs/baggie/meth,/turf/simulated/floor/plating,/area/exploration/methlab) "gu" = (/obj/machinery/power/apc/noalarm{pixel_x = 26},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/exploration/methlab) "gv" = (/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/exploration/methlab) "gw" = (/obj/machinery/chem_master,/turf/simulated/floor/plating,/area/exploration/methlab) @@ -510,10 +510,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggggggaaaaggggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagefZgbgbgbgbgbgfgdfZgbfZgdgfgbgbgbgbgbfZgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggggggggggggggggggggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafZfZgbgbgbgbgbgfgdfZgbfZgdgfgbgbgbgbgbfZfZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggggggggggggggggggggggggggggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagfgbgbgbgbgbgbgfgdfZgbfZgdgfgbgbgbgbgbgbgfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggggggghgigjgkgkglgmgngogpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagfgbgbgbgbgbgbgfgdfZgbfZgdgfgbgbgbgbgbgbgfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagggggqgngogogrgsgnggggggggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagfgbgbgbgbgbgbgfgdfZgbfZgdgfgbgbgbgbgbgbgfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagggggggtgogogugggogogvggggggggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagfgbgbgbgbgbgbgfgdfZgbfZgdgfgbgbgbgbgbgbgfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagggggggwgogxgygggngoggggggggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagfgbgbgbgbgbgbgfgdfZgbfZgdgfgbgbgbgbgbgbgfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggggggghgigjgkgkglgmeNgogpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagfgbgbgbgbgbgbgfgdfZgbfZgdgfgbgbgbgbgbgbgfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagggggqeNgogogrgseNggggggggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagfgbgbgbgbgbgbgfgdfZgbfZgdgfgbgbgbgbgbgbgfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggggggeOgogogugggogogvggggggggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagfgbgbgbgbgbgbgfgdfZgbfZgdgfgbgbgbgbgbgbgfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagggggggwgogxgyggeNgoggggggggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagfgbgbgbgbgbgbgfgdfZgbfZgdgfgbgbgbgbgbgbgfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagggggggzgAgogggggogoggggggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafZfZgbgbgbgbgbfZfZfZgafZfZfZgbgbgbgbgbfZfZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagggggggBgogogggggCgCggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagefZfZfZgDfZfZfZgbgbgbgbgbfZfZfZgafZfZfZgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagggggggEggggggggggaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagegegfgbgbgbgfgbgbgbgbgbgbgbgfgbgbgbgfgegeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z5.dmm b/_maps/map_files/cyberiad/z5.dmm index 8d593d21011..ae5425c4ad5 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) @@ -543,8 +544,8 @@ "kx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/research_outpost/entry) "ky" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/light_switch{pixel_y = -23},/turf/simulated/floor/plasteel,/area/research_outpost/entry) "kz" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plasteel,/area/research_outpost/med) -"kA" = (/obj/machinery/sleeper{dir = 8},/obj/machinery/light_switch{pixel_y = -23},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/research_outpost/med) -"kB" = (/obj/machinery/sleep_console{dir = 8},/obj/machinery/light/small,/obj/machinery/camera{c_tag = "Research Outpost Medbay"; dir = 8; network = list("Research Outpost")},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/research_outpost/med) +"kA" = (/obj/machinery/light_switch{pixel_y = -23},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/research_outpost/med) +"kB" = (/obj/machinery/light/small,/obj/machinery/camera{c_tag = "Research Outpost Medbay"; dir = 8; network = list("Research Outpost")},/obj/machinery/sleeper,/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/research_outpost/med) "kC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/research_outpost/tempstorage) "kD" = (/turf/simulated/wall/r_wall,/area/research_outpost/entry) "kE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/firedoor{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/glass_research{name = "Expedition Prep"; req_access_txt = "65"},/turf/simulated/floor/plasteel,/area/research_outpost/entry) @@ -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,7 @@ "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) +"oT" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/rack,/obj/item/weapon/pickaxe,/turf/simulated/floor/plasteel,/area/mine/living_quarters) "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) @@ -1167,7 +1168,7 @@ "wx" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/mine/living_quarters) "wy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/mine/living_quarters) "wz" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel,/area/mine/living_quarters) -"wA" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/rack,/obj/item/clothing/suit/space/rig/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/mining,/turf/simulated/floor/plasteel,/area/mine/living_quarters) +"wA" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) "wB" = (/obj/machinery/camera{c_tag = "Mining Outpost Storage Room"; dir = 1; network = list("Mining Outpost")},/turf/simulated/floor/plasteel,/area/mine/living_quarters) "wC" = (/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plasteel,/area/mine/living_quarters) "wD" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel,/area/mine/living_quarters) @@ -1308,9 +1309,9 @@ "zi" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/plasteel,/area/mine/production{name = "Mining Station Mech Bay"}) "zj" = (/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored) "zk" = (/obj/machinery/light/small{dir = 8},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) -"zl" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) +"zl" = (/obj/machinery/light_switch{pixel_x = 23; pixel_y = 0},/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) "zm" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) -"zn" = (/obj/machinery/light_switch{pixel_x = 23; pixel_y = 0},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) +"zn" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) "zo" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/mine/living_quarters) "zp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/light/small{dir = 1},/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/mine/living_quarters) "zq" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/mine/living_quarters) @@ -1329,10 +1330,10 @@ "zD" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/mine/production{name = "Mining Station Mech Bay"}) "zE" = (/obj/structure/plasticflaps/mining,/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/mine/production{name = "Mining Station Mech Bay"}) "zF" = (/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/explored) -"zG" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/mine/living_quarters) -"zH" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/mine/living_quarters) +"zG" = (/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/mine/living_quarters) +"zH" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/mine/living_quarters) "zI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/camera{c_tag = "Mining Outpost Sleeper Room"; dir = 1; network = list("Mining Outpost")},/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) -"zJ" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/brute,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) +"zJ" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Mining Station Port Wing APC"; pixel_x = 1; pixel_y = 25},/turf/simulated/floor/plasteel,/area/mine/living_quarters) "zK" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/mine/living_quarters) "zL" = (/turf/simulated/floor/plating,/area/mine/living_quarters) "zM" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/plating,/area/mine/living_quarters) @@ -1385,7 +1386,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) @@ -1397,7 +1398,6 @@ "AT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"}) "AU" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"}) "AV" = (/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"}) -"AW" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel,/area/mine/living_quarters) "AX" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/mine/lobby) "AY" = (/obj/machinery/door/firedoor,/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plating,/area/mine/lobby) "AZ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"}) @@ -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 @@ -1625,14 +1625,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaccsacacacacaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaacacacbjbjacaaaaaaaaaeaevkvkvkvkvkvkvlvlvlvkvmvkvkvkaeaeaeafacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacafafaeaeaeaeaeafafafafafacacacacacacacbjbjbjbjuEuEuEuEvnvovpuEuIvquEvruEuEuEuVuVuVuEaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafafaeaeaeaeoapSpUpTpApVphaeaeaeaeaeaeaeaeafafafafafoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaacacacacacaaaaafaeaeaevkvvvwvxvyvzvAvBvCvDvEvFvGvyquaeaeafafafafacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacafafaeaeaeaeaeaeaeaeaeaeafafafafafacacacacbjbjbjuEvHvIvJvKvIvIuEuMuNvLuKuEvMvNvOvOvOuVaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafaeaeaeaeqdqcqsqqwXvPvRvRvQvQaeaeaeaeaeaeafafafafoVoVoVoVoVoVoVoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaacacacaaaaacafaeaeaevkvSvTvUvyvTvVvTvTvWvXvYvGvZwaaeaeaeaeaeafafafacacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjacacafafnlaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafacacacacacacuEwbvIwcwdwewfuEuEuEuEuKuEvMwgwgwgwhuVaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeqdxwzgxFwXwiwjwjwkvQaewlaeaeaenWnlafafafoVoVoVoVoVoVoVoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacafaeaeaevkwmvTvTwnvTvVwovTvTvywpwqvyqraeaeaeaeaeaeaeafafafafacacacacacacbjbjbjbjbjbjbjbjbjacacafafaeuWaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafacacacuEwrwswtvIwuwvwwwhwxwywzuEwAwgwBwCwDuVaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaezRzRAAAzwXwGwHwIwJvQvQvQvQaeaeaeaeafafafafoVoVoVoVoVoVoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacafaeaeaevkwmvTvTwnvTvVwovTvTvywpwqvyqraeaeaeaeaeaeaeafafafafacacacacacacbjbjbjbjbjbjbjbjbjacacafafaeuWaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafacacacuEwrwswtvIwuwvwwwhwxwywzuEoTwgwBwCwDuVaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaezRzRAAAzwXwGwHwIwJvQvQvQvQaeaeaeaeafafafafoVoVoVoVoVoVoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacafafaeaevkwKvTwLvEwMwNwOvTvkvkvkvkvkvmrTquaeaeaeaeaeaeaeaeafafafacacacacacbjbjbjbjbjbjbjacacacafaeaeaeaeaeaeaeaeaeaeaerTquaeaeaeaeaeaeaeaeaeafafacacwPuEuEuEwQuEuEwRwSwTwRwSuEuEuEuEuEwUuEuEuVuVaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaewFwFwVAMABwYwZxaxaxbxcxdxexcquaeaeaenmafafafoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafaeaevkxfxgxhvyxixjxkxlxmxnxoxpxqxrtTtUrsrsrsrsrsqLaeaeaeaeafafafacacacacacbjbjbjacacacacafafaeaetRrsrsrsrsrsrsrsrstTtUrsrsrsrsqLaeaeaeaeaeafacacacacacwQxsxtxuwgwDxvwhwDwwAWxxxywhwDwgxzxAuVuVuVxBxCxCxCxCxCxCxCxDxDxDxDxDxDxDwFwFwFxEwWBQxGxHxIxaxaxJxKxLxMxNxOaeaeaenmafafafoVoVoVoVoVoVafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafaeaevkxfxgxhvyxixjxkxlxmxnxoxpxqxrtTtUrsrsrsrsrsqLaeaeaeaeafafafacacacacacbjbjbjacacacacafafaeaetRrsrsrsrsrsrsrsrstTtUrsrsrsrsqLaeaeaeaeaeafacacacacacwQxsxtxuwgwDxvwhwDwwzJxxxywhwDwgxzxAuVuVuVxBxCxCxCxCxCxCxCxDxDxDxDxDxDxDwFwFwFxEwWBQxGxHxIxaxaxJxKxLxMxNxOaeaeaenmafafafoVoVoVoVoVoVafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafaeaevkvkvkvkvkxPxQxRvkvkxSvkvkvkvkqpqraeaeaeaeaeqCaeaeaeaeafaeafafacacacacacacacacacacafafaeaeaeqCaeaeaeaeaeaeaeaeqpqraeaeaeaeqCaeaeaeaeaeafafnlafafacuEuEuEuEwgwDxTxUxVwyxWxXxXxYxYxZxXyaybxXybycycycycycycycycydydydydydydydyeyfyeygyfyhyiyjykylymynxcyoypxcqraeaeaeaeafafafafoVoVoVoVoVafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafafaeaeaeaeaevkyqyrysytvkyuyvoeaeaeaeaeaeqEaeaeaeqKrsrsqLaeaeaeaeafacacacacacacacacacacafaeaetRrstSaeaeaeaeafaeaeqEaeaeaeaeaeaeqCaeaeaeaeaeaeaeuWaeafafafafafuEwgywyxyyyyyxyzyAyByyyyyCyxyDyEyEyEyFyFyFyFyFyFyFyFyGyGyGyGyGyGyHyIyIyIyJyKyLyMyNyOyPyOyOyOyOyOyOyQaeaeaeaenmafafafoVoVoVoVafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafafaeaeaeaevkyRySyTyUvkaeaeaeaeaeaeafafnlafaeaeaeaeaeqCaeaeaeaeaeafacacacacacafafafafafaetRtSaeaeaeafafafafafafnlaeaeaeaeaeaeqCaeaeaeaeaeaeaeaeaeaeaeafafuEuEwRyVwRuEuEyWyXyYuEuEuEyZwRuEuVaeaeaeaaaaaaaaagaaaaaaagaaaaaaaaaaagaawFwFwWzazbzczdzezfBRzhziyOvbzjaeaeaeaeaeafafafoVoVoVoVafafafoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafafaeaeaevkvkvkvkvkvkaeaeafafafafafacacafafaeaeaeaeqCaeaeaeaeaeaeafafafafafafaeaeaeaeaeqCaeaeafafafacacacacacafaeaeaeaeaeaeqCaeaeaerTquaeaeaeaeaeaeaeafuEzkzlzmznuEzozpzqzrzsuEztzuzvuEaeaeaeaeaeaeaaaaagaaaaaaagagagagagagagagagwEzwzxzyzzzAzAzBzCzCzDzEzFvjaeaeaeaeaeafafafoVoVoVafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafaeaeaeaeaeaeaeaeaeaeaeafacacacacacacacafafaeaeaeqKrsrsrsqLaeaeaeaeaeaeaeaeaeaeaeaeaeqCaeafafacacacacacacacafafaeaeaeaeaeqKrsrsrstTtUrsrsrsqLaeaeaeaeuEzGzHzIzJuEzKzLzLzMzNuEzOzPzQuEaeaeaeaeaeaeagagagagagagagaaaaaaaaaaagaaaawEzSzTzUzVzWzXzWzCzCzDzEzFvjaeaeaeaeafafafafoVoVafafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafafaeaeaevkvkvkvkvkvkaeaeafafafafafacacafafaeaeaeaeqCaeaeaeaeaeaeafafafafafafaeaeaeaeaeqCaeaeafafafacacacacacafaeaeaeaeaeaeqCaeaeaerTquaeaeaeaeaeaeaeafuEzkwAzmzluEzozpzqzrzsuEztzuzvuEaeaeaeaeaeaeaaaaagaaaaaaagagagagagagagagagwEzwzxzyzzzAzAzBzCzCzDzEzFvjaeaeaeaeaeafafafoVoVoVafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafaeaeaeaeaeaeaeaeaeaeaeafacacacacacacacafafaeaeaeqKrsrsrsqLaeaeaeaeaeaeaeaeaeaeaeaeaeqCaeafafacacacacacacacafafaeaeaeaeaeqKrsrsrstTtUrsrsrsqLaeaeaeaeuEzHzGzIznuEzKzLzLzMzNuEzOzPzQuEaeaeaeaeaeaeagagagagagagagaaaaaaaaaaagaaaawEzSzTzUzVzWzXzWzCzCzDzEzFvjaeaeaeaeafafafafoVoVafafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafaeaeaeaeaeaeaeaeaeafafafacacacacacacacacafafafaeaeaeaeaeqKqLaeaerTquaeaetRrsrsrsrsrstSaeafacacacacbjbjbjacacafafafaeaeaeaeaeaeaeqpqraeaeaeqCaeaeaeaewPuEuEuEuEuEzZAaAbAczNuEuEAdwRwPaeaeaeaeaeaeaaaaagaaaaaaagaaaaaaaaaaagaawFwFAeAfAgyOAhAiAjAkzhziyOvtvuaeaeaeaeafafafoVoVoVafafafafoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafafafafaeaeaeaeafafafacacacacacacacacacacacacafafafaeqEaeaeqKrsrstTtUrsrstSaeaeaeaeaeaeaeafacacacbjbjbjbjbjacacacafafafafaeaeaeaeaeaeaeaeaeqKrsrsqLaeaeaeaeaeaewPuEuEuEuEuEwPzFAlAmAnaeaeaeaeaeaaaaaaagaaaaaaagaaaaaaaaaaAowFApAqArAsAtwEAuAvAuAuAuAuAuAutNaeaeaeafafafafoVoVafafafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafacacacacacacacacacacacacacacacacafafnlafaeaeaeaeqpqraeaeaeaeqEaeafafafafafacacbjbjbjbjbjbjbjacacacacacafafafafafafafafaeaeaeaeaeqCaeaeaeaeaeaeaeaeqpAwAxAxAxAxAyqraeaeaeaeaeaeagagagagagagagagaaaaaaaahMhgwWBSwWwWAsADwEAEAFAGAHAIAJAKALaeaeaeaeafafafafoVoVafafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm index da5594a4405..e47f28bf95c 100644 --- a/_maps/map_files/cyberiad/z6.dmm +++ b/_maps/map_files/cyberiad/z6.dmm @@ -47,8 +47,8 @@ "aU" = (/obj/structure/table,/obj/item/weapon/paper/djstation{info = "Welcome new owner!

You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
  1. Equip yourself with a multi-tool
  2. Use the multitool on each machine, that is the broadcaster, receiver and the relay.
  3. Turn all the machines on, it has already been configured for you to listen on.
Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
"} diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 21eee7b52ac..01f9d022c57 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -57,6 +57,10 @@ //Perform the connection connected_port = new_port connected_port.connected_device = src + // To avoid a chicken-egg thing where pipes need to + // be initialized before the atmos cans are + if(!connected_port.parent) + connected_port.build_network() connected_port.parent.reconcile_air() anchored = 1 //Prevent movement @@ -78,8 +82,8 @@ return air_contents /obj/machinery/portable_atmospherics/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params) - if ((istype(W, /obj/item/weapon/tank) && !( src.destroyed ))) - if (src.holding) + if((istype(W, /obj/item/weapon/tank) && !( src.destroyed ))) + if(src.holding) return var/obj/item/weapon/tank/T = W user.drop_item() @@ -88,7 +92,7 @@ update_icon() return - else if (istype(W, /obj/item/weapon/wrench)) + else if(istype(W, /obj/item/weapon/wrench)) if(connected_port) disconnect() to_chat(user, "\blue You disconnect [name] from the port.") @@ -108,7 +112,7 @@ to_chat(user, "\blue Nothing happens.") return - else if ((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1) + else if((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1) atmosanalyzer_scan(air_contents, user) return diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index 23dca91dd51..9f716696591 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -116,12 +116,12 @@ data["on"] = on ? 1 : 0 data["hasHoldingTank"] = holding ? 1 : 0 - if (holding) + if(holding) data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0)) // update the ui if it exists, returns null if no ui is passed/found ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - if (!ui) + if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "portpump.tmpl", "Portable Pump", 480, 400, state = physical_state) @@ -143,13 +143,13 @@ if(href_list["direction"]) direction_out = !direction_out - if (href_list["remove_tank"]) + if(href_list["remove_tank"]) if(holding) holding.loc = loc holding = null update_icon() - if (href_list["pressure_adj"]) + if(href_list["pressure_adj"]) var/diff = text2num(href_list["pressure_adj"]) target_pressure = Clamp(target_pressure+diff, pressuremin, pressuremax) update_icon() diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index 1790dec775d..1fb0bdd1308 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -47,10 +47,10 @@ if(!on) return scrub(loc) - if (widenet) + if(widenet) var/turf/T = loc - if (istype(T)) - for (var/turf/simulated/tile in T.GetAtmosAdjacentTurfs(alldir=1)) + if(istype(T)) + for(var/turf/simulated/tile in T.GetAtmosAdjacentTurfs(alldir=1)) scrub(tile) /obj/machinery/portable_atmospherics/scrubber/proc/scrub(var/turf/simulated/tile) @@ -69,7 +69,7 @@ removed = loc.remove_air(transfer_moles) //Filter it - if (removed) + if(removed) var/datum/gas_mixture/filtered_out = new filtered_out.temperature = removed.temperature @@ -126,12 +126,12 @@ data["on"] = on ? 1 : 0 data["hasHoldingTank"] = holding ? 1 : 0 - if (holding) + if(holding) data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0)) // update the ui if it exists, returns null if no ui is passed/found ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - if (!ui) + if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "portscrubber.tmpl", "Portable Scrubber", 480, 400, state = physical_state) @@ -205,7 +205,7 @@ to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") return - else if ((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1) + else if((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1) atmosanalyzer_scan(air_contents, user) /obj/machinery/portable_atmospherics/scrubber/huge/stationary diff --git a/code/game/machinery/atmoalter/zvent.dm b/code/game/machinery/atmoalter/zvent.dm index 2e7ce0ac9b7..e3ac09e8f09 100644 --- a/code/game/machinery/atmoalter/zvent.dm +++ b/code/game/machinery/atmoalter/zvent.dm @@ -12,16 +12,16 @@ /obj/machinery/zvent/process() //all this object does, is make its turf share air with the ones above and below it, if they have a vent too. - if (istype(loc,/turf/simulated)) //if we're not on a valid turf, forget it - for (var/new_z in list(-1,1)) //change this list if a fancier system of z-levels gets implemented + if(istype(loc,/turf/simulated)) //if we're not on a valid turf, forget it + for(var/new_z in list(-1,1)) //change this list if a fancier system of z-levels gets implemented var/turf/simulated/zturf_conn = locate(x,y,z+new_z) - if (istype(zturf_conn)) + if(istype(zturf_conn)) var/obj/machinery/zvent/zvent_conn= locate(/obj/machinery/zvent) in zturf_conn - if (istype(zvent_conn)) + if(istype(zvent_conn)) //both floors have simulated turfs, share() var/turf/simulated/myturf = loc var/datum/gas_mixture/conn_air = zturf_conn.air //TODO: pop culture reference var/datum/gas_mixture/my_air = myturf.air - if (istype(conn_air) && istype(my_air)) + if(istype(conn_air) && istype(my_air)) my_air.share(conn_air) air_update_turf() diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 9021a1a2127..b44d51c9b30 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -107,7 +107,7 @@ return /obj/machinery/autolathe/attackby(obj/item/O, mob/user, params) - if (busy) + if(busy) to_chat(user, "The autolathe is busy. Please wait for completion of previous operation.") return 1 @@ -118,7 +118,7 @@ if(exchange_parts(user, O)) return - if (panel_open) + if(panel_open) if(istype(O, /obj/item/weapon/crowbar)) materials.retrieve_all() default_deconstruction_crowbar(O) @@ -126,7 +126,7 @@ else attack_hand(user) return 1 - if (stat) + if(stat) return 1 if(istype(O, /obj/item/weapon/disk/design_disk)) @@ -156,9 +156,9 @@ var/inserted = materials.insert_item(O) if(inserted) if(istype(O,/obj/item/stack)) - if (O.materials[MAT_METAL]) + if(O.materials[MAT_METAL]) flick("autolathe_o",src)//plays metal insertion animation - if (O.materials[MAT_GLASS]) + if(O.materials[MAT_GLASS]) flick("autolathe_r",src)//plays glass insertion animation to_chat(user, "You insert [inserted] sheet[inserted>1 ? "s" : ""] to the autolathe.") use_power(inserted*100) @@ -206,7 +206,7 @@ if(!is_stack && (multiplier > 1)) return - if (!(multiplier in list(1,10,25,max_multiplier))) //"enough materials ?" is checked in the build proc + if(!(multiplier in list(1,10,25,max_multiplier))) //"enough materials ?" is checked in the build proc return ///////////////// @@ -214,7 +214,7 @@ add_to_queue(design_last_ordered,multiplier) else to_chat(usr, "\red The autolathe queue is full!") - if (!busy) + if(!busy) busy = 1 process_queue() busy = 0 @@ -264,7 +264,7 @@ var/metal_cost = D.materials[MAT_METAL] var/glass_cost = D.materials[MAT_GLASS] var/power = max(2000, (metal_cost+glass_cost)*multiplier/5) - if (can_build(D,multiplier)) + if(can_build(D,multiplier)) being_built = list(D,multiplier) use_power(power) icon_state = "autolathe" @@ -325,7 +325,7 @@ var/output = "" output += "
" output += "Queue contains:" - if (!istype(queue) || !queue.len) + if(!istype(queue) || !queue.len) if(being_built.len) output += "
  1. " output += get_processing_line() @@ -382,7 +382,7 @@ being_built = new /list() return 0 if(!can_build(D,multiplier)) - visible_message("\icon[src] \The [src] beeps, \"Not enough resources. Queue processing terminated.\"") + visible_message("[bicon(src)] \The [src] beeps, \"Not enough resources. Queue processing terminated.\"") queue = list() being_built = new /list() return 0 @@ -392,7 +392,7 @@ D = listgetindex(listgetindex(queue, 1),1) multiplier = listgetindex(listgetindex(queue,1),2) being_built = new /list() - //visible_message("\icon[src] \The [src] beeps, \"Queue processing finished successfully.\"") + //visible_message("[bicon(src)] \The [src] beeps, \"Queue processing finished successfully.\"") /obj/machinery/autolathe/proc/main_win(mob/user) var/dat = "" @@ -447,9 +447,9 @@ if(ispath(D.build_path, /obj/item/stack)) var/max_multiplier = min(D.maxstack, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS]?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY) - if (max_multiplier>10 && !disabled) + if(max_multiplier>10 && !disabled) dat += " x10" - if (max_multiplier>25 && !disabled) + if(max_multiplier>25 && !disabled) dat += " x25" if(max_multiplier > 0 && !disabled) dat += " x[max_multiplier]" @@ -479,9 +479,9 @@ if(ispath(D.build_path, /obj/item/stack)) var/max_multiplier = min(D.maxstack, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS]?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY) - if (max_multiplier>10 && !disabled) + if(max_multiplier>10 && !disabled) dat += " x10" - if (max_multiplier>25 && !disabled) + if(max_multiplier>25 && !disabled) dat += " x25" if(max_multiplier > 0 && !disabled) dat += " x[max_multiplier]" diff --git a/code/game/machinery/bees_apiary.dm b/code/game/machinery/bees_apiary.dm index 437c188d9b8..ad9fb8795cb 100644 --- a/code/game/machinery/bees_apiary.dm +++ b/code/game/machinery/bees_apiary.dm @@ -36,7 +36,7 @@ if(!yieldmod) yieldmod += 1 // to_chat(world, "Yield increased by 1, from 0, to a total of [myseed.yield]") - else if (prob(1/(yieldmod * yieldmod) *100))//This formula gives you diminishing returns based on yield. 100% with 1 yield, decreasing to 25%, 11%, 6, 4, 2... + else if(prob(1/(yieldmod * yieldmod) *100))//This formula gives you diminishing returns based on yield. 100% with 1 yield, decreasing to 25%, 11%, 6, 4, 2... yieldmod += 1 // to_chat(world, "Yield increased by 1, to a total of [myseed.yield]") else diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index fc00e8740d3..fed2328570a 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -207,9 +207,9 @@ interact(user) /obj/machinery/biogenerator/proc/activate() - if (usr.stat != 0) + if(usr.stat != 0) return - if (src.stat != 0) //NOPOWER etc + if(src.stat != 0) //NOPOWER etc return if(src.processing) to_chat(usr, "The biogenerator is in the process of working.") @@ -236,7 +236,7 @@ return /obj/machinery/biogenerator/proc/check_cost(var/cost, var/checkonly) - if (cost > points) + if(cost > points) menustat = "nopoints" return 1 else if(checkonly) @@ -258,89 +258,89 @@ //Food if("milk") if(check_container_volume(10)) return 0 - else if (check_cost(20/efficiency)) return 0 + else if(check_cost(20/efficiency)) return 0 else beaker.reagents.add_reagent("milk",10) if("cream") if(check_container_volume(10)) return 0 - else if (check_cost(30/efficiency)) return 0 + else if(check_cost(30/efficiency)) return 0 else beaker.reagents.add_reagent("cream",10) if("meat") - if (check_cost(250/efficiency)) return 0 + if(check_cost(250/efficiency)) return 0 else new/obj/item/weapon/reagent_containers/food/snacks/monkeycube(src.loc) //Nutrients if("ez") - if (check_cost(10/efficiency, 1)) return 0 + if(check_cost(10/efficiency, 1)) return 0 if(in_beaker) if(check_container_volume(10)) return 0 else beaker.reagents.add_reagent("eznutrient",10) else new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) - if (check_cost(10/efficiency)) return 0 + if(check_cost(10/efficiency)) return 0 if("l4z") - if (check_cost(20/efficiency, 1)) return 0 + if(check_cost(20/efficiency, 1)) return 0 if(in_beaker) if(check_container_volume(10)) return 0 else beaker.reagents.add_reagent("left4zed",10) else new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) - if (check_cost(20/efficiency)) return 0 + if(check_cost(20/efficiency)) return 0 if("rh") - if (check_cost(25/efficiency, 1)) return 0 + if(check_cost(25/efficiency, 1)) return 0 if(in_beaker) if(check_container_volume(10)) return 0 else beaker.reagents.add_reagent("robustharvest",10) else new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) - if (check_cost(25/efficiency)) return 0 + if(check_cost(25/efficiency)) return 0 //Leather if("wallet") - if (check_cost(100/efficiency)) return 0 + if(check_cost(100/efficiency)) return 0 else new/obj/item/weapon/storage/wallet(src.loc) if("bkbag") - if (check_cost(200/efficiency)) return 0 + if(check_cost(200/efficiency)) return 0 else new/obj/item/weapon/storage/bag/books(src.loc) if("ptbag") - if (check_cost(200/efficiency)) return 0 + if(check_cost(200/efficiency)) return 0 else new/obj/item/weapon/storage/bag/plants(src.loc) if("mnbag") - if (check_cost(200/efficiency)) return 0 + if(check_cost(200/efficiency)) return 0 else new/obj/item/weapon/storage/bag/ore(src.loc) if("chbag") - if (check_cost(200/efficiency)) return 0 + if(check_cost(200/efficiency)) return 0 else new/obj/item/weapon/storage/bag/chemistry(src.loc) if("rag") - if (check_cost(200/efficiency)) return 0 + if(check_cost(200/efficiency)) return 0 else new/obj/item/weapon/reagent_containers/glass/rag(src.loc) if("gloves") - if (check_cost(250/efficiency)) return 0 + if(check_cost(250/efficiency)) return 0 else new/obj/item/clothing/gloves/botanic_leather(src.loc) if("satchel") - if (check_cost(400/efficiency)) return 0 + if(check_cost(400/efficiency)) return 0 else new/obj/item/weapon/storage/backpack/satchel(src.loc) if("cashbag") - if (check_cost(400/efficiency)) return 0 + if(check_cost(400/efficiency)) return 0 else new/obj/item/weapon/storage/bag/cash(src.loc) if("jacket") - if (check_cost(500/efficiency)) return 0 + if(check_cost(500/efficiency)) return 0 else new/obj/item/clothing/suit/jacket/leather(src.loc) //Belts if("tbelt") - if (check_cost(300/efficiency)) return 0 + if(check_cost(300/efficiency)) return 0 else new/obj/item/weapon/storage/belt/utility(src.loc) if("bbelt") - if (check_cost(300/efficiency)) return 0 + if(check_cost(300/efficiency)) return 0 else new/obj/item/weapon/storage/belt/botany(src.loc) if("sbelt") - if (check_cost(300/efficiency)) return 0 + if(check_cost(300/efficiency)) return 0 else new/obj/item/weapon/storage/belt/security(src.loc) if("mbelt") - if (check_cost(300/efficiency)) return 0 + if(check_cost(300/efficiency)) return 0 else new/obj/item/weapon/storage/belt/medical(src.loc) if("jbelt") - if (check_cost(300/efficiency)) return 0 + if(check_cost(300/efficiency)) return 0 else new/obj/item/weapon/storage/belt/janitor(src.loc) if("band") - if (check_cost(300/efficiency)) return 0 + if(check_cost(300/efficiency)) return 0 else new/obj/item/weapon/storage/belt/bandolier(src.loc) processing = 0 menustat = "complete" diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index afeb5a1f778..5bff1c651ec 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -121,7 +121,7 @@ radio_connection.post_signal(src, signal, filter = RADIO_LOGIC) for(var/obj/machinery/door/poddoor/M in range(src,range)) - if (M.id_tag == src.id_tag && !M.protected) + if(M.id_tag == src.id_tag && !M.protected) spawn() M.open() @@ -134,7 +134,7 @@ sleep(50) for(var/obj/machinery/door/poddoor/M in range(src,range)) - if (M.id_tag == src.id_tag && !M.protected) + if(M.id_tag == src.id_tag && !M.protected) spawn() M.close() return @@ -182,7 +182,7 @@ icon_state = "launcheract" for(var/obj/machinery/sparker/M in world) - if (M.id == src.id) + if(M.id == src.id) spawn( 0 ) M.spark() diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 9aa7cfe2c7b..bcf8ee75b00 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -42,6 +42,7 @@ cameranet.addCamera(src) /obj/machinery/camera/initialize() + ..() if(z == ZLEVEL_STATION && prob(3) && !start_active) toggle_cam() @@ -89,7 +90,7 @@ if(!qdeleted(src)) cancelCameraAlarm() for(var/mob/O in mob_list) - if (O.client && O.client.eye == src) + if(O.client && O.client.eye == src) O.unset_machine() O.reset_view(null) to_chat(O, "The screen bursts into static.") @@ -161,7 +162,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 +172,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()) @@ -182,7 +183,7 @@ to_chat(user, "[msg2]") // OTHER - else if ((istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/device/pda)) && isliving(user)) + else if((istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/device/pda)) && isliving(user)) var/mob/living/U = user var/obj/item/weapon/paper/X = null var/obj/item/device/pda/P = null @@ -211,12 +212,12 @@ else to_chat(AI, "[U] holds \a [itemname] up to one of your cameras ...") AI.last_paper_seen = "[itemname][info]" - else if (O.client && O.client.eye == src) + else if(O.client && O.client.eye == src) to_chat(O, "[U] holds \a [itemname] up to one of the cameras ...") O << browse(text("[][]", itemname, info), text("window=[]", itemname)) - else if (istype(W, /obj/item/device/camera_bug)) - if (!src.can_use()) + else if(istype(W, /obj/item/device/camera_bug)) + if(!src.can_use()) to_chat(user, "Camera non-functional.") return if(istype(src.bug)) @@ -276,7 +277,7 @@ //Apparently, this will disconnect anyone even if the camera was re-activated. //I guess that doesn't matter since they can't use it anyway? for(var/mob/O in player_list) - if (O.client && O.client.eye == src) + if(O.client && O.client.eye == src) O.unset_machine() O.reset_view(null) to_chat(O, "The screen bursts into static.") @@ -376,9 +377,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/camera/motion.dm b/code/game/machinery/camera/motion.dm index 5b236d4baa9..eeb9eeb60d3 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -8,58 +8,58 @@ /obj/machinery/camera/process() // motion camera event loop - if (stat & (EMPED|NOPOWER)) + if(stat & (EMPED|NOPOWER)) return if(!isMotion()) . = PROCESS_KILL return - if (detectTime > 0) + if(detectTime > 0) var/elapsed = world.time - detectTime - if (elapsed > alarm_delay) + if(elapsed > alarm_delay) triggerAlarm() - else if (detectTime == -1) - for (var/mob/target in motionTargets) - if (target.stat == 2) lostTarget(target) + else if(detectTime == -1) + for(var/mob/target in motionTargets) + if(target.stat == 2) lostTarget(target) // If not detecting with motion camera... - if (!area_motion) + if(!area_motion) // See if the camera is still in range if(!in_range(src, target)) // If they aren't in range, lose the target. lostTarget(target) /obj/machinery/camera/proc/newTarget(var/mob/target) - if (istype(target, /mob/living/silicon/ai)) return 0 - if (detectTime == 0) + if(istype(target, /mob/living/silicon/ai)) return 0 + if(detectTime == 0) detectTime = world.time // start the clock - if (!(target in motionTargets)) + if(!(target in motionTargets)) motionTargets += target return 1 /obj/machinery/camera/proc/lostTarget(var/mob/target) - if (target in motionTargets) + if(target in motionTargets) motionTargets -= target - if (motionTargets.len == 0) + if(motionTargets.len == 0) cancelAlarm() /obj/machinery/camera/proc/cancelAlarm() - if (!status || (stat & NOPOWER)) + if(!status || (stat & NOPOWER)) return 0 - if (detectTime == -1) + if(detectTime == -1) motion_alarm.clearAlarm(loc, src) detectTime = 0 return 1 /obj/machinery/camera/proc/triggerAlarm() - if (!status || (stat & NOPOWER)) + if(!status || (stat & NOPOWER)) return 0 - if (!detectTime) return 0 + if(!detectTime) return 0 motion_alarm.triggerAlarm(loc, src) detectTime = -1 return 1 /obj/machinery/camera/HasProximity(atom/movable/AM as mob|obj) // Motion cameras outside of an "ai monitored" area will use this to detect stuff. - if (!area_motion) + if(!area_motion) if(isliving(AM)) newTarget(AM) diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index 4f5565fdf77..5a36a900e61 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -85,8 +85,8 @@ /obj/machinery/camera/proc/setPowerUsage() var/mult = 1 - if (isXRay()) + if(isXRay()) mult++ - if (isMotion()) + if(isMotion()) mult++ active_power_usage = mult*initial(active_power_usage) diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 0be7126f5a5..aa32db20688 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -19,16 +19,16 @@ return var/list/L = list() - for (var/obj/machinery/camera/C in cameranet.cameras) + for(var/obj/machinery/camera/C in cameranet.cameras) L.Add(C) camera_sort(L) var/list/T = list() - for (var/obj/machinery/camera/C in L) + for(var/obj/machinery/camera/C in L) var/list/tempnetwork = C.network & src.network - if (tempnetwork.len) + if(tempnetwork.len) T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C track.cameras = T @@ -43,7 +43,7 @@ to_chat(src, "You can't list the cameras because you are dead!") return - if (!camera || camera == "Cancel") + if(!camera || camera == "Cancel") return 0 var/obj/machinery/camera/C = track.cameras[camera] @@ -70,7 +70,7 @@ return var/L = get_turf(eyeobj) - if (InvalidTurf(get_turf(L))) + if(InvalidTurf(get_turf(L))) to_chat(src, "\red Unable to store this location") return @@ -85,7 +85,7 @@ set name = "Goto Camera Location" set desc = "Returns to the selected camera location" - if (!(loc in stored_locations)) + if(!(loc in stored_locations)) to_chat(src, "\red Location [loc] not found") return @@ -97,7 +97,7 @@ set name = "Delete Camera Location" set desc = "Deletes the selected camera location" - if (!(loc in stored_locations)) + if(!(loc in stored_locations)) to_chat(src, "\red Location [loc] not found") return @@ -132,7 +132,7 @@ human = 1 var/name = M.name - if (name in track.names) + if(name in track.names) track.namecounts[name]++ name = text("[] ([])", name, track.namecounts[name]) else @@ -224,7 +224,7 @@ sleep(10) /proc/near_camera(mob/living/M) - if (!isturf(M.loc)) + if(!isturf(M.loc)) return 0 if(isrobot(M)) var/mob/living/silicon/robot/R = M @@ -235,9 +235,9 @@ return 1 /obj/machinery/camera/attack_ai(mob/living/silicon/ai/user) - if (!istype(user)) + if(!istype(user)) return - if (!src.can_use()) + if(!src.can_use()) return user.eyeobj.setLoc(get_turf(src)) @@ -249,14 +249,14 @@ var/obj/machinery/camera/a var/obj/machinery/camera/b - for (var/i = L.len, i > 0, i--) - for (var/j = 1 to i - 1) + for(var/i = L.len, i > 0, i--) + for(var/j = 1 to i - 1) a = L[j] b = L[j + 1] - if (a.c_tag_order != b.c_tag_order) - if (a.c_tag_order > b.c_tag_order) + if(a.c_tag_order != b.c_tag_order) + if(a.c_tag_order > b.c_tag_order) L.Swap(j, j + 1) else - if (sorttext(a.c_tag, b.c_tag) < 0) + if(sorttext(a.c_tag, b.c_tag) < 0) L.Swap(j, j + 1) return L diff --git a/code/game/machinery/chiller.dm b/code/game/machinery/chiller.dm index 82fe014e160..45ec0337fea 100644 --- a/code/game/machinery/chiller.dm +++ b/code/game/machinery/chiller.dm @@ -105,9 +105,9 @@ return /obj/machinery/space_heater/air_conditioner/Topic(href, href_list) - if (usr.stat) + if(usr.stat) return - if ((in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon))) + if((in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) switch(href_list["op"]) diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 809ac579454..56a1f151876 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -58,7 +58,9 @@ dat += "
    " dat += "Safety Protocols are ENABLED
    " - user << browse(dat, "window=computer;size=400x500") + var/datum/browser/popup = new(user, "holodeck_computer", name, 400, 500) + popup.set_content(dat) + popup.open(0) onclose(user, "computer") return @@ -363,10 +365,10 @@ return // HOLOTABLE DOES NOT GIVE A FUCK /obj/structure/table/holotable/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/grab)) + if(istype(W, /obj/item/weapon/grab)) return ..() - if (istype(W, /obj/item/weapon/wrench)) + if(istype(W, /obj/item/weapon/wrench)) to_chat(user, "It's a holotable! There are no bolts!") return @@ -406,7 +408,7 @@ return // HOLORACK DOES NOT GIVE A FUCK /obj/structure/rack/holorack/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/wrench)) + if(istype(W, /obj/item/weapon/wrench)) to_chat(user, "It's a holorack! There are no bolts!") return @@ -423,6 +425,7 @@ throwforce = 10 w_class = 4 attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + block_chance = 50 /obj/item/weapon/holo/claymore/blue icon_state = "claymoreblue" @@ -432,9 +435,6 @@ icon_state = "claymorered" item_state = "claymorered" -/obj/item/weapon/holo/claymore/IsShield() - return 1 - /obj/item/weapon/holo/esword desc = "May the force be within you. Sorta" icon_state = "sword0" @@ -442,8 +442,9 @@ throw_speed = 1 throw_range = 5 throwforce = 0 - w_class = 2.0 - flags = NOSHIELD + w_class = 2 + armour_penetration = 50 + block_chance = 50 var/active = 0 /obj/item/weapon/holo/esword/green/New() @@ -452,9 +453,9 @@ /obj/item/weapon/holo/esword/red/New() item_color = "red" -/obj/item/weapon/holo/esword/IsShield() +/obj/item/weapon/holo/esword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance) if(active) - return 1 + return ..() return 0 /obj/item/weapon/holo/esword/New() @@ -462,7 +463,7 @@ /obj/item/weapon/holo/esword/attack_self(mob/living/user as mob) active = !active - if (active) + if(active) force = 30 icon_state = "sword[item_color]" w_class = 4 @@ -500,7 +501,7 @@ throwpass = 1 /obj/structure/holohoop/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) + if(istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) var/obj/item/weapon/grab/G = W if(G.state<2) to_chat(user, "You need a better grip to do that!") @@ -510,13 +511,13 @@ visible_message("[G.assailant] dunks [G.affecting] into the [src]!") qdel(W) return - else if (istype(W, /obj/item) && get_dist(src,user)<2) + else if(istype(W, /obj/item) && get_dist(src,user)<2) user.drop_item(src) visible_message("[user] dunks [W] into the [src]!") return /obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if (istype(mover,/obj/item) && mover.throwing) + if(istype(mover,/obj/item) && mover.throwing) var/obj/item/I = mover if(istype(I, /obj/item/projectile)) return @@ -572,7 +573,7 @@ var/numready = 0 for(var/obj/machinery/readybutton/button in currentarea) numbuttons++ - if (button.ready) + if(button.ready) numready++ if(numbuttons == numready) diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index cd30465370d..81753797b57 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -25,7 +25,7 @@ ..() for(dir in list(NORTH,EAST,SOUTH,WEST)) table = locate(/obj/machinery/optable, get_step(src, dir)) - if (table) + if(table) table.computer = src break @@ -49,8 +49,8 @@ ///obj/machinery/computer/operating/interact(mob/user) -// if ( ((get_dist(src, user) > 1) && !isobserver(user)) || (stat & (BROKEN|NOPOWER)) ) -// if (!istype(user, /mob/living/silicon)) +// if( ((get_dist(src, user) > 1) && !isobserver(user)) || (stat & (BROKEN|NOPOWER)) ) +// if(!istype(user, /mob/living/silicon)) // user.unset_machine() // user << browse(null, "window=op") // return @@ -91,7 +91,7 @@ data["hasOccupant"] = occupant ? 1 : 0 var/occupantData[0] - if (occupant) + if(occupant) occupantData["name"] = occupant.name occupantData["stat"] = occupant.stat occupantData["health"] = occupant.health @@ -107,36 +107,37 @@ occupantData["maxTemp"] = 1000 // If you get a burning vox armalis into the sleeper, congratulations // Because we can put simple_animals in here, we need to do something tricky to get things working nice occupantData["temperatureSuitability"] = 0 // 0 is the baseline - if (ishuman(occupant) && occupant.species) + if(ishuman(occupant) && occupant.species) var/datum/species/sp = occupant.species - if (occupant.bodytemperature < sp.cold_level_3) + if(occupant.bodytemperature < sp.cold_level_3) occupantData["temperatureSuitability"] = -3 - else if (occupant.bodytemperature < sp.cold_level_2) + else if(occupant.bodytemperature < sp.cold_level_2) occupantData["temperatureSuitability"] = -2 - else if (occupant.bodytemperature < sp.cold_level_1) + else if(occupant.bodytemperature < sp.cold_level_1) occupantData["temperatureSuitability"] = -1 - else if (occupant.bodytemperature > sp.heat_level_3) + else if(occupant.bodytemperature > sp.heat_level_3) occupantData["temperatureSuitability"] = 3 - else if (occupant.bodytemperature > sp.heat_level_2) + else if(occupant.bodytemperature > sp.heat_level_2) occupantData["temperatureSuitability"] = 2 - else if (occupant.bodytemperature > sp.heat_level_1) + else if(occupant.bodytemperature > sp.heat_level_1) occupantData["temperatureSuitability"] = 1 - else if (istype(occupant, /mob/living/simple_animal)) + else if(istype(occupant, /mob/living/simple_animal)) var/mob/living/simple_animal/silly = occupant - if (silly.bodytemperature < silly.minbodytemp) + if(silly.bodytemperature < silly.minbodytemp) occupantData["temperatureSuitability"] = -3 - else if (silly.bodytemperature > silly.maxbodytemp) + else if(silly.bodytemperature > silly.maxbodytemp) occupantData["temperatureSuitability"] = 3 // Blast you, imperial measurement system occupantData["btCelsius"] = occupant.bodytemperature - T0C occupantData["btFaren"] = ((occupant.bodytemperature - T0C) * (9.0/5.0))+ 32 - if (ishuman(occupant) && occupant.vessel && !(occupant.species && occupant.species.flags & NO_BLOOD)) + if(ishuman(occupant) && occupant.vessel && !(occupant.species && occupant.species.flags & NO_BLOOD)) + var/blood_type = occupant.get_blood_name() occupantData["pulse"] = occupant.get_pulse(GETPULSE_TOOL) occupantData["hasBlood"] = 1 - occupantData["bloodLevel"] = round(occupant.vessel.get_reagent_amount("blood")) + occupantData["bloodLevel"] = round(occupant.vessel.get_reagent_amount(blood_type)) occupantData["bloodMax"] = occupant.max_blood - occupantData["bloodPercent"] = round(100*(occupant.vessel.get_reagent_amount("blood")/occupant.max_blood), 0.01) //copy pasta ends here + occupantData["bloodPercent"] = round(100*(occupant.vessel.get_reagent_amount(blood_type)/occupant.max_blood), 0.01) //copy pasta ends here occupantData["bloodType"]=occupant.b_type if(occupant.surgeries.len) @@ -156,7 +157,7 @@ data["oxy"]=oxy ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "op_computer.tmpl", "Patient Monitor", 650, 455) ui.set_initial_data(data) ui.open() @@ -169,7 +170,7 @@ /obj/machinery/computer/operating/Topic(href, href_list) if(..()) return 1 - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) + if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) if(href_list["verboseOn"]) diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 8ad0b715b4f..f06771cc288 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -81,7 +81,7 @@ icon_state = "3" if(3) if(istype(P, /obj/item/weapon/wirecutters)) - if (brain) + if(brain) to_chat(user, "Get that brain out of there first") else playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) @@ -95,7 +95,7 @@ if(P:amount >= 2) playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 20, target = src)) - if (P) + if(P) P:amount -= 2 if(!P:amount) qdel(P) to_chat(user, "\blue You put in the glass panel.") @@ -158,7 +158,7 @@ playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) to_chat(user, "\blue You remove the glass panel.") state = 3 - if (brain) + if(brain) icon_state = "3b" else icon_state = "3" diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index e326d9750d5..343f421b4e8 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -43,14 +43,14 @@ data["radio"] = occupant.aiRadio.disabledAi var/laws[0] - for (var/datum/ai_law/law in occupant.laws.all_laws()) + for(var/datum/ai_law/law in occupant.laws.all_laws()) laws.Add(list(list("law" = law.law, "number" = law.get_index()))) data["laws"] = laws ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "ai_fixer.tmpl", "AI System Integrity Restorer", 550, 500) ui.set_initial_data(data) ui.open() @@ -62,13 +62,13 @@ if(href_list["fix"]) src.active = 1 - while (src.occupant.health < 100) + while(src.occupant.health < 100) src.occupant.adjustOxyLoss(-1) src.occupant.adjustFireLoss(-1) src.occupant.adjustToxLoss(-1) src.occupant.adjustBruteLoss(-1) src.occupant.updatehealth() - if (src.occupant.health >= 0 && src.occupant.stat == 2) + if(src.occupant.health >= 0 && src.occupant.stat == 2) src.occupant.stat = 0 src.occupant.lying = 0 dead_mob_list -= src.occupant @@ -99,11 +99,11 @@ var/overlay_layer = LIGHTING_LAYER+0.2 // +0.1 from the default computer overlays if(active) overlays += image(icon,"ai-fixer-on",overlay_layer) - if (occupant) - switch (occupant.stat) - if (0) + if(occupant) + switch(occupant.stat) + if(0) overlays += image(icon,"ai-fixer-full",overlay_layer) - if (2) + if(2) overlays += image(icon,"ai-fixer-404",overlay_layer) else overlays += image(icon,"ai-fixer-empty",overlay_layer) @@ -131,7 +131,7 @@ occupant.loc = card occupant = null update_icon() - else if (active) + else if(active) to_chat(user, "ERROR: Reconstruction in progress.") - else if (!occupant) + else if(!occupant) to_chat(user, "ERROR: Unable to locate artificial intelligence.") diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index d3cc5f089a0..48b1dadc406 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -88,7 +88,7 @@ dat += "

    [temp]

    " dat += "
    Health: [player_hp] | Magic: [player_mp] | Enemy Health: [enemy_hp]
    " - if (gameover) + if(gameover) dat += "
    New Game" else dat += "
    Attack | " @@ -109,8 +109,8 @@ if(..()) return - if (!blocked && !gameover) - if (href_list["attack"]) + if(!blocked && !gameover) + if(href_list["attack"]) blocked = 1 var/attackamt = rand(2,6) temp = "You attack for [attackamt] damage!" @@ -123,7 +123,7 @@ enemy_hp -= attackamt arcade_action() - else if (href_list["heal"]) + else if(href_list["heal"]) blocked = 1 var/pointamt = rand(1,3) var/healamt = rand(6,8) @@ -139,7 +139,7 @@ updateUsrDialog() arcade_action() - else if (href_list["charge"]) + else if(href_list["charge"]) blocked = 1 var/chargeamt = rand(4,7) temp = "You regain [chargeamt] points" @@ -152,11 +152,11 @@ sleep(10) arcade_action() - if (href_list["close"]) + if(href_list["close"]) usr.unset_machine() usr << browse(null, "window=arcade") - else if (href_list["newgame"]) //Reset everything + else if(href_list["newgame"]) //Reset everything temp = "New Round" player_hp = 30 player_mp = 10 @@ -174,7 +174,7 @@ return /obj/machinery/computer/arcade/battle/proc/arcade_action() - if ((enemy_mp <= 0) || (enemy_hp <= 0)) + if((enemy_mp <= 0) || (enemy_hp <= 0)) if(!gameover) gameover = 1 temp = "[enemy_name] has fallen! Rejoice!" @@ -193,20 +193,20 @@ var/score = player_hp + player_mp + 5 prizevend(score) - else if (emagged && (turtle >= 4)) + else if(emagged && (turtle >= 4)) var/boomamt = rand(5,10) temp = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!" playsound(src.loc, 'sound/arcade/Boom.ogg', 20, 1, extrarange = -6, falloff = 10) player_hp -= boomamt - else if ((enemy_mp <= 5) && (prob(70))) + else if((enemy_mp <= 5) && (prob(70))) var/stealamt = rand(2,3) temp = "[enemy_name] steals [stealamt] of your power!" playsound(src.loc, 'sound/arcade/Steal.ogg', 20, 1, extrarange = -6, falloff = 10) player_mp -= stealamt updateUsrDialog() - if (player_mp <= 0) + if(player_mp <= 0) gameover = 1 sleep(10) temp = "You have been drained! GAME OVER" @@ -217,7 +217,7 @@ else feedback_inc("arcade_loss_mana_normal") - else if ((enemy_hp <= 10) && (enemy_mp > 4)) + else if((enemy_hp <= 10) && (enemy_mp > 4)) temp = "[enemy_name] heals for 4 health!" playsound(src.loc, 'sound/arcade/Heal.ogg', 20, 1, extrarange = -6, falloff = 10) enemy_hp += 4 @@ -229,7 +229,7 @@ playsound(src.loc, 'sound/arcade/Hit.ogg', 20, 1, extrarange = -6, falloff = 10) player_hp -= attackamt - if ((player_mp <= 0) || (player_hp <= 0)) + if((player_mp <= 0) || (player_hp <= 0)) gameover = 1 temp = "You have been crushed! GAME OVER" playsound(src.loc, 'sound/arcade/Lose.ogg', 20, 1, extrarange = -6, falloff = 10) @@ -426,7 +426,7 @@ return busy = 1 - if (href_list["continue"]) //Continue your travels + if(href_list["continue"]) //Continue your travels if(turns >= ORION_TRAIL_WINTURN) win() else diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index b128b06bf49..1168552b952 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -13,7 +13,7 @@ /obj/item/weapon/circuitboard density = 0 anchored = 0 - w_class = 2.0 + w_class = 2 name = "circuit board" icon = 'icons/obj/module.dmi' icon_state = "id_mod" diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 0311ac200fb..81b2c6b86a4 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -43,17 +43,15 @@ /obj/machinery/computer/security/check_eye(var/mob/user as mob) - if ((get_dist(user, src) > 1 || !( user.canmove ) || user.blinded || !( current ) || !( current.status )) && (!istype(user, /mob/living/silicon))) + if((get_dist(user, src) > 1 || !( user.canmove ) || user.blinded || !( current ) || !( current.status )) && (!istype(user, /mob/living/silicon))) return null user.reset_view(current) return 1 // Network configuration -/obj/machinery/computer/security/attackby(I as obj, user as mob, params) - access = list() - if(istype(I,/obj/item/weapon/card/id)) // If hit by a regular ID card. - var/obj/item/weapon/card/id/E = I - access = E.access +/obj/machinery/computer/security/attackby(obj/item/I, user as mob, params) + access = I.GetAccess() + if(access.len) // If hit by something with access. ui_interact(user) else ..() @@ -118,7 +116,7 @@ data["current"] = current.nano_structure() ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "sec_camera.tmpl", "Camera Console", 900, 800) // adding a template with the key "mapContent" enables the map ui functionality @@ -172,10 +170,7 @@ user.set_machine(src) if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.wear_id) - var/obj/item/weapon/card/id/gold/C = H.wear_id - access = C.access + access = user.get_access() ui_interact(user) diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 16242f5a58e..0a84ee81821 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -6,8 +6,8 @@ var/mob/camera/aiEye/remote/eyeobj var/mob/living/carbon/human/current_user = null var/list/networks = list("SS13") - var/datum/action/camera_off/off_action = new - var/datum/action/camera_jump/jump_action = new + var/datum/action/innate/camera_off/off_action = new + var/datum/action/innate/camera_jump/jump_action = new /obj/machinery/computer/camera_advanced/proc/CreateEye() eyeobj = new() @@ -115,12 +115,11 @@ else sprint = initial -/datum/action/camera_off +/datum/action/innate/camera_off name = "End Camera View" - action_type = AB_INNATE button_icon_state = "camera_off" -/datum/action/camera_off/Activate() +/datum/action/innate/camera_off/Activate() if(!target || !iscarbon(target)) return var/mob/living/carbon/C = target @@ -139,12 +138,11 @@ C.unset_machine() src.Remove(C) -/datum/action/camera_jump +/datum/action/innate/camera_jump name = "Jump To Camera" - action_type = AB_INNATE button_icon_state = "camera_jump" -/datum/action/camera_jump/Activate() +/datum/action/innate/camera_jump/Activate() if(!target || !iscarbon(target)) return var/mob/living/carbon/C = target @@ -153,16 +151,16 @@ var/list/L = list() - for (var/obj/machinery/camera/cam in cameranet.cameras) + for(var/obj/machinery/camera/cam in cameranet.cameras) L.Add(cam) camera_sort(L) var/list/T = list() - for (var/obj/machinery/camera/netcam in L) + for(var/obj/machinery/camera/netcam in L) var/list/tempnetwork = netcam.network&origin.networks - if (tempnetwork.len) + if(tempnetwork.len) T[text("[][]", netcam.c_tag, (netcam.can_use() ? null : " (Deactivated)"))] = netcam diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 7af28cc4f73..bb31fba787d 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 ) @@ -212,7 +214,7 @@ var/time_last_changed_position = 0 if(modify) data["current_skin"] = modify.icon_state - if (modify && is_centcom()) + if(modify && is_centcom()) var/list/all_centcom_access = list() for(var/access in get_all_centcom_access()) all_centcom_access.Add(list(list( @@ -223,12 +225,12 @@ var/time_last_changed_position = 0 data["all_centcom_access"] = all_centcom_access data["all_centcom_skins"] = format_card_skins(get_centcom_card_skins()) - else if (modify) + else if(modify) var/list/regions = list() for(var/i = 1; i <= 7; i++) var/list/accesses = list() for(var/access in get_region_accesses(i)) - if (get_access_desc(access)) + if(get_access_desc(access)) accesses.Add(list(list( "desc" = replacetext(get_access_desc(access), " ", " "), "ref" = access, @@ -241,7 +243,7 @@ var/time_last_changed_position = 0 data["regions"] = regions ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "identification_computer.tmpl", src.name, 775, 700) ui.set_initial_data(data) ui.open() @@ -251,8 +253,8 @@ var/time_last_changed_position = 0 return 1 switch(href_list["choice"]) - if ("modify") - if (modify) + if("modify") + if(modify) data_core.manifest_modify(modify.registered_name, modify.assignment) modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])") if(ishuman(usr)) @@ -265,13 +267,13 @@ var/time_last_changed_position = 0 modify = null else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) usr.drop_item() I.loc = src modify = I - if ("scan") - if (scan) + if("scan") + if(scan) if(ishuman(usr)) scan.loc = usr.loc if(!usr.get_active_hand()) @@ -282,7 +284,7 @@ var/time_last_changed_position = 0 scan = null else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) usr.drop_item() I.loc = src scan = I @@ -302,8 +304,8 @@ var/time_last_changed_position = 0 if(is_authenticated(usr) && modify && ((skin in get_station_card_skins()) || ((skin in get_centcom_card_skins()) && is_centcom()))) modify.icon_state = href_list["skin_target"] - if ("assign") - if (is_authenticated(usr) && modify) + if("assign") + if(is_authenticated(usr) && modify) var/t1 = href_list["assign_target"] if(t1 == "Custom") var/temp_t = sanitize(copytext(input("Enter a custom job assignment.","Assignment"),1,MAX_MESSAGE_LEN)) @@ -333,10 +335,10 @@ var/time_last_changed_position = 0 callHook("reassign_employee", list(modify)) - if ("reg") - if (is_authenticated(usr)) + if("reg") + if(is_authenticated(usr)) var/t2 = modify - if ((modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf))) + if((modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf))) var/temp_name = reject_bad_name(href_list["reg"]) if(temp_name) modify.registered_name = temp_name @@ -344,19 +346,19 @@ var/time_last_changed_position = 0 src.visible_message("[src] buzzes rudely.") nanomanager.update_uis(src) - if ("account") - if (is_authenticated(usr)) + if("account") + if(is_authenticated(usr)) var/t2 = modify - if ((modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf))) + if((modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf))) var/account_num = text2num(href_list["account"]) modify.associated_account_number = account_num nanomanager.update_uis(src) - if ("mode") + if("mode") mode = text2num(href_list["mode_target"]) - if ("print") - if (!printing) + if("print") + if(!printing) printing = 1 playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) spawn(50) @@ -364,13 +366,13 @@ var/time_last_changed_position = 0 nanomanager.update_uis(src) var/obj/item/weapon/paper/P = new(loc) - if (mode == 2) + if(mode == 2) P.name = text("crew manifest ([])", worldtime2text()) P.info = {"

    Crew Manifest


    [data_core ? data_core.get_manifest(0) : ""] "} - else if (modify && !mode) + else if(modify && !mode) P.name = "access report" P.info = {"

    Access Report

    Prepared By: [scan && scan.registered_name ? scan.registered_name : "Unknown"]
    @@ -388,8 +390,8 @@ var/time_last_changed_position = 0 first = 0 P.info += "" - if ("terminate") - if (is_authenticated(usr)) + if("terminate") + if(is_authenticated(usr)) modify.assignment = "Terminated" modify.access = list() @@ -426,7 +428,7 @@ var/time_last_changed_position = 0 opened_positions[edit_job_target]-- nanomanager.update_uis(src) - if (modify) + if(modify) modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])") return 1 diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 0818dccbe35..6f4a373580c 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -37,7 +37,7 @@ if(scanner.occupant && can_autoprocess()) scan_mob(scanner.occupant) - for (var/obj/machinery/clonepod/pod in pods) + for(var/obj/machinery/clonepod/pod in pods) if(!(pod.occupant || pod.mess) && (pod.efficiency > 5)) for(var/datum/dna2/record/R in src.records) if(!(pod.occupant || pod.mess)) @@ -48,7 +48,7 @@ src.scanner = findscanner() releasecloner() findcloner() - if(!selected_pod) + if(!selected_pod && pods.len) selected_pod = pods[1] /obj/machinery/computer/cloning/proc/findscanner() @@ -57,7 +57,7 @@ //Try to find scanner on adjacent tiles first for(dir in list(NORTH,EAST,SOUTH,WEST)) scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, dir)) - if (scannerf) + if(scannerf) return scannerf //Then look for a free one in the area @@ -82,8 +82,8 @@ P.name = "[initial(P.name)] #[num++]" /obj/machinery/computer/cloning/attackby(obj/item/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES - if (!src.diskette) + if(istype(W, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES + if(!src.diskette) user.drop_item() W.loc = src src.diskette = W @@ -129,7 +129,7 @@ data["numberofpods"] = src.pods.len var/list/tempods[0] - for (var/obj/machinery/clonepod/pod in pods) + for(var/obj/machinery/clonepod/pod in pods) if(pod.efficiency > 5) canpodautoprocess = 1 @@ -159,13 +159,13 @@ data["records"] = temprecords if(src.menu == 3) - if (src.active_record) + if(src.active_record) data["activerecord"] = "\ref[src.active_record]" var/obj/item/weapon/implant/health/H = null if(src.active_record.implant) H = locate(src.active_record.implant) - if ((H) && (istype(H))) + if((H) && (istype(H))) data["health"] = H.sensehealth() data["realname"] = sanitize(src.active_record.dna.real_name) data["unidentity"] = src.active_record.dna.uni_identity @@ -177,7 +177,7 @@ // Set up the Nano UI ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "cloning_console.tmpl", "Cloning Console UI", 640, 520) ui.set_initial_data(data) ui.open() @@ -189,7 +189,7 @@ if(loading) return - if (href_list["scan"] && scanner && scanner.occupant) + if(href_list["scan"] && scanner && scanner.occupant) scantemp = "Scanner ready." loading = 1 @@ -213,16 +213,16 @@ nanomanager.update_uis(src) //No locking an open scanner. - else if ((href_list["lock"]) && (!isnull(src.scanner))) - if ((!src.scanner.locked) && (src.scanner.occupant)) + else if((href_list["lock"]) && (!isnull(src.scanner))) + if((!src.scanner.locked) && (src.scanner.occupant)) src.scanner.locked = 1 else src.scanner.locked = 0 - else if (href_list["view_rec"]) + else if(href_list["view_rec"]) src.active_record = locate(href_list["view_rec"]) if(istype(src.active_record,/datum/dna2/record)) - if ((isnull(src.active_record.ckey))) + if((isnull(src.active_record.ckey))) qdel(src.active_record) src.temp = "Error: Record corrupt." else @@ -231,16 +231,16 @@ src.active_record = null src.temp = "Error: Record missing." - else if (href_list["del_rec"]) - if ((!src.active_record) || (src.menu < 3)) + else if(href_list["del_rec"]) + if((!src.active_record) || (src.menu < 3)) return - if (src.menu == 3) //If we are viewing a record, confirm deletion + if(src.menu == 3) //If we are viewing a record, confirm deletion src.temp = "Please confirm that you want to delete the record?" src.menu = 4 - else if (src.menu == 4) + else if(src.menu == 4) var/obj/item/weapon/card/id/C = usr.get_active_hand() - if (istype(C)||istype(C, /obj/item/device/pda)) + if(istype(C)||istype(C, /obj/item/device/pda)) if(src.check_access(C)) src.records.Remove(src.active_record) qdel(src.active_record) @@ -249,14 +249,14 @@ else src.temp = "Error: Access denied." - else if (href_list["disk"]) //Load or eject. + else if(href_list["disk"]) //Load or eject. switch(href_list["disk"]) if("load") - if ((isnull(src.diskette)) || isnull(src.diskette.buf)) + if((isnull(src.diskette)) || isnull(src.diskette.buf)) src.temp = "Error: The disk's data could not be read." nanomanager.update_uis(src) return - if (isnull(src.active_record)) + if(isnull(src.active_record)) src.temp = "Error: No active record was found." src.menu = 1 nanomanager.update_uis(src) @@ -267,12 +267,12 @@ src.temp = "Load successful." if("eject") - if (!isnull(src.diskette)) + if(!isnull(src.diskette)) src.diskette.loc = src.loc src.diskette = null - else if (href_list["save_disk"]) //Save to disk! - if ((isnull(src.diskette)) || (src.diskette.read_only) || (isnull(src.active_record))) + else if(href_list["save_disk"]) //Save to disk! + if((isnull(src.diskette)) || (src.diskette.read_only) || (isnull(src.active_record))) src.temp = "Error: The data could not be saved." nanomanager.update_uis(src) return @@ -290,15 +290,15 @@ src.diskette.name = "data disk - '[src.active_record.dna.real_name]'" src.temp = "Save \[[href_list["save_disk"]]\] successful." - else if (href_list["refresh"]) + else if(href_list["refresh"]) nanomanager.update_uis(src) - else if (href_list["selectpod"]) + else if(href_list["selectpod"]) var/obj/machinery/clonepod/selected = locate(href_list["selectpod"]) if(istype(selected) && (selected in pods)) selected_pod = selected - else if (href_list["clone"]) + else if(href_list["clone"]) var/datum/dna2/record/C = locate(href_list["clone"]) //Look for that player! They better be dead! if(istype(C)) @@ -307,7 +307,7 @@ temp = "Error: No cloning pod detected." else var/obj/machinery/clonepod/pod = selected_pod - if (!selected_pod) + if(!selected_pod) temp = "Error: No cloning pod selected." else if(pod.occupant) temp = "Error: The cloning pod is currently occupied." @@ -340,11 +340,11 @@ else temp = "Error: Data corruption." - else if (href_list["menu"]) + else if(href_list["menu"]) src.menu = text2num(href_list["menu"]) temp = "" scantemp = "Scanner ready." - else if (href_list["toggle_mode"]) + else if(href_list["toggle_mode"]) if(can_brainscan()) scan_mode = !scan_mode else @@ -355,13 +355,13 @@ return /obj/machinery/computer/cloning/proc/scan_mob(mob/living/carbon/human/subject as mob, var/scan_brain = 0) - if (stat & NOPOWER) + if(stat & NOPOWER) return - if (scanner.stat & (NOPOWER|BROKEN)) + if(scanner.stat & (NOPOWER|BROKEN)) return - if (scan_brain && !can_brainscan()) + if(scan_brain && !can_brainscan()) return - if ((isnull(subject)) || (!(ishuman(subject))) || (!subject.dna) || (subject.species.flags & NO_SCAN)) + if((isnull(subject)) || (!(ishuman(subject))) || (!subject.dna) || (subject.species.flags & NO_SCAN)) scantemp = "Error: Unable to locate valid genetic data." nanomanager.update_uis(src) return @@ -377,23 +377,23 @@ scantemp = "Error: No signs of intelligence detected." nanomanager.update_uis(src) return - if (subject.suiciding == 1 && src.scanner.scan_level < 2) + if(subject.suiciding == 1 && src.scanner.scan_level < 2) scantemp = "Error: Subject's brain is not responding to scanning stimuli." nanomanager.update_uis(src) return - if ((!subject.ckey) || (!subject.client)) + if((!subject.ckey) || (!subject.client)) scantemp = "Error: Mental interface failure." nanomanager.update_uis(src) return - if ((NOCLONE in subject.mutations) && src.scanner.scan_level < 2) + if((NOCLONE in subject.mutations) && src.scanner.scan_level < 2) scantemp = "Error: Mental interface failure." nanomanager.update_uis(src) return - if (scan_brain && !subject.get_int_organ(/obj/item/organ/internal/brain)) + if(scan_brain && !subject.get_int_organ(/obj/item/organ/internal/brain)) scantemp = "Error: No brain found." nanomanager.update_uis(src) return - if (!isnull(find_record(subject.ckey))) + if(!isnull(find_record(subject.ckey))) scantemp = "Subject already in database." nanomanager.update_uis(src) return @@ -422,7 +422,7 @@ R.languages=subject.languages //Add an implant if needed var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject) - if (isnull(imp)) + if(isnull(imp)) imp = new /obj/item/weapon/implant/health(subject) imp.implanted = subject R.implant = "\ref[imp]" @@ -430,7 +430,7 @@ else R.implant = "\ref[imp]" - if (!isnull(subject.mind)) //Save that mind so traitors can continue traitoring after cloning. + if(!isnull(subject.mind)) //Save that mind so traitors can continue traitoring after cloning. R.mind = "\ref[subject.mind]" src.records += R @@ -441,7 +441,7 @@ /obj/machinery/computer/cloning/proc/find_record(var/find_key) var/selected_record = null for(var/datum/dna2/record/R in src.records) - if (R.ckey == find_key) + if(R.ckey == find_key) selected_record = R break return selected_record @@ -450,4 +450,4 @@ return (scanner && scanner.scan_level > 2) /obj/machinery/computer/cloning/proc/can_brainscan() - return (scanner && scanner.scan_level > 3) \ No newline at end of file + return (scanner && scanner.scan_level > 3) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 73779c170e0..e87802f728c 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -54,7 +54,7 @@ if(..(href, href_list)) return 1 - if ((!(src.z in config.station_levels) && !(src.z in config.admin_levels))) + if((!(src.z in config.station_levels) && !(src.z in config.admin_levels))) to_chat(usr, "Unable to establish a connection: You're too far away from the station!") return 1 @@ -65,10 +65,10 @@ var/mob/living/carbon/human/M = usr var/obj/item/card = M.get_active_hand() var/obj/item/weapon/card/id/I = (card && card.GetID())||M.wear_id||M.wear_pda - if (istype(I, /obj/item/device/pda)) + if(istype(I, /obj/item/device/pda)) var/obj/item/device/pda/pda = I I = pda.id - if (I && istype(I)) + if(I && istype(I)) if(src.check_access(I)) authenticated = 1 if(access_captain in I.access) @@ -103,10 +103,10 @@ var/mob/living/carbon/human/L = usr var/obj/item/card = L.get_active_hand() var/obj/item/weapon/card/id/I = (card && card.GetID())||L.wear_id||L.wear_pda - if (istype(I, /obj/item/device/pda)) + if(istype(I, /obj/item/device/pda)) var/obj/item/device/pda/pda = I I = pda.id - if (I && istype(I)) + if(I && istype(I)) if(access_captain in I.access) var/old_level = security_level if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN @@ -303,7 +303,7 @@ if(stat & (NOPOWER|BROKEN)) return - if (!(src.z in list(ZLEVEL_STATION, ZLEVEL_CENTCOMM))) + if(!(src.z in list(ZLEVEL_STATION, ZLEVEL_CENTCOMM))) to_chat(user, "Unable to establish a connection: You're too far away from the station!") return @@ -376,7 +376,7 @@ // update the ui if it exists, returns null if no ui is passed/found ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - if (!ui) + if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "comm_console.tmpl", "Communications Console", 400, 500) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 8524cd85754..1cb4ba64b02 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -21,6 +21,7 @@ ..() /obj/machinery/computer/initialize() + ..() power_change() update_icon() @@ -40,15 +41,15 @@ qdel(src) return if(2.0) - if (prob(25)) + if(prob(25)) qdel(src) return - if (prob(50)) + if(prob(50)) for(var/x in verbs) verbs -= x set_broken() if(3.0) - if (prob(25)) + if(prob(25)) for(var/x in verbs) verbs -= x set_broken() @@ -62,7 +63,7 @@ ..() /obj/machinery/computer/blob_act() - if (prob(75)) + if(prob(75)) for(var/x in verbs) verbs -= x set_broken() @@ -117,9 +118,9 @@ var/obj/item/weapon/circuitboard/M = new circuit( A ) A.circuit = M A.anchored = 1 - for (var/obj/C in src) + for(var/obj/C in src) C.loc = src.loc - if (src.stat & BROKEN) + if(src.stat & BROKEN) to_chat(user, "\blue The broken glass falls out.") new /obj/item/weapon/shard(loc) A.state = 3 diff --git a/code/game/machinery/computer/hologram.dm b/code/game/machinery/computer/hologram.dm index 2b5f0b92296..48dfaf36bf6 100644 --- a/code/game/machinery/computer/hologram.dm +++ b/code/game/machinery/computer/hologram.dm @@ -22,7 +22,7 @@ return /obj/machinery/computer/hologram_comp/attack_hand() - if (!in_range(src, usr)) + if(!in_range(src, usr)) return 0 src.show_console(usr) return @@ -30,7 +30,7 @@ /obj/machinery/computer/hologram_comp/proc/render() var/icon/I = new /icon('icons/mob/human.dmi', "body_m_s") - if (src.lumens >= 0) + if(src.lumens >= 0) I.Blend(rgb(src.lumens, src.lumens, src.lumens), ICON_ADD) else I.Blend(rgb(- src.lumens, -src.lumens, -src.lumens), ICON_SUBTRACT) @@ -48,7 +48,7 @@ /obj/machinery/computer/hologram_comp/proc/show_console(var/mob/user as mob) var/dat user.set_machine(src) - if (src.temp) + if(src.temp) dat = text("[]

    Clear", src.temp, src) else dat = text("Hologram Status:
    \nPower: []
    \nHologram Control:
    \nColor Luminosity: []/220 \[Reset\]
    \nLighten: 1 10
    \nDarken: 1 10
    \n
    \nHair Color: ([],[],[]) \[Reset\]
    \nRed (0-255): \[0\] -10 -1 [] 1 10 \[255\]
    \nGreen (0-255): \[0\] -10 -1 [] 1 10 \[255\]
    \nBlue (0-255): \[0\] -10 -1 [] 1 10 \[255\]
    ", src, (src.projector.hologram ? "On" : "Off"), -src.lumens + 35, src, src, src, src, src, src.h_r, src.h_g, src.h_b, src, src, src, src, src.h_r, src, src, src, src, src, src, src.h_g, src, src, src, src, src, src, src.h_b, src, src, src) @@ -59,10 +59,10 @@ /obj/machinery/computer/hologram_comp/Topic(href, href_list) if(..()) return 1 - if (in_range(src, usr)) + if(in_range(src, usr)) flick("holo_console1", src) - if (href_list["power"]) - if (src.projector.hologram) + if(href_list["power"]) + if(src.projector.hologram) src.projector.icon_state = "hologram0" //src.projector.hologram = null qdel(src.projector.hologram) @@ -73,38 +73,38 @@ src.projector.icon_state = "hologram1" src.render() else - if (href_list["h_r"]) - if (src.projector.hologram) + if(href_list["h_r"]) + if(src.projector.hologram) src.h_r += text2num(href_list["h_r"]) src.h_r = min(max(src.h_r, 0), 255) render() else - if (href_list["h_g"]) - if (src.projector.hologram) + if(href_list["h_g"]) + if(src.projector.hologram) src.h_g += text2num(href_list["h_g"]) src.h_g = min(max(src.h_g, 0), 255) render() else - if (href_list["h_b"]) - if (src.projector.hologram) + if(href_list["h_b"]) + if(src.projector.hologram) src.h_b += text2num(href_list["h_b"]) src.h_b = min(max(src.h_b, 0), 255) render() else - if (href_list["light"]) - if (src.projector.hologram) + if(href_list["light"]) + if(src.projector.hologram) src.lumens += text2num(href_list["light"]) src.lumens = min(max(src.lumens, -185.0), 35) render() else - if (href_list["reset"]) - if (src.projector.hologram) + if(href_list["reset"]) + if(src.projector.hologram) src.lumens = 0 render() else - if (href_list["temp"]) + if(href_list["temp"]) src.temp = null for(var/mob/M in viewers(1, src)) - if ((M.client && M.machine == src)) + if((M.client && M.machine == src)) src.show_console(M) return diff --git a/code/game/machinery/computer/honkputer.dm b/code/game/machinery/computer/honkputer.dm index 8ccd36fc780..2f26663395e 100644 --- a/code/game/machinery/computer/honkputer.dm +++ b/code/game/machinery/computer/honkputer.dm @@ -20,8 +20,8 @@ /obj/machinery/computer/HONKputer/Topic(href, href_list) if(..()) return 1 - if (!(src.z in config.station_levels)) - to_chat(usr, "\red Unable to establish a connection: \black You're too far away from the station!") + if(!(src.z in config.station_levels)) + to_chat(usr, "Unable to establish a connection: You're too far away from the station!") return usr.set_machine(src) @@ -34,10 +34,10 @@ if("login") var/mob/M = usr var/obj/item/weapon/card/id/I = M.get_active_hand() - if (istype(I, /obj/item/device/pda)) + if(istype(I, /obj/item/device/pda)) var/obj/item/device/pda/pda = I I = pda.id - if (I && istype(I)) + if(I && istype(I)) if(src.check_access(I) || src.emagged==1) authenticated = 1 if("logout") @@ -68,20 +68,20 @@ /obj/machinery/computer/HONKputer/attack_hand(var/mob/user as mob) if(..()) return - if (src.z > 6) - to_chat(user, "\red Unable to establish a connection: \black You're too far away from the station!") + if(src.z > 6) + to_chat(user, "Unable to establish a connection: You're too far away from the station!") return user.set_machine(src) var/dat = "HONKputer Interface" - if (istype(user, /mob/living/silicon)) + if(istype(user, /mob/living/silicon)) to_chat(user, "This console is not networked to the rest of the grid.") return switch(src.state) if(STATE_DEFAULT) - if (src.authenticated) + if(src.authenticated) dat += "
    \[ Log Out \]" dat += "
    \[ Send an emergency message to Honkplanet \]" else @@ -101,9 +101,9 @@ var/obj/item/weapon/circuitboard/M = new circuit( A ) A.circuit = M A.anchored = 1 - for (var/obj/C in src) + for(var/obj/C in src) C.loc = src.loc - if (src.stat & BROKEN) + if(src.stat & BROKEN) to_chat(user, "\blue The broken glass falls out.") new /obj/item/weapon/shard( src.loc ) A.state = 3 diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index c84690cfa64..d50edbfd0cb 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -29,8 +29,8 @@ attackby(obj/item/weapon/O as obj, mob/user as mob, params) - if (user.z > 6) - to_chat(user, "\red Unable to establish a connection: \black You're too far away from the station!") + if(user.z > 6) + to_chat(user, "Unable to establish a connection: You're too far away from the station!") return if(istype(O, /obj/item/weapon/aiModule)) var/datum/game_mode/nations/mode = get_nations_mode() @@ -54,7 +54,7 @@ src.current = select_active_ai(user) - if (!src.current) + if(!src.current) to_chat(usr, "No active AIs detected.") else to_chat(usr, "[src.current.name] selected for law changes.") @@ -94,7 +94,7 @@ src.current = freeborg() - if (!src.current) + if(!src.current) to_chat(usr, "No free cyborgs detected.") else to_chat(usr, "[src.current.name] selected for law changes.") diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 6e331d46cf3..780bdd55f8e 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -27,11 +27,11 @@ if(..()) return var/dat - if (src.temp) + if(src.temp) dat = text("[src.temp]

    Clear Screen") else dat = text("Confirm Identity: []
    ", src, (src.scan ? text("[]", src.scan.name) : "----------")) - if (src.authenticated) + if(src.authenticated) switch(src.screen) if(1.0) dat += {" @@ -48,18 +48,14 @@ dat += "Record List:
    " if(!isnull(data_core.general)) for(var/datum/data/record/R in sortRecord(data_core.general)) - dat += text("[]: []
    ", src, R, R.fields["id"], R.fields["name"]) + dat += text("
    []: []
    ", src, R, R.fields["id"], R.fields["name"]) //Foreach goto(132) dat += text("
    Back", src) if(3.0) dat += text("Records Maintenance
    \nBackup To Disk
    \nUpload From disk
    \nDelete All Records
    \n
    \nBack", src, src, src, src) if(4.0) - var/icon/front = new(active1.fields["photo"], dir = SOUTH) - var/icon/side = new(active1.fields["photo"], dir = WEST) - user << browse_rsc(front, "front.png") - user << browse_rsc(side, "side.png") dat += "
    Medical Record

    " - if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + if((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) dat += "
    Name: [active1.fields["name"]] \ ID: [active1.fields["id"]]
    \n \ Sex: [active1.fields["sex"]]
    \n \ @@ -67,10 +63,11 @@ Fingerprint: [active1.fields["fingerprint"]]
    \n \ Physical Status: [active1.fields["p_stat"]]
    \n \ Mental Status: [active1.fields["m_stat"]]
    \ - Photo:
    " + Photo:
    \ + " else dat += "General Record Lost!
    " - if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) + if((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) dat += text("
    \n
    Medical Data

    \nBlood Type: []
    \nDNA: []
    \n
    \nMinor Disabilities: []
    \nDetails: []
    \n
    \nMajor Disabilities: []
    \nDetails: []
    \n
    \nAllergies: []
    \nDetails: []
    \n
    \nCurrent Diseases: [] (per disease info placed in log/comment section)
    \nDetails: []
    \n
    \nImportant Notes:
    \n\t[]
    \n
    \n
    Comments/Log

    ", src, src.active2.fields["b_type"], src, src.active2.fields["b_dna"], src, src.active2.fields["mi_dis"], src, src.active2.fields["mi_dis_d"], src, src.active2.fields["ma_dis"], src, src.active2.fields["ma_dis_d"], src, src.active2.fields["alg"], src, src.active2.fields["alg_d"], src, src.active2.fields["cdi"], src, src.active2.fields["cdi_d"], src, src.active2.fields["notes"]) var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) @@ -115,7 +112,9 @@ else else dat += text("{Log In}", src) - user << browse(text("Medical Records[]", dat), "window=med_rec") + var/datum/browser/popup = new(user, "med_rec", name, 400, 400) + popup.set_content(dat) + popup.open(0) onclose(user, "med_rec") return @@ -123,20 +122,20 @@ if(..()) return 1 - if (!( data_core.general.Find(src.active1) )) + if(!( data_core.general.Find(src.active1) )) src.active1 = null - if (!( data_core.medical.Find(src.active2) )) + if(!( data_core.medical.Find(src.active2) )) src.active2 = null - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) + if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) - if (href_list["temp"]) + if(href_list["temp"]) src.temp = null - if (href_list["scan"]) - if (src.scan) + if(href_list["scan"]) + if(src.scan) if(ishuman(usr)) scan.loc = usr.loc @@ -152,27 +151,27 @@ else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) usr.drop_item() I.loc = src src.scan = I - else if (href_list["logout"]) + else if(href_list["logout"]) src.authenticated = null src.screen = null src.active1 = null src.active2 = null - else if (href_list["login"]) + else if(href_list["login"]) - if (istype(usr, /mob/living/silicon/ai)) + if(istype(usr, /mob/living/silicon/ai)) src.active1 = null src.active2 = null src.authenticated = usr.name src.rank = "AI" src.screen = 1 - else if (istype(usr, /mob/living/silicon/robot)) + else if(istype(usr, /mob/living/silicon/robot)) src.active1 = null src.active2 = null src.authenticated = usr.name @@ -180,16 +179,16 @@ src.rank = "[R.modtype] [R.braintype]" src.screen = 1 - else if (istype(src.scan, /obj/item/weapon/card/id)) + else if(istype(src.scan, /obj/item/weapon/card/id)) src.active1 = null src.active2 = null - if (src.check_access(src.scan)) + if(src.check_access(src.scan)) src.authenticated = src.scan.registered_name src.rank = src.scan.assignment src.screen = 1 - if (src.authenticated) + if(src.authenticated) if(href_list["screen"]) src.screen = text2num(href_list["screen"]) @@ -215,125 +214,125 @@

    Severity: [Dis.severity]"} - if (href_list["del_all"]) + if(href_list["del_all"]) src.temp = text("Are you sure you wish to delete all records?
    \n\tYes
    \n\tNo
    ", src, src) - if (href_list["del_all2"]) + if(href_list["del_all2"]) for(var/datum/data/record/R in data_core.medical) //R = null qdel(R) //Foreach goto(494) src.temp = "All records deleted." - if (href_list["field"]) + if(href_list["field"]) var/a1 = src.active1 var/a2 = src.active2 switch(href_list["field"]) if("fingerprint") - if (istype(src.active1, /datum/data/record)) + if(istype(src.active1, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please input fingerprint hash:", "Med. records", src.active1.fields["fingerprint"], null) as text)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) return src.active1.fields["fingerprint"] = t1 if("sex") - if (istype(src.active1, /datum/data/record)) - if (src.active1.fields["sex"] == "Male") + if(istype(src.active1, /datum/data/record)) + if(src.active1.fields["sex"] == "Male") src.active1.fields["sex"] = "Female" else src.active1.fields["sex"] = "Male" if("age") - if (istype(src.active1, /datum/data/record)) + if(istype(src.active1, /datum/data/record)) var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as num - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) return src.active1.fields["age"] = t1 if("mi_dis") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null) as text)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["mi_dis"] = t1 if("mi_dis_d") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null) as message)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["mi_dis_d"] = t1 if("ma_dis") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null) as text)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["ma_dis"] = t1 if("ma_dis_d") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null) as message)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["ma_dis_d"] = t1 if("alg") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please state allergies:", "Med. records", src.active2.fields["alg"], null) as text)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["alg"] = t1 if("alg_d") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null) as message)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["alg_d"] = t1 if("cdi") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null) as text)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["cdi"] = t1 if("cdi_d") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null) as message)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["cdi_d"] = t1 if("notes") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = copytext(html_encode(trim(input("Please summarize notes:", "Med. records", html_decode(src.active2.fields["notes"]), null) as message)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["notes"] = t1 if("p_stat") - if (istype(src.active1, /datum/data/record)) + if(istype(src.active1, /datum/data/record)) src.temp = text("Physical Condition:
    \n\t*Deceased*
    \n\t*SSD*
    \n\tActive
    \n\tPhysically Unfit
    \n\tDisabled
    ", src, src, src, src, src) if("m_stat") - if (istype(src.active1, /datum/data/record)) + if(istype(src.active1, /datum/data/record)) src.temp = text("Mental Condition:
    \n\t*Insane*
    \n\t*Unstable*
    \n\t*Watch*
    \n\tStable
    ", src, src, src, src) if("b_type") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) src.temp = text("Blood Type:
    \n\tA- A+
    \n\tB- B+
    \n\tAB- AB+
    \n\tO- O+
    ", src, src, src, src, src, src, src, src) if("b_dna") - if (istype(src.active1, /datum/data/record)) + if(istype(src.active1, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please input DNA hash:", "Med. records", src.active1.fields["dna"], null) as text)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) return src.active1.fields["dna"] = t1 if("vir_name") var/datum/data/record/v = locate(href_list["edit_vir"]) - if (v) + if(v) var/t1 = copytext(trim(sanitize(input("Please input pathogen name:", "VirusDB", v.fields["name"], null) as text)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) return v.fields["name"] = t1 if("vir_desc") var/datum/data/record/v = locate(href_list["edit_vir"]) - if (v) + if(v) var/t1 = copytext(trim(sanitize(input("Please input information about pathogen:", "VirusDB", v.fields["description"], null) as message)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) return v.fields["description"] = t1 else - if (href_list["p_stat"]) - if (src.active1) + if(href_list["p_stat"]) + if(src.active1) switch(href_list["p_stat"]) if("deceased") src.active1.fields["p_stat"] = "*Deceased*" @@ -346,8 +345,8 @@ if("disabled") src.active1.fields["p_stat"] = "Disabled" - if (href_list["m_stat"]) - if (src.active1) + if(href_list["m_stat"]) + if(src.active1) switch(href_list["m_stat"]) if("insane") src.active1.fields["m_stat"] = "*Insane*" @@ -359,8 +358,8 @@ src.active1.fields["m_stat"] = "Stable" - if (href_list["b_type"]) - if (src.active2) + if(href_list["b_type"]) + if(src.active2) switch(href_list["b_type"]) if("an") src.active2.fields["b_type"] = "A-" @@ -380,23 +379,23 @@ src.active2.fields["b_type"] = "O+" - if (href_list["del_r"]) - if (src.active2) + if(href_list["del_r"]) + if(src.active2) src.temp = text("Are you sure you wish to delete the record (Medical Portion Only)?
    \n\tYes
    \n\tNo
    ", src, src) - if (href_list["del_r2"]) - if (src.active2) + if(href_list["del_r2"]) + if(src.active2) //src.active2 = null qdel(src.active2) - if (href_list["d_rec"]) + if(href_list["d_rec"]) var/datum/data/record/R = locate(href_list["d_rec"]) var/datum/data/record/M = locate(href_list["d_rec"]) - if (!( data_core.general.Find(R) )) + if(!( data_core.general.Find(R) )) src.temp = "Record Not Found!" return for(var/datum/data/record/E in data_core.medical) - if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) M = E else //Foreach continue //goto(2540) @@ -404,8 +403,8 @@ src.active2 = M src.screen = 4 - if (href_list["new"]) - if ((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) ))) + if(href_list["new"]) + if((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) ))) var/datum/data/record/R = new /datum/data/record( ) R.fields["name"] = src.active1.fields["name"] R.fields["id"] = src.active1.fields["id"] @@ -425,56 +424,56 @@ src.active2 = R src.screen = 4 - if (href_list["add_c"]) - if (!( istype(src.active2, /datum/data/record) )) + if(href_list["add_c"]) + if(!( istype(src.active2, /datum/data/record) )) return var/a2 = src.active2 var/t1 = copytext(trim(sanitize(input("Add Comment:", "Med. records", null, null) as message)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) counter++ src.active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")]
    [t1]") - if (href_list["del_c"]) - if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) + if(href_list["del_c"]) + if((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" - if (href_list["search"]) + if(href_list["search"]) var/t1 = input("Search String: (Name, DNA, or ID)", "Med. records", null, null) as text - if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || ((!in_range(src, usr)) && (!istype(usr, /mob/living/silicon))))) + if((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || ((!in_range(src, usr)) && (!istype(usr, /mob/living/silicon))))) return src.active1 = null src.active2 = null t1 = lowertext(t1) for(var/datum/data/record/R in data_core.medical) - if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"]))) + if((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"]))) src.active2 = R else //Foreach continue //goto(3229) - if (!( src.active2 )) + if(!( src.active2 )) src.temp = text("Could not locate record [].", t1) else for(var/datum/data/record/E in data_core.general) - if ((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"])) + if((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"])) src.active1 = E else //Foreach continue //goto(3334) src.screen = 4 - if (href_list["print_p"]) - if (!( src.printing )) + if(href_list["print_p"]) + if(!( src.printing )) src.printing = 1 playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) sleep(50) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) P.info = "
    Medical Record

    " - if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + if((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) P.info += text("Name: [] ID: []
    \nSex: []
    \nAge: []
    \nFingerprint: []
    \nPhysical Status: []
    \nMental Status: []
    ", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"], src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"]) else P.info += "General Record Lost!
    " - if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) + if((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) P.info += text("
    \n
    Medical Data

    \nBlood Type: []
    \nDNA: []
    \n
    \nMinor Disabilities: []
    \nDetails: []
    \n
    \nMajor Disabilities: []
    \nDetails: []
    \n
    \nAllergies: []
    \nDetails: []
    \n
    \nCurrent Diseases: [] (per disease info placed in log/comment section)
    \nDetails: []
    \n
    \nImportant Notes:
    \n\t[]
    \n
    \n
    Comments/Log

    ", src.active2.fields["b_type"], src.active2.fields["b_dna"], src.active2.fields["mi_dis"], src.active2.fields["mi_dis_d"], src.active2.fields["ma_dis"], src.active2.fields["ma_dis_d"], src.active2.fields["alg"], src.active2.fields["alg_d"], src.active2.fields["cdi"], src.active2.fields["cdi_d"], src.active2.fields["notes"]) var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index a56fe597b13..50dc9c19603 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -317,9 +317,9 @@ /obj/machinery/computer/message_monitor/Topic(href, href_list) if(..(href, href_list)) return 1 - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) + if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) //Authenticate - if (href_list["auth"]) + if(href_list["auth"]) if(auth) auth = 0 screen = 0 @@ -332,10 +332,10 @@ message = incorrectkey //Turn the server on/off. - if (href_list["active"]) + if(href_list["active"]) if(auth) linkedServer.active = !linkedServer.active //Find a server - if (href_list["find"]) + if(href_list["find"]) if(message_servers && message_servers.len > 1) src.linkedServer = input(usr,"Please select a server.", "Select a server.", null) as null|anything in message_servers message = "NOTICE: Server selected." @@ -346,7 +346,7 @@ message = noserver //View the logs - KEY REQUIRED - if (href_list["view"]) + if(href_list["view"]) if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) message = noserver else @@ -354,7 +354,7 @@ src.screen = 1 //Clears the logs - KEY REQUIRED - if (href_list["clear"]) + if(href_list["clear"]) if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) message = noserver else @@ -362,7 +362,7 @@ src.linkedServer.pda_msgs = list() message = "NOTICE: Logs cleared." //Clears the request console logs - KEY REQUIRED - if (href_list["clearr"]) + if(href_list["clearr"]) if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) message = noserver else @@ -370,7 +370,7 @@ src.linkedServer.rc_msgs = list() message = "NOTICE: Logs cleared." //Change the password - KEY REQUIRED - if (href_list["pass"]) + if(href_list["pass"]) if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) message = noserver else @@ -390,7 +390,7 @@ message = incorrectkey //Hack the Console to get the password - if (href_list["hack"]) + if(href_list["hack"]) if((istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) && (usr.mind.special_role && usr.mind.original == usr)) src.hacking = 1 src.screen = 2 @@ -400,7 +400,7 @@ if(src && src.linkedServer && usr) BruteForce(usr) //Delete the log. - if (href_list["delete"]) + if(href_list["delete"]) //Are they on the view logs screen? if(screen == 1) if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) @@ -409,7 +409,7 @@ src.linkedServer.pda_msgs -= locate(href_list["delete"]) message = "NOTICE: Log Deleted!" //Delete the request console log. - if (href_list["deleter"]) + if(href_list["deleter"]) //Are they on the view logs screen? if(screen == 4) if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) @@ -418,14 +418,14 @@ src.linkedServer.rc_msgs -= locate(href_list["deleter"]) message = "NOTICE: Log Deleted!" //Create a custom message - if (href_list["msg"]) + if(href_list["msg"]) if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) message = noserver else if(auth) src.screen = 3 //Fake messaging selection - KEY REQUIRED - if (href_list["select"]) + if(href_list["select"]) if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) message = noserver screen = 0 @@ -484,10 +484,10 @@ return src.attack_hand(usr) var/obj/item/device/pda/PDARec = null - for (var/obj/item/device/pda/P in PDAs) + for(var/obj/item/device/pda/P in PDAs) var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) - if (!PM || !PM.can_receive()) + if(!PM || !PM.can_receive()) continue if(P.owner == customsender) PDARec = P @@ -520,15 +520,15 @@ // to_chat(usr, href_list["select"]) - if (href_list["back"]) + if(href_list["back"]) src.screen = 0 // View chat room list - if (href_list["chatroom"]) + if(href_list["chatroom"]) if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) message = noserver else if(auth) screen = 5 - if (href_list["viewroom"]) + if(href_list["viewroom"]) if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) message = noserver else if(auth) diff --git a/code/game/machinery/computer/pod_tracking_console.dm b/code/game/machinery/computer/pod_tracking_console.dm index 6817d265a0f..cf16c34e04d 100644 --- a/code/game/machinery/computer/pod_tracking_console.dm +++ b/code/game/machinery/computer/pod_tracking_console.dm @@ -36,7 +36,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "pod_tracking.tmpl", "Pod Tracking Console", 400, 500) ui.set_initial_data(data) ui.open() diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 7ae15a086f2..ebc0db47c32 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -38,13 +38,12 @@ dat += text("Space Law recommends sentences of 100 points per minute they would normally serve in the brig.
    ") else dat += text("Insert Prisoner ID
    ") - dat += "
    Chemical Implants
    " var/turf/Tr = null + dat += "
    Chemical Implants
    " for(var/obj/item/weapon/implant/chem/C in tracked_implants) Tr = get_turf(C) if((Tr) && (Tr.z != src.z)) continue//Out of range if(!C.implanted) continue - // AUTOFIXED BY fix_string_idiocy.py // C:\Users\Rob\Documents\Projects\vgstation13\code\game\machinery\computer\prisoner.dm:41: dat += "[C.imp_in.name] | Remaining Units: [C.reagents.total_volume] | Inject: " dat += {"[C.imp_in.name] | Remaining Units: [C.reagents.total_volume] | Inject: @@ -58,12 +57,17 @@ Tr = get_turf(T) if((Tr) && (Tr.z != src.z)) continue//Out of range if(!T.implanted) continue - var/loc_display = "Unknown" var/mob/living/carbon/M = T.imp_in + var/loc_display = "Unknown" + var/health_display = "OK" + var/total_loss = (M.maxHealth - M.health) + if(M.stat == DEAD) + health_display = "DEAD" + else if(total_loss) + health_display = "HURT ([total_loss])" if((M.z in config.station_levels) && !istype(M.loc, /turf/space)) - var/turf/mob_loc = get_turf(M) - loc_display = mob_loc.loc - dat += "ID: [T.id] | Location: [loc_display]
    " + loc_display = "[get_area(M)]" + dat += "ID: [T.id]
    Subject: [M]
    Location: [loc_display]
    Health: [health_display]
    " dat += "(Message Holder) |
    " dat += "********************************
    " dat += "
    Lock Console" diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 42875f58019..1f840bb5e08 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -47,7 +47,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "robot_control.tmpl", "Robotic Control Console", 400, 500) ui.set_initial_data(data) ui.open() @@ -94,7 +94,7 @@ target.self_destruct() // Locks or unlocks the cyborg - else if (href_list["lockdown"]) + else if(href_list["lockdown"]) var/mob/living/silicon/robot/target = get_cyborg_by_name(href_list["lockdown"]) if(!target || !istype(target)) return @@ -123,7 +123,7 @@ to_chat(target.connected_ai, "[!target.lockcharge ? "NOTICE - Cyborg lockdown lifted" : "ALERT - Cyborg lockdown detected"]: [target.name]
    ") // Remotely hacks the cyborg. Only antag AIs can do this and only to linked cyborgs. - else if (href_list["hack"]) + else if(href_list["hack"]) var/mob/living/silicon/robot/target = get_cyborg_by_name(href_list["hack"]) if(!target || !istype(target)) return @@ -204,7 +204,7 @@ robot["name"] = R.name if(R.stat) robot["status"] = "Not Responding" - else if (!R.canmove) + else if(!R.canmove) robot["status"] = "Lockdown" else robot["status"] = "Operational" @@ -240,7 +240,7 @@ // Parameters: 1 (name - Cyborg we are trying to find) // Description: Helper proc for finding cyborg by name /obj/machinery/computer/robotics/proc/get_cyborg_by_name(var/name) - if (!name) + if(!name) return for(var/mob/living/silicon/robot/R in mob_list) if(R.name == name) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 2a074a9880b..7ab400823b1 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -41,58 +41,55 @@ /obj/machinery/computer/secure_data/attack_hand(mob/user as mob) if(..()) return - if (src.z > 6) - to_chat(user, "\red Unable to establish a connection: \black You're too far away from the station!") + if(src.z > 6) + to_chat(user, "Unable to establish a connection: You're too far away from the station!") return var/dat + + // search javascript + var/head_content = {" + + +"} + + if(temp) dat = text("[]

    Clear Screen", temp, src) else dat = text("Confirm Identity: []
    ", src, (scan ? text("[]", scan.name) : "----------")) - if (authenticated) + if(authenticated) switch(screen) if(1.0) //body tag start + onload and onkeypress (onkeyup) javascript event calls dat += "" - //search bar javascript - dat += {" - - - - - - - - "} + dat += {"

    "} dat += text("New Record
    ", src) @@ -127,22 +124,22 @@ for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order)) var/crimstat = "" for(var/datum/data/record/E in data_core.security) - if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) + if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) crimstat = E.fields["criminal"] var/background switch(crimstat) if("*Arrest*") - background = "'background-color:#DC143C;'" + background = "'background-color:#890E26'" if("Incarcerated") - background = "'background-color:#CD853F;'" + background = "'background-color:#743B03'" if("Parolled") - background = "'background-color:#CD853F;'" + background = "'background-color:#743B03'" if("Released") - background = "'background-color:#3BB9FF;'" + background = "'background-color:#216489'" if("None") - background = "'background-color:#00FF7F;'" + background = "'background-color:#007f47'" if("") - background = "'background-color:#FFFFFF;'" + background = "''" crimstat = "No Record." dat += "" dat += text("[]", R.fields["name"], R.fields["id"], R.fields["rank"], R.fields["fingerprint"], src, R, R.fields["name"]) @@ -164,11 +161,7 @@ dat += "
    Delete All Records

    Back" if(3.0) dat += "

    Security Record

    " - if ((istype(active1, /datum/data/record) && data_core.general.Find(active1))) - var/icon/front = new(active1.fields["photo"], dir = SOUTH) - var/icon/side = new(active1.fields["photo"], dir = WEST) - user << browse_rsc(front, "front.png") - user << browse_rsc(side, "side.png") + if((istype(active1, /datum/data/record) && data_core.general.Find(active1))) dat += {"
    Name: [active1.fields["name"]]
    @@ -182,13 +175,13 @@
    Photo:
    - -
    + +
    Print Photo
    "} else dat += "General Record Lost!
    " - if ((istype(active2, /datum/data/record) && data_core.security.Find(active2))) + if((istype(active2, /datum/data/record) && data_core.security.Find(active2))) dat += text("
    \n
    Security Data

    \nCriminal Status: []
    \n
    \nMinor Crimes: []
    \nDetails: []
    \n
    \nMajor Crimes: []
    \nDetails: []
    \n
    \nImportant Notes:
    \n\t[]
    \n
    \n
    Comments/Log

    ", src, active2.fields["criminal"], src, active2.fields["mi_crim"], src, active2.fields["mi_crim_d"], src, active2.fields["ma_crim"], src, active2.fields["ma_crim_d"], src, active2.fields["notes"]) var/counter = 1 while(active2.fields[text("com_[]", counter)]) @@ -203,7 +196,10 @@ else else dat += text("{Log In}", src) - user << browse(text("Security Records[]", dat), "window=secure_rec;size=600x400") + var/datum/browser/popup = new(user, "secure_rec", name, 600, 400) + popup.set_content(dat) + popup.add_head_content(head_content) + popup.open(0) onclose(user, "secure_rec") return @@ -213,11 +209,11 @@ What a mess.*/ /obj/machinery/computer/secure_data/Topic(href, href_list) if(..()) return 1 - if (!( data_core.general.Find(active1) )) + if(!( data_core.general.Find(active1) )) active1 = null - if (!( data_core.security.Find(active2) )) + if(!( data_core.security.Find(active2) )) active2 = null - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) + if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) switch(href_list["choice"]) // SORTING! @@ -236,13 +232,13 @@ What a mess.*/ if("Clear Screen") temp = null - if ("Return") + if("Return") screen = 1 active1 = null active2 = null if("Confirm Identity") - if (scan) + if(scan) if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand()) usr.put_in_hands(scan) else @@ -250,7 +246,7 @@ What a mess.*/ scan = null else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) usr.drop_item() I.loc = src scan = I @@ -262,20 +258,20 @@ What a mess.*/ active2 = null if("Log In") - if (istype(usr, /mob/living/silicon/ai)) + if(istype(usr, /mob/living/silicon/ai)) src.active1 = null src.active2 = null src.authenticated = usr.name src.rank = "AI" src.screen = 1 - else if (istype(usr, /mob/living/silicon/robot)) + else if(istype(usr, /mob/living/silicon/robot)) src.active1 = null src.active2 = null src.authenticated = usr.name var/mob/living/silicon/robot/R = usr src.rank = R.braintype src.screen = 1 - else if (istype(scan, /obj/item/weapon/card/id)) + else if(istype(scan, /obj/item/weapon/card/id)) active1 = null active2 = null if(check_access(scan)) @@ -288,49 +284,49 @@ What a mess.*/ active1 = null active2 = null - if ("Browse Record") + if("Browse Record") var/datum/data/record/R = locate(href_list["d_rec"]) var/S = locate(href_list["d_rec"]) - if (!( data_core.general.Find(R) )) + if(!( data_core.general.Find(R) )) temp = "Record Not Found!" else for(var/datum/data/record/E in data_core.security) - if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) S = E active1 = R active2 = S screen = 3 -/* if ("Search Fingerprints") +/* if("Search Fingerprints") var/t1 = input("Search String: (Fingerprint)", "Secure. records", null, null) as text - if ((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!in_range(src, usr)) && (!istype(usr, /mob/living/silicon)))) + if((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!in_range(src, usr)) && (!istype(usr, /mob/living/silicon)))) return active1 = null active2 = null t1 = lowertext(t1) for(var/datum/data/record/R in data_core.general) - if (lowertext(R.fields["fingerprint"]) == t1) + if(lowertext(R.fields["fingerprint"]) == t1) active1 = R - if (!( active1 )) + if(!( active1 )) temp = text("Could not locate record [].", t1) else for(var/datum/data/record/E in data_core.security) - if ((E.fields["name"] == active1.fields["name"] || E.fields["id"] == active1.fields["id"])) + if((E.fields["name"] == active1.fields["name"] || E.fields["id"] == active1.fields["id"])) active2 = E screen = 3 */ - if ("Print Record") - if (!( printing )) + if("Print Record") + if(!( printing )) printing = 1 playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) sleep(50) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc ) P.info = "
    Security Record

    " - if ((istype(active1, /datum/data/record) && data_core.general.Find(active1))) + if((istype(active1, /datum/data/record) && data_core.general.Find(active1))) P.info += text("Name: [] ID: []
    \nSex: []
    \nAge: []
    \nFingerprint: []
    \nPhysical Status: []
    \nMental Status: []
    ", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"], active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"]) else P.info += "General Record Lost!
    " - if ((istype(active2, /datum/data/record) && data_core.security.Find(active2))) + if((istype(active2, /datum/data/record) && data_core.security.Find(active2))) P.info += text("
    \n
    Security Data

    \nCriminal Status: []
    \n
    \nMinor Crimes: []
    \nDetails: []
    \n
    \nMajor Crimes: []
    \nDetails: []
    \n
    \nImportant Notes:
    \n\t[]
    \n
    \n
    Comments/Log

    ", active2.fields["criminal"], active2.fields["mi_crim"], active2.fields["mi_crim_d"], active2.fields["ma_crim"], active2.fields["ma_crim_d"], active2.fields["notes"]) var/counter = 1 while(active2.fields[text("com_[]", counter)]) @@ -342,7 +338,7 @@ What a mess.*/ P.name = "paper - 'Security Record'" printing = null - if ("Print Photo") + if("Print Photo") if(!printing) printing = 1 playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) @@ -352,47 +348,47 @@ What a mess.*/ printing = null //RECORD DELETE - if ("Delete All Records") + if("Delete All Records") temp = "" temp += "Are you sure you wish to delete all Security records?
    " temp += "Yes
    " temp += "No" - if ("Purge All Records") + if("Purge All Records") for(var/datum/data/record/R in data_core.security) qdel(R) temp = "All Security records deleted." - if ("Add Entry") - if (!( istype(active2, /datum/data/record) )) + if("Add Entry") + if(!( istype(active2, /datum/data/record) )) return var/a2 = active2 var/t1 = copytext(trim(sanitize(input("Add Comment:", "Secure. records", null, null) as message)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return var/counter = 1 while(active2.fields[text("com_[]", counter)]) counter++ active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], 2557
    [t1]") - if ("Delete Record (ALL)") - if (active1) + if("Delete Record (ALL)") + if(active1) temp = "
    Are you sure you wish to delete the record (ALL)?
    " temp += "Yes
    " temp += "No" - if ("Delete Record (Security)") - if (active2) + if("Delete Record (Security)") + if(active2) temp = "
    Are you sure you wish to delete the record (Security Portion Only)?
    " temp += "Yes
    " temp += "No" - if ("Delete Entry") - if ((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])])) + if("Delete Entry") + if((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])])) active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" //RECORD CREATE - if ("New Record (Security)") - if ((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) ))) + if("New Record (Security)") + if((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) ))) var/datum/data/record/R = new /datum/data/record() R.fields["name"] = active1.fields["name"] R.fields["id"] = active1.fields["id"] @@ -407,7 +403,7 @@ What a mess.*/ active2 = R screen = 3 - if ("New Record (General)") + if("New Record (General)") var/datum/data/record/G = new /datum/data/record() G.fields["name"] = "New Record" G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) @@ -424,72 +420,72 @@ What a mess.*/ active2 = null //FIELD FUNCTIONS - if ("Edit Field") + if("Edit Field") var/a1 = active1 var/a2 = active2 switch(href_list["field"]) if("name") - if (istype(active1, /datum/data/record)) + if(istype(active1, /datum/data/record)) var/t1 = reject_bad_name(input("Please input name:", "Secure. records", active1.fields["name"], null) as text) - if ((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon)))) || active1 != a1) + if((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon)))) || active1 != a1) return active1.fields["name"] = t1 if("id") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please input id:", "Secure. records", active1.fields["id"], null) as text)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) return active1.fields["id"] = t1 if("fingerprint") - if (istype(active1, /datum/data/record)) + if(istype(active1, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please input fingerprint hash:", "Secure. records", active1.fields["fingerprint"], null) as text)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) return active1.fields["fingerprint"] = t1 if("sex") - if (istype(active1, /datum/data/record)) - if (active1.fields["sex"] == "Male") + if(istype(active1, /datum/data/record)) + if(active1.fields["sex"] == "Male") active1.fields["sex"] = "Female" else active1.fields["sex"] = "Male" if("age") - if (istype(active1, /datum/data/record)) + if(istype(active1, /datum/data/record)) var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) return active1.fields["age"] = t1 if("mi_crim") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please input minor crimes list:", "Secure. records", active2.fields["mi_crim"], null) as text)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["mi_crim"] = t1 if("mi_crim_d") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please summarize minor crimes:", "Secure. records", active2.fields["mi_crim_d"], null) as message)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["mi_crim_d"] = t1 if("ma_crim") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please input major crimes list:", "Secure. records", active2.fields["ma_crim"], null) as text)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["ma_crim"] = t1 if("ma_crim_d") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please summarize major crimes:", "Secure. records", active2.fields["ma_crim_d"], null) as message)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["ma_crim_d"] = t1 if("notes") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) var/t1 = copytext(html_encode(trim(input("Please summarize notes:", "Secure. records", html_decode(active2.fields["notes"]), null) as message)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["notes"] = t1 if("criminal") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) temp = "
    Criminal Status:
    " temp += "
      " temp += "
    • None
    • " @@ -501,7 +497,7 @@ What a mess.*/ if("rank") var/list/L = list( "Head of Personnel", "Captain", "AI" ) //This was so silly before the change. Now it actually works without beating your head against the keyboard. /N - if ((istype(active1, /datum/data/record) && L.Find(rank))) + if((istype(active1, /datum/data/record) && L.Find(rank))) temp = "
      Rank:
      " temp += "
        " for(var/rank in joblist) @@ -510,9 +506,9 @@ What a mess.*/ else alert(usr, "You do not have the required rank to do this!") if("species") - if (istype(active1, /datum/data/record)) + if(istype(active1, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please enter race:", "General records", active1.fields["species"], null) as message)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) return active1.fields["species"] = t1 @@ -520,14 +516,14 @@ What a mess.*/ else//To properly clear as per clear screen. temp=null switch(href_list["choice"]) - if ("Change Rank") - if (active1) + if("Change Rank") + if(active1) active1.fields["rank"] = href_list["rank"] if(href_list["rank"] in joblist) active1.fields["real_rank"] = href_list["real_rank"] - if ("Change Criminal Status") - if (active2) + if("Change Criminal Status") + if(active2) switch(href_list["criminal2"]) if("none") active2.fields["criminal"] = "None" @@ -543,18 +539,18 @@ What a mess.*/ for(var/mob/living/carbon/human/H in mob_list) H.sec_hud_set_security_status() - if ("Delete Record (Security) Execute") - if (active2) + if("Delete Record (Security) Execute") + if(active2) qdel(active2) - if ("Delete Record (ALL) Execute") - if (active1) + if("Delete Record (ALL) Execute") + if(active1) for(var/datum/data/record/R in data_core.medical) - if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) + if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) qdel(R) else qdel(active1) - if (active2) + if(active2) qdel(active2) else temp = "This function does not appear to be working at the moment. Our apologies." diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index d2f44de6011..2f039841cc3 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -40,16 +40,16 @@ /obj/machinery/computer/skills/attack_hand(mob/user as mob) if(..()) return - if (src.z > 6) - to_chat(user, "\red Unable to establish a connection: \black You're too far away from the station!") + if(src.z > 6) + to_chat(user, "Unable to establish a connection: You're too far away from the station!") return var/dat - if (temp) + if(temp) dat = text("[]

        Clear Screen", temp, src) else dat = text("Confirm Identity: []
        ", src, (scan ? text("[]", scan.name) : "----------")) - if (authenticated) + if(authenticated) switch(screen) if(1.0) dat += {" @@ -86,11 +86,7 @@ dat += "
        Delete All Records

        Back" if(3.0) dat += "
        Employment Record

        " - if ((istype(active1, /datum/data/record) && data_core.general.Find(active1))) - var/icon/front = new(active1.fields["photo"], dir = SOUTH) - var/icon/side = new(active1.fields["photo"], dir = WEST) - user << browse_rsc(front, "front.png") - user << browse_rsc(side, "side.png") + if((istype(active1, /datum/data/record) && data_core.general.Find(active1))) dat += text(" \ -
        \ Name: [active1.fields["name"]]
        \ ID: [active1.fields["id"]]
        \n \ @@ -101,8 +97,8 @@ Physical Status: [active1.fields["p_stat"]]
        \n \ Mental Status: [active1.fields["m_stat"]]

        \n \ Employment/skills summary:
        [active1.fields["notes"]]
        Photo:
        \ -
        ") + Photo:
        \ + ") else dat += "General Record Lost!
        " dat += text("\nDelete Record (ALL)

        \nPrint Record
        \nBack
        ", src, src, src) @@ -152,9 +148,9 @@ What a mess.*/ /obj/machinery/computer/skills/Topic(href, href_list) if(..()) return 1 - if (!( data_core.general.Find(active1) )) + if(!( data_core.general.Find(active1) )) active1 = null - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) + if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) switch(href_list["choice"]) // SORTING! @@ -173,12 +169,12 @@ What a mess.*/ if("Clear Screen") temp = null - if ("Return") + if("Return") screen = 1 active1 = null if("Confirm Identity") - if (scan) + if(scan) if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand()) usr.put_in_hands(scan) else @@ -186,7 +182,7 @@ What a mess.*/ scan = null else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) usr.drop_item() I.loc = src scan = I @@ -197,18 +193,18 @@ What a mess.*/ active1 = null if("Log In") - if (istype(usr, /mob/living/silicon/ai)) + if(istype(usr, /mob/living/silicon/ai)) src.active1 = null src.authenticated = usr.name src.rank = "AI" src.screen = 1 - else if (istype(usr, /mob/living/silicon/robot)) + else if(istype(usr, /mob/living/silicon/robot)) src.active1 = null src.authenticated = usr.name var/mob/living/silicon/robot/R = usr src.rank = R.braintype src.screen = 1 - else if (istype(scan, /obj/item/weapon/card/id)) + else if(istype(scan, /obj/item/weapon/card/id)) active1 = null if(check_access(scan)) authenticated = scan.registered_name @@ -217,7 +213,7 @@ What a mess.*/ //RECORD FUNCTIONS if("Search Records") var/t1 = input("Search String: (Partial Name or ID or Fingerprints or Rank)", "Secure. records", null, null) as text - if ((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || !in_range(src, usr))) + if((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || !in_range(src, usr))) return Perp = new/list() t1 = lowertext(t1) @@ -234,7 +230,7 @@ What a mess.*/ for(var/i = 1, i<=Perp.len, i+=2) for(var/datum/data/record/E in data_core.security) var/datum/data/record/R = Perp[i] - if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) + if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) Perp[i+1] = E tempname = t1 screen = 4 @@ -243,23 +239,23 @@ What a mess.*/ screen = 2 active1 = null - if ("Browse Record") + if("Browse Record") var/datum/data/record/R = locate(href_list["d_rec"]) - if (!( data_core.general.Find(R) )) + if(!( data_core.general.Find(R) )) temp = "Record Not Found!" else for(var/datum/data/record/E in data_core.security) active1 = R screen = 3 - if ("Print Record") - if (!( printing )) + if("Print Record") + if(!( printing )) printing = 1 playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) sleep(50) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc ) P.info = "
        Employment Record

        " - if ((istype(active1, /datum/data/record) && data_core.general.Find(active1))) + if((istype(active1, /datum/data/record) && data_core.general.Find(active1))) P.info += text("Name: [] ID: []
        \nSex: []
        \nAge: []
        \nFingerprint: []
        \nPhysical Status: []
        \nMental Status: []
        \nEmployment/Skills Summary:[]
        ", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"], active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"], active1.fields["notes"]) else P.info += "General Record Lost!
        " @@ -267,26 +263,26 @@ What a mess.*/ P.name = "paper - 'Employment Record'" printing = null //RECORD DELETE - if ("Delete All Records") + if("Delete All Records") temp = "" temp += "Are you sure you wish to delete all Employment records?
        " temp += "Yes
        " temp += "No" - if ("Purge All Records") + if("Purge All Records") if(PDA_Manifest.len) PDA_Manifest.Cut() for(var/datum/data/record/R in data_core.security) qdel(R) temp = "All Employment records deleted." - if ("Delete Record (ALL)") - if (active1) + if("Delete Record (ALL)") + if(active1) temp = "
        Are you sure you wish to delete the record (ALL)?
        " temp += "Yes
        " temp += "No" //RECORD CREATE - if ("New Record (General)") + if("New Record (General)") if(PDA_Manifest.len) PDA_Manifest.Cut() @@ -305,43 +301,43 @@ What a mess.*/ active1 = G //FIELD FUNCTIONS - if ("Edit Field") + if("Edit Field") var/a1 = active1 switch(href_list["field"]) if("name") - if (istype(active1, /datum/data/record)) + if(istype(active1, /datum/data/record)) var/t1 = reject_bad_name(input("Please input name:", "Secure. records", active1.fields["name"], null) as text) - if ((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon)))) || active1 != a1) + if((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon)))) || active1 != a1) return active1.fields["name"] = t1 if("id") - if (istype(active1, /datum/data/record)) + if(istype(active1, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please input id:", "Secure. records", active1.fields["id"], null) as text)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) return active1.fields["id"] = t1 if("fingerprint") - if (istype(active1, /datum/data/record)) + if(istype(active1, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please input fingerprint hash:", "Secure. records", active1.fields["fingerprint"], null) as text)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) return active1.fields["fingerprint"] = t1 if("sex") - if (istype(active1, /datum/data/record)) - if (active1.fields["sex"] == "Male") + if(istype(active1, /datum/data/record)) + if(active1.fields["sex"] == "Male") active1.fields["sex"] = "Female" else active1.fields["sex"] = "Male" if("age") - if (istype(active1, /datum/data/record)) + if(istype(active1, /datum/data/record)) var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) return active1.fields["age"] = t1 if("rank") var/list/L = list( "Head of Personnel", "Captain", "AI" ) //This was so silly before the change. Now it actually works without beating your head against the keyboard. /N - if ((istype(active1, /datum/data/record) && L.Find(rank))) + if((istype(active1, /datum/data/record) && L.Find(rank))) temp = "
        Rank:
        " temp += "
          " for(var/rank in joblist) @@ -350,9 +346,9 @@ What a mess.*/ else alert(usr, "You do not have the required rank to do this!") if("species") - if (istype(active1, /datum/data/record)) + if(istype(active1, /datum/data/record)) var/t1 = copytext(trim(sanitize(input("Please enter race:", "General records", active1.fields["species"], null) as message)),1,MAX_MESSAGE_LEN) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1)) return active1.fields["species"] = t1 @@ -360,20 +356,20 @@ What a mess.*/ else//To properly clear as per clear screen. temp=null switch(href_list["choice"]) - if ("Change Rank") - if (active1) + if("Change Rank") + if(active1) if(PDA_Manifest.len) PDA_Manifest.Cut() active1.fields["rank"] = href_list["rank"] if(href_list["rank"] in joblist) active1.fields["real_rank"] = href_list["real_rank"] - if ("Delete Record (ALL) Execute") - if (active1) + if("Delete Record (ALL) Execute") + if(active1) if(PDA_Manifest.len) PDA_Manifest.Cut() for(var/datum/data/record/R in data_core.medical) - if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) + if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) qdel(R) else qdel(active1) diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm index d74e27bc702..a0386fe80c7 100644 --- a/code/game/machinery/computer/specops_shuttle.dm +++ b/code/game/machinery/computer/specops_shuttle.dm @@ -134,9 +134,9 @@ var/specops_shuttle_timeleft = 0 specops_shuttle_moving_to_centcom = 0 specops_shuttle_at_station = 1 - if (specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return + if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return - if (!specops_can_move()) + if(!specops_can_move()) to_chat(usr, "\red The Special Operations shuttle is unable to leave.") return @@ -262,7 +262,7 @@ var/specops_shuttle_timeleft = 0 return //Commented out so admins can do shenanigans at their leisure. Also makes the force-spawned admin ERTs able to use the shuttle. -// if (sent_strike_team == 0 && send_emergency_team == 0) +// if(sent_strike_team == 0 && send_emergency_team == 0) // to_chat(usr, "\red The strike team has not yet deployed.") // return @@ -271,7 +271,7 @@ var/specops_shuttle_timeleft = 0 user.machine = src var/dat - if (temp) + if(temp) dat = temp else dat += {"
          Special Operations Shuttle
          @@ -287,16 +287,16 @@ var/specops_shuttle_timeleft = 0 if(..()) return 1 - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) + if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.machine = src - if (href_list["sendtodock"]) + if(href_list["sendtodock"]) if(!specops_shuttle_at_station|| specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return - if (!specops_can_move()) + if(!specops_can_move()) to_chat(usr, "\blue Central Command will not allow the Special Operations shuttle to return yet.") if(world.timeofday <= specops_shuttle_timereset) - if (((world.timeofday - specops_shuttle_timereset)/10) > 60) + if(((world.timeofday - specops_shuttle_timereset)/10) > 60) to_chat(usr, "\blue [-((world.timeofday - specops_shuttle_timereset)/10)/60] minutes remain!") to_chat(usr, "\blue [-(world.timeofday - specops_shuttle_timereset)/10] seconds remain!") return @@ -311,10 +311,10 @@ var/specops_shuttle_timeleft = 0 spawn(0) specops_return() - else if (href_list["sendtostation"]) + else if(href_list["sendtostation"]) if(specops_shuttle_at_station || specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return - if (!specops_can_move()) + if(!specops_can_move()) to_chat(usr, "\red The Special Operations shuttle is unable to leave.") return @@ -332,7 +332,7 @@ var/specops_shuttle_timeleft = 0 spawn(0) specops_process() - else if (href_list["mainmenu"]) + else if(href_list["mainmenu"]) temp = null add_fingerprint(usr) diff --git a/code/game/machinery/computer/store.dm b/code/game/machinery/computer/store.dm index c8ae8741288..168ceb60e36 100644 --- a/code/game/machinery/computer/store.dm +++ b/code/game/machinery/computer/store.dm @@ -132,7 +132,7 @@ td.cost.toomuch { src.add_fingerprint(usr) - if (href_list["buy"]) + if(href_list["buy"]) var/itemID = text2num(href_list["buy"]) var/datum/storeitem/item = centcomm_store.items[itemID] var/sure = alert(usr,"Are you sure you wish to purchase [item.name] for $[item.cost]?","You sure?","Yes","No") in list("Yes","No") diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm index 16de635b0e7..f05a600b680 100644 --- a/code/game/machinery/computer/syndicate_specops_shuttle.dm +++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm @@ -57,9 +57,9 @@ var/syndicate_elite_shuttle_timeleft = 0 syndicate_elite_shuttle_moving_to_mothership = 0 syndicate_elite_shuttle_at_station = 1 - if (syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return + if(syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return - if (!syndicate_elite_can_move()) + if(!syndicate_elite_can_move()) to_chat(usr, "\red The Syndicate Elite shuttle is unable to leave.") return @@ -133,8 +133,8 @@ var/syndicate_elite_shuttle_timeleft = 0 elite_squad.readyreset()//Reset firealarm after the team launched. //End Marauder launchpad. - for (var/obj/effect/landmark/L in landmarks_list) - if (L.name == "Syndicate Breach Area") + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "Syndicate Breach Area") explosion(L.loc,4,6,8,10,0) sleep(40) @@ -196,7 +196,7 @@ var/syndicate_elite_shuttle_timeleft = 0 to_chat(user, "\red Access Denied.") return -// if (sent_syndicate_strike_team == 0) +// if(sent_syndicate_strike_team == 0) // to_chat(usr, "\red The strike team has not yet deployed.") // return @@ -205,7 +205,7 @@ var/syndicate_elite_shuttle_timeleft = 0 user.set_machine(src) var/dat - if (temp) + if(temp) dat = temp else dat = {"
          Special Operations Shuttle
          @@ -221,19 +221,19 @@ var/syndicate_elite_shuttle_timeleft = 0 if(..()) return 1 - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) + if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) - if (href_list["sendtodock"]) + if(href_list["sendtodock"]) if(!syndicate_elite_shuttle_at_station|| syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return to_chat(usr, "\blue The Syndicate will not allow the Elite Squad shuttle to return.") return - else if (href_list["sendtostation"]) + else if(href_list["sendtostation"]) if(syndicate_elite_shuttle_at_station || syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return - if (!specops_can_move()) + if(!specops_can_move()) to_chat(usr, "\red The Syndicate Elite shuttle is unable to leave.") return @@ -252,7 +252,7 @@ var/syndicate_elite_shuttle_timeleft = 0 syndicate_elite_process() - else if (href_list["mainmenu"]) + else if(href_list["mainmenu"]) temp = null add_fingerprint(usr) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 4c820d26857..2defdbf4623 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -386,6 +386,16 @@ to destroy them and players will be able to make replacements. /obj/item/stack/cable_coil = 5, /obj/item/weapon/stock_parts/console_screen = 1) +/obj/item/weapon/circuitboard/deepfryer + name = "circuit board (Deep Fryer)" + build_path = /obj/machinery/cooker/deepfryer + board_type = "machine" + origin_tech = "programming=2" + frame_desc = "Requires 2 Micro Lasers and 5 pieces of cable." + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 2, + /obj/item/stack/cable_coil = 5) + /obj/item/weapon/circuitboard/gibber name = "circuit board (Gibber)" build_path = /obj/machinery/gibber @@ -734,16 +744,6 @@ obj/item/weapon/circuitboard/rdserver /obj/item/stack/cable_coil = 1, /obj/item/weapon/stock_parts/console_screen = 2) -/obj/item/weapon/circuitboard/sleep_console - name = "circuit board (Sleeper Console)" - build_path = /obj/machinery/sleep_console - board_type = "machine" - origin_tech = "programming=3;biotech=2;engineering=3;materials=3" - frame_desc = "Requires 2 pieces of cable and 2 Console Screens." - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/console_screen = 2) - /obj/item/weapon/circuitboard/bodyscanner name = "circuit board (Body Scanner)" build_path = /obj/machinery/bodyscanner diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 6a1f0721253..d069e2d1ae6 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -63,6 +63,7 @@ efficiency = C /obj/machinery/atmospherics/unary/cryo_cell/initialize() + ..() if(node) return for(var/cdir in cardinal) node = findConnecting(cdir) @@ -185,7 +186,7 @@ data["hasOccupant"] = occupant ? 1 : 0 var/occupantData[0] - if (occupant) + if(occupant) occupantData["name"] = occupant.name occupantData["stat"] = occupant.stat occupantData["health"] = occupant.health @@ -217,7 +218,7 @@ data["beakerVolume"] = 0 if(beaker) data["beakerLabel"] = beaker.label_text ? beaker.label_text : null - if (beaker.reagents && beaker.reagents.reagent_list.len) + if(beaker.reagents && beaker.reagents.reagent_list.len) for(var/datum/reagent/R in beaker.reagents.reagent_list) data["beakerVolume"] += R.volume @@ -225,7 +226,7 @@ // update the ui if it exists, returns null if no ui is passed/found ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "cryo.tmpl", "Cryo Cell Control System", 520, 420) @@ -283,7 +284,7 @@ user.visible_message("[user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!") - if (istype(G, /obj/item/weapon/screwdriver)) + if(istype(G, /obj/item/weapon/screwdriver)) if(occupant || on) to_chat(user, "The maintenance panel is locked.") return @@ -411,31 +412,34 @@ air_update_turf() /obj/machinery/atmospherics/unary/cryo_cell/proc/go_out() - if(!( occupant )) + if(!occupant) return - if (occupant.client) + if(occupant.client) occupant.client.eye = occupant.client.mob occupant.client.perspective = MOB_PERSPECTIVE occupant.forceMove(get_step(loc, SOUTH)) //this doesn't account for walls or anything, but i don't forsee that being a problem. - if (occupant.bodytemperature < 261 && occupant.bodytemperature >= 70) //Patch by Aranclanos to stop people from taking burn damage after being ejected + if(occupant.bodytemperature < 261 && occupant.bodytemperature >= 70) //Patch by Aranclanos to stop people from taking burn damage after being ejected occupant.bodytemperature = 261 occupant = null update_icon() - return + // eject trash the occupant dropped + for(var/atom/movable/A in contents - component_parts - list(beaker)) + A.forceMove(get_step(loc, SOUTH)) + /obj/machinery/atmospherics/unary/cryo_cell/proc/put_mob(mob/living/carbon/M as mob) - if (!istype(M)) + if(!istype(M)) to_chat(usr, "\red The cryo cell cannot handle such a lifeform!") return - if (occupant) + if(occupant) to_chat(usr, "\red The cryo cell is already occupied!") return - if (M.abiotic()) + if(M.abiotic()) to_chat(usr, "\red Subject may not have abiotic items on.") return if(!node) to_chat(usr, "\red The cell is not correctly connected to its pipe network!") return - if (M.client) + if(M.client) M.client.perspective = EYE_PERSPECTIVE M.client.eye = src M.stop_pulling() @@ -454,7 +458,7 @@ set category = "Object" set src in oview(1) if(usr == occupant)//If the user is inside the tube... - if (usr.stat == 2)//and he's not dead.... + if(usr.stat == 2)//and he's not dead.... return to_chat(usr, "\blue Release sequence activated. This will take two minutes.") sleep(600) @@ -462,7 +466,7 @@ return go_out()//and release him from the eternal prison. else - if (usr.stat != 0) + if(usr.stat != 0) return go_out() add_fingerprint(usr) @@ -476,7 +480,7 @@ if(M.Victim == usr) to_chat(usr, "You're too busy getting your life sucked out of you.") return - if (usr.stat != 0 || stat & (NOPOWER|BROKEN)) + if(usr.stat != 0 || stat & (NOPOWER|BROKEN)) return if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other return @@ -492,4 +496,4 @@ return /datum/data/function/proc/display() - return \ No newline at end of file + return diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index f7de2dd6b5f..257c583814b 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -40,7 +40,7 @@ var/dat - if (!( ticker )) + if(!( ticker )) return dat += "

          [storage_name]
          " @@ -319,7 +319,7 @@ else if(O.target && istype(O.target,/datum/mind)) if(O.target == occupant.mind) if(O.owner && O.owner.current) - to_chat(O.owner.current, "You get the feeling your target is no longer within your reach. Time for Plan [pick(list("A","B","C","D","X","Y","Z"))]...") + to_chat(O.owner.current, "You get the feeling your target is no longer within reach. Time for Plan [pick("A","B","C","D","X","Y","Z")]. Objectives updated!") O.target = null spawn(1) //This should ideally fire after the occupant is deleted. if(!O) return @@ -344,16 +344,18 @@ // Delete them from datacore. + var/announce_rank = null if(PDA_Manifest.len) PDA_Manifest.Cut() for(var/datum/data/record/R in data_core.medical) - if ((R.fields["name"] == occupant.real_name)) + if((R.fields["name"] == occupant.real_name)) qdel(R) for(var/datum/data/record/T in data_core.security) - if ((T.fields["name"] == occupant.real_name)) + if((T.fields["name"] == occupant.real_name)) qdel(T) for(var/datum/data/record/G in data_core.general) - if ((G.fields["name"] == occupant.real_name)) + if((G.fields["name"] == occupant.real_name)) + announce_rank = G.fields["rank"] qdel(G) if(orient_right) @@ -365,14 +367,19 @@ control_computer.frozen_crew += "[occupant.real_name]" var/ailist[] = list() - for (var/mob/living/silicon/ai/A in living_mob_list) + for(var/mob/living/silicon/ai/A in living_mob_list) ailist += A - if (ailist.len) + if(ailist.len) var/mob/living/silicon/ai/announcer = pick(ailist) - announcer.say(";[occupant.real_name] [on_store_message]") + if (announce_rank) + announcer.say(";[occupant.real_name] ([announce_rank]) [on_store_message]") + else + announcer.say(";[occupant.real_name] [on_store_message]") else - announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]") - + if (announce_rank) + announce.autosay("[occupant.real_name] ([announce_rank]) [on_store_message]", "[on_store_name]") + else + announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]") visible_message("\The [src] hums and hisses as it moves [occupant.real_name] into storage.") // Delete the mob. diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index df7d3319c06..507527fd6da 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -63,8 +63,8 @@ for reference: var/stacktype = /obj/item/stack/sheet/metal /obj/structure/barricade/attackby(obj/item/W as obj, mob/user as mob, params) - if (istype(W, stacktype)) - if (src.health < src.maxhealth) + if(istype(W, stacktype)) + if(src.health < src.maxhealth) visible_message("\red [user] begins to repair the [src]!") if(do_after(user,20, target = src)) src.health = src.maxhealth @@ -74,7 +74,7 @@ for reference: else return return - else if (istype(W, /obj/item/weapon/crowbar)) + else if(istype(W, /obj/item/weapon/crowbar)) user.changeNext_move(CLICK_CD_MELEE) user.visible_message("[user] is prying apart \the [src].", "You begin to pry apart \the [src].") playsound(src, 'sound/items/Crowbar.ogg', 200, 1) @@ -90,7 +90,7 @@ for reference: if("brute") src.health -= W.force * 0.75 else - if (src.health <= 0) + if(src.health <= 0) visible_message("\The [src] is smashed apart!") dismantle() ..() @@ -103,14 +103,14 @@ for reference: return if(2.0) src.health -= 25 - if (src.health <= 0) + if(src.health <= 0) visible_message("\The [src] is blown apart!") dismantle() return /obj/structure/barricade/blob_act() src.health -= 25 - if (src.health <= 0) + if(src.health <= 0) visible_message("\red The blob eats through \the [src]!") qdel(src) return @@ -173,16 +173,16 @@ for reference: src.icon_state = "barrier[src.locked]" attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/card/id)) - if (src.allowed(user)) - if (src.emagged < 2.0) + if(istype(W, /obj/item/weapon/card/id)) + if(src.allowed(user)) + if(src.emagged < 2.0) src.locked = !src.locked src.anchored = !src.anchored src.icon_state = "barrier[src.locked]" - if ((src.locked == 1.0) && (src.emagged < 2.0)) + if((src.locked == 1.0) && (src.emagged < 2.0)) to_chat(user, "Barrier lock toggled on.") return - else if ((src.locked == 0.0) && (src.emagged < 2.0)) + else if((src.locked == 0.0) && (src.emagged < 2.0)) to_chat(user, "Barrier lock toggled off.") return else @@ -192,14 +192,14 @@ for reference: visible_message("\red BZZzZZzZZzZT") return return - else if (istype(W, /obj/item/weapon/wrench)) - if (src.health < src.maxhealth) + else if(istype(W, /obj/item/weapon/wrench)) + if(src.health < src.maxhealth) src.health = src.maxhealth src.emagged = 0 src.req_access = list(access_security) visible_message("\red [user] repairs the [src]!") return - else if (src.emagged > 0) + else if(src.emagged > 0) src.emagged = 0 src.req_access = list(access_security) visible_message("\red [user] repairs the [src]!") @@ -212,12 +212,12 @@ for reference: if("brute") src.health -= W.force * 0.5 else - if (src.health <= 0) + if(src.health <= 0) src.explode() ..() emag_act(user as mob) - if (!emagged) + if(!emagged) emagged = 1 req_access = null to_chat(user, "You break the ID authentication lock on the [src].") @@ -225,7 +225,7 @@ for reference: s.set_up(2, 1, src) s.start() visible_message("\red BZZzZZzZZzZT") - else if (src.emagged == 1) + else if(src.emagged == 1) src.emagged = 2 to_chat(user, "You short out the anchoring mechanism on the [src].") var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread @@ -240,7 +240,7 @@ for reference: return if(2.0) src.health -= 25 - if (src.health <= 0) + if(src.health <= 0) src.explode() return emp_act(severity) @@ -253,7 +253,7 @@ for reference: blob_act() src.health -= 25 - if (src.health <= 0) + if(src.health <= 0) src.explode() return diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 8c419216d07..a0f6c9a08ce 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -39,7 +39,7 @@ /obj/machinery/door_control/attackby(obj/item/weapon/W, mob/user as mob, params) /* For later implementation - if (istype(W, /obj/item/weapon/screwdriver)) + if(istype(W, /obj/item/weapon/screwdriver)) { if(wiresexposed) icon_state = "doorctrl0" @@ -81,7 +81,7 @@ for(var/obj/machinery/door/airlock/D in range(range)) if(D.id_tag == src.id) if(specialfunctions & OPEN) - if (D.density) + if(D.density) spawn(0) D.open() return @@ -110,8 +110,8 @@ else for(var/obj/machinery/door/poddoor/M in world) - if (M.id_tag == src.id) - if (M.density) + if(M.id_tag == src.id) + if(M.density) spawn( 0 ) M.open() return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 8fd840fd0e3..641d847e36b 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -258,14 +258,14 @@ /obj/machinery/door/airlock/clown name = "Bananium Airlock" icon = 'icons/obj/doors/Doorbananium.dmi' - mineral = "clown" + mineral = "bananium" doorOpen = 'sound/items/bikehorn.ogg' doorClose = 'sound/items/bikehorn.ogg' /obj/machinery/door/airlock/mime name = "Tranquillite Airlock" icon = 'icons/obj/doors/Doorfreezer.dmi' - mineral = "mime" + mineral = "tranquillite" doorOpen = null doorClose = null @@ -391,7 +391,7 @@ About the new airlock wires panel: return ((src.aiControlDisabled==1) && (!hackProof) && (!src.isAllPowerLoss())); /obj/machinery/door/airlock/proc/arePowerSystemsOn() - if (stat & (NOPOWER|BROKEN)) + if(stat & (NOPOWER|BROKEN)) return 0 return (src.main_power_lost_until==0 || src.backup_power_lost_until==0) @@ -572,7 +572,7 @@ About the new airlock wires panel: data["commands"] = commands ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "door_control.tmpl", "Door Controls - [src]", 600, 375) ui.set_initial_data(data) ui.open() @@ -623,14 +623,14 @@ About the new airlock wires panel: sleep(10) //bring up airlock dialog src.aiHacking = 0 - if (user) + if(user) src.attack_ai(user) /obj/machinery/door/airlock/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if (src.isElectrified()) - if (istype(mover, /obj/item)) + if(src.isElectrified()) + if(istype(mover, /obj/item)) var/obj/item/i = mover - if (i.materials[MAT_METAL]) + if(i.materials[MAT_METAL]) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() @@ -674,7 +674,7 @@ About the new airlock wires panel: if(src.canAIHack(user)) src.hack(user) else - if (src.isAllPowerLoss()) //don't really like how this gets checked a second time, but not sure how else to do it. + if(src.isAllPowerLoss()) //don't really like how this gets checked a second time, but not sure how else to do it. to_chat(user, "Unable to interface: Connection timed out.") else to_chat(user, "Unable to interface: Connection refused.") @@ -687,7 +687,7 @@ About the new airlock wires panel: return 1 var/activate = text2num(href_list["activate"]) - switch (href_list["command"]) + switch(href_list["command"]) if("idscan") if(src.isWireCut(AIRLOCK_WIRE_IDSCAN)) to_chat(usr, "The IdScan wire has been cut - IdScan feature permanently disabled.") @@ -743,33 +743,33 @@ About the new airlock wires panel: close() if("safeties") // Safeties! We don't need no stinking safeties! - if (src.isWireCut(AIRLOCK_WIRE_SAFETY)) + if(src.isWireCut(AIRLOCK_WIRE_SAFETY)) to_chat(usr, text("The safety wire is cut - Cannot secure the door.")) - else if (activate && src.safe) + else if(activate && src.safe) safe = 0 - else if (!activate && !src.safe) + else if(!activate && !src.safe) safe = 1 if("timing") // Door speed control if(src.isWireCut(AIRLOCK_WIRE_SPEED)) to_chat(usr, text("The timing wire is cut - Cannot alter timing.")) - else if (activate && src.normalspeed) + else if(activate && src.normalspeed) normalspeed = 0 - else if (!activate && !src.normalspeed) + else if(!activate && !src.normalspeed) normalspeed = 1 if("lights") // Bolt lights if(src.isWireCut(AIRLOCK_WIRE_LIGHT)) to_chat(usr, "The bolt lights wire has been cut - The door bolt lights are permanently disabled.") - else if (!activate && src.lights) + else if(!activate && src.lights) lights = 0 to_chat(usr, "The door bolt lights have been disabled.") - else if (activate && !src.lights) + else if(activate && !src.lights) lights = 1 to_chat(usr, "The door bolt lights have been enabled.") if("emergency") // Emergency access - if (src.emergency) + if(src.emergency) emergency = 0 to_chat(usr, "Emergency access has been disabled.") else @@ -844,7 +844,7 @@ About the new airlock wires panel: src.check_access() if(src.req_access.len) ae.conf_access = src.req_access - else if (src.req_one_access.len) + else if(src.req_one_access.len) ae.conf_access = src.req_one_access ae.one_access = 1 else @@ -936,7 +936,7 @@ About the new airlock wires panel: operating = 1 do_animate("closing") src.layer = 3.1 - if (!override) sleep(5) + if(!override) sleep(5) src.density = 1 if(!safe) crush() @@ -957,7 +957,7 @@ About the new airlock wires panel: if(locked) return 0 - if (operating && !forced) return 0 + if(operating && !forced) return 0 src.locked = 1 playsound(src, boltDown, 30, 0, 3) @@ -968,7 +968,7 @@ About the new airlock wires panel: if(!src.locked) return - if (!forced) + if(!forced) if(operating || !src.arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) return src.locked = 0 @@ -981,7 +981,7 @@ About the new airlock wires panel: wires = new(src) if(src.closeOtherId != null) spawn (5) - for (var/obj/machinery/door/airlock/A in world) + for(var/obj/machinery/door/airlock/A in world) if(A.closeOtherId == src.closeOtherId && A != src) src.closeOther = A break @@ -998,7 +998,7 @@ About the new airlock wires panel: if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll)) return - if(istype(C, /obj/item/weapon/c4)) + if(istype(C, /obj/item/weapon/grenade/plastic/c4)) to_chat(user, "The hatch is coated with a product that prevents the shaped charge from sticking!") return diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 5f55eb26fc2..9c4d881f378 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -16,7 +16,7 @@ obj/machinery/door/airlock/process() return PROCESS_KILL obj/machinery/door/airlock/receive_signal(datum/signal/signal) - if (!arePowerSystemsOn()) return //no power + if(!arePowerSystemsOn()) return //no power if(!signal || signal.encryption) return @@ -30,7 +30,7 @@ obj/machinery/door/airlock/proc/execute_current_command() if(operating) return //emagged or busy doing something else - if (!cur_command) + if(!cur_command) return do_command(cur_command) @@ -103,7 +103,7 @@ obj/machinery/door/airlock/proc/send_status(var/bumped = 0) signal.data["door_status"] = density?("closed"):("open") signal.data["lock_status"] = locked?("locked"):("unlocked") - if (bumped) + if(bumped) signal.data["bumped_with_access"] = 1 radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) @@ -135,6 +135,7 @@ obj/machinery/door/airlock/proc/set_frequency(new_frequency) obj/machinery/door/airlock/initialize() + ..() if(frequency) set_frequency(frequency) @@ -213,6 +214,7 @@ obj/machinery/airlock_sensor/proc/set_frequency(new_frequency) radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) obj/machinery/airlock_sensor/initialize() + ..() set_frequency(frequency) obj/machinery/airlock_sensor/New() @@ -252,7 +254,7 @@ obj/machinery/access_button/update_icon() obj/machinery/access_button/attackby(obj/item/I as obj, mob/user as mob, params) //Swiping ID on the access button - if (istype(I, /obj/item/weapon/card/id) || istype(I, /obj/item/device/pda)) + if(istype(I, /obj/item/weapon/card/id) || istype(I, /obj/item/device/pda)) attack_hand(user) return ..() @@ -279,6 +281,7 @@ obj/machinery/access_button/proc/set_frequency(new_frequency) obj/machinery/access_button/initialize() + ..() set_frequency(frequency) @@ -294,4 +297,4 @@ obj/machinery/access_button/airlock_interior obj/machinery/access_button/airlock_exterior frequency = 1379 - command = "cycle_exterior" \ No newline at end of file + command = "cycle_exterior" diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 6113d1cf377..aca002f58c4 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -4,7 +4,7 @@ name = "airlock electronics" icon = 'icons/obj/doors/door_assembly.dmi' icon_state = "door_electronics" - w_class = 2.0 //It should be tiny! -Agouri + w_class = 2 //It should be tiny! -Agouri materials = list(MAT_METAL=50, MAT_GLASS=50) req_access = list(access_engine) @@ -15,7 +15,7 @@ var/locked = 1 attack_self(mob/user as mob) - if (!ishuman(user) && !istype(user,/mob/living/silicon/robot)) + if(!ishuman(user) && !istype(user,/mob/living/silicon/robot)) return ..(user) var/mob/living/carbon/human/H = user @@ -25,10 +25,10 @@ var/t1 = text("Access control
          \n") - if (last_configurator) + if(last_configurator) t1 += "Operator: [last_configurator]
          " - if (locked) + if(locked) t1 += "Swipe ID
          " else t1 += "Block
          " @@ -41,10 +41,10 @@ t1 += "
          " var/list/accesses = get_all_accesses() - for (var/acc in accesses) + for(var/acc in accesses) var/aname = get_access_desc(acc) - if (!conf_access || !conf_access.len || !(acc in conf_access)) + if(!conf_access || !conf_access.len || !(acc in conf_access)) t1 += "[aname]
          " else if(one_access) t1 += "[aname]
          " @@ -53,58 +53,60 @@ t1 += text("

          Close

          \n", src) - user << browse(t1, "window=airlock_electronics") + var/datum/browser/popup = new(user, "airlock_electronics", name, 400, 400) + popup.set_content(t1) + popup.open(0) onclose(user, "airlock") Topic(href, href_list) ..() - if (usr.stat || usr.restrained() || (!ishuman(usr) && !istype(usr,/mob/living/silicon))) + if(usr.stat || usr.restrained() || (!ishuman(usr) && !istype(usr,/mob/living/silicon))) return - if (href_list["close"]) + if(href_list["close"]) usr << browse(null, "window=airlock") return - if (href_list["login"]) + if(href_list["login"]) if(istype(usr,/mob/living/silicon)) src.locked = 0 src.last_configurator = usr.name else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/device/pda)) + if(istype(I, /obj/item/device/pda)) var/obj/item/device/pda/pda = I I = pda.id - if (I && src.check_access(I)) + if(I && src.check_access(I)) src.locked = 0 src.last_configurator = I:registered_name - if (locked) + if(locked) return - if (href_list["logout"]) + if(href_list["logout"]) locked = 1 - if (href_list["one_access"]) + if(href_list["one_access"]) one_access = !one_access - if (href_list["access"]) + if(href_list["access"]) toggle_access(href_list["access"]) attack_self(usr) proc toggle_access(var/acc) - if (acc == "all") + if(acc == "all") conf_access = null else var/req = text2num(acc) - if (conf_access == null) + if(conf_access == null) conf_access = list() - if (!(req in conf_access)) + if(!(req in conf_access)) conf_access += req else conf_access -= req - if (!conf_access.len) + if(!conf_access.len) conf_access = null diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 3e611b8dea4..b0be899942d 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -31,19 +31,19 @@ maptext_height = 26 maptext_width = 32 -/obj/machinery/door_timer/New() +/obj/machinery/door_timer/initialize() ..() Radio = new /obj/item/device/radio(src) Radio.listening = 0 Radio.config(list("Security" = 0)) - pixel_x = ((src.dir & 3)? (0) : (src.dir == 4 ? 32 : -32)) - pixel_y = ((src.dir & 3)? (src.dir ==1 ? 24 : -32) : (0)) + pixel_x = ((dir & 3)? (0) : (dir == 4 ? 32 : -32)) + pixel_y = ((dir & 3)? (dir ==1 ? 24 : -32) : (0)) spawn(20) for(var/obj/machinery/door/window/brigdoor/M in airlocks) - if (M.id == id) + if(M.id == id) targets += M for(var/obj/machinery/flasher/F in machines) @@ -53,7 +53,7 @@ for(var/obj/structure/closet/secure_closet/brig/C in world) if(C.id == id) targets += C - + for(var/obj/machinery/treadmill_monitor/T in machines) if(T.id == id) targets += T @@ -61,15 +61,14 @@ if(targets.len==0) stat |= BROKEN update_icon() - return - return //Main door timer loop, if it's timing and time is >0 reduce time by 1. // if it's less than 0, open door, reset timer // update the door_timer window and the icon /obj/machinery/door_timer/process() - if(stat & (NOPOWER|BROKEN)) return + if(stat & (NOPOWER|BROKEN)) + return if(timing) if(timeleft() <= 0) Radio.autosay("Timer has expired. Releasing prisoner.", name, "Security", list(z)) @@ -77,8 +76,8 @@ timing = 0 . = PROCESS_KILL - src.updateUsrDialog() - src.update_icon() + updateUsrDialog() + update_icon() else timer_end() return PROCESS_KILL @@ -87,7 +86,6 @@ /obj/machinery/door_timer/power_change() ..() update_icon() - return // open/closedoor checks if door_timer has power, if so it checks if the @@ -95,7 +93,8 @@ // Closes and locks doors, power check /obj/machinery/door_timer/proc/timer_start() - if(stat & (NOPOWER|BROKEN)) return 0 + if(stat & (NOPOWER|BROKEN)) + return 0 // Set releasetime releasetime = world.timeofday + timetoset @@ -103,16 +102,19 @@ addAtProcessing() for(var/obj/machinery/door/window/brigdoor/door in targets) - if(door.density) continue + if(door.density) + continue spawn(0) door.close() for(var/obj/structure/closet/secure_closet/brig/C in targets) - if(C.broken) continue - if(C.opened && !C.close()) continue + if(C.broken) + continue + if(C.opened && !C.close()) + continue C.locked = 1 C.icon_state = C.icon_locked - + for(var/obj/machinery/treadmill_monitor/T in targets) T.total_joules = 0 T.on = 1 @@ -122,19 +124,23 @@ // Opens and unlocks doors, power check /obj/machinery/door_timer/proc/timer_end() - if(stat & (NOPOWER|BROKEN)) return 0 + if(stat & (NOPOWER|BROKEN)) + return 0 // Reset releasetime releasetime = 0 for(var/obj/machinery/door/window/brigdoor/door in targets) - if(!door.density) continue + if(!door.density) + continue spawn(0) door.open() for(var/obj/structure/closet/secure_closet/brig/C in targets) - if(C.broken) continue - if(C.opened) continue + if(C.broken) + continue + if(C.opened) + continue C.locked = 0 C.icon_state = C.icon_closed @@ -156,7 +162,7 @@ return time / 10 // Set timetoset -/obj/machinery/door_timer/proc/timeset(var/seconds) +/obj/machinery/door_timer/proc/timeset(seconds) timetoset = seconds * 10 if(timetoset <= 0) @@ -165,15 +171,15 @@ return //Allows AIs to use door_timer, see human attack_hand function below -/obj/machinery/door_timer/attack_ai(var/mob/user as mob) - return src.attack_hand(user) +/obj/machinery/door_timer/attack_ai(mob/user) + return attack_hand(user) //Allows humans to use door_timer //Opens dialog window when someone clicks on door timer // Allows altering timer and the timing boolean. // Flasher activation limited to 150 seconds -/obj/machinery/door_timer/attack_hand(var/mob/user as mob) +/obj/machinery/door_timer/attack_hand(mob/user) if(..()) return @@ -188,13 +194,11 @@ user.set_machine(src) // dat - var/dat = "" - - dat += "
          Timer System:" - dat += " Door [src.id] controls
          " + var/dat = "
          Timer System:" + dat += " Door [id] controls
          " // Start/Stop timer - if (src.timing) + if(timing) dat += "Stop Timer and open door
          " else dat += "Activate Timer and close door
          " @@ -204,7 +208,7 @@ dat += "
          " // Set Timer display (uses timetoset) - if(src.timing) + if(timing) dat += "Set Timer: [(setminute ? text("[setminute]:") : null)][setsecond] Set
          " else dat += "Set Timer: [(setminute ? text("[setminute]:") : null)][setsecond]
          " @@ -220,11 +224,10 @@ dat += "
          Activate Flash" dat += "

          Close" - dat += "
          " - user << browse(dat, "window=computer;size=400x500") - onclose(user, "computer") - return + var/datum/browser/popup = new(user, "door_timer", name, 400, 500) + popup.set_content(dat) + popup.open() //Function for using door_timer dialog input, checks if user has permission @@ -237,18 +240,18 @@ /obj/machinery/door_timer/Topic(href, href_list) if(..()) return - if(!src.allowed(usr)) + if(!allowed(usr)) return usr.set_machine(src) if(href_list["timing"]) - src.timing = text2num(href_list["timing"]) + timing = text2num(href_list["timing"]) - if(src.timing) - src.timer_start() + if(timing) + timer_start() else - src.timer_end() + timer_end() else if(href_list["tp"]) //adjust timer, close door if not already closed @@ -264,19 +267,11 @@ F.flash() if(href_list["change"]) - src.timer_start() + timer_start() - src.add_fingerprint(usr) - src.updateUsrDialog() - src.update_icon() - - /* if(src.timing) - src.timer_start() - - else - src.timer_end() */ - - return + add_fingerprint(usr) + updateUsrDialog() + update_icon() //icon update function @@ -290,7 +285,7 @@ if(stat & (BROKEN)) set_picture("ai_bsod") return - if(src.timing) + if(timing) var/disp1 = id var/timeleft = timeleft() var/disp2 = "[add_zero(num2text((timeleft / 60) % 60),2)]~[add_zero(num2text(timeleft % 60), 2)]" @@ -299,11 +294,10 @@ update_display(disp1, disp2) else if(maptext) maptext = "" - return // Adds an icon in case the screen is broken/off, stolen from status_display.dm -/obj/machinery/door_timer/proc/set_picture(var/state) +/obj/machinery/door_timer/proc/set_picture(state) picture_state = state overlays.Cut() overlays += image('icons/obj/status_display.dmi', icon_state=picture_state) @@ -311,7 +305,7 @@ //Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display // Stolen from status_display -/obj/machinery/door_timer/proc/update_display(var/line1, var/line2) +/obj/machinery/door_timer/proc/update_display(line1, line2) var/new_text = {"
          [line1]
          [line2]
          "} if(maptext != new_text) maptext = new_text @@ -319,7 +313,7 @@ //Actual string input to icon display for loop, with 5 pixel x offsets for each letter. //Stolen from status_display -/obj/machinery/door_timer/proc/texticon(var/tn, var/px = 0, var/py = 0) +/obj/machinery/door_timer/proc/texticon(tn, px = 0, py = 0) var/image/I = image('icons/obj/status_display.dmi', "blank") var/len = lentext(tn) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index fd5f1b19219..6c9537667fb 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -45,11 +45,13 @@ bound_width = world.icon_size bound_height = width * world.icon_size - air_update_turf(1) update_freelook_sight() airlocks += src return +/obj/machinery/door/initialize() + air_update_turf(1) + ..() /obj/machinery/door/Destroy() density = 0 diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 1b3f13955d0..de3c4514bb5 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -44,9 +44,9 @@ /obj/machinery/door/poddoor/attackby(obj/item/weapon/C as obj, mob/user as mob, params) src.add_fingerprint(user) - if (!( istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) )) + if(!( istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) )) return - if ((src.density && (stat & NOPOWER) && !( src.operating ))) + if((src.density && (stat & NOPOWER) && !( src.operating ))) spawn( 0 ) src.operating = 1 flick("pdoorc0", src) @@ -59,9 +59,9 @@ return /obj/machinery/door/poddoor/open() - if (src.operating == 1) //doors can still open when emag-disabled + if(src.operating == 1) //doors can still open when emag-disabled return - if (!ticker) + if(!ticker) return 0 if(!src.operating) //in case of emag src.operating = 1 @@ -82,7 +82,7 @@ return 1 /obj/machinery/door/poddoor/close() - if (src.operating) + if(src.operating) return src.operating = 1 flick("pdoorc1", src) diff --git a/code/game/machinery/doors/spacepod.dm b/code/game/machinery/doors/spacepod.dm index 244642021ad..021509a13ed 100644 --- a/code/game/machinery/doors/spacepod.dm +++ b/code/game/machinery/doors/spacepod.dm @@ -7,7 +7,7 @@ density = 0 anchored = 1 -/obj/structure/spacepoddoor/New() +/obj/structure/spacepoddoor/initialize() ..() air_update_turf(1) @@ -21,4 +21,4 @@ /obj/structure/spacepoddoor/CanPass(atom/movable/A, turf/T) if(istype(A, /obj/spacepod)) return ..() - else return 0 \ No newline at end of file + else return 0 diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 39ed81b3360..cbad06fab9c 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -13,7 +13,7 @@ /obj/machinery/door/window/New() ..() - if (src.req_access && src.req_access.len) + if(src.req_access && src.req_access.len) src.icon_state = "[src.icon_state]" src.base_state = src.icon_state @@ -42,7 +42,7 @@ /obj/machinery/door/window/Bumped(atom/movable/AM as mob|obj) if(operating || !density) return - if (!ismob(AM)) + if(!ismob(AM)) if(istype(AM, /obj/mecha)) var/obj/mecha/mecha = AM if(mecha.occupant && src.allowed(mecha.occupant)) @@ -50,7 +50,7 @@ else flick(text("[]deny", src.base_state), src) return - if (!ticker) + if(!ticker) return var/mob/M = AM if(!M.restrained() && !M.small) @@ -97,9 +97,9 @@ return 1 /obj/machinery/door/window/open(var/forced=0) - if (src.operating == 1) //doors can still open when emag-disabled + if(src.operating == 1) //doors can still open when emag-disabled return 0 - if (!ticker) + if(!ticker) return 0 if(!forced) if(stat & NOPOWER) @@ -124,7 +124,7 @@ return 1 /obj/machinery/door/window/close(var/forced=0) - if (src.operating) + if(src.operating) return 0 if(!forced) if(stat & NOPOWER) @@ -149,7 +149,7 @@ /obj/machinery/door/window/proc/take_damage(var/damage) src.health = max(0, src.health - damage) - if (src.health <= 0) + if(src.health <= 0) var/debris = list( new /obj/item/weapon/shard(src.loc), new /obj/item/weapon/shard(src.loc), @@ -248,13 +248,13 @@ /obj/machinery/door/window/attackby(obj/item/weapon/I as obj, mob/living/user as mob, params) //If it's in the process of opening/closing, ignore the click - if (src.operating) + if(src.operating) return add_fingerprint(user) //Ninja swords? You may pass. - if (src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade))) + if(src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade))) emag_act(user,I) return 1 @@ -307,7 +307,7 @@ src.check_access() if(src.req_access.len) ae.conf_access = src.req_access - else if (src.req_one_access.len) + else if(src.req_one_access.len) ae.conf_access = src.req_one_access ae.one_access = 1 else @@ -341,17 +341,17 @@ take_damage(aforce) return - if (!src.requiresID()) + if(!src.requiresID()) //don't care who they are or what they have, act as if they're NOTHING user = null - if (src.allowed(user)) - if (src.density) + if(src.allowed(user)) + if(src.density) open() else close() - else if (src.density) + else if(src.density) flick(text("[]deny", src.base_state), src) return diff --git a/code/game/machinery/dye_generator.dm b/code/game/machinery/dye_generator.dm index c73996abd29..151478ddee6 100644 --- a/code/game/machinery/dye_generator.dm +++ b/code/game/machinery/dye_generator.dm @@ -9,6 +9,7 @@ var/dye_color = "#FFFFFF" /obj/machinery/dye_generator/initialize() + ..() power_change() /obj/machinery/dye_generator/power_change() @@ -32,7 +33,7 @@ qdel(src) return if(2.0) - if (prob(50)) + if(prob(50)) qdel(src) return if(3.0) @@ -73,7 +74,7 @@ throw_speed = 4 throw_range = 7 force = 0 - w_class = 1.0 + w_class = 1 var/dye_color = "#FFFFFF" /obj/item/hair_dye_bottle/New() @@ -127,4 +128,4 @@ var/b_skin = hex2num(copytext(dye_color, 6, 8)) if(H.change_skin_color(r_skin, g_skin, b_skin)) H.update_dna() - user.visible_message("[user] finishes dying [M]'s [what_to_dye]!", "You finish dying [M]'s [what_to_dye]!") \ No newline at end of file + user.visible_message("[user] finishes dying [M]'s [what_to_dye]!", "You finish dying [M]'s [what_to_dye]!") diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index bf6fe4f0fe7..2b336859127 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -34,7 +34,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "advanced_airlock_console.tmpl", name, 470, 290) ui.set_initial_data(data) @@ -90,7 +90,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "simple_airlock_console.tmpl", name, 470, 290) ui.set_initial_data(data) @@ -154,7 +154,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "door_access_console.tmpl", name, 330, 220) ui.set_initial_data(data) diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller.dm b/code/game/machinery/embedded_controller/airlock_docking_controller.dm index 0ffb9c3d7dc..e94a975b91f 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller.dm @@ -26,7 +26,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "docking_airlock_console.tmpl", name, 470, 290) ui.set_initial_data(data) ui.open() @@ -71,8 +71,8 @@ airlock_program.master_prog = src /datum/computer/file/embedded_program/docking/airlock/receive_user_command(command) - if (command == "toggle_override") - if (override_enabled) + if(command == "toggle_override") + if(override_enabled) disable_override() else enable_override() @@ -120,7 +120,7 @@ var/datum/computer/file/embedded_program/docking/airlock/master_prog /datum/computer/file/embedded_program/airlock/docking/receive_user_command(command) - if (master_prog.undocked() || master_prog.override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled + if(master_prog.undocked() || master_prog.override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled ..(command) /datum/computer/file/embedded_program/airlock/docking/proc/enable_mech_regulators() @@ -134,7 +134,7 @@ toggleDoor(memory["exterior_status"], tag_exterior_door, memory["secure"], "open") /datum/computer/file/embedded_program/airlock/docking/cycleDoors(var/target) - if (master_prog.undocked() || master_prog.override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled + if(master_prog.undocked() || master_prog.override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled ..(target) /*** DEBUG VERBS *** diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm index f7ca5b1339a..8eeb93b8a8e 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm @@ -17,8 +17,8 @@ var/list/names = splittext(child_names_txt, ";") var/list/tags = splittext(child_tags_txt, ";") - if (names.len == tags.len) - for (var/i = 1; i <= tags.len; i++) + if(names.len == tags.len) + for(var/i = 1; i <= tags.len; i++) child_names[tags[i]] = names[i] @@ -27,7 +27,7 @@ var/list/airlocks[child_names.len] var/i = 1 - for (var/child_tag in child_names) + for(var/child_tag in child_names) airlocks[i++] = list("name"=child_names[child_tag], "override_enabled"=(docking_program.children_override[child_tag] == "enabled")) data = list( @@ -37,7 +37,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "multi_docking_console.tmpl", name, 470, 290) ui.set_initial_data(data) ui.open() @@ -75,7 +75,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "docking_airlock_console.tmpl", name, 470, 290) ui.set_initial_data(data) ui.open() diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index 8cb3abb9980..670cce47785 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -36,7 +36,7 @@ memory["purge"] = 0 memory["secure"] = 0 - if (istype(M, /obj/machinery/embedded_controller/radio/airlock)) //if our controller is an airlock controller than we can auto-init our tags + if(istype(M, /obj/machinery/embedded_controller/radio/airlock)) //if our controller is an airlock controller than we can auto-init our tags var/obj/machinery/embedded_controller/radio/airlock/controller = M tag_exterior_door = controller.tag_exterior_door? controller.tag_exterior_door : "[id_tag]_outer" tag_interior_door = controller.tag_interior_door? controller.tag_interior_door : "[id_tag]_inner" @@ -177,13 +177,13 @@ if(memory["pump_status"] != "off") //send a signal to stop pumping signalPump(tag_airpump, 0) - if ((state == STATE_PRESSURIZE || state == STATE_DEPRESSURIZE) && !check_doors_secured()) + if((state == STATE_PRESSURIZE || state == STATE_DEPRESSURIZE) && !check_doors_secured()) //the airlock will not allow itself to continue to cycle when any of the doors are forced open. stop_cycling() switch(state) if(STATE_PREPARE) - if (check_doors_secured()) + if(check_doors_secured()) var/chamber_pressure = memory["chamber_sensor_pressure"] var/target_pressure = memory["target_pressure"] diff --git a/code/game/machinery/embedded_controller/docking_program.dm b/code/game/machinery/embedded_controller/docking_program.dm index aa938c663bc..725ec6a337b 100644 --- a/code/game/machinery/embedded_controller/docking_program.dm +++ b/code/game/machinery/embedded_controller/docking_program.dm @@ -77,109 +77,109 @@ var/command = signal.data["command"] var/recipient = signal.data["recipient"] //the intended recipient of the docking signal - if (recipient != id_tag) + if(recipient != id_tag) return //this signal is not for us - switch (command) - if ("confirm_dock") - if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKED && receive_tag == tag_target) + switch(command) + if("confirm_dock") + if(control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKED && receive_tag == tag_target) dock_state = STATE_DOCKING broadcast_docking_status() - if (!override_enabled) + if(!override_enabled) prepare_for_docking() - else if (control_mode == MODE_CLIENT && dock_state == STATE_DOCKING && receive_tag == tag_target) + else if(control_mode == MODE_CLIENT && dock_state == STATE_DOCKING && receive_tag == tag_target) dock_state = STATE_DOCKED broadcast_docking_status() - if (!override_enabled) + if(!override_enabled) finish_docking() //client done docking! response_sent = 0 - else if (control_mode == MODE_SERVER && dock_state == STATE_DOCKING && receive_tag == tag_target) //client just sent us the confirmation back, we're done with the docking process + else if(control_mode == MODE_SERVER && dock_state == STATE_DOCKING && receive_tag == tag_target) //client just sent us the confirmation back, we're done with the docking process received_confirm = 1 - if ("request_dock") - if (control_mode == MODE_NONE && dock_state == STATE_UNDOCKED) + if("request_dock") + if(control_mode == MODE_NONE && dock_state == STATE_UNDOCKED) control_mode = MODE_SERVER dock_state = STATE_DOCKING broadcast_docking_status() tag_target = receive_tag - if (!override_enabled) + if(!override_enabled) prepare_for_docking() send_docking_command(tag_target, "confirm_dock") //acknowledge the request - if ("confirm_undock") - if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKING && receive_tag == tag_target) - if (!override_enabled) + if("confirm_undock") + if(control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKING && receive_tag == tag_target) + if(!override_enabled) finish_undocking() reset() //client is done undocking! - else if (control_mode == MODE_SERVER && dock_state == STATE_UNDOCKING && receive_tag == tag_target) + else if(control_mode == MODE_SERVER && dock_state == STATE_UNDOCKING && receive_tag == tag_target) received_confirm = 1 - if ("request_undock") - if (control_mode == MODE_SERVER && dock_state == STATE_DOCKED && receive_tag == tag_target) + if("request_undock") + if(control_mode == MODE_SERVER && dock_state == STATE_DOCKED && receive_tag == tag_target) dock_state = STATE_UNDOCKING broadcast_docking_status() - if (!override_enabled) + if(!override_enabled) prepare_for_undocking() - if ("dock_error") - if (receive_tag == tag_target) + if("dock_error") + if(receive_tag == tag_target) reset() /datum/computer/file/embedded_program/docking/process() switch(dock_state) - if (STATE_DOCKING) //waiting for our docking port to be ready for docking - if (ready_for_docking()) - if (control_mode == MODE_CLIENT) - if (!response_sent) + if(STATE_DOCKING) //waiting for our docking port to be ready for docking + if(ready_for_docking()) + if(control_mode == MODE_CLIENT) + if(!response_sent) send_docking_command(tag_target, "confirm_dock") //tell the server we're ready response_sent = 1 - else if (control_mode == MODE_SERVER && received_confirm) + else if(control_mode == MODE_SERVER && received_confirm) send_docking_command(tag_target, "confirm_dock") //tell the client we are done docking. dock_state = STATE_DOCKED broadcast_docking_status() - if (!override_enabled) + if(!override_enabled) finish_docking() //server done docking! response_sent = 0 received_confirm = 0 - if (STATE_UNDOCKING) - if (ready_for_undocking()) - if (control_mode == MODE_CLIENT) - if (!response_sent) + if(STATE_UNDOCKING) + if(ready_for_undocking()) + if(control_mode == MODE_CLIENT) + if(!response_sent) send_docking_command(tag_target, "confirm_undock") //tell the server we are OK to undock. response_sent = 1 - else if (control_mode == MODE_SERVER && received_confirm) + else if(control_mode == MODE_SERVER && received_confirm) send_docking_command(tag_target, "confirm_undock") //tell the client we are done undocking. - if (!override_enabled) + if(!override_enabled) finish_undocking() reset() //server is done undocking! - if (response_sent || resend_counter > 0) + if(response_sent || resend_counter > 0) resend_counter++ - if (resend_counter >= MESSAGE_RESEND_TIME || (dock_state != STATE_DOCKING && dock_state != STATE_UNDOCKING)) + if(resend_counter >= MESSAGE_RESEND_TIME || (dock_state != STATE_DOCKING && dock_state != STATE_UNDOCKING)) response_sent = 0 resend_counter = 0 //handle invalid states - if (control_mode == MODE_NONE && dock_state != STATE_UNDOCKED) - if (tag_target) + if(control_mode == MODE_NONE && dock_state != STATE_UNDOCKED) + if(tag_target) send_docking_command(tag_target, "dock_error") reset() - if (control_mode == MODE_SERVER && dock_state == STATE_UNDOCKED) + if(control_mode == MODE_SERVER && dock_state == STATE_UNDOCKED) control_mode = MODE_NONE /datum/computer/file/embedded_program/docking/proc/initiate_docking(var/target) - if (dock_state != STATE_UNDOCKED || control_mode == MODE_SERVER) //must be undocked and not serving another request to begin a new docking handshake + if(dock_state != STATE_UNDOCKED || control_mode == MODE_SERVER) //must be undocked and not serving another request to begin a new docking handshake return tag_target = target @@ -188,13 +188,13 @@ send_docking_command(tag_target, "request_dock") /datum/computer/file/embedded_program/docking/proc/initiate_undocking() - if (dock_state != STATE_DOCKED || control_mode != MODE_CLIENT) //must be docked and must be client to start undocking + if(dock_state != STATE_DOCKED || control_mode != MODE_CLIENT) //must be docked and must be client to start undocking return dock_state = STATE_UNDOCKING broadcast_docking_status() - if (!override_enabled) + if(!override_enabled) prepare_for_undocking() send_docking_command(tag_target, "request_undock") @@ -240,7 +240,7 @@ /datum/computer/file/embedded_program/docking/proc/force_undock() // to_chat(world, "[id_tag]: forcing undock") - if (tag_target) + if(tag_target) send_docking_command(tag_target, "dock_error") reset() @@ -269,11 +269,11 @@ //this is mostly for NanoUI /datum/computer/file/embedded_program/docking/proc/get_docking_status() - switch (dock_state) - if (STATE_UNDOCKED) return "undocked" - if (STATE_DOCKING) return "docking" - if (STATE_UNDOCKING) return "undocking" - if (STATE_DOCKED) return "docked" + switch(dock_state) + if(STATE_UNDOCKED) return "undocked" + if(STATE_DOCKING) return "docking" + if(STATE_UNDOCKING) return "undocking" + if(STATE_DOCKED) return "docked" #undef STATE_UNDOCKED diff --git a/code/game/machinery/embedded_controller/docking_program_multi.dm b/code/game/machinery/embedded_controller/docking_program_multi.dm index dc582b915f9..0a3d9228435 100644 --- a/code/game/machinery/embedded_controller/docking_program_multi.dm +++ b/code/game/machinery/embedded_controller/docking_program_multi.dm @@ -14,19 +14,19 @@ /datum/computer/file/embedded_program/docking/multi/New(var/obj/machinery/embedded_controller/M) ..(M) - if (istype(M,/obj/machinery/embedded_controller/radio/docking_port_multi)) //if our parent controller is the right type, then we can auto-init stuff at construction + if(istype(M,/obj/machinery/embedded_controller/radio/docking_port_multi)) //if our parent controller is the right type, then we can auto-init stuff at construction var/obj/machinery/embedded_controller/radio/docking_port_multi/controller = M //parse child_tags_txt and create child tags children_tags = splittext(controller.child_tags_txt, ";") children_ready = list() children_override = list() - for (var/child_tag in children_tags) + for(var/child_tag in children_tags) children_ready[child_tag] = 0 children_override[child_tag] = "disabled" /datum/computer/file/embedded_program/docking/multi/proc/clear_children_ready_status() - for (var/child_tag in children_tags) + for(var/child_tag in children_tags) children_ready[child_tag] = 0 /datum/computer/file/embedded_program/docking/multi/receive_signal(datum/signal/signal, receive_method, receive_param) @@ -34,21 +34,21 @@ var/command = signal.data["command"] var/recipient = signal.data["recipient"] //the intended recipient of the docking signal - if (receive_tag in children_tags) + if(receive_tag in children_tags) //track children status - if (signal.data["override_status"]) + if(signal.data["override_status"]) children_override[receive_tag] = signal.data["override_status"] - if (recipient == id_tag) - switch (command) - if ("ready_for_docking") + if(recipient == id_tag) + switch(command) + if("ready_for_docking") children_ready[receive_tag] = 1 - if ("ready_for_undocking") + if("ready_for_undocking") children_ready[receive_tag] = 1 - if ("status_override_enabled") + if("status_override_enabled") children_override[receive_tag] = 1 - if ("status_override_disabled") + if("status_override_disabled") children_override[receive_tag] = 0 ..(signal, receive_method, receive_param) @@ -58,19 +58,19 @@ clear_children_ready_status() //tell children to prepare for docking - for (var/child_tag in children_tags) + for(var/child_tag in children_tags) send_docking_command(child_tag, "prepare_for_docking") /datum/computer/file/embedded_program/docking/multi/ready_for_docking() //check children ready status - for (var/child_tag in children_tags) - if (!children_ready[child_tag]) + for(var/child_tag in children_tags) + if(!children_ready[child_tag]) return 0 return 1 /datum/computer/file/embedded_program/docking/multi/finish_docking() //tell children to finish docking - for (var/child_tag in children_tags) + for(var/child_tag in children_tags) send_docking_command(child_tag, "finish_docking") //clear ready flags @@ -81,19 +81,19 @@ clear_children_ready_status() //tell children to prepare for undocking - for (var/child_tag in children_tags) + for(var/child_tag in children_tags) send_docking_command(child_tag, "prepare_for_undocking") /datum/computer/file/embedded_program/docking/multi/ready_for_undocking() //check children ready status - for (var/child_tag in children_tags) - if (!children_ready[child_tag]) + for(var/child_tag in children_tags) + if(!children_ready[child_tag]) return 0 return 1 /datum/computer/file/embedded_program/docking/multi/finish_undocking() //tell children to finish undocking - for (var/child_tag in children_tags) + for(var/child_tag in children_tags) send_docking_command(child_tag, "finish_undocking") //clear ready flags @@ -118,13 +118,13 @@ /datum/computer/file/embedded_program/airlock/multi_docking/New(var/obj/machinery/embedded_controller/M) ..(M) - if (istype(M, /obj/machinery/embedded_controller/radio/airlock/docking_port_multi)) //if our parent controller is the right type, then we can auto-init stuff at construction + if(istype(M, /obj/machinery/embedded_controller/radio/airlock/docking_port_multi)) //if our parent controller is the right type, then we can auto-init stuff at construction var/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/controller = M src.master_tag = controller.master_tag /datum/computer/file/embedded_program/airlock/multi_docking/receive_user_command(command) - if (command == "toggle_override") - if (override_enabled) + if(command == "toggle_override") + if(override_enabled) override_enabled = 0 broadcast_override_status() else @@ -132,7 +132,7 @@ broadcast_override_status() return - if (!docking_enabled|| override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled + if(!docking_enabled|| override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled ..(command) /datum/computer/file/embedded_program/airlock/multi_docking/receive_signal(datum/signal/signal, receive_method, receive_param) @@ -142,54 +142,54 @@ var/command = signal.data["command"] var/recipient = signal.data["recipient"] //the intended recipient of the docking signal - if (receive_tag != master_tag) + if(receive_tag != master_tag) return //only respond to master //track master's status - if (signal.data["dock_status"]) + if(signal.data["dock_status"]) master_status = signal.data["dock_status"] - if (recipient != id_tag) + if(recipient != id_tag) return //this signal is not for us - switch (command) - if ("prepare_for_docking") + switch(command) + if("prepare_for_docking") docking_enabled = 1 docking_mode = 0 response_sent = 0 - if (!override_enabled) + if(!override_enabled) begin_cycle_in() - if ("prepare_for_undocking") + if("prepare_for_undocking") docking_mode = 1 response_sent = 0 - if (!override_enabled) + if(!override_enabled) stop_cycling() close_doors() disable_mech_regulation() - if ("finish_docking") - if (!override_enabled) + if("finish_docking") + if(!override_enabled) enable_mech_regulation() open_doors() - if ("finish_undocking") + if("finish_undocking") docking_enabled = 0 /datum/computer/file/embedded_program/airlock/multi_docking/process() ..() - if (docking_enabled && !response_sent) + if(docking_enabled && !response_sent) - switch (docking_mode) - if (0) //docking - if (ready_for_docking()) + switch(docking_mode) + if(0) //docking + if(ready_for_docking()) send_signal_to_master("ready_for_docking") response_sent = 1 - if (1) //undocking - if (ready_for_undocking()) + if(1) //undocking + if(ready_for_undocking()) send_signal_to_master("ready_for_undocking") response_sent = 1 @@ -206,7 +206,7 @@ toggleDoor(memory["exterior_status"], tag_exterior_door, memory["secure"], "open") /datum/computer/file/embedded_program/airlock/multi_docking/cycleDoors(var/target) - if (!docking_enabled|| override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled + if(!docking_enabled|| override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled ..(target) /datum/computer/file/embedded_program/airlock/multi_docking/proc/send_signal_to_master(var/command) diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 06a5266d17e..a4a656fa5d6 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -27,8 +27,8 @@ src.updateDialog() /obj/machinery/embedded_controller/attack_ghost(mob/user as mob) - src.ui_interact(user) - + src.ui_interact(user) + /obj/machinery/embedded_controller/attack_ai(mob/user as mob) src.ui_interact(user) @@ -55,6 +55,7 @@ unacidable = 1 /obj/machinery/embedded_controller/radio/initialize() + ..() set_frequency(frequency) /obj/machinery/embedded_controller/radio/update_icon() @@ -77,4 +78,4 @@ /obj/machinery/embedded_controller/radio/proc/set_frequency(new_frequency) radio_controller.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, radio_filter) \ No newline at end of file + radio_connection = radio_controller.add_object(src, frequency, radio_filter) diff --git a/code/game/machinery/embedded_controller/embedded_program_base.dm b/code/game/machinery/embedded_controller/embedded_program_base.dm index 06507d9d5f9..1fe527df13b 100644 --- a/code/game/machinery/embedded_controller/embedded_program_base.dm +++ b/code/game/machinery/embedded_controller/embedded_program_base.dm @@ -7,7 +7,7 @@ /datum/computer/file/embedded_program/New(var/obj/machinery/embedded_controller/M) master = M - if (istype(M, /obj/machinery/embedded_controller/radio)) + if(istype(M, /obj/machinery/embedded_controller/radio)) var/obj/machinery/embedded_controller/radio/R = M id_tag = R.id_tag diff --git a/code/game/machinery/embedded_controller/simple_docking_controller.dm b/code/game/machinery/embedded_controller/simple_docking_controller.dm index 1883d363987..996a56b92ac 100644 --- a/code/game/machinery/embedded_controller/simple_docking_controller.dm +++ b/code/game/machinery/embedded_controller/simple_docking_controller.dm @@ -21,7 +21,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "simple_docking_console.tmpl", name, 470, 290) ui.set_initial_data(data) ui.open() @@ -55,7 +55,7 @@ ..(M) memory["door_status"] = list(state = "closed", lock = "locked") //assume closed and locked in case the doors dont report in - if (istype(M, /obj/machinery/embedded_controller/radio/simple_docking_controller)) + if(istype(M, /obj/machinery/embedded_controller/radio/simple_docking_controller)) var/obj/machinery/embedded_controller/radio/simple_docking_controller/controller = M tag_door = controller.tag_door? controller.tag_door : "[id_tag]_hatch" @@ -78,13 +78,13 @@ /datum/computer/file/embedded_program/docking/simple/receive_user_command(command) switch(command) if("force_door") - if (override_enabled) + if(override_enabled) if(memory["door_status"]["state"] == "open") close_door() else open_door() if("toggle_override") - if (override_enabled) + if(override_enabled) disable_override() else enable_override() diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 3426023f13c..45b515734f7 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 @@ -174,14 +176,14 @@ FIRE ALARM var/area/A = src.loc var/d1 var/d2 - if (ishuman(user) || issilicon(user) || isobserver(user)) + if(ishuman(user) || issilicon(user) || isobserver(user)) A = A.loc - if (A.fire) + if(A.fire) d1 = text("Reset - Lockdown", src) else d1 = text("Alarm - Lockdown", src) - if (src.timing) + if(src.timing) d2 = text("Stop Time Lock", src) else d2 = text("Initiate Time Lock", src) @@ -192,11 +194,11 @@ FIRE ALARM onclose(user, "firealarm") else A = A.loc - if (A.fire) + if(A.fire) d1 = text("[]", src, stars("Reset - Lockdown")) else d1 = text("[]", src, stars("Alarm - Lockdown")) - if (src.timing) + if(src.timing) d2 = text("[]", src, stars("Stop Time Lock")) else d2 = text("[]", src, stars("Initiate Time Lock")) @@ -258,7 +260,7 @@ FIRE ALARM time = min(max(round(src.time), 0), 120) /obj/machinery/firealarm/proc/reset() - if (!( src.working )) + if(!( src.working )) return var/area/A = get_area(src) A.fire_reset() @@ -267,7 +269,7 @@ FIRE ALARM return /obj/machinery/firealarm/proc/alarm(var/duration = 0) - if (!( src.working)) + if(!( src.working)) return var/area/A = get_area(src) for(var/obj/machinery/firealarm/FA in A) @@ -308,7 +310,7 @@ Just a object used in constructing fire alarms icon = 'icons/obj/doors/door_assembly.dmi' icon_state = "door_electronics" desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\"" - w_class = 2.0 + w_class = 2 materials = list(MAT_METAL=50, MAT_GLASS=50) /obj/machinery/partyalarm @@ -330,7 +332,7 @@ Just a object used in constructing fire alarms /obj/machinery/partyalarm/New() var/area/A = get_area_master(src) - if (!( istype(A, /area) )) + if(!( istype(A, /area) )) return master_area=A @@ -343,13 +345,13 @@ Just a object used in constructing fire alarms ASSERT(isarea(A)) var/d1 var/d2 - if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai)) + if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai)) - if (A.party) + if(A.party) d1 = text("No Party :(", src) else d1 = text("PARTY!!!", src) - if (timing) + if(timing) d2 = text("Stop Time Lock", src) else d2 = text("Initiate Time Lock", src) @@ -359,11 +361,11 @@ Just a object used in constructing fire alarms user << browse(dat, "window=partyalarm") onclose(user, "partyalarm") else - if (A.fire) + if(A.fire) d1 = text("[]", src, stars("No Party :(")) else d1 = text("[]", src, stars("PARTY!!!")) - if (timing) + if(timing) d2 = text("[]", src, stars("Stop Time Lock")) else d2 = text("[]", src, stars("Initiate Time Lock")) @@ -375,7 +377,7 @@ Just a object used in constructing fire alarms return /obj/machinery/partyalarm/proc/reset() - if (!( working )) + if(!( working )) return var/area/A = get_area(src) ASSERT(isarea(A)) @@ -383,7 +385,7 @@ Just a object used in constructing fire alarms return /obj/machinery/partyalarm/proc/alarm() - if (!( working )) + if(!( working )) return var/area/A = get_area(src) ASSERT(isarea(A)) @@ -392,20 +394,20 @@ Just a object used in constructing fire alarms /obj/machinery/partyalarm/Topic(href, href_list) ..() - if (usr.stat || stat & (BROKEN|NOPOWER)) + if(usr.stat || stat & (BROKEN|NOPOWER)) return - if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon/ai))) + if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon/ai))) usr.machine = src - if (href_list["reset"]) + if(href_list["reset"]) reset() else - if (href_list["alarm"]) + if(href_list["alarm"]) alarm() else - if (href_list["time"]) + if(href_list["time"]) timing = text2num(href_list["time"]) else - if (href_list["tp"]) + if(href_list["tp"]) var/tp = text2num(href_list["tp"]) time += tp time = min(max(round(time), 0), 120) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 01f95d81ab6..655ffd11634 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -28,7 +28,7 @@ src.sd_set_light(2) */ /obj/machinery/flasher/power_change() - if ( powered() ) + if( powered() ) stat &= ~NOPOWER icon_state = "[base_state]1" // src.sd_set_light(2) @@ -39,26 +39,26 @@ //Don't want to render prison breaks impossible /obj/machinery/flasher/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/wirecutters)) + if(istype(W, /obj/item/weapon/wirecutters)) add_fingerprint(user) src.disable = !src.disable - if (src.disable) + if(src.disable) user.visible_message("\red [user] has disconnected the [src]'s flashbulb!", "\red You disconnect the [src]'s flashbulb!") - if (!src.disable) + if(!src.disable) user.visible_message("\red [user] has connected the [src]'s flashbulb!", "\red You connect the [src]'s flashbulb!") //Let the AI trigger them directly. /obj/machinery/flasher/attack_ai() - if (src.anchored) + if(src.anchored) return src.flash() else return /obj/machinery/flasher/proc/flash() - if (!(powered())) + if(!(powered())) return - if ((src.disable) || (src.last_flash && world.time < src.last_flash + 150)) + if((src.disable) || (src.last_flash && world.time < src.last_flash + 150)) return playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) @@ -67,7 +67,7 @@ use_power(1000) for(var/mob/living/L in viewers(src, null)) - if (get_dist(src, L) > src.range) + if(get_dist(src, L) > src.range) continue if(L.flash_eyes(affect_silicon = 1)) @@ -85,24 +85,24 @@ ..(severity) /obj/machinery/flasher/portable/HasProximity(atom/movable/AM as mob|obj) - if ((src.disable) || (src.last_flash && world.time < src.last_flash + 150)) + if((src.disable) || (src.last_flash && world.time < src.last_flash + 150)) return if(istype(AM, /mob/living/carbon)) var/mob/living/carbon/M = AM - if ((M.m_intent != "walk") && (src.anchored)) + if((M.m_intent != "walk") && (src.anchored)) src.flash() /obj/machinery/flasher/portable/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/wrench)) + if(istype(W, /obj/item/weapon/wrench)) add_fingerprint(user) src.anchored = !src.anchored - if (!src.anchored) + if(!src.anchored) user.show_message(text("\red [src] can now be moved.")) src.overlays.Cut() - else if (src.anchored) + else if(src.anchored) user.show_message(text("\red [src] is now secured.")) src.overlays += "[base_state]-s" diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index 7c5e152529f..53977708650 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -69,7 +69,7 @@ /obj/machinery/floodlight/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wrench)) - if (!anchored && !isinspace()) + if(!anchored && !isinspace()) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) user.visible_message( \ "[user] tightens \the [src]'s casters.", \ @@ -83,8 +83,8 @@ " You have loosened \the [src]'s casters.", \ "You hear ratchet.") anchored = 0 - if (istype(W, /obj/item/weapon/screwdriver)) - if (!open) + if(istype(W, /obj/item/weapon/screwdriver)) + if(!open) if(unlocked) unlocked = 0 to_chat(user, "You screw the battery panel in place.") @@ -92,7 +92,7 @@ unlocked = 1 to_chat(user, "You unscrew the battery panel.") - if (istype(W, /obj/item/weapon/crowbar)) + if(istype(W, /obj/item/weapon/crowbar)) if(unlocked) if(open) open = 0 @@ -103,7 +103,7 @@ open = 1 to_chat(user, "You remove the battery panel.") - if (istype(W, /obj/item/weapon/stock_parts/cell)) + if(istype(W, /obj/item/weapon/stock_parts/cell)) if(open) if(cell) to_chat(user, "There is a power cell already installed.") diff --git a/code/game/machinery/guestpass.dm b/code/game/machinery/guestpass.dm index bf1d69e7437..512ed47263a 100644 --- a/code/game/machinery/guestpass.dm +++ b/code/game/machinery/guestpass.dm @@ -11,19 +11,19 @@ var/reason = "NOT SPECIFIED" /obj/item/weapon/card/id/guest/GetAccess() - if (world.time > expiration_time) + if(world.time > expiration_time) return access else return temp_access /obj/item/weapon/card/id/guest/examine(mob/user) ..(user) - if (world.time < expiration_time) + if(world.time < expiration_time) to_chat(user, "This pass expires at [worldtime2text(expiration_time)].") else to_chat(user, "It expired at [worldtime2text(expiration_time)].") to_chat(user, "It grants access to following areas:") - for (var/A in temp_access) + for(var/A in temp_access) to_chat(user, "[get_access_desc(A)].") to_chat(user, "Issuing reason: [reason].") @@ -72,9 +72,9 @@ user.set_machine(src) var/dat - if (mode == 1) //Logs + if(mode == 1) //Logs dat += "

          Activity log


          " - for (var/entry in internal_log) + for(var/entry in internal_log) dat += "[entry]

          " dat += "Print
          " dat += "Back
          " @@ -86,15 +86,17 @@ dat += "Reason: [reason]
          " dat += "Duration (minutes): [duration] m
          " dat += "Access to areas:
          " - if (giver && giver.access) - for (var/A in get_changeable_accesses()) + if(giver && giver.access) + for(var/A in get_changeable_accesses()) var/area = get_access_desc(A) - if (A in accesses) + if(A in accesses) area = "[area]" dat += "[area]
          " dat += "
          Issue pass
          " - user << browse(dat, "window=guestpass;size=400x520") + var/datum/browser/popup = new(user, "guestpass", name, 400, 520) + popup.set_content(dat) + popup.open(0) onclose(user, "guestpass") @@ -102,37 +104,37 @@ if(..()) return 1 usr.set_machine(src) - if (href_list["mode"]) + if(href_list["mode"]) mode = text2num(href_list["mode"]) - if (href_list["choice"]) + if(href_list["choice"]) switch(href_list["choice"]) - if ("giv_name") + if("giv_name") var/nam = strip_html_simple(input("Person pass is issued to", "Name", giv_name) as text|null) - if (nam) + if(nam) giv_name = nam - if ("reason") + if("reason") var/reas = strip_html_simple(input("Reason why pass is issued", "Reason", reason) as text|null) if(reas) reason = reas - if ("duration") + if("duration") var/dur = input("Duration (in minutes) during which pass is valid (up to 30 minutes).", "Duration") as num|null - if (dur) - if (dur > 0 && dur <= 30) + if(dur) + if(dur > 0 && dur <= 30) duration = dur else to_chat(usr, "Invalid duration.") - if ("access") + if("access") var/A = text2num(href_list["access"]) - if (A in accesses) + if(A in accesses) accesses.Remove(A) else if(giver && giver.access && (A in get_changeable_accesses())) accesses.Add(A) - if (href_list["action"]) + if(href_list["action"]) switch(href_list["action"]) - if ("id") - if (giver) + if("id") + if(giver) if(ishuman(usr)) giver.loc = usr.loc if(!usr.get_active_hand()) @@ -144,15 +146,15 @@ accesses.Cut() else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) usr.drop_item() I.loc = src giver = I updateUsrDialog() - if ("print") + if("print") var/dat = "

          Activity log of guest pass terminal #[uid]


          " - for (var/entry in internal_log) + for(var/entry in internal_log) dat += "[entry]

          " // to_chat(usr, "Printing the log, standby...") //sleep(50) @@ -161,13 +163,13 @@ P.name = "activity log" P.info = dat - if ("issue") - if (giver) + if("issue") + if(giver) var/number = add_zero("[rand(0,9999)]", 4) var/entry = "\[[worldtime2text()]\] Pass #[number] issued by [giver.registered_name] ([giver.assignment]) to [giv_name]. Reason: [reason]. Grants access to following areas: " - for (var/i=1 to accesses.len) + for(var/i=1 to accesses.len) var/A = accesses[i] - if (A) + if(A) var/area = get_access_desc(A) entry += "[i > 1 ? ", [area]" : "[area]"]" entry += ". Expires at [worldtime2text(world.time + duration*10*60)]." diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index c8e16257858..abe99777410 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -81,7 +81,7 @@ var/const/HOLOPAD_MODE = 0 to_chat(user, "A request for AI presence was already sent recently.") /obj/machinery/hologram/holopad/attack_ai(mob/living/silicon/ai/user) - if (!istype(user)) + if(!istype(user)) return /*There are pretty much only three ways to interact here. I don't need to check for client since they're clicking on an object. @@ -100,9 +100,9 @@ var/const/HOLOPAD_MODE = 0 create_holo(user)//Create one. src.visible_message("A holographic image of [user] flicks to life right before your eyes!") else - to_chat(user, "\red ERROR: \black Image feed in progress.") + to_chat(user, "ERROR: Image feed in progress.") else - to_chat(user, "\red ERROR: \black Unable to project hologram.") + to_chat(user, "ERROR: Unable to project hologram.") return /*This is the proc for special two-way communication between AI and holopad/people talking near holopad. @@ -123,7 +123,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ rendered = "Holopad received, [name_used] [verb], \"[text]\"" master.show_message(rendered, 2) return - + /obj/machinery/hologram/holopad/hear_message(mob/living/M, text) if(M&&hologram&&master)//Master is mostly a safety in case lag hits or something. var/name_used = M.GetVoice() @@ -165,7 +165,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ if((HOLOPAD_MODE == 0 && (get_dist(master.eyeobj, src) <= holo_range))) return 1 - else if (HOLOPAD_MODE == 1) + else if(HOLOPAD_MODE == 1) var/area/holo_area = get_area(src) var/area/eye_area = get_area(master.eyeobj) @@ -219,10 +219,10 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ if(1.0) qdel(src) if(2.0) - if (prob(50)) + if(prob(50)) qdel(src) if(3.0) - if (prob(5)) + if(prob(5)) qdel(src) return diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm index 687a07ced0f..d44ee2e3930 100644 --- a/code/game/machinery/holosign.dm +++ b/code/game/machinery/holosign.dm @@ -10,19 +10,19 @@ var/on_icon = "sign_on" proc/toggle() - if (stat & (BROKEN|NOPOWER)) + if(stat & (BROKEN|NOPOWER)) return lit = !lit update_icon() update_icon() - if (!lit) + if(!lit) icon_state = "sign_off" else icon_state = on_icon power_change() - if (stat & NOPOWER) + if(stat & NOPOWER) lit = 0 update_icon() @@ -67,7 +67,7 @@ icon_state = "light0" for(var/obj/machinery/holosign/M in world) - if (M.id == src.id) + if(M.id == src.id) spawn( 0 ) M.toggle() return diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index d6e41d29fa2..7cb51574a60 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -25,9 +25,9 @@ return /obj/machinery/igniter/process() //ugh why is this even in process()? - if (src.on && !(stat & NOPOWER) ) + if(src.on && !(stat & NOPOWER) ) var/turf/location = src.loc - if (isturf(location)) + if(isturf(location)) location.hotspot_expose(1000,500,1) return 1 @@ -58,7 +58,7 @@ ..() /obj/machinery/sparker/power_change() - if ( powered() && disable == 0 ) + if( powered() && disable == 0 ) stat &= ~NOPOWER icon_state = "[base_state]" // src.sd_set_light(2) @@ -70,13 +70,13 @@ /obj/machinery/sparker/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/device/detective_scanner)) return - if (istype(W, /obj/item/weapon/screwdriver)) + if(istype(W, /obj/item/weapon/screwdriver)) add_fingerprint(user) src.disable = !src.disable - if (src.disable) + if(src.disable) user.visible_message("\red [user] has disabled the [src]!", "\red You disable the connection to the [src].") icon_state = "[base_state]-d" - if (!src.disable) + if(!src.disable) user.visible_message("\red [user] has reconnected the [src]!", "\red You fix the connection to the [src].") if(src.powered()) icon_state = "[base_state]" @@ -84,16 +84,16 @@ icon_state = "[base_state]-p" /obj/machinery/sparker/attack_ai() - if (src.anchored) + if(src.anchored) return src.spark() else return /obj/machinery/sparker/proc/spark() - if (!(powered())) + if(!(powered())) return - if ((src.disable) || (src.last_spark && world.time < src.last_spark + 50)) + if((src.disable) || (src.last_spark && world.time < src.last_spark + 50)) return @@ -104,7 +104,7 @@ src.last_spark = world.time use_power(1000) var/turf/location = src.loc - if (isturf(location)) + if(isturf(location)) location.hotspot_expose(1000,500,1) return 1 diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 5caff96d4ea..9c6b0fc548d 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -58,7 +58,7 @@ /obj/machinery/iv_drip/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/reagent_containers)) + if(istype(W, /obj/item/weapon/reagent_containers)) if(!isnull(src.beaker)) to_chat(user, "There is already a reagent container loaded!") return @@ -124,14 +124,16 @@ var/datum/reagent/B = T.take_blood(beaker,amount) - if (B) + if(B) beaker.reagents.reagent_list |= B beaker.reagents.update_total() beaker.on_reagent_change() beaker.reagents.handle_reactions() update_icon() -/obj/machinery/iv_drip/attack_hand(mob/user as mob) +/obj/machinery/iv_drip/attack_hand(mob/living/carbon/user) + if(!istype(user)) + return if(src.beaker) src.beaker.loc = get_turf(src) src.beaker = null @@ -157,7 +159,7 @@ /obj/machinery/iv_drip/examine(mob/user) ..(user) - if (!(user in view(2)) && usr != src.loc) return + if(!(user in view(2)) && usr != src.loc) return to_chat(usr, "The IV drip is [mode ? "injecting" : "taking blood"].") diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index 4c271a08f44..ddf289d6189 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -281,12 +281,12 @@ playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1) operating = 0 - for (var/obj/item/thing in contents) //Meat is spawned inside the gibber and thrown out afterwards. + for(var/obj/item/thing in contents) //Meat is spawned inside the gibber and thrown out afterwards. thing.loc = get_turf(thing) // Drop it onto the turf for throwing. thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15) // Being pelted with bits of meat and bone would hurt. sleep(1) - for (var/obj/effect/gibs in contents) //throw out the gibs too + for(var/obj/effect/gibs in contents) //throw out the gibs too gibs.loc = get_turf(gibs) //drop onto turf for throwing gibs.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15) sleep(1) diff --git a/code/game/machinery/kitchen/icecream_vat.dm b/code/game/machinery/kitchen/icecream_vat.dm index a5e1cc1eafb..91db3bd7416 100644 --- a/code/game/machinery/kitchen/icecream_vat.dm +++ b/code/game/machinery/kitchen/icecream_vat.dm @@ -87,7 +87,9 @@ var/list/ingredients_source = list( dat += "No beaker inserted. " dat += "Refresh Close" - user << browse(dat,"window=icecreamvat;size=600x400") + var/datum/browser/popup = new(user, "icecreamvat", name, 600, 400) + popup.set_content(dat) + popup.open(0) /obj/machinery/icecream_vat/attackby(var/obj/item/O as obj, var/mob/user as mob, params) if(istype(O, /obj/item/weapon/reagent_containers)) @@ -97,7 +99,7 @@ var/list/ingredients_source = list( if(ingredients[ICECREAM_VANILLA] > 0) var/flavour_name = get_icecream_flavour_string(dispense_flavour) if(dispense_flavour < 11 && ingredients[dispense_flavour] > 0) - src.visible_message("\icon[src] [user] scoops delicious [flavour_name] flavoured icecream into [I].") + src.visible_message("[bicon(src)] [user] scoops delicious [flavour_name] flavoured icecream into [I].") ingredients[dispense_flavour] -= 1 ingredients[ICECREAM_VANILLA] -= 1 @@ -126,7 +128,7 @@ var/list/ingredients_source = list( var/obj/item/weapon/reagent_containers/R = O if(R.reagents) src.visible_message("[user] has emptied all of [R] into [src].") - for (var/datum/reagent/current_reagent in R.reagents.reagent_list) + for(var/datum/reagent/current_reagent in R.reagents.reagent_list) if(ingredients_source[current_reagent.id]) add(ingredients_source[current_reagent.id], current_reagent.volume / 2) else diff --git a/code/game/machinery/kitchen/juicer.dm b/code/game/machinery/kitchen/juicer.dm index 7b25e683941..895f4bad428 100644 --- a/code/game/machinery/kitchen/juicer.dm +++ b/code/game/machinery/kitchen/juicer.dm @@ -36,9 +36,9 @@ /obj/machinery/juicer/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if (istype(O,/obj/item/weapon/reagent_containers/glass) || \ + if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass)) - if (beaker) + if(beaker) return 1 else if(!user.unEquip(O)) @@ -50,7 +50,7 @@ update_icon() src.updateUsrDialog() return 0 - if (!is_type_in_list(O, allowed_items)) + if(!is_type_in_list(O, allowed_items)) to_chat(user, "It doesn't look like that contains any juice.") return 1 if(!user.unEquip(O)) @@ -73,21 +73,21 @@ var/processing_chamber = "" var/beaker_contents = "" - for (var/i in allowed_items) - for (var/obj/item/O in src.contents) - if (!istype(O,i)) + for(var/i in allowed_items) + for(var/obj/item/O in src.contents) + if(!istype(O,i)) continue processing_chamber+= "some [O]
          " break - if (!processing_chamber) + if(!processing_chamber) is_chamber_empty = 1 processing_chamber = "Nothing." - if (!beaker) + if(!beaker) beaker_contents = "\The [src] has no beaker attached." - else if (!beaker.reagents.total_volume) + else if(!beaker.reagents.total_volume) beaker_contents = "\The [src] has attached an empty beaker." is_beaker_ready = 1 - else if (beaker.reagents.total_volume < beaker.reagents.maximum_volume) + else if(beaker.reagents.total_volume < beaker.reagents.maximum_volume) beaker_contents = "\The [src] has attached a beaker with something." is_beaker_ready = 1 else @@ -98,11 +98,13 @@ [processing_chamber]
          [beaker_contents]
          "} - if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) + if(is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) dat += "Turn on!
          " - if (beaker) + if(beaker) dat += "
          Detach a beaker!
          " - user << browse("Juicer[dat]", "window=juicer") + var/datum/browser/popup = new(user, "juicer", name, 400, 400) + popup.set_content(dat) + popup.open(0) onclose(user, "juicer") return @@ -112,10 +114,10 @@ return usr.set_machine(src) switch(href_list["action"]) - if ("juice") + if("juice") juice() - if ("detach") + if("detach") detach() src.updateUsrDialog() return @@ -124,9 +126,9 @@ set category = "Object" set name = "Detach Beaker from the juicer" set src in oview(1) - if (usr.stat != 0) + if(usr.stat != 0) return - if (!beaker) + if(!beaker) return src.verbs -= /obj/machinery/juicer/verb/detach beaker.forceMove(src.loc) @@ -134,7 +136,7 @@ update_icon() /obj/machinery/juicer/proc/get_juice_id(var/obj/item/weapon/reagent_containers/food/snacks/O) - if (istype(O, /obj/item/weapon/reagent_containers/food/snacks/watermelonslice)) + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/watermelonslice)) return "watermelonjuice" else if(istype(O, /obj.item/weapon/reagent_containers/food/snacks/grown)) var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O @@ -144,9 +146,9 @@ return "water" /obj/machinery/juicer/proc/get_juice_amount(var/obj/item/weapon/reagent_containers/food/snacks/grown/O) - if (!istype(O)) + if(!istype(O)) return 5 - else if (O.potency == -1) + else if(O.potency == -1) return 5 else return round(5*sqrt(O.potency)) @@ -155,14 +157,14 @@ power_change() //it is a portable machine if(stat & (NOPOWER|BROKEN)) return - if (!beaker || beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + if(!beaker || beaker.reagents.total_volume >= beaker.reagents.maximum_volume) return playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1) - for (var/obj/item/weapon/reagent_containers/food/snacks/O in src.contents) + for(var/obj/item/weapon/reagent_containers/food/snacks/O in src.contents) var/r_id = get_juice_id(O) beaker.reagents.add_reagent(r_id,get_juice_amount(O)) qdel(O) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break /obj/structure/closet/crate/juice diff --git a/code/game/machinery/kitchen/kitchen_machine.dm b/code/game/machinery/kitchen/kitchen_machine.dm index 5c584d0468b..6f9e1a191fc 100644 --- a/code/game/machinery/kitchen/kitchen_machine.dm +++ b/code/game/machinery/kitchen/kitchen_machine.dm @@ -34,19 +34,19 @@ /obj/machinery/kitchen_machine/New() reagents = new/datum/reagents(100) reagents.my_atom = src - if (!available_recipes) + if(!available_recipes) available_recipes = new acceptable_items = new acceptable_reagents = new - for (var/type in subtypesof(recipe_type)) + for(var/type in subtypesof(recipe_type)) var/datum/recipe/recipe = new type if(recipe.result) // Ignore recipe subtypes that lack a result available_recipes += recipe - for (var/item in recipe.items) + for(var/item in recipe.items) acceptable_items |= item - for (var/reagent in recipe.reagents) + for(var/reagent in recipe.reagents) acceptable_reagents |= reagent - if (recipe.items || recipe.fruit) + if(recipe.items || recipe.fruit) max_n_of_items = max(max_n_of_items,recipe.count_n_items()) else qdel(recipe) @@ -83,7 +83,7 @@ "[user] starts to fix part of \the [src].", \ "You start to fix part of \the [src]." \ ) - if (do_after(user,20, target = src)) + if(do_after(user,20, target = src)) user.visible_message( \ "[user] fixes part of \the [src].", \ "You have fixed part of \the [src]." \ @@ -94,7 +94,7 @@ "[user] starts to fix part of \the [src].", \ "You start to fix part of \the [src]." \ ) - if (do_after(user,20, target = src)) + if(do_after(user,20, target = src)) user.visible_message( \ "[user] fixes \the [src].", \ "You have fixed \the [src]." \ @@ -112,7 +112,7 @@ "[user] starts to clean \the [src].", \ "You start to clean \the [src]." \ ) - if (do_after(user,20, target = src)) + if(do_after(user,20, target = src)) user.visible_message( \ "[user] has cleaned \the [src].", \ "You have cleaned \the [src]." \ @@ -125,10 +125,10 @@ to_chat(user, "It's dirty!") return 1 else if(is_type_in_list(O,acceptable_items)) - if (contents.len>=max_n_of_items) + if(contents.len>=max_n_of_items) to_chat(user, "This [src] is full of ingredients, you cannot put more.") return 1 - if (istype(O,/obj/item/stack) && O:amount>1) + if(istype(O,/obj/item/stack) && O:amount>1) new O.type (src) O:use(1) user.visible_message( \ @@ -147,10 +147,10 @@ istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \ istype(O,/obj/item/weapon/reagent_containers/food/condiment) \ ) - if (!O.reagents) + if(!O.reagents) return 1 - for (var/datum/reagent/R in O.reagents.reagent_list) - if (!(R.id in acceptable_reagents)) + for(var/datum/reagent/R in O.reagents.reagent_list) + if(!(R.id in acceptable_reagents)) to_chat(user, "Your [O] contains components unsuitable for cookery.") return 1 //G.reagents.trans_to(src,G.amount_per_transfer_from_this) @@ -188,53 +188,55 @@ var/list/items_counts = new var/list/items_measures = new var/list/items_measures_p = new - for (var/obj/O in contents) + for(var/obj/O in contents) var/display_name = O.name - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) items_measures[display_name] = "egg" items_measures_p[display_name] = "eggs" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) items_measures[display_name] = "tofu chunk" items_measures_p[display_name] = "tofu chunks" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat items_measures[display_name] = "slab of meat" items_measures_p[display_name] = "slabs of meat" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) display_name = "Turnovers" items_measures[display_name] = "turnover" items_measures_p[display_name] = "turnovers" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) items_measures[display_name] = "fillet of meat" items_measures_p[display_name] = "fillets of meat" items_counts[display_name]++ - for (var/O in items_counts) + for(var/O in items_counts) var/N = items_counts[O] - if (!(O in items_measures)) + if(!(O in items_measures)) dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
          "} else - if (N==1) + if(N==1) dat += {"[capitalize(O)]: [N] [items_measures[O]]
          "} else dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
          "} - for (var/datum/reagent/R in reagents.reagent_list) + for(var/datum/reagent/R in reagents.reagent_list) var/display_name = R.name - if (R.id == "capsaicin") + if(R.id == "capsaicin") display_name = "Hotsauce" - if (R.id == "frostoil") + if(R.id == "frostoil") display_name = "Coldsauce" dat += {"[display_name]: [R.volume] unit\s
          "} - if (items_counts.len==0 && reagents.reagent_list.len==0) + if(items_counts.len==0 && reagents.reagent_list.len==0) dat = {"The [src] is empty
          "} else dat = {"Ingredients:
          [dat]"} dat += {"

          \ -
          Turn on!
          \ -
          Eject ingredients!
          \ +
          Turn on!
          \ +Eject ingredients!
          \ "} - user << browse("[src] Controls[dat]", "window=[src.name]") + var/datum/browser/popup = new(user, name, name, 400, 400) + popup.set_content(dat) + popup.open(0) onclose(user, "[src.name]") return @@ -248,8 +250,8 @@ if(stat & (NOPOWER|BROKEN)) return start() - if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run - if (!wzhzhzh(10)) + if(reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run + if(!wzhzhzh(10)) abort() return stop() @@ -258,10 +260,10 @@ var/datum/recipe/recipe = select_recipe(available_recipes,src) var/obj/cooked var/obj/byproduct - if (!recipe) + if(!recipe) dirty += 1 - if (prob(max(10,dirty*5))) - if (!wzhzhzh(4)) + if(prob(max(10,dirty*5))) + if(!wzhzhzh(4)) abort() return muck_start() @@ -269,15 +271,15 @@ muck_finish() fail() return - else if (has_extra_item()) - if (!wzhzhzh(4)) + else if(has_extra_item()) + if(!wzhzhzh(4)) abort() return broke() fail() return else - if (!wzhzhzh(10)) + if(!wzhzhzh(10)) abort() return stop() @@ -285,10 +287,10 @@ return else var/halftime = round(recipe.time/10/2) - if (!wzhzhzh(halftime)) + if(!wzhzhzh(halftime)) abort() return - if (!wzhzhzh(halftime)) + if(!wzhzhzh(halftime)) abort() fail() return @@ -304,16 +306,16 @@ return /obj/machinery/kitchen_machine/proc/wzhzhzh(var/seconds as num) - for (var/i=1 to seconds) - if (stat & (NOPOWER|BROKEN)) + for(var/i=1 to seconds) + if(stat & (NOPOWER|BROKEN)) return 0 use_power(500) sleep(10) return 1 /obj/machinery/kitchen_machine/proc/has_extra_item() - for (var/obj/O in contents) - if ( \ + for(var/obj/O in contents) + if( \ !istype(O,/obj/item/weapon/reagent_containers/food) && \ !istype(O, /obj/item/weapon/grown) \ ) @@ -338,9 +340,9 @@ src.updateUsrDialog() /obj/machinery/kitchen_machine/proc/dispose() - for (var/obj/O in contents) + for(var/obj/O in contents) O.forceMove(src.loc) - if (src.reagents.total_volume) + if(src.reagents.total_volume) src.dirty++ src.reagents.clear_reagents() to_chat(usr, "You dispose of \the [src]'s contents.") @@ -373,11 +375,11 @@ /obj/machinery/kitchen_machine/proc/fail() var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src) var/amount = 0 - for (var/obj/O in contents-ffuu) + for(var/obj/O in contents-ffuu) amount++ - if (O.reagents) + if(O.reagents) var/id = O.reagents.get_master_reagent_id() - if (id) + if(id) amount+=O.reagents.get_reagent_amount(id) qdel(O) src.reagents.clear_reagents() @@ -395,9 +397,9 @@ return switch(href_list["action"]) - if ("cook") + if("cook") cook() - if ("dispose") + if("dispose") dispose() - return \ No newline at end of file + return diff --git a/code/game/machinery/kitchen/monkeyrecycler.dm b/code/game/machinery/kitchen/monkeyrecycler.dm index b95e4ae5318..dc283e65d6c 100644 --- a/code/game/machinery/kitchen/monkeyrecycler.dm +++ b/code/game/machinery/kitchen/monkeyrecycler.dm @@ -62,9 +62,9 @@ cycle_through = 0 to_chat(user, "You change the monkeycube type to [initial(cube_type.name)].") - if (src.stat != 0) //NOPOWER etc + if(src.stat != 0) //NOPOWER etc return - if (istype(O, /obj/item/weapon/grab)) + if(istype(O, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = O var/grabbed = G.affecting if(istype(grabbed, /mob/living/carbon/human)) @@ -91,7 +91,7 @@ return /obj/machinery/monkey_recycler/attack_hand(var/mob/user as mob) - if (src.stat != 0) //NOPOWER etc + if(src.stat != 0) //NOPOWER etc return if(grinded >= required_grind) to_chat(user, "The machine hisses loudly as it condenses the grinded monkey meat. After a moment, it dispenses a brand new monkey cube.") diff --git a/code/game/machinery/kitchen/processor.dm b/code/game/machinery/kitchen/processor.dm index 881c0536803..cf0aeba069e 100644 --- a/code/game/machinery/kitchen/processor.dm +++ b/code/game/machinery/kitchen/processor.dm @@ -45,7 +45,7 @@ if(!picked_slime) return var/datum/food_processor_process/P = select_recipe(picked_slime) - if (!P) + if(!P) return visible_message("[picked_slime] is sucked into \the [src].") @@ -58,10 +58,10 @@ var/time = 40 /datum/food_processor_process/proc/process_food(loc, what, obj/machinery/processor/processor) - if (src.output && loc && processor) + if(src.output && loc && processor) for(var/i = 0, i < processor.rating_amount, i++) new src.output(loc) - if (what) + if(what) qdel(what) ///////////////////////// @@ -118,7 +118,7 @@ /datum/food_processor_process/mob/monkey/process_food(loc, what, processor) var/mob/living/carbon/human/monkey/O = what - if (O.client) //grief-proof + if(O.client) //grief-proof O.loc = loc O.visible_message("Suddenly [O] jumps out from the processor!", \ "You jump out of \the [src].", \ @@ -143,13 +143,13 @@ //END RECIPE DATUMS /obj/machinery/processor/proc/select_recipe(var/X) - for (var/Type in subtypesof(/datum/food_processor_process) - /datum/food_processor_process/mob) + for(var/Type in subtypesof(/datum/food_processor_process) - /datum/food_processor_process/mob) var/datum/food_processor_process/P = new Type() if(istype(X, /obj/item/weapon/reagent_containers/food/snacks/grown)) var/obj/item/weapon/reagent_containers/food/snacks/grown/G = X if(G.seed.kitchen_tag != P.input) continue - else if (!istype(X, P.input)) + else if(!istype(X, P.input)) continue return P return 0 @@ -173,13 +173,13 @@ var/obj/item/what = O - if (istype(O, /obj/item/weapon/grab)) + if(istype(O, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = O what = G.affecting var/datum/food_processor_process/P = select_recipe(what) - if (!P) + if(!P) to_chat(user, "That probably won't blend.") return 1 @@ -211,7 +211,7 @@ var/total_time = 0 for(var/O in src.contents) var/datum/food_processor_process/P = select_recipe(O) - if (!P) + if(!P) log_debug("The [O] in processor([src]) does not have a suitable recipe, but it was somehow put inside of the processor anyways.") continue total_time += P.time @@ -219,7 +219,7 @@ for(var/O in src.contents) var/datum/food_processor_process/P = select_recipe(O) - if (!P) + if(!P) log_debug("The [O] in processor([src]) does not have a suitable recipe, but it was somehow put inside of the processor anyways.") continue P.process_food(src.loc, O, src) diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index b17b09d5419..8f2c4e58cd9 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -322,7 +322,7 @@ data["secure"] = is_secure var/list/items[0] - for (var/i=1 to length(item_quants)) + for(var/i=1 to length(item_quants)) var/K = item_quants[i] var/count = item_quants[K] if(count > 0) @@ -377,7 +377,7 @@ if(!target) return 0 - for (var/O in item_quants) + for(var/O in item_quants) if(item_quants[O] <= 0) //Try to use a record that actually has something to dump. continue diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 3bc2bec5ec4..08e88b9c8c9 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -39,7 +39,7 @@ src.area = locate(text2path("/area/[otherarea]")) if(!name) - name = "light switch ([area.name])" + name = "light switch([area.name])" src.on = src.area.lightswitch updateicon() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 5ad3ba4a048..ae299d78a90 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -47,7 +47,7 @@ Class Variables: Currently unused. Class Procs: - New() 'game/machinery/machine.dm' + initialize() 'game/machinery/machine.dm' Destroy() 'game/machinery/machine.dm' @@ -117,24 +117,25 @@ Class Procs: var/use_log = list() var/list/settagwhitelist = list()//WHITELIST OF VARIABLES THAT THE set_tag HREF CAN MODIFY, DON'T PUT SHIT YOU DON'T NEED ON HERE, AND IF YOU'RE GONNA USE set_tag (format_tag() proc), ADD TO THIS LIST. -/obj/machinery/New() +/obj/machinery/initialize() addAtProcessing() - return ..() + . = ..() + power_change() /obj/machinery/proc/addAtProcessing() - if (use_power) + if(use_power) myArea = get_area_master(src) machines += src /obj/machinery/proc/removeAtProcessing() - if (myArea) + if(myArea) myArea = null machines -= src /obj/machinery/Destroy() - if (src in machines) + if(src in machines) removeAtProcessing() return ..() @@ -158,11 +159,11 @@ Class Procs: qdel(src) return if(2.0) - if (prob(50)) + if(prob(50)) qdel(src) return if(3.0) - if (prob(25)) + if(prob(25)) qdel(src) return else @@ -232,7 +233,7 @@ Class Procs: if("unlink" in href_list) var/idx = text2num(href_list["unlink"]) - if (!idx) + if(!idx) return 1 var/obj/O = getLink(idx) @@ -255,7 +256,7 @@ Class Procs: if(!canLink(O,href_list)) to_chat(usr, "\red You can't link with that device.") return 1 - if (isLinkedWith(O)) + if(isLinkedWith(O)) to_chat(usr, "\red A red light flashes on \the [P]. The two devices are already linked.") return 1 @@ -324,14 +325,13 @@ Class Procs: //////////////////////////////////////////////////////////////////////////////////////////// -/obj/machinery/attack_ai(var/mob/user as mob) - if(isrobot(user)) - // For some reason attack_robot doesn't work - // This is to stop robots from using cameras to remotely control machines. - if(user.client && user.client.eye == user) - return src.attack_hand(user) +/obj/machinery/attack_ai(mob/user) + if(isrobot(user))// For some reason attack_robot doesn't work + var/mob/living/silicon/robot/R = user + if(R.client && R.client.eye == R && !R.low_power_mode)// This is to stop robots from using cameras to remotely control machines; and from using machines when the borg has no power. + return attack_hand(user) else - return src.attack_hand(user) + return attack_hand(user) /obj/machinery/attack_hand(mob/user as mob) if(user.lying || user.stat) @@ -341,7 +341,7 @@ Class Procs: to_chat(user, "You don't have the dexterity to do this!") return 1 - if (ishuman(user)) + if(ishuman(user)) var/mob/living/carbon/human/H = user if(H.getBrainLoss() >= 60) visible_message("[H] stares cluelessly at [src] and drools.") @@ -362,6 +362,7 @@ Class Procs: return ..() /obj/machinery/CheckParts() + ..() RefreshParts() return @@ -420,10 +421,10 @@ Class Procs: /obj/machinery/proc/state(var/msg) for(var/mob/O in hearers(src, null)) - O.show_message("\icon[src] [msg]", 2) + O.show_message("[bicon(src)] [msg]", 2) /obj/machinery/proc/ping(text=null) - if (!text) + if(!text) text = "\The [src] pings." state(text, "blue") @@ -465,7 +466,7 @@ Class Procs: /obj/machinery/proc/display_parts(mob/user) to_chat(user, "Following parts detected in the machine:") for(var/obj/item/C in component_parts) - to_chat(user, "\icon[C] [C.name]") + to_chat(user, "[bicon(C)] [C.name]") /obj/machinery/examine(mob/user) ..(user) @@ -547,7 +548,7 @@ Class Procs: var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() - if (electrocute_mob(user, get_area(src), src, 0.7)) + if(electrocute_mob(user, get_area(src), src, 0.7)) if(user.stunned) return 1 return 0 diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 0bd5fff9fba..7953f738a40 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -211,7 +211,7 @@ set name = "Rotate Frame" set src in view(1) - if ( usr.stat || usr.restrained() || (usr.status_flags & FAKEDEATH)) + if( usr.stat || usr.restrained() || (usr.status_flags & FAKEDEATH)) return src.dir = turn(src.dir, -90) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 79579e1bb66..5b6cfb5e73d 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -86,9 +86,9 @@ updateicon() - else if (istype(I, /obj/item/weapon/card/id)||istype(I, /obj/item/device/pda)) + else if(istype(I, /obj/item/weapon/card/id)||istype(I, /obj/item/device/pda)) if(open) - if (src.allowed(user)) + if(src.allowed(user)) src.locked = !src.locked to_chat(user, "Controls are now [src.locked ? "locked" : "unlocked"].") else diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index d991e7c5235..3a6ef2dbd81 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -12,6 +12,7 @@ var/is_admin_message = 0 var/icon/img = null var/icon/backup_img + var/view_count = 0 /datum/feed_channel var/channel_name="" @@ -22,6 +23,7 @@ var/backup_author="" var/censored=0 var/is_admin_channel=0 + var/total_view_count = 0 //var/page = null //For newspapers /datum/feed_message/proc/clear() @@ -31,6 +33,7 @@ src.backup_author = "" src.img = null src.backup_img = null + view_count = 0 /datum/feed_channel/proc/clear() src.channel_name = "" @@ -40,6 +43,7 @@ src.backup_author = "" src.censored = 0 src.is_admin_channel = 0 + total_view_count = 0 /datum/feed_channel/proc/announce_news() return "Breaking news from [channel_name]!" @@ -98,6 +102,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co var/c_locked=0; //Will our new channel be locked to public submissions? var/hitstaken = 0 //Death at 3 hits from an item with force>=15 var/datum/feed_channel/viewing_channel = null + var/silence = 0 light_range = 0 anchored = 1 @@ -199,8 +204,12 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co dat+= {"

          Create Feed Channel
          View Feed Channels
          Submit new Feed story -
          Print newspaper -
          Re-scan User +
          Print newspaper"} + if(!silence) + dat+= "
          Silence unit" + else + dat+= "
          Unsilence unit" + dat+= {"
          Re-scan User

          Exit"} if(src.securityCaster) var/wanted_already = 0 @@ -219,7 +228,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co else for(var/datum/feed_channel/CHANNEL in news_network.network_channels) if(CHANNEL.is_admin_channel) - dat+="[CHANNEL.channel_name]
          " + dat+="[CHANNEL.channel_name]
          " else dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
          " /*for(var/datum/feed_channel/CHANNEL in src.channel_list) @@ -254,11 +263,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(6) dat+="ERROR: Could not submit Feed story to Network.

          " if(src.channel_name=="") - dat+="•Invalid receiving channel name.
          " + dat+="Invalid receiving channel name.
          " if(src.scanned_user=="Unknown") - dat+="•Channel author unverified.
          " + dat+="Channel author unverified.
          " if(src.msg == "" || src.msg == "\[REDACTED\]") - dat+="•Invalid message body.
          " + dat+="Invalid message body.
          " dat+="
          Return
          " if(7) @@ -272,18 +281,18 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co else existing_authors += FC.author if(src.scanned_user in existing_authors) - dat+="•There already exists a Feed channel under your name.
          " + dat+="There already exists a Feed channel under your name.
          " if(src.channel_name=="" || src.channel_name == "\[REDACTED\]") - dat+="•Invalid channel name.
          " + dat+="Invalid channel name.
          " var/check = 0 for(var/datum/feed_channel/FC in news_network.network_channels) if(FC.channel_name == src.channel_name) check = 1 break if(check) - dat+="•Channel name already in use.
          " + dat+="Channel name already in use.
          " if(src.scanned_user=="Unknown") - dat+="•Channel author unverified.
          " + dat+="Channel author unverified.
          " dat+="
          Return
          " if(8) var/total_num=length(news_network.network_channels) @@ -299,7 +308,9 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co dat+="

          Print Paper" dat+="
          Cancel" if(9) - dat+="[src.viewing_channel.channel_name]: \[created by: [src.viewing_channel.author]\]
          " + dat+="[src.viewing_channel.channel_name]: \[created by: [src.viewing_channel.author]\]
          " + dat+="Feed view count: [viewing_channel.total_view_count]
          " + viewing_channel.total_view_count++ if(src.viewing_channel.censored) dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
          " dat+="No further feed story additions are allowed while the D-Notice is in effect.

          " @@ -315,6 +326,8 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co usr << browse_rsc(MESSAGE.img, "tmp_photo[i].png") dat+="

          " dat+="\[[MESSAGE.message_type] by [MESSAGE.author]\]
          " + dat+="Message view count: [MESSAGE.view_count]
          " + MESSAGE.view_count++ dat+="

          Refresh" dat+="
          Back" if(10) @@ -394,11 +407,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(16) dat+="ERROR: Wanted Issue rejected by Network.

          " if(src.channel_name=="" || src.channel_name == "\[REDACTED\]") - dat+="•Invalid name for person wanted.
          " + dat+="Invalid name for person wanted.
          " if(src.scanned_user=="Unknown") - dat+="•Issue author unverified.
          " + dat+="Issue author unverified.
          " if(src.msg == "" || src.msg == "\[REDACTED\]") - dat+="•Invalid description.
          " + dat+="Invalid description.
          " dat+="
          Return
          " if(17) dat+="Wanted Issue successfully deleted from Circulation
          " @@ -427,7 +440,9 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com" - human_or_robot_user << browse(dat, "window=newscaster_main;size=400x600") + var/datum/browser/popup = new(user, "newscaster_main", name, 400, 600) + popup.set_content(dat) + popup.open(0) onclose(human_or_robot_user, "newscaster_main") /*if(src.isbroken) //debugging shit @@ -441,11 +456,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co /obj/machinery/newscaster/Topic(href, href_list) if(..()) return 1 - + usr.set_machine(src) if(href_list["set_channel_name"]) src.channel_name = sanitizeSQL(strip_html_simple(input(usr, "Provide a Feed Channel Name", "Network Channel Handler", ""))) - while (findtext(src.channel_name," ") == 1) + while(findtext(src.channel_name," ") == 1) src.channel_name = copytext(src.channel_name,2,lentext(src.channel_name)+1) src.updateUsrDialog() //src.update_icon() @@ -497,7 +512,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co else if(href_list["set_new_message"]) src.msg = strip_html(input(usr, "Write your feed story", "Network Channel Handler", "")) - while (findtext(src.msg," ") == 1) + while(findtext(src.msg," ") == 1) src.msg = copytext(src.msg,2,lentext(src.msg)+1) src.updateUsrDialog() @@ -546,6 +561,14 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co src.screen = 20 src.updateUsrDialog() + else if(href_list["silence_unit"]) + silence=1 + updateUsrDialog() + + else if(href_list["unsilence_unit"]) + silence=0 + updateUsrDialog() + else if(href_list["menu_censor_story"]) src.screen=10 src.updateUsrDialog() @@ -567,13 +590,13 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co else if(href_list["set_wanted_name"]) src.channel_name = strip_html(input(usr, "Provide the name of the Wanted person", "Network Security Handler", "")) - while (findtext(src.channel_name," ") == 1) + while(findtext(src.channel_name," ") == 1) src.channel_name = copytext(src.channel_name,2,lentext(src.channel_name)+1) src.updateUsrDialog() else if(href_list["set_wanted_desc"]) src.msg = strip_html(input(usr, "Provide the a description of the Wanted person and any other details you deem important", "Network Security Handler", "")) - while (findtext(src.msg," ") == 1) + while(findtext(src.msg," ") == 1) src.msg = copytext(src.msg,2,lentext(src.msg)+1) src.updateUsrDialog() @@ -685,7 +708,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co else if(href_list["setScreen"]) //Brings us to the main menu and resets all fields~ src.screen = text2num(href_list["setScreen"]) - if (src.screen == 0) + if(src.screen == 0) src.scanned_user = "Unknown"; msg = ""; src.c_locked=0; @@ -718,7 +741,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co qdel(src) return - if (isbroken) + if(isbroken) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) visible_message("[user.name] further abuses the shattered [src.name].", null, 5 ) else @@ -759,7 +782,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(!camera) return var/datum/picture/selection = camera.selectpicture() - if (!selection) + if(!selection) return var/obj/item/weapon/photo/P = new/obj/item/weapon/photo() @@ -794,7 +817,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co switch(screen) if(0) //Cover dat+="
          The Griffon
          " - dat+="
          Nanotrasen-standard newspaper, for use on Nanotrasen© Space Facilities

          " + dat+="
          Nanotrasen-standard newspaper, for use on Nanotrasen Space Facilities

          " if(isemptylist(src.news_content)) if(src.important_message) dat+="Contents:
            **Important Security Announcement** \[page [src.pages+2]\]
          " @@ -869,7 +892,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co obj/item/weapon/newspaper/Topic(href, href_list) var/mob/living/U = usr ..() - if ((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) )) + if((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) )) U.set_machine(src) if(href_list["next_page"]) if(curr_page==src.pages+1) @@ -894,7 +917,7 @@ obj/item/weapon/newspaper/Topic(href, href_list) src.curr_page-- playsound(src.loc, "pageturn", 50, 1) - if (istype(src.loc, /mob)) + if(istype(src.loc, /mob)) src.attack_self(src.loc) @@ -905,9 +928,9 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob, pa else var/s = strip_html( input(user, "Write something", "Newspaper", "") ) s = sanitize(copytext(s, 1, MAX_MESSAGE_LEN)) - if (!s) + if(!s) return - if (!in_range(src, usr) && src.loc != usr) + if(!in_range(src, usr) && src.loc != usr) return src.scribble_page = src.curr_page src.scribble = s @@ -958,6 +981,7 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob, pa /obj/machinery/newscaster/proc/newsAlert(var/news_call) //This isn't Agouri's work, for it is ugly and vile. var/turf/T = get_turf(src) //Who the fuck uses spawn(600) anyway, jesus christ if(news_call) + for(var/mob/O in hearers(world.view-1, T)) O.show_message("[src.name] beeps, \"[news_call]\"",2) src.alert = 1 @@ -965,7 +989,8 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob, pa spawn(300) src.alert = 0 src.update_icon() - playsound(src.loc, 'sound/machines/twobeep.ogg', 75, 1) + if(!silence) + playsound(src.loc, 'sound/machines/twobeep.ogg', 75, 1) else for(var/mob/O in hearers(world.view-1, T)) O.show_message("[src.name] beeps, \"Attention! Wanted issue distributed!\"",2) diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm index 6a4da6412f3..734bb09f60b 100644 --- a/code/game/machinery/overview.dm +++ b/code/game/machinery/overview.dm @@ -151,7 +151,7 @@ var/icon/I2 = imap[2+(ix + icx*iy)*2] -// to_chat(world, "icon: \icon[I]") +// to_chat(world, "icon: [bicon(I)]") I.DrawBox(colour, rx, ry, rx+1, ry+1) @@ -168,7 +168,7 @@ H.screen_loc = "[5 + i%icx],[6+ round(i/icx)]" -// to_chat(world, "\icon[I] at [H.screen_loc]") +// to_chat(world, "[bicon(I)] at [H.screen_loc]") H.name = (i==0)?"maprefresh":"map" @@ -285,7 +285,7 @@ var/icon/I = imap[1+(ix + icx*iy)] -// to_chat(world, "icon: \icon[I]") +// to_chat(world, "icon: [bicon(I)]") I.DrawBox(colour, rx, ry, rx, ry) @@ -300,7 +300,7 @@ H.screen_loc = "[5 + i%icx],[6+ round(i/icx)]" -// to_chat(world, "\icon[I] at [H.screen_loc]") +// to_chat(world, "[bicon(I)] at [H.screen_loc]") H.name = (i==0)?"maprefresh":"map" diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index ad54eb2e8e9..afe79ca48e3 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -54,16 +54,16 @@ /obj/item/pipe/New(loc, pipe_type, dir, obj/machinery/atmospherics/make_from) ..() - if (make_from) + if(make_from) src.dir = make_from.dir src.pipename = make_from.name color = make_from.pipe_color var/is_bent - if (make_from.initialize_directions in list(NORTH|SOUTH, WEST|EAST)) + if(make_from.initialize_directions in list(NORTH|SOUTH, WEST|EAST)) is_bent = 0 else is_bent = 1 - if (istype(make_from, /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction)) + if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction)) src.pipe_type = PIPE_JUNCTION else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/heat_exchanging)) src.pipe_type = PIPE_HE_STRAIGHT + is_bent @@ -158,13 +158,13 @@ else src.pipe_type = pipe_type src.dir = dir - if (pipe_type == PIPE_SUPPLY_STRAIGHT || pipe_type == PIPE_SUPPLY_BENT || pipe_type == PIPE_SUPPLY_MANIFOLD || pipe_type == PIPE_SUPPLY_MANIFOLD4W || pipe_type == PIPE_SUPPLY_CAP) + if(pipe_type == PIPE_SUPPLY_STRAIGHT || pipe_type == PIPE_SUPPLY_BENT || pipe_type == PIPE_SUPPLY_MANIFOLD || pipe_type == PIPE_SUPPLY_MANIFOLD4W || pipe_type == PIPE_SUPPLY_CAP) connect_types = list(2) src.color = PIPE_COLOR_BLUE - else if (pipe_type == PIPE_SCRUBBERS_STRAIGHT || pipe_type == PIPE_SCRUBBERS_BENT || pipe_type == PIPE_SCRUBBERS_MANIFOLD || pipe_type == PIPE_SCRUBBERS_MANIFOLD4W || pipe_type == PIPE_SCRUBBERS_CAP) + else if(pipe_type == PIPE_SCRUBBERS_STRAIGHT || pipe_type == PIPE_SCRUBBERS_BENT || pipe_type == PIPE_SCRUBBERS_MANIFOLD || pipe_type == PIPE_SCRUBBERS_MANIFOLD4W || pipe_type == PIPE_SCRUBBERS_CAP) connect_types = list(3) src.color = PIPE_COLOR_RED - else if (pipe_type == PIPE_UNIVERSAL) + else if(pipe_type == PIPE_UNIVERSAL) connect_types = list(1,2,3) update(make_from) @@ -278,7 +278,7 @@ set name = "Rotate Pipe" set src in view(1) - if ( usr.stat || usr.restrained() ) + if( usr.stat || usr.restrained() ) return src.dir = turn(src.dir, -90) @@ -292,10 +292,10 @@ set name = "Flip Pipe" set src in view(1) - if (usr.stat || usr.restrained()) + if(usr.stat || usr.restrained()) return - if (pipe_type in list(PIPE_GAS_FILTER, PIPE_GAS_MIXER, PIPE_TVALVE, PIPE_DTVALVE)) + if(pipe_type in list(PIPE_GAS_FILTER, PIPE_GAS_MIXER, PIPE_TVALVE, PIPE_DTVALVE)) if(flipped) icon_state = copytext(icon_state,3) else @@ -311,10 +311,10 @@ /obj/item/pipe/Move() ..() - if (is_bent_pipe() \ + if(is_bent_pipe() \ && (src.dir in cardinal)) src.dir = src.dir|turn(src.dir, 90) - else if (pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_UNIVERSAL, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE, PIPE_DVALVE)) + else if(pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_UNIVERSAL, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE, PIPE_DVALVE)) if(dir==2) dir = 1 else if(dir==8) @@ -324,7 +324,7 @@ // returns all pipe's endpoints /obj/item/pipe/proc/get_pipe_dir() - if (!dir) + if(!dir) return 0 var/direct = dir @@ -374,7 +374,7 @@ // var/cw = turn(dir, -90) // var/acw = turn(dir, 90) - if (!(pipe_type in list(PIPE_HE_STRAIGHT, PIPE_HE_BENT, PIPE_JUNCTION))) + if(!(pipe_type in list(PIPE_HE_STRAIGHT, PIPE_HE_BENT, PIPE_JUNCTION))) return get_pipe_dir() switch(pipe_type) if(PIPE_HE_STRAIGHT,PIPE_HE_BENT) @@ -408,12 +408,12 @@ //Helper to clean up dir /obj/item/pipe/proc/fixdir() - if (pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE, PIPE_DVALVE)) + if(pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE, PIPE_DVALVE)) if(dir==2) dir = 1 else if(dir==8) dir = 4 - else if (pipe_type in list(PIPE_MANIFOLD4W, PIPE_SUPPLY_MANIFOLD4W, PIPE_SCRUBBERS_MANIFOLD4W, PIPE_OMNI_MIXER, PIPE_OMNI_FILTER)) + else if(pipe_type in list(PIPE_MANIFOLD4W, PIPE_SUPPLY_MANIFOLD4W, PIPE_SCRUBBERS_MANIFOLD4W, PIPE_OMNI_MIXER, PIPE_OMNI_FILTER)) dir = 2 /obj/item/pipe/attack_self(mob/user as mob) @@ -422,10 +422,10 @@ /obj/item/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params) ..() - if (!istype(W, /obj/item/weapon/wrench)) + if(!istype(W, /obj/item/weapon/wrench)) return ..() - if (!isturf(src.loc)) + if(!isturf(src.loc)) return 1 fixdir() @@ -461,7 +461,7 @@ if(PIPE_CONNECTOR) // connector var/obj/machinery/atmospherics/unary/portables_connector/C = new( src.loc ) - if (pipename) + if(pipename) C.name = pipename C.construction(dir, pipe_dir, color) @@ -500,13 +500,13 @@ if(PIPE_MVALVE) //manual valve var/obj/machinery/atmospherics/binary/valve/V = new( src.loc) - if (pipename) + if(pipename) V.name = pipename V.construction(dir, get_pdir(), color) if(PIPE_DVALVE) var/obj/machinery/atmospherics/binary/valve/digital/V = new( src.loc ) - if (pipename) + if(pipename) V.name = pipename V.construction(dir, get_pdir(), color) @@ -526,13 +526,13 @@ if(PIPE_DTVALVE) P = new /obj/machinery/atmospherics/trinary/tvalve/digital(src.loc) P.flipped = flipped - if (pipename) + if(pipename) P.name = pipename P.construction(unflip(dir), pipe_dir, color) if(PIPE_SCRUBBER) //scrubber var/obj/machinery/atmospherics/unary/vent_scrubber/S = new(src.loc) - if (pipename) + if(pipename) S.name = pipename S.construction(dir, pipe_dir, color) @@ -554,37 +554,37 @@ if(PIPE_PASSIVE_GATE) //passive gate var/obj/machinery/atmospherics/binary/passive_gate/P = new(src.loc) - if (pipename) + if(pipename) P.name = pipename P.construction(dir, pipe_dir, color) if(PIPE_VOLUME_PUMP) //volume pump var/obj/machinery/atmospherics/binary/volume_pump/P = new(src.loc) - if (pipename) + if(pipename) P.name = pipename P.construction(dir, pipe_dir, color) if(PIPE_HEAT_EXCHANGE) // heat exchanger var/obj/machinery/atmospherics/unary/heat_exchanger/C = new( src.loc ) - if (pipename) + if(pipename) C.name = pipename C.construction(dir, pipe_dir, color) if(PIPE_INJECTOR) // air injector var/obj/machinery/atmospherics/unary/outlet_injector/P = new( src.loc ) - if (pipename) + if(pipename) P.name = pipename P.construction(dir, pipe_dir, color) if(PIPE_DP_VENT) var/obj/machinery/atmospherics/binary/dp_vent_pump/P = new(src.loc) - if (pipename) + if(pipename) P.name = pipename P.construction(dir, pipe_dir, color) if(PIPE_PASV_VENT) var/obj/machinery/atmospherics/unary/passive_vent/P = new(src.loc) - if (pipename) + if(pipename) P.name = pipename P.construction(dir, pipe_dir, color) @@ -616,7 +616,7 @@ /obj/item/pipe_meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params) ..() - if (!istype(W, /obj/item/weapon/wrench)) + if(!istype(W, /obj/item/weapon/wrench)) return ..() if(!locate(/obj/machinery/atmospherics/pipe, src.loc)) to_chat(user, "\red You need to fasten it to a pipe") @@ -636,7 +636,7 @@ /obj/item/pipe_gsensor/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) ..() - if (!istype(W, /obj/item/weapon/wrench)) + if(!istype(W, /obj/item/weapon/wrench)) return ..() new/obj/machinery/air_sensor( src.loc ) playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 9214178e9e4..7a5ebc784b0 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -61,7 +61,9 @@ //What number the make points to is in the define # at the top of construction.dm in same folder //which for some reason couldn't just be left defined, so it could be used here, top kek - user << browse("[src][dat]", "window=pipedispenser") + var/datum/browser/popup = new(user, "pipedispenser", name, 400, 400) + popup.set_content(dat) + popup.open(0) onclose(user, "pipedispenser") return @@ -99,16 +101,16 @@ /obj/machinery/pipedispenser/attackby(var/obj/item/W as obj, var/mob/user as mob, params) src.add_fingerprint(usr) - if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter) || istype(W, /obj/item/pipe_gsensor)) + if(istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter) || istype(W, /obj/item/pipe_gsensor)) to_chat(usr, "\blue You put [W] back to [src].") user.drop_item() qdel(W) return - else if (istype(W, /obj/item/weapon/wrench)) - if (unwrenched==0) + else if(istype(W, /obj/item/weapon/wrench)) + if(unwrenched==0) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, "\blue You begin to unfasten \the [src] from the floor...") - if (do_after(user, 40, target = src)) + if(do_after(user, 40, target = src)) user.visible_message( \ "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src]. Now it can be pulled somewhere else.", \ @@ -116,12 +118,12 @@ src.anchored = 0 src.stat |= MAINT src.unwrenched = 1 - if (usr.machine==src) + if(usr.machine==src) usr << browse(null, "window=pipedispenser") - else /*if (unwrenched==1)*/ + else /*if(unwrenched==1)*/ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, "\blue You begin to fasten \the [src] to the floor...") - if (do_after(user, 20, target = src)) + if(do_after(user, 20, target = src)) user.visible_message( \ "[user] fastens \the [src].", \ "\blue You have fastened \the [src]. Now it can dispense pipes.", \ @@ -155,10 +157,10 @@ Nah if(!usr.canmove || usr.stat || usr.restrained()) return - if (!istype(pipe) || get_dist(usr, src) > 1 || get_dist(src,pipe) > 1 ) + if(!istype(pipe) || get_dist(usr, src) > 1 || get_dist(src,pipe) > 1 ) return - if (pipe.anchored) + if(pipe.anchored) return qdel(pipe) @@ -178,7 +180,9 @@ Nah Chute
          "} - user << browse("[src][dat]", "window=pipedispenser") + var/datum/browser/popup = new(user, "pipedispenser", name, 400, 400) + popup.set_content(dat) + popup.open() return // 0=straight, 1=bent, 2=junction-j1, 3=junction-j2, 4=junction-y, 5=trunk diff --git a/code/game/machinery/podmen.dm b/code/game/machinery/podmen.dm index 54585c0eb26..c0ca39c3e12 100644 --- a/code/game/machinery/podmen.dm +++ b/code/game/machinery/podmen.dm @@ -57,7 +57,7 @@ Growing it to term with nothing injected will grab a ghost from the observers. * to_chat(user, "Nothing happens.") return - if (!istype(source)) + if(!istype(source)) return if(source.ckey) @@ -108,17 +108,17 @@ Growing it to term with nothing injected will grab a ghost from the observers. * callHook("harvest_podman", list(podman)) switch(ticker.mode.name) - if ("revolution") - if (podman.mind in ticker.mode:revolutionaries) + if("revolution") + if(podman.mind in ticker.mode:revolutionaries) ticker.mode:add_revolutionary(podman.mind) ticker.mode:update_all_rev_icons() //So the icon actually appears - if (podman.mind in ticker.mode:head_revolutionaries) + if(podman.mind in ticker.mode:head_revolutionaries) ticker.mode:update_all_rev_icons() - if ("nuclear emergency") - if (podman.mind in ticker.mode:syndicates) + if("nuclear emergency") + if(podman.mind in ticker.mode:syndicates) ticker.mode:update_all_synd_icons() - if ("cult") - if (podman.mind in ticker.mode:cult) + if("cult") + if(podman.mind in ticker.mode:cult) ticker.mode:add_cultist(podman.mind) ticker.mode:update_all_cult_icons() //So the icon actually appears // -- End mode specific stuff diff --git a/code/game/machinery/portable_tag_turret.dm b/code/game/machinery/portable_tag_turret.dm index 963dc0c803a..deafad7f9b7 100644 --- a/code/game/machinery/portable_tag_turret.dm +++ b/code/game/machinery/portable_tag_turret.dm @@ -50,7 +50,7 @@ data["is_lethal"] = 0 ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300) ui.set_initial_data(data) ui.open() diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index fb1ef8c8740..83f2dfef93f 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -215,7 +215,7 @@ var/list/turret_icons data["one_access"] = one_access var/accesses[0] var/list/access_list = get_all_accesses() - for (var/access in access_list) + for(var/access in access_list) var/name = get_access_desc(access) var/active if(one_access) @@ -226,7 +226,7 @@ var/list/turret_icons data["accesses"] = accesses ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 320) ui.set_initial_data(data) ui.open() @@ -437,7 +437,7 @@ var/list/turret_icons return health -= force - if (force > 5 && prob(45)) + if(force > 5 && prob(45)) spark_system.start() if(health <= 0) die() //the death process :( @@ -479,15 +479,15 @@ var/list/turret_icons ..() /obj/machinery/porta_turret/ex_act(severity) - switch (severity) - if (1) + switch(severity) + if(1) qdel(src) - if (2) - if (prob(25)) + if(2) + if(prob(25)) qdel(src) else take_damage(initial(health) * 8) //should instakill most turrets - if (3) + if(3) take_damage(initial(health) * 8 / 3) /obj/machinery/porta_turret/proc/die() //called when the turret dies, ie, health <= 0 diff --git a/code/game/machinery/programmable_unloader.dm b/code/game/machinery/programmable_unloader.dm index f061f9906e6..a095d1cc93c 100644 --- a/code/game/machinery/programmable_unloader.dm +++ b/code/game/machinery/programmable_unloader.dm @@ -197,10 +197,10 @@ /obj/machinery/programmable/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I,/obj/item/weapon/wrench)) // code borrowed from pipe dispenser - if (unwrenched==0) + if(unwrenched==0) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, "\blue You begin to unfasten \the [src] from the floor...") - if (do_after(user, 40, target = src)) + if(do_after(user, 40, target = src)) user.visible_message( \ "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src]. Now it can be pulled somewhere else.", \ @@ -208,12 +208,12 @@ src.anchored = 0 src.stat |= MAINT src.unwrenched = 1 - if (usr.machine==src) + if(usr.machine==src) usr << browse(null, "window=pipedispenser") else /* unwrenched */ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, "\blue You begin to fasten \the [src] to the floor...") - if (do_after(user, 20, target = src)) + if(do_after(user, 20, target = src)) user.visible_message( \ "[user] fastens \the [src].", \ "\blue You fastened \the [src] into place.", \ @@ -283,7 +283,7 @@ return /obj/machinery/programmable/process() - if (!output || !input) + if(!output || !input) return if(!on || stat || sleep) @@ -330,7 +330,7 @@ if(sleep) return // something stopped the machine - for (var/obj/A in input.contents)// I fully expect this to cause unreasonable lag + for(var/obj/A in input.contents)// I fully expect this to cause unreasonable lag if(!A) break if(work > workmax) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index be126aec5ff..6db7199a7f0 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -34,7 +34,7 @@ to_chat(user, "\red The [name] blinks red as you try to insert the item!") return - if (istype(G, /obj/item/weapon/gun/energy)) + if(istype(G, /obj/item/weapon/gun/energy)) var/obj/item/weapon/gun/energy/E = G if(!E.can_charge) to_chat(user, "Your gun has no external power connector.") diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index a1559c4fb3a..342b24fa055 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -71,14 +71,14 @@ qdel(src) return if(2.0) - if (prob(50)) + if(prob(50)) for(var/atom/movable/A as mob|obj in src) A.forceMove(src.loc) A.ex_act(severity) qdel(src) return if(3.0) - if (prob(25)) + if(prob(25)) for(var/atom/movable/A as mob|obj in src) A.forceMove(src.loc) A.ex_act(severity) @@ -131,7 +131,7 @@ icon_state = "borgcharger0" /obj/machinery/recharge_station/attackby(obj/item/P as obj, mob/user as mob, params) - if (istype(P, /obj/item/weapon/screwdriver)) + if(istype(P, /obj/item/weapon/screwdriver)) if(src.occupant) to_chat(user, "The maintenance panel is locked.") return @@ -145,7 +145,7 @@ /obj/machinery/recharge_station/proc/process_occupant() if(src.occupant) - if (istype(occupant, /mob/living/silicon/robot)) + if(istype(occupant, /mob/living/silicon/robot)) var/mob/living/silicon/robot/R = occupant restock_modules() if(repairs) @@ -170,7 +170,7 @@ return //for(var/obj/O in src) // O.loc = src.loc - if (src.occupant.client) + if(src.occupant.client) src.occupant.client.eye = src.occupant.client.mob src.occupant.client.perspective = MOB_PERSPECTIVE src.occupant.loc = src.loc @@ -216,17 +216,15 @@ if(istype(O,/obj/item/weapon/reagent_containers/food/condiment/enzyme)) if(O.reagents.get_reagent_amount("enzyme") < 50) O.reagents.add_reagent("enzyme", 2 * coeff) - //Medical - if(istype(O,/obj/item/weapon/reagent_containers/glass/bottle/robot)) - var/obj/item/weapon/reagent_containers/glass/bottle/robot/B = O - if(B.reagent && (B.reagents.get_reagent_amount(B.reagent) < B.volume)) - B.reagents.add_reagent(B.reagent, 2 * coeff) //Janitor if(istype(O, /obj/item/device/lightreplacer)) var/obj/item/device/lightreplacer/LR = O 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) @@ -246,7 +244,7 @@ /obj/machinery/recharge_station/verb/move_eject() set category = "Object" set src in oview(1) - if (usr.stat != 0) + if(usr.stat != 0) return src.go_out() add_fingerprint(usr) @@ -258,14 +256,14 @@ if(!user || !usr) return - if (usr.stat != CONSCIOUS) + if(usr.stat != CONSCIOUS) return if(get_dist(src, user) > 2 || get_dist(usr, user) > 1) to_chat(usr, "They are too far away to put inside") return - if (panel_open) + if(panel_open) to_chat(usr, "Close the maintenance panel first.") return diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 2db551b67fa..c7ddfc84c38 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -194,7 +194,7 @@ var/const/SAFETY_COOLDOWN = 100 if(usr.stat || !usr.canmove || usr.restrained()) return - if (src.anchored) + if(src.anchored) to_chat(usr, "[src] is fastened to the floor!") return 0 eat_dir = turn(eat_dir, 270) @@ -210,7 +210,7 @@ var/const/SAFETY_COOLDOWN = 100 if(usr.stat || !usr.canmove || usr.restrained()) return - if (src.anchored) + if(src.anchored) to_chat(usr, "[src] is fastened to the floor!") return 0 eat_dir = turn(eat_dir, 90) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index bfd4939dc3b..9b2515e8914 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -72,11 +72,11 @@ var/list/obj/machinery/requests_console/allConsoles = list() name = "[department] Requests Console" allConsoles += src - if (departmentType & RC_ASSIST) + if(departmentType & RC_ASSIST) req_console_assistance |= department - if (departmentType & RC_SUPPLY) + if(departmentType & RC_SUPPLY) req_console_supplies |= department - if (departmentType & RC_INFO) + if(departmentType & RC_INFO) req_console_information |= department set_light(1) @@ -84,16 +84,16 @@ var/list/obj/machinery/requests_console/allConsoles = list() /obj/machinery/requests_console/Destroy() allConsoles -= src var/lastDeptRC = 1 - for (var/obj/machinery/requests_console/Console in allConsoles) - if (Console.department == department) + for(var/obj/machinery/requests_console/Console in allConsoles) + if(Console.department == department) lastDeptRC = 0 break if(lastDeptRC) - if (departmentType & RC_ASSIST) + if(departmentType & RC_ASSIST) req_console_assistance -= department - if (departmentType & RC_SUPPLY) + if(departmentType & RC_SUPPLY) req_console_supplies -= department - if (departmentType & RC_INFO) + if(departmentType & RC_INFO) req_console_information -= department return ..() @@ -130,7 +130,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() data["announceAuth"] = announceAuth ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "request_console.tmpl", "[department] Request Console", 520, 410) ui.set_initial_data(data) ui.open() @@ -172,7 +172,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() var/log_msg = message var/pass = 0 screen = RCS_SENTFAIL - for (var/obj/machinery/message_server/MS in world) + for(var/obj/machinery/message_server/MS in world) if(!MS.active) continue MS.send_rc_message(ckey(href_list["department"]),department,log_msg,msgStamped,msgVerified,priority) pass = 1 @@ -180,7 +180,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() screen = RCS_SENTPASS message_log += "Message sent to [recipient]
          [message]" else - audible_message(text("\icon[src] *The Requests Console beeps: 'NOTICE: No server detected!'"),,4) + audible_message(text("[bicon(src)] *The Requests Console beeps: 'NOTICE: No server detected!'"),,4) //Handle screen switching if(href_list["setScreen"]) @@ -188,8 +188,8 @@ var/list/obj/machinery/requests_console/allConsoles = list() if(tempScreen == RCS_ANNOUNCE && !announcementConsole) return if(tempScreen == RCS_VIEWMSGS) - for (var/obj/machinery/requests_console/Console in allConsoles) - if (Console.department == department) + for(var/obj/machinery/requests_console/Console in allConsoles) + if(Console.department == department) Console.newmessagepriority = 0 Console.icon_state = "req_comp0" Console.set_light(1) @@ -207,7 +207,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() //err... hacking code, which has no reason for existing... but anyway... it was once supposed to unlock priority 3 messanging on that console (EXTREME priority...), but the code for that was removed. /obj/machinery/requests_console/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob) /* - if (istype(O, /obj/item/weapon/crowbar)) + if(istype(O, /obj/item/weapon/crowbar)) if(open) open = 0 icon_state="req_comp0" @@ -217,7 +217,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() icon_state="req_comp_open" else if(hackState == 1) icon_state="req_comp_rewired" - if (istype(O, /obj/item/weapon/screwdriver)) + if(istype(O, /obj/item/weapon/screwdriver)) if(open) if(hackState == 0) hackState = 1 @@ -228,7 +228,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() else to_chat(user, "You can't do much with that.")*/ - if (istype(O, /obj/item/weapon/card/id)) + if(istype(O, /obj/item/weapon/card/id)) if(inoperable(MAINT)) return if(screen == RCS_MESSAUTH) var/obj/item/weapon/card/id/T = O @@ -236,14 +236,14 @@ var/list/obj/machinery/requests_console/allConsoles = list() updateUsrDialog() if(screen == RCS_ANNOUNCE) var/obj/item/weapon/card/id/ID = O - if (access_RC_announce in ID.GetAccess()) + if(access_RC_announce in ID.GetAccess()) announceAuth = 1 announcement.announcer = ID.assignment ? "[ID.assignment] [ID.registered_name]" : ID.registered_name else reset_message() to_chat(user, "You are not authorized to send announcements.") updateUsrDialog() - if (istype(O, /obj/item/weapon/stamp)) + if(istype(O, /obj/item/weapon/stamp)) if(inoperable(MAINT)) return if(screen == RCS_MESSAUTH) var/obj/item/weapon/stamp/T = O diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index 44455884bd8..78b873e6ca1 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -12,8 +12,8 @@ active_power_usage = 5000 /obj/machinery/robotic_fabricator/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if (istype(O, /obj/item/stack/sheet/metal)) - if (src.metal_amount < 150000.0) + if(istype(O, /obj/item/stack/sheet/metal)) + if(src.metal_amount < 150000.0) var/count = 0 src.overlays += "fab-load-metal" spawn(15) @@ -25,7 +25,7 @@ O:amount-- count++ - if (O:amount < 1) + if(O:amount < 1) qdel(O) to_chat(user, "You insert [count] metal sheet\s into the fabricator.") @@ -35,17 +35,17 @@ to_chat(user, "The robot part maker is full. Please remove metal from the robot part maker in order to insert more.") /obj/machinery/robotic_fabricator/power_change() - if (powered()) + if(powered()) stat &= ~NOPOWER else stat |= NOPOWER /obj/machinery/robotic_fabricator/attack_hand(user as mob) var/dat - if (..()) + if(..()) return - if (src.operating) + if(src.operating) dat = {" Building [src.being_built.name].
          Please wait until completion...

          @@ -69,59 +69,59 @@ Please wait until completion...
          return /obj/machinery/robotic_fabricator/Topic(href, href_list) - if (..()) + if(..()) return usr.set_machine(src) src.add_fingerprint(usr) - if (href_list["make"]) - if (!src.operating) + if(href_list["make"]) + if(!src.operating) var/part_type = text2num(href_list["make"]) var/build_type = "" var/build_time = 200 var/build_cost = 25000 - switch (part_type) - if (1) + switch(part_type) + if(1) build_type = "/obj/item/robot_parts/l_arm" build_time = 200 build_cost = 10000 - if (2) + if(2) build_type = "/obj/item/robot_parts/r_arm" build_time = 200 build_cost = 10000 - if (3) + if(3) build_type = "/obj/item/robot_parts/l_leg" build_time = 200 build_cost = 10000 - if (4) + if(4) build_type = "/obj/item/robot_parts/r_leg" build_time = 200 build_cost = 10000 - if (5) + if(5) build_type = "/obj/item/robot_parts/chest" build_time = 350 build_cost = 40000 - if (6) + if(6) build_type = "/obj/item/robot_parts/head" build_time = 350 build_cost = 5000 - if (7) + if(7) build_type = "/obj/item/robot_parts/robot_suit" build_time = 600 build_cost = 15000 var/building = text2path(build_type) - if (!isnull(building)) - if (src.metal_amount >= build_cost) + if(!isnull(building)) + if(src.metal_amount >= build_cost) src.operating = 1 src.use_power = 2 @@ -133,7 +133,7 @@ Please wait until completion...
          src.updateUsrDialog() spawn (build_time) - if (!isnull(src.being_built)) + if(!isnull(src.being_built)) src.being_built.loc = get_turf(src) src.being_built = null src.use_power = 1 @@ -141,6 +141,6 @@ Please wait until completion...
          src.overlays -= "fab-active" return - for (var/mob/M in viewers(1, src)) - if (M.client && M.machine == src) + for(var/mob/M in viewers(1, src)) + if(M.client && M.machine == src) src.attack_hand(M) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 323937075ad..a3f7ee5189a 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -13,7 +13,10 @@ /obj/machinery/shield/New() src.dir = pick(1,2,3,4) ..() + +/obj/machinery/shield/initialize() air_update_turf(1) + ..() /obj/machinery/shield/Destroy() opacity = 0 @@ -45,7 +48,7 @@ playsound(src.loc, 'sound/effects/EMPulse.ogg', 75, 1) - if (src.health <= 0) + if(src.health <= 0) visible_message("\blue The [src] dissipates") qdel(src) return @@ -68,13 +71,13 @@ /obj/machinery/shield/ex_act(severity) switch(severity) if(1.0) - if (prob(75)) + if(prob(75)) qdel(src) if(2.0) - if (prob(50)) + if(prob(50)) qdel(src) if(3.0) - if (prob(25)) + if(prob(25)) qdel(src) return @@ -105,7 +108,7 @@ playsound(src.loc, 'sound/effects/EMPulse.ogg', 100, 1) //Handle the destruction of the shield - if (src.health <= 0) + if(src.health <= 0) visible_message("\blue The [src] dissipates") qdel(src) return @@ -151,8 +154,8 @@ update_icon() for(var/turf/target_tile in range(2, src)) - if (istype(target_tile,/turf/space) && !(locate(/obj/machinery/shield) in target_tile)) - if (malfunction && prob(33) || !malfunction) + if(istype(target_tile,/turf/space) && !(locate(/obj/machinery/shield) in target_tile)) + if(malfunction && prob(33) || !malfunction) deployed_shields += new /obj/machinery/shield(target_tile) /obj/machinery/shieldgen/proc/shields_down() @@ -186,7 +189,7 @@ src.checkhp() if(2.0) src.health -= 30 - if (prob(15)) + if(prob(15)) src.malfunction = 1 src.checkhp() if(3.0) @@ -214,15 +217,15 @@ to_chat(user, "The panel must be closed before operating this machine.") return - if (src.active) - user.visible_message("\blue \icon[src] [user] deactivated the shield generator.", \ - "\blue \icon[src] You deactivate the shield generator.", \ + if(src.active) + user.visible_message("\blue [bicon(src)] [user] deactivated the shield generator.", \ + "\blue [bicon(src)] You deactivate the shield generator.", \ "You hear heavy droning fade out.") src.shields_down() else if(anchored) - user.visible_message("\blue \icon[src] [user] activated the shield generator.", \ - "\blue \icon[src] You activate the shield generator.", \ + user.visible_message("\blue [bicon(src)] [user] activated the shield generator.", \ + "\blue [bicon(src)] You activate the shield generator.", \ "You hear heavy droning.") src.shields_up() else @@ -470,7 +473,7 @@ return if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if (src.allowed(user)) + if(src.allowed(user)) src.locked = !src.locked to_chat(user, "Controls are now [src.locked ? "locked." : "unlocked."]") else @@ -602,7 +605,7 @@ if(istype(mover) && mover.checkpass(PASSGLASS)) return prob(20) else - if (istype(mover, /obj/item/projectile)) + if(istype(mover, /obj/item/projectile)) return prob(10) else - return !src.density \ No newline at end of file + return !src.density diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 8a4ef1bc330..9705ef9dedd 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -31,7 +31,7 @@ data["resultlvl"] = resultlvl ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "slotmachine.tmpl", name, 350, 200) ui.set_initial_data(data) ui.open() @@ -43,9 +43,9 @@ if(href_list["ops"]) var/operation = text2num(href_list["ops"]) if(operation == 1) // Play - if (working == 1) + if(working == 1) return - if (!account || account.money < 10) + if(!account || account.money < 10) return if(!account.charge(10, transaction_purpose = "Bet", dest_name = name)) return @@ -55,39 +55,39 @@ var/roll = rand(1,1350) playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) spawn(25) - if (roll == 1) + if(roll == 1) visible_message("[src] says, 'JACKPOT! [usr.name] has won a MILLION CREDITS!'") command_announcement.Announce("Congratulations to [usr.name] on winning the Jackpot of ONE MILLION CREDITS!", "Jackpot Winner") result = "JACKPOT! You win one million credits!" resultlvl = "highlight" win_money(1000000, 'sound/goonstation/misc/airraid_loop.ogg') - else if (roll > 1 && roll <= 5) + else if(roll > 1 && roll <= 5) visible_message("[src] says, 'Big Winner! [usr.name] has won a hundred thousand credits!'") command_announcement.Announce("Congratulations to [usr.name] on winning a hundred thousand credits!", "Big Winner") result = "Big Winner! You win a hundred thousand credits!" resultlvl = "good" win_money(100000, 'sound/goonstation/misc/klaxon.ogg') - else if (roll > 5 && roll <= 25) + else if(roll > 5 && roll <= 25) visible_message("[src] says, 'Big Winner! [usr.name] has won ten thousand credits!'") result = "You win ten thousand credits!" resultlvl = "good" win_money(10000, 'sound/goonstation/misc/klaxon.ogg') - else if (roll > 25 && roll <= 50) + else if(roll > 25 && roll <= 50) visible_message("[src] says, 'Winner! [usr.name] has won a thousand credits!'") result = "You win a thousand credits!" resultlvl = "good" win_money(1000, 'sound/goonstation/misc/bell.ogg') - else if (roll > 50 && roll <= 100) + else if(roll > 50 && roll <= 100) visible_message("[src] says, 'Winner! [usr.name] has won a hundred credits!'") result = "You win a hundred credits!" resultlvl = "good" win_money(100, 'sound/goonstation/misc/bell.ogg') - else if (roll > 100 && roll <= 200) + else if(roll > 100 && roll <= 200) visible_message("[src] says, 'Winner! [usr.name] has won fifty credits!'") result = "You win fifty credits!" resultlvl = "good" win_money(50) - else if (roll > 200 && roll <= 500) + else if(roll > 200 && roll <= 500) visible_message("[src] says, 'Winner! [usr.name] has won ten credits!'") result = "You win ten credits!" resultlvl = "good" diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 6ba798cebee..ce5ca3ce85d 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -107,9 +107,9 @@ /obj/machinery/space_heater/Topic(href, href_list) - if (..()) + if(..()) return 1 - if ((in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon))) + if((in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) switch(href_list["op"]) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 9cb2c7db4d6..325977b44df 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -134,10 +134,10 @@ return 0 if(src.panelopen) //The maintenance panel is open. Time for some shady stuff dat+= "Suit storage unit: Maintenance panel" - dat+= "Maintenance panel controls
          " + dat+= "Maintenance panel controls
          " dat+= "The panel is ridden with controls, button and meters, labeled in strange signs and symbols that
          you cannot understand. Probably the manufactoring world's language.
          Among other things, a few controls catch your eye.

          " - dat+= text("A small dial with a \"ë\" symbol embroidded on it. It's pointing towards a gauge that reads [].
          Turn towards []
          ",(src.issuperUV ? "15nm" : "185nm"),src,(src.issuperUV ? "185nm" : "15nm") ) - dat+= text("A thick old-style button, with 2 grimy LED lights next to it. The [] LED is on.
          Press button",(src.safetieson? "GREEN" : "RED"),src) + dat+= text("A small dial with a \"�\" symbol embroidded on it. It's pointing towards a gauge that reads [].
          Turn towards []
          ",(src.issuperUV ? "15nm" : "185nm"),src,(src.issuperUV ? "185nm" : "15nm") ) + dat+= text("A thick old-style button, with 2 grimy LED lights next to it. The [] LED is on.
          Press button",(src.safetieson? "GREEN" : "RED"),src) dat+= text("

          Close panel", user) //user << browse(dat, "window=ssu_m_panel;size=400x500") //onclose(user, "ssu_m_panel") @@ -150,26 +150,24 @@ else if(!src.isbroken) - dat+= "Suit storage unit" - dat+= "U-Stor-It Suit Storage Unit, model DS1900
          " dat+= "Welcome to the Unit control panel.
          " - dat+= text("Helmet storage compartment: []
          ",(src.HELMET ? HELMET.name : "
          No helmet detected.") ) + dat+= text("Helmet storage compartment: []
          ",(src.HELMET ? HELMET.name : "
          No helmet detected.") ) if(HELMET && src.isopen) dat+=text("Dispense helmet
          ",src) - dat+= text("Suit storage compartment: []
          ",(src.SUIT ? SUIT.name : "
          No exosuit detected.") ) + dat+= text("Suit storage compartment: []
          ",(src.SUIT ? SUIT.name : "
          No exosuit detected.") ) if(SUIT && src.isopen) dat+=text("Dispense suit
          ",src) - dat+= text("Breathmask storage compartment: []
          ",(src.MASK ? MASK.name : "
          No breathmask detected.") ) + dat+= text("Breathmask storage compartment: []
          ",(src.MASK ? MASK.name : "
          No breathmask detected.") ) if(MASK && src.isopen) dat+=text("Dispense mask
          ",src) if(src.OCCUPANT) dat+= "
          WARNING: Biological entity detected inside the Unit's storage. Please remove.
          " dat+= "Eject extra load" - dat+= text("
          Unit is: [] - [] Unit ",(src.isopen ? "Open" : "Closed"),src,(src.isopen ? "Close" : "Open")) + dat+= text("
          Unit is: [] - [] Unit ",(src.isopen ? "Open" : "Closed"),src,(src.isopen ? "Close" : "Open")) if(src.isopen) dat+="
          " else - dat+= text(" - *[] Unit*
          ",src,(src.islocked ? "Unlock" : "Lock") ) + dat+= text(" - *[] Unit*
          ",src,(src.islocked ? "Unlock" : "Lock") ) dat+= text("Unit status: []",(src.islocked? "**LOCKED**
          " : "**UNLOCKED**
          ") ) dat+= text("Start Disinfection cycle
          ",src) dat += text("

          Close control panel", user) @@ -182,7 +180,9 @@ //user << browse(dat, "window=suit_storage_unit;size=400x500") //onclose(user, "suit_storage_unit") - user << browse(dat, "window=suit_storage_unit;size=400x500") + var/datum/browser/popup = new(user, "suit_storage_unit", name, 400, 500) + popup.set_content(dat) + popup.open(0) onclose(user, "suit_storage_unit") return @@ -190,45 +190,45 @@ /obj/machinery/suit_storage_unit/Topic(href, href_list) //I fucking HATE this proc if(..()) return 1 - if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon/ai))) + if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon/ai))) usr.set_machine(src) - if (href_list["toggleUV"]) + if(href_list["toggleUV"]) src.toggleUV(usr) src.updateUsrDialog() src.update_icon() - if (href_list["togglesafeties"]) + if(href_list["togglesafeties"]) src.togglesafeties(usr) src.updateUsrDialog() src.update_icon() - if (href_list["dispense_helmet"]) + if(href_list["dispense_helmet"]) src.dispense_helmet(usr) src.updateUsrDialog() src.update_icon() - if (href_list["dispense_suit"]) + if(href_list["dispense_suit"]) src.dispense_suit(usr) src.updateUsrDialog() src.update_icon() - if (href_list["dispense_mask"]) + if(href_list["dispense_mask"]) src.dispense_mask(usr) src.updateUsrDialog() src.update_icon() - if (href_list["toggle_open"]) + if(href_list["toggle_open"]) src.toggle_open(usr) src.updateUsrDialog() src.update_icon() - if (href_list["toggle_lock"]) + if(href_list["toggle_lock"]) src.toggle_lock(usr) src.updateUsrDialog() src.update_icon() - if (href_list["start_UV"]) + if(href_list["start_UV"]) src.start_UV(usr) src.updateUsrDialog() src.update_icon() - if (href_list["eject_guy"]) + if(href_list["eject_guy"]) src.eject_occupant(usr) src.updateUsrDialog() src.update_icon() - /*if (href_list["refresh"]) + /*if(href_list["refresh"]) src.updateUsrDialog()*/ src.add_fingerprint(usr) return @@ -430,15 +430,15 @@ /obj/machinery/suit_storage_unit/proc/eject_occupant(mob/user as mob) - if (src.islocked) + if(src.islocked) return - if (!src.OCCUPANT) + if(!src.OCCUPANT) return // for(var/obj/O in src) // O.loc = src.loc - if (src.OCCUPANT.client) + if(src.OCCUPANT.client) if(user != OCCUPANT) to_chat(OCCUPANT, "The machine kicks you out!") if(user.loc != src.loc) @@ -459,7 +459,7 @@ set category = "Object" set src in oview(1) - if (usr.stat != 0) + if(usr.stat != 0) return src.eject_occupant(usr) add_fingerprint(usr) @@ -473,15 +473,15 @@ set category = "Object" set src in oview(1) - if (usr.stat != 0) + if(usr.stat != 0) return - if (!src.isopen) + if(!src.isopen) to_chat(usr, "The unit's doors are shut.") return - if (!src.ispowered || src.isbroken) + if(!src.ispowered || src.isbroken) to_chat(usr, "The unit is not operational.") return - if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) ) + if( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) ) to_chat(usr, "It's too cluttered inside for you to fit in!") return visible_message("[usr] starts squeezing into the suit storage unit!") @@ -515,24 +515,24 @@ to_chat(user, text("You [] the unit's maintenance panel.",(src.panelopen ? "open up" : "close") )) src.updateUsrDialog() return - if ( istype(I, /obj/item/weapon/grab) ) + if( istype(I, /obj/item/weapon/grab) ) var/obj/item/weapon/grab/G = I if( !(ismob(G.affecting)) ) return - if (!src.isopen) + if(!src.isopen) to_chat(usr, "The unit's doors are shut.") return - if (!src.ispowered || src.isbroken) + if(!src.ispowered || src.isbroken) to_chat(usr, "The unit is not operational.") return - if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) ) //Unit needs to be absolutely empty + if( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) ) //Unit needs to be absolutely empty to_chat(user, "The unit's storage area is too cluttered.") return visible_message("[user] starts putting [G.affecting.name] into the Suit Storage Unit.") if(do_after(user, 20, target = G:affecting)) if(!G || !G.affecting) return //derpcheck var/mob/M = G.affecting - if (M.client) + if(M.client) M.client.perspective = EYE_PERSPECTIVE M.client.eye = src M.loc = src @@ -690,7 +690,7 @@ if(do_after(user, 20, target = G:affecting)) if(!G || !G.affecting) return var/mob/M = G.affecting - if (M.client) + if(M.client) M.client.perspective = EYE_PERSPECTIVE M.client.eye = src M.loc = src @@ -838,7 +838,9 @@ dat += "The red light is [safeties ? "blinking" : "off"].
          " dat += "The yellow light is [locked ? "on" : "off"].
          " */ - user << browse(dat, "window=suit_cycler") + var/datum/browser/popup = new(user, "suit_cycler", name, 400, 400) + popup.set_content(dat) + popup.open(0) onclose(user, "suit_cycler") return @@ -909,22 +911,22 @@ if(radiation_level > 1) suit.clean_blood() -/* else if ((href_list["cutwire"]) && (src.panel_open)) +/* else if((href_list["cutwire"]) && (src.panel_open)) var/twire = text2num(href_list["cutwire"]) - if (!( istype(usr.get_active_hand(), /obj/item/weapon/wirecutters) )) + if(!( istype(usr.get_active_hand(), /obj/item/weapon/wirecutters) )) to_chat(usr, "You need wirecutters!") return - if (src.isWireColorCut(twire)) + if(src.isWireColorCut(twire)) src.mend(twire) else src.cut(twire) - else if ((href_list["pulsewire"]) && (src.panel_open)) + else if((href_list["pulsewire"]) && (src.panel_open)) var/twire = text2num(href_list["pulsewire"]) - if (!istype(usr.get_active_hand(), /obj/item/device/multitool)) + if(!istype(usr.get_active_hand(), /obj/item/device/multitool)) to_chat(usr, "You need a multitool!") return - if (src.isWireColorCut(twire)) + if(src.isWireColorCut(twire)) to_chat(usr, "You can't pulse a cut wire.") return else @@ -983,7 +985,7 @@ set category = "Object" set src in oview(1) - if (usr.stat != 0) + if(usr.stat != 0) return eject_occupant(usr) @@ -994,10 +996,10 @@ to_chat(user, "\red The cycler is locked.") return - if (!occupant) + if(!occupant) return - if (occupant.client) + if(occupant.client) occupant.client.eye = occupant.client.mob occupant.client.perspective = MOB_PERSPECTIVE @@ -1029,7 +1031,7 @@ safeties = 0 if(WIRE_SHOCK) electrified = -1 - if (WIRE_SCANID) + if(WIRE_SCANID) locked = 0 /obj/machinery/suit_cycler/proc/mend(var/wireColor) @@ -1047,7 +1049,7 @@ safeties = !locked if(WIRE_SHOCK) electrified = 30 - if (WIRE_SCANID) + if(WIRE_SCANID) locked = !locked */ diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 96db973ab21..db4cb0271c0 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -88,7 +88,7 @@ payload = null else to_chat(user, "There isn't anything in here to remove!") - else if (open_panel) + else if(open_panel) to_chat(user, "The wires conneting the shell to the explosives are holding it down!") else to_chat(user, "The cover is screwed on, it won't pry off!") @@ -126,14 +126,14 @@ newtime = Clamp(newtime, 120, 60000) if(in_range(src, user) && isliving(user)) //No running off and setting bombs from across the station timer = newtime - src.loc.visible_message("\icon[src] timer set for [timer] seconds.") + src.loc.visible_message("[bicon(src)] timer set for [timer] seconds.") if(alert(user,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && in_range(src, user) && isliving(user)) if(defused || active) if(defused) - src.loc.visible_message("\icon[src] Device error: User intervention required.") + src.loc.visible_message("[bicon(src)] Device error: User intervention required.") return else - src.loc.visible_message("\icon[src] [timer] seconds until detonation, please clear the area.") + src.loc.visible_message("[bicon(src)] [timer] seconds until detonation, please clear the area.") playsound(loc, 'sound/machines/click.ogg', 30, 1) active = 1 update_icon() @@ -180,7 +180,7 @@ icon = 'icons/obj/assemblies.dmi' icon_state = "bombcore" item_state = "eshield0" - w_class = 3.0 + w_class = 3 origin_tech = "syndicate=6;combat=5" var/adminlog = null @@ -223,7 +223,7 @@ var/obj/machinery/syndicatebomb/holder = src.loc if(istype(holder)) attempts++ - holder.loc.visible_message("\icon[holder] Alert: Bomb has detonated. Your score is now [defusals] for [attempts]. Resetting wires...") + holder.loc.visible_message("[bicon(holder)] Alert: Bomb has detonated. Your score is now [defusals] for [attempts]. Resetting wires...") reset() else qdel(src) @@ -233,7 +233,7 @@ if(istype(holder)) attempts++ defusals++ - holder.loc.visible_message("\icon[holder] Alert: Bomb has been defused. Your score is now [defusals] for [attempts]! Resetting wires in 5 seconds...") + holder.loc.visible_message("[bicon(holder)] Alert: Bomb has been defused. Your score is now [defusals] for [attempts]! Resetting wires in 5 seconds...") sleep(50) //Just in case someone is trying to remove the bomb core this gives them a little window to crowbar it out if(istype(holder)) reset() @@ -296,7 +296,7 @@ icon = 'icons/obj/assemblies.dmi' icon_state = "bigred" item_state = "electronic" - w_class = 1.0 + w_class = 1 origin_tech = "syndicate=2" var/cooldown = 0 var/detonated = 0 diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 5d6aa95b56f..4d90971f003 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -234,7 +234,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept if(data == 1) - for (var/obj/item/device/radio/intercom/R in connection.devices["[RADIO_CHAT]"]) + for(var/obj/item/device/radio/intercom/R in connection.devices["[RADIO_CHAT]"]) if(R.receive_range(display_freq, level) > -1) radios += R @@ -242,7 +242,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept else if(data == 2) - for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) + for(var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) if(istype(R, /obj/item/device/radio/headset)) continue @@ -255,7 +255,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept else if(data == 3) for(var/antag_freq in ANTAG_FREQS) var/datum/radio_frequency/antag_connection = radio_controller.return_frequency(antag_freq) - for (var/obj/item/device/radio/R in antag_connection.devices["[RADIO_CHAT]"]) + for(var/obj/item/device/radio/R in antag_connection.devices["[RADIO_CHAT]"]) if(R.receive_range(antag_freq, level) > -1) radios += R @@ -263,7 +263,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept else - for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) + for(var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) if(R.receive_range(display_freq, level) > -1) radios += R @@ -281,11 +281,11 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/list/heard_garbled = list() // garbled message (ie "f*c* **u, **i*er!") var/list/heard_gibberish= list() // completely screwed over message (ie "F%! (O*# *#!<>&**%!") - for (var/mob/R in receive) + for(var/mob/R in receive) /* --- Loop through the receivers and categorize them --- */ - if (R.client && R.client.holder && !(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. + if(R.client && R.client.holder && !(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. continue if(istype(R, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes. @@ -302,10 +302,10 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // --- Can understand the speech --- - if (!M || R.say_understands(M)) + if(!M || R.say_understands(M)) // - Not human or wearing a voice mask - - if (!M || !ishuman(M) || vmask) + if(!M || !ishuman(M) || vmask) heard_masked += R // - Human and not wearing voice mask - @@ -316,7 +316,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept else // - The speaker has a prespecified "voice message" to display if not understood - - if (vmessage) + if(vmessage) heard_voice += R // - Just display a garbled message - @@ -325,7 +325,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /* ###### Begin formatting and sending the message ###### */ - if (length(heard_masked) || length(heard_normal) || length(heard_voice) || length(heard_garbled) || length(heard_gibberish)) + if(length(heard_masked) || length(heard_normal) || length(heard_voice) || length(heard_garbled) || length(heard_gibberish)) /* --- Some miscellaneous variables to format the string output --- */ var/freq_text = get_frequency_name(display_freq) @@ -333,7 +333,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/part_b_extra = "" if(data == 3) // intercepted radio message part_b_extra = " (Intercepted)" - var/part_a = "\icon[radio]\[[freq_text]\][part_b_extra] " // goes in the actual output + var/part_a = "[bicon(radio)]\[[freq_text]\][part_b_extra] " // goes in the actual output // --- Some more pre-message formatting --- var/part_b = " " // Tweaked for security headsets -- TLE @@ -387,34 +387,34 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /* --- Process all the mobs that heard a masked voice (understood) --- */ - if (length(heard_masked)) - for (var/mob/R in heard_masked) + if(length(heard_masked)) + for(var/mob/R in heard_masked) R.hear_radio(message,verbage, speaking, part_a, part_b, M, 0, name, follow_target=follow_target) /* --- Process all the mobs that heard the voice normally (understood) --- */ - if (length(heard_normal)) - for (var/mob/R in heard_normal) + if(length(heard_normal)) + for(var/mob/R in heard_normal) R.hear_radio(message, verbage, speaking, part_a, part_b, M, 0, realname, follow_target=follow_target) /* --- Process all the mobs that heard the voice normally (did not understand) --- */ - if (length(heard_voice)) - for (var/mob/R in heard_voice) + if(length(heard_voice)) + for(var/mob/R in heard_voice) R.hear_radio(message,verbage, speaking, part_a, part_b, M,0, vname, follow_target=follow_target) /* --- Process all the mobs that heard a garbled voice (did not understand) --- */ // Displays garbled message (ie "f*c* **u, **i*er!") - if (length(heard_garbled)) - for (var/mob/R in heard_garbled) + if(length(heard_garbled)) + for(var/mob/R in heard_garbled) R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1, vname, follow_target=follow_target) /* --- Complete gibberish. Usually happens when there's a compressed message --- */ - if (length(heard_gibberish)) - for (var/mob/R in heard_gibberish) + if(length(heard_gibberish)) + for(var/mob/R in heard_gibberish) R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1, follow_target=follow_target) return 1 @@ -437,7 +437,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // --- Broadcast only to intercom devices --- if(data == 1) - for (var/obj/item/device/radio/intercom/R in connection.devices["[RADIO_CHAT]"]) + for(var/obj/item/device/radio/intercom/R in connection.devices["[RADIO_CHAT]"]) var/turf/position = get_turf(R) if(position && position.z == level) receive |= R.send_hear(display_freq, level) @@ -446,7 +446,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // --- Broadcast only to intercoms and station-bounced radios --- else if(data == 2) - for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) + for(var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) if(istype(R, /obj/item/device/radio/headset)) continue @@ -460,7 +460,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept else if(data == 3) for(var/freq in ANTAG_FREQS) var/datum/radio_frequency/antag_connection = radio_controller.return_frequency(freq) - for (var/obj/item/device/radio/R in antag_connection.devices["[RADIO_CHAT]"]) + for(var/obj/item/device/radio/R in antag_connection.devices["[RADIO_CHAT]"]) var/turf/position = get_turf(R) if(position && position.z == level) receive |= R.send_hear(freq) @@ -469,7 +469,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // --- Broadcast to ALL radio devices --- else - for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) + for(var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) var/turf/position = get_turf(R) if(position && position.z == level) receive |= R.send_hear(display_freq) @@ -484,11 +484,11 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/list/heard_garbled = list() // garbled message (ie "f*c* **u, **i*er!") var/list/heard_gibberish= list() // completely screwed over message (ie "F%! (O*# *#!<>&**%!") - for (var/mob/R in receive) + for(var/mob/R in receive) /* --- Loop through the receivers and categorize them --- */ - if (R.client && !(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. + if(R.client && !(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. continue @@ -500,7 +500,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // --- Can understand the speech --- - if (R.say_understands(M)) + if(R.say_understands(M)) heard_normal += R @@ -513,7 +513,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /* ###### Begin formatting and sending the message ###### */ - if (length(heard_normal) || length(heard_garbled) || length(heard_gibberish)) + if(length(heard_normal) || length(heard_garbled) || length(heard_gibberish)) /* --- Some miscellaneous variables to format the string output --- */ var/part_a = "" // goes in the actual output @@ -528,7 +528,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // Create a radio headset for the sole purpose of using its icon var/obj/item/device/radio/headset/radio = new - var/part_b = " \icon[radio]\[[freq_text]\][part_b_extra] " // Tweaked for security headsets -- TLE + var/part_b = " [bicon(radio)]\[[freq_text]\][part_b_extra] " // Tweaked for security headsets -- TLE var/part_blackbox_b = " \[[freq_text]\] " var/part_c = "" @@ -566,30 +566,30 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /* --- Process all the mobs that heard the voice normally (understood) --- */ - if (length(heard_normal)) + if(length(heard_normal)) var/rendered = "[part_a][source][part_b]\"[text]\"[part_c]" - for (var/mob/R in heard_normal) + for(var/mob/R in heard_normal) R.show_message(rendered, 2) /* --- Process all the mobs that heard a garbled voice (did not understand) --- */ // Displays garbled message (ie "f*c* **u, **i*er!") - if (length(heard_garbled)) + if(length(heard_garbled)) var/quotedmsg = "\"[stars(text)]\"" var/rendered = "[part_a][source][part_b][quotedmsg][part_c]" - for (var/mob/R in heard_garbled) + for(var/mob/R in heard_garbled) R.show_message(rendered, 2) /* --- Complete gibberish. Usually happens when there's a compressed message --- */ - if (length(heard_gibberish)) + if(length(heard_gibberish)) var/quotedmsg = "\"[Gibberish(text, compression + 50)]\"" var/rendered = "[part_a][Gibberish(source, compression + 50)][part_b][quotedmsg][part_c]" - for (var/mob/R in heard_gibberish) + for(var/mob/R in heard_gibberish) R.show_message(rendered, 2) //Use this to test if an obj can communicate with a Telecommunications Network diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index 5e46a20dd6d..a97e5a7d4c2 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -224,12 +224,12 @@ if(istype(D, /obj/item/weapon/screwdriver)) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) if(do_after(user, 20, target = src)) - if (src.stat & BROKEN) + if(src.stat & BROKEN) to_chat(user, "\blue The broken glass falls out.") var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) new /obj/item/weapon/shard(loc) var/obj/item/weapon/circuitboard/comm_server/M = new /obj/item/weapon/circuitboard/comm_server( A ) - for (var/obj/C in src) + for(var/obj/C in src) C.loc = src.loc A.circuit = M A.state = 3 @@ -240,7 +240,7 @@ to_chat(user, "\blue You disconnect the monitor.") var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) var/obj/item/weapon/circuitboard/comm_server/M = new /obj/item/weapon/circuitboard/comm_server( A ) - for (var/obj/C in src) + for(var/obj/C in src) C.loc = src.loc A.circuit = M A.state = 4 diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 290e3352ea8..787483ac45d 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -145,6 +145,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() listening_level = position.z /obj/machinery/telecomms/initialize() + ..() if(autolinkers.len) // Links nearby machines if(!long_range_link) @@ -584,10 +585,3 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() var/name = "data packet (#)" var/garbage_collector = 1 // if set to 0, will not be garbage collected var/input_type = "Speech File" - - - - - - - diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm index 16528b73d0e..57136b46dc9 100644 --- a/code/game/machinery/telecomms/telemonitor.dm +++ b/code/game/machinery/telecomms/telemonitor.dm @@ -130,12 +130,12 @@ if(istype(D, /obj/item/weapon/screwdriver)) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) if(do_after(user, 20, target = src)) - if (src.stat & BROKEN) + if(src.stat & BROKEN) to_chat(user, "\blue The broken glass falls out.") var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) new /obj/item/weapon/shard(loc) var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A ) - for (var/obj/C in src) + for(var/obj/C in src) C.loc = src.loc A.circuit = M A.state = 3 @@ -146,7 +146,7 @@ to_chat(user, "\blue You disconnect the monitor.") var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A ) - for (var/obj/C in src) + for(var/obj/C in src) C.loc = src.loc A.circuit = M A.state = 4 diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm index a5ee6631037..dbbf6682e4e 100644 --- a/code/game/machinery/telecomms/traffic_control.dm +++ b/code/game/machinery/telecomms/traffic_control.dm @@ -342,12 +342,12 @@ if(istype(D, /obj/item/weapon/screwdriver)) playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1) if(do_after(user, 20, target = src)) - if (src.stat & BROKEN) + if(src.stat & BROKEN) to_chat(user, "\blue The broken glass falls out.") var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) new /obj/item/weapon/shard(loc) var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A ) - for (var/obj/C in src) + for(var/obj/C in src) C.loc = src.loc A.circuit = M A.state = 3 @@ -358,7 +358,7 @@ to_chat(user, "\blue You disconnect the monitor.") var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A ) - for (var/obj/C in src) + for(var/obj/C in src) C.loc = src.loc A.circuit = M A.state = 4 diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 9c1d90ce67a..63aeb4e25ee 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -20,11 +20,12 @@ return /obj/machinery/computer/teleporter/initialize() + ..() link_power_station() update_icon() /obj/machinery/computer/teleporter/Destroy() - if (power_station) + if(power_station) power_station.teleporter_console = null power_station = null return ..() @@ -88,7 +89,7 @@ // Set up the Nano UI ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "teleporter_console.tmpl", "Teleporter Console UI", 400, 400) ui.set_initial_data(data) ui.open() @@ -179,7 +180,7 @@ for(var/obj/item/device/radio/beacon/R in beacons) var/turf/T = get_turf(R) - if (!T) + if(!T) continue if((T.z in config.admin_levels) || T.z > 7) continue @@ -192,13 +193,13 @@ areaindex[tmpname] = 1 L[tmpname] = R - for (var/obj/item/weapon/implant/tracking/I in tracked_implants) - if (!I.implanted || !ismob(I.loc)) + for(var/obj/item/weapon/implant/tracking/I in tracked_implants) + if(!I.implanted || !ismob(I.loc)) continue else var/mob/M = I.loc - if (M.stat == 2) - if (M.timeofdeath + 6000 < world.time) + if(M.stat == 2) + if(M.timeofdeath + 6000 < world.time) continue var/turf/T = get_turf(M) if(!T) continue @@ -222,7 +223,7 @@ return for(var/obj/machinery/teleport/station/R in S) var/turf/T = get_turf(R) - if (!T || !R.teleporter_hub || !R.teleporter_console) + if(!T || !R.teleporter_hub || !R.teleporter_console) continue if((T.z in config.admin_levels) || T.z > 7) continue @@ -247,7 +248,7 @@ return /proc/find_loc(obj/R as obj) - if (!R) return null + if(!R) return null var/turf/T = R.loc while(!istype(T, /turf)) T = T.loc @@ -270,6 +271,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() ..() @@ -293,10 +295,11 @@ RefreshParts() /obj/machinery/teleport/hub/initialize() + ..() link_power_station() /obj/machinery/teleport/hub/Destroy() - if (power_station) + if(power_station) power_station.teleporter_hub = null power_station = null return ..() @@ -317,7 +320,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) @@ -350,12 +353,12 @@ /obj/machinery/teleport/hub/proc/teleport(atom/movable/M as mob|obj, turf/T) var/obj/machinery/computer/teleporter/com = power_station.teleporter_console - if (!com) + if(!com) return - if (!com.target) + if(!com.target) visible_message("Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.") return - if (istype(M, /atom/movable)) + if(istype(M, /atom/movable)) if(!calibrated && prob(25 - ((accurate) * 10))) //oh dear a problem do_teleport(M, locate(rand((2*TRANSITIONEDGE), world.maxx - (2*TRANSITIONEDGE)), rand((2*TRANSITIONEDGE), world.maxy - (2*TRANSITIONEDGE)), 3), 2) else @@ -379,7 +382,7 @@ use_power = 1 idle_power_usage = 10 active_power_usage = 2000 - + var/target var/tele_delay = 50 @@ -414,7 +417,7 @@ else do_teleport(M, target) use_power(5000) - + if(tele_delay) recalibrating = 1 update_icon() @@ -471,6 +474,7 @@ link_console_and_hub() /obj/machinery/teleport/station/initialize() + ..() link_console_and_hub() /obj/machinery/teleport/station/RefreshParts() @@ -498,7 +502,7 @@ teleporter_hub.power_station = null teleporter_hub.update_icon() teleporter_hub = null - if (teleporter_console) + if(teleporter_console) teleporter_console.power_station = null teleporter_console = null return ..() @@ -548,12 +552,12 @@ to_chat(user, "Close the maintenance panel first.") /obj/machinery/teleport/station/proc/toggle(mob/user) - if (stat & (BROKEN|NOPOWER) || !teleporter_hub || !teleporter_console) + if(stat & (BROKEN|NOPOWER) || !teleporter_hub || !teleporter_console) return - if (teleporter_hub.panel_open) + if(teleporter_hub.panel_open) to_chat(user, "Close the hub's maintenance panel first.") return - if (teleporter_console.target) + if(teleporter_console.target) src.engaged = !src.engaged use_power(5000) visible_message("Teleporter [engaged ? "" : "dis"]engaged!") diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index d117961ff88..f34e28dcd18 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -227,7 +227,7 @@ playsound(src.loc, 'sound/effects/alert.ogg', 50, 0) sleep(5) H.apply_effect((rand(150,200)),IRRADIATE,0) - if (prob(5)) + if(prob(5)) if(prob(75)) randmutb(H) // Applies bad mutation domutcheck(H,null,1) @@ -244,7 +244,7 @@ badcount++ for(var/obj/item/weapon/kitchen/knife/K in src.loc) badcount++ - for(var/obj/item/weapon/c4/KK in src.loc) + for(var/obj/item/weapon/grenade/plastic/c4/KK in src.loc) badcount++ for(var/obj/item/weapon/melee/ML in src.loc) badcount++ 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/turret_control.dm b/code/game/machinery/turret_control.dm index 0deb0d947a3..d27df18523a 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -45,6 +45,7 @@ return ..() /obj/machinery/turretid/initialize() + ..() if(!control_area) control_area = get_area(src) else if(istext(control_area)) @@ -136,7 +137,7 @@ data["settings"] = settings ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300) ui.set_initial_data(data) ui.open() @@ -184,7 +185,7 @@ TC.ailock = ailock if(istype(control_area)) - for (var/obj/machinery/porta_turret/aTurret in control_area) + for(var/obj/machinery/porta_turret/aTurret in control_area) aTurret.setState(TC) update_icon() @@ -199,8 +200,8 @@ if(stat & NOPOWER) icon_state = "control_off" set_light(0) - else if (enabled) - if (lethal) + else if(enabled) + if(lethal) icon_state = "control_kill" set_light(1.5, 1,"#990000") else diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index f0b6ce34ef7..2589f2620c4 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -97,8 +97,8 @@ icon_state = "grey_target_prism" else if( powered() ) - if (src.enabled) - if (src.lasers) + if(src.enabled) + if(src.lasers) icon_state = "orange_target_prism" else icon_state = "target_prism" @@ -219,10 +219,10 @@ /obj/machinery/turret/proc/shootAt(var/atom/movable/target) var/turf/T = get_turf(src) var/turf/U = get_turf(target) - if (!T || !U) + if(!T || !U) return var/obj/item/projectile/A - if (src.lasers) + if(src.lasers) switch(lasertype) if(1) A = new /obj/item/projectile/beam(loc) @@ -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,36 +244,37 @@ 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() return (invisibility!=0) /obj/machinery/turret/proc/popUp() - if ((!isPopping()) || src.popping==-1) + if((!isPopping()) || src.popping==-1) invisibility = 0 popping = 1 playsound(get_turf(src), 'sound/effects/turret/open.wav', 60, 1) - if (src.cover!=null) + if(src.cover!=null) flick("popup", src.cover) src.cover.icon_state = "openTurretCover" spawn(10) - if (popping==1) popping = 0 + if(popping==1) popping = 0 /obj/machinery/turret/proc/popDown() - if ((!isPopping()) || src.popping==1) + if((!isPopping()) || src.popping==1) popping = -1 playsound(get_turf(src), 'sound/effects/turret/open.wav', 60, 1) - if (src.cover!=null) + if(src.cover!=null) flick("popdown", src.cover) src.cover.icon_state = "turretCover" spawn(10) - if (popping==-1) + if(popping==-1) invisibility = INVISIBILITY_LEVEL_TWO popping = 0 @@ -284,7 +284,7 @@ ..() if(prob(45) && Proj.damage > 0) src.spark_system.start() qdel(Proj) - if (src.health <= 0) + if(src.health <= 0) src.die() return @@ -294,7 +294,7 @@ playsound(src.loc, 'sound/weapons/smash.ogg', 60, 1) src.spark_system.start() src.health -= W.force * 0.5 - if (src.health <= 0) + if(src.health <= 0) src.die() return @@ -315,7 +315,7 @@ src.density = 0 src.stat |= BROKEN src.icon_state = "destroyed_target_prism" - if (cover!=null) + if(cover!=null) qdel(cover) sleep(3) flick("explosion", src) @@ -332,7 +332,7 @@ add_logs(M, src, "attacked", admin=0) //src.attack_log += text("\[[time_stamp()]\] was attacked by [M.name] ([M.ckey])") src.health -= M.melee_damage_upper - if (src.health <= 0) + if(src.health <= 0) src.die() else to_chat(M, "That object is useless to you.") @@ -348,7 +348,7 @@ playsound(src.loc, 'sound/weapons/slash.ogg', 25, 1, -1) visible_message("[M] has slashed at [src]!") src.health -= 15 - if (src.health <= 0) + if(src.health <= 0) src.die() else to_chat(M, "\green That object is useless to you.") @@ -359,22 +359,22 @@ /obj/machinery/turretid/Topic(href, href_list, var/nowindow = 0) if(..(href, href_list)) return 1 - if (src.locked) - if (!istype(usr, /mob/living/silicon)) + if(src.locked) + if(!istype(usr, /mob/living/silicon)) to_chat(usr, "Control panel is locked!") return - if (href_list["toggleOn"]) + if(href_list["toggleOn"]) src.enabled = !src.enabled src.updateTurrets() - else if (href_list["toggleLethal"]) + else if(href_list["toggleLethal"]) src.lethal = !src.lethal src.updateTurrets() if(!nowindow) src.attack_hand(usr) /obj/machinery/turretid/proc/update_icons() - if (src.enabled) - if (src.lethal) + if(src.enabled) + if(src.lethal) icon_state = "control_kill" else icon_state = "control_stun" @@ -382,7 +382,7 @@ icon_state = "control_standby" //CODE FIXED BUT REMOVED // if(control_area) //USE: updates other controls in the area -// for (var/obj/machinery/turretid/Turret_Control in world) //I'm not sure if this is what it was +// for(var/obj/machinery/turretid/Turret_Control in world) //I'm not sure if this is what it was // if( Turret_Control.control_area != src.control_area ) continue //supposed to do. Or whether the person // Turret_Control.icon_state = icon_state //who coded it originally was just tired // Turret_Control.enabled = enabled //or something. I don't see any situation @@ -512,6 +512,8 @@ continue if(faction in M.faction) continue + if(ispAI(M)) + continue pos_targets += M for(var/obj/mecha/M in oview(scan_range, src)) if(M.occupant) @@ -542,17 +544,17 @@ if(!src) return var/turf/curloc = get_turf(src) - if (!targloc || !curloc) + if(!targloc || !curloc) return - if (targloc == curloc) + if(targloc == curloc) 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 e022e0c6a4b..b6fc160a6f6 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -159,7 +159,7 @@ qdel(src) return if(2.0) - if (prob(50)) + if(prob(50)) qdel(src) return if(3.0) @@ -208,16 +208,21 @@ break return total -/obj/machinery/vending/attackby(obj/item/weapon/W, mob/user, params) - if (currently_vending && vendor_account && !vendor_account.suspended) +/obj/machinery/vending/attackby(obj/item/I, mob/user, params) + if(currently_vending && vendor_account && !vendor_account.suspended) var/paid = 0 var/handled = 0 - if(istype(W, /obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/C = W + if(istype(I, /obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/C = I paid = pay_with_card(C) handled = 1 - else if (istype(W, /obj/item/weapon/spacecash)) - var/obj/item/weapon/spacecash/C = W + if(istype(I, /obj/item/device/pda)) + var/obj/item/device/pda/PDA = I + if(PDA.id) + paid = pay_with_card(PDA.id) + handled = 1 + else if(istype(I, /obj/item/weapon/spacecash)) + var/obj/item/weapon/spacecash/C = I paid = pay_with_cash(C, user) handled = 1 @@ -228,10 +233,10 @@ nanomanager.update_uis(src) return // don't smack that machine with your 2 thalers - if(default_unfasten_wrench(user, W, time = 60)) + if(default_unfasten_wrench(user, I, time = 60)) return - if(istype(W, /obj/item/weapon/screwdriver) && anchored) + if(istype(I, /obj/item/weapon/screwdriver) && anchored) playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) panel_open = !panel_open to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") @@ -242,9 +247,9 @@ return if(panel_open) - if(istype(W, /obj/item/device/multitool)||istype(W, /obj/item/weapon/wirecutters)) + if(istype(I, /obj/item/device/multitool)||istype(I, /obj/item/weapon/wirecutters)) return attack_hand(user) - if(component_parts && istype(W, /obj/item/weapon/crowbar)) + if(component_parts && istype(I, /obj/item/weapon/crowbar)) var/datum/data/vending_product/machine = product_records for(var/datum/data/vending_product/machine_content in machine) while(machine_content.amount !=0) @@ -253,21 +258,21 @@ machine_content.amount-- if(!machine_content.amount) break - default_deconstruction_crowbar(W) - if(istype(W, /obj/item/weapon/coin) && premium.len > 0) + default_deconstruction_crowbar(I) + if(istype(I, /obj/item/weapon/coin) && premium.len > 0) user.drop_item() - W.loc = src - coin = W + I.loc = src + coin = I categories |= CAT_COIN - to_chat(user, "\blue You insert the [W] into the [src]") + to_chat(user, "\blue You insert the [I] into the [src]") nanomanager.update_uis(src) return - else if(istype(W, refill_canister) && refill_canister != null) + else if(istype(I, refill_canister) && refill_canister != null) if(stat & (BROKEN|NOPOWER)) to_chat(user, "It does nothing.") else if(panel_open) //if the panel is open we attempt to refill the machine - var/obj/item/weapon/vending_refill/canister = W + var/obj/item/weapon/vending_refill/canister = I if(canister.charges == 0) to_chat(user, "This [canister.name] is empty!") else @@ -296,7 +301,7 @@ if(currently_vending.price > cashmoney.get_total()) // This is not a status display message, since it's something the character // themselves is meant to see BEFORE putting the money in - to_chat(usr, "\icon[cashmoney] That is not enough money.") + to_chat(usr, "[bicon(cashmoney)] That is not enough money.") return 0 // Bills (banknotes) cannot really have worth different than face value, @@ -327,7 +332,7 @@ return pay_with_account(get_card_account(I)) /obj/machinery/vending/proc/pay_with_account(var/datum/money_account/customer_account) - if (!customer_account) + if(!customer_account) src.status_message = "Error: Unable to access account. Please contact technical support if problem persists." src.status_error = 1 return 0 @@ -443,7 +448,7 @@ data["panel"] = 0 ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "vending_machine.tmpl", src.name, 440, 600) ui.set_initial_data(data) ui.open() @@ -462,7 +467,7 @@ to_chat(usr, "\blue You remove the [coin] from the [src]") categories &= ~CAT_COIN - if (href_list["pay"]) + if(href_list["pay"]) if(currently_vending && vendor_account && !vendor_account.suspended) var/paid = 0 var/handled = 0 @@ -480,8 +485,8 @@ nanomanager.update_uis(src) return // don't smack that machine with your 2 credits - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) - if ((href_list["vend"]) && (src.vend_ready) && (!currently_vending)) + if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) + if((href_list["vend"]) && (src.vend_ready) && (!currently_vending)) if(issilicon(usr) && !isrobot(usr)) to_chat(usr, "The vending machine refuses to interface with you, as you are not in its target demographic!") @@ -511,10 +516,10 @@ src.status_message = "Please swipe a card or insert cash to pay for the item." src.status_error = 0 - else if (href_list["cancelpurchase"]) + else if(href_list["cancelpurchase"]) src.currently_vending = null - else if ((href_list["togglevoice"]) && (src.panel_open)) + else if((href_list["togglevoice"]) && (src.panel_open)) src.shut_up = !src.shut_up src.add_fingerprint(usr) @@ -534,7 +539,7 @@ src.status_error = 0 nanomanager.update_uis(src) - if (R.category & CAT_COIN) + if(R.category & CAT_COIN) if(!coin) to_chat(user, "\blue You need to insert a coin to get this item.") return @@ -559,7 +564,7 @@ src.last_reply = world.time use_power(vend_power_usage) //actuators and stuff - if (src.icon_vend) //Show the vending animation if needed + if(src.icon_vend) //Show the vending animation if needed flick(src.icon_vend,src) spawn(src.vend_delay) new R.product_path(get_turf(src)) @@ -601,7 +606,7 @@ if(stat & NOPOWER) return - if (!message) + if(!message) return for(var/mob/O in hearers(src, null)) @@ -623,10 +628,10 @@ //Oh no we're malfunctioning! Dump out some product and break. /obj/machinery/vending/proc/malfunction() for(var/datum/data/vending_product/R in src.product_records) - if (R.amount <= 0) //Try to use a record that actually has something to dump. + if(R.amount <= 0) //Try to use a record that actually has something to dump. continue var/dump_path = R.product_path - if (!dump_path) + if(!dump_path) continue while(R.amount>0) @@ -646,16 +651,16 @@ return 0 for(var/datum/data/vending_product/R in src.product_records) - if (R.amount <= 0) //Try to use a record that actually has something to dump. + if(R.amount <= 0) //Try to use a record that actually has something to dump. continue var/dump_path = R.product_path - if (!dump_path) + if(!dump_path) continue R.amount-- throw_item = new dump_path(src.loc) break - if (!throw_item) + if(!throw_item) return 0 spawn(0) throw_item.throw_at(target, 16, 3, src) @@ -698,7 +703,7 @@ icon_deny = "boozeomat-deny" products = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 5, - /obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/tequila = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5, @@ -1114,7 +1119,7 @@ icon_state = "engi" icon_deny = "engi-deny" req_access_txt = "11" - products = list(/obj/item/clothing/under/rank/chief_engineer = 4,/obj/item/clothing/under/rank/engineer = 4,/obj/item/clothing/shoes/orange = 4,/obj/item/clothing/head/hardhat = 4, + products = list(/obj/item/clothing/under/rank/chief_engineer = 4,/obj/item/clothing/under/rank/engineer = 4,/obj/item/clothing/shoes/workboots = 4,/obj/item/clothing/head/hardhat = 4, /obj/item/weapon/storage/belt/utility = 4,/obj/item/clothing/glasses/meson = 4,/obj/item/clothing/gloves/color/yellow = 4, /obj/item/weapon/screwdriver = 12, /obj/item/weapon/crowbar = 12,/obj/item/weapon/wirecutters = 12,/obj/item/device/multitool = 12,/obj/item/weapon/wrench = 12,/obj/item/device/t_scanner = 12, /obj/item/stack/cable_coil/heavyduty = 8, /obj/item/weapon/stock_parts/cell = 8, /obj/item/weapon/weldingtool = 8,/obj/item/clothing/head/welding = 8, @@ -1152,7 +1157,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/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 6889cf67c42..e075457a9e5 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -145,7 +145,7 @@ G.desc = new_desc if(new_shoe_icon_state && new_shoe_name) for(var/obj/item/clothing/shoes/S in contents) - if (S.chained == 1) + if(S.chained == 1) S.chained = 0 S.slowdown = SHOES_SLOWDOWN new /obj/item/weapon/restraints/handcuffs( src ) @@ -229,43 +229,43 @@ istype(W,/obj/item/weapon/bedsheet)) //YES, it's hardcoded... saves a var/can_be_washed for every single clothing item. - if ( istype(W,/obj/item/clothing/suit/space ) ) + if( istype(W,/obj/item/clothing/suit/space ) ) to_chat(user, "This item does not fit.") return - if ( istype(W,/obj/item/clothing/suit/syndicatefake ) ) + if( istype(W,/obj/item/clothing/suit/syndicatefake ) ) to_chat(user, "This item does not fit.") return -// if ( istype(W,/obj/item/clothing/suit/powered ) ) +// if( istype(W,/obj/item/clothing/suit/powered ) ) // to_chat(user, "This item does not fit.") // return - if ( istype(W,/obj/item/clothing/suit/cyborg_suit ) ) + if( istype(W,/obj/item/clothing/suit/cyborg_suit ) ) to_chat(user, "This item does not fit.") return - if ( istype(W,/obj/item/clothing/suit/bomb_suit ) ) + if( istype(W,/obj/item/clothing/suit/bomb_suit ) ) to_chat(user, "This item does not fit.") return - if ( istype(W,/obj/item/clothing/suit/armor ) ) + if( istype(W,/obj/item/clothing/suit/armor ) ) to_chat(user, "This item does not fit.") return - if ( istype(W,/obj/item/clothing/suit/armor ) ) + if( istype(W,/obj/item/clothing/suit/armor ) ) to_chat(user, "This item does not fit.") return - if ( istype(W,/obj/item/clothing/mask/gas ) ) + if( istype(W,/obj/item/clothing/mask/gas ) ) to_chat(user, "This item does not fit.") return - if ( istype(W,/obj/item/clothing/mask/cigarette ) ) + if( istype(W,/obj/item/clothing/mask/cigarette ) ) to_chat(user, "This item does not fit.") return - if ( istype(W,/obj/item/clothing/head/syndicatefake ) ) + if( istype(W,/obj/item/clothing/head/syndicatefake ) ) to_chat(user, "This item does not fit.") return -// if ( istype(W,/obj/item/clothing/head/powered ) ) +// if( istype(W,/obj/item/clothing/head/powered ) ) // to_chat(user, "This item does not fit.") // return - if ( istype(W,/obj/item/clothing/head/helmet ) ) + if( istype(W,/obj/item/clothing/head/helmet ) ) to_chat(user, "This item does not fit.") return - if ( istype(W,/obj/item/clothing/gloves/furgloves ) ) + if( istype(W,/obj/item/clothing/gloves/furgloves ) ) to_chat(user, "This item does not fit.") return if(W.flags & NODROP) //if "can't drop" item @@ -273,7 +273,7 @@ return if(contents.len < 5) - if ( state in list(1, 3) ) + if( state in list(1, 3) ) user.drop_item() W.loc = src state = 3 diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index a5a8e44e165..cfe94888123 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -71,7 +71,7 @@ /obj/mecha/combat/durand/Topic(href, href_list) ..() - if (href_list["toggle_defence_mode"]) + if(href_list["toggle_defence_mode"]) src.defence_mode() return diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index 26d9d066fd8..09caf2fcaf0 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -113,6 +113,6 @@ /obj/mecha/combat/gygax/Topic(href, href_list) ..() - if (href_list["toggle_leg_overload"]) + if(href_list["toggle_leg_overload"]) src.overload() return \ No newline at end of file diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm index d8ef8c8b9fe..4bfd5f9a161 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/game/mecha/combat/honker.dm @@ -139,7 +139,7 @@ obj/mecha/combat/honker/Topic(href, href_list) ..() - if (href_list["play_sound"]) + if(href_list["play_sound"]) switch(href_list["play_sound"]) if("sadtrombone") playsound(src, 'sound/misc/sadtrombone.ogg', 50) @@ -148,7 +148,7 @@ obj/mecha/combat/honker/Topic(href, href_list) proc/rand_hex_color() var/list/colors = list("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f") var/color="" - for (var/i=0;i<6;i++) + for(var/i=0;i<6;i++) color = color+pick(colors) return color diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 0d7676d75b7..386afc0710c 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -188,10 +188,10 @@ /obj/mecha/combat/marauder/Topic(href, href_list) ..() - if (href_list["toggle_thrusters"]) + if(href_list["toggle_thrusters"]) src.toggle_thrusters() - if (href_list["smoke"]) + if(href_list["smoke"]) src.smoke() - if (href_list["toggle_zoom"]) + if(href_list["toggle_zoom"]) src.zoom() return \ No newline at end of file diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index a4edcb4a89a..595fa67ea00 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -85,9 +85,9 @@ /obj/mecha/combat/phazon/Topic(href, href_list) ..() - if (href_list["switch_damtype"]) + if(href_list["switch_damtype"]) src.switch_damtype() - if (href_list["phasing"]) + if(href_list["phasing"]) phasing = !phasing send_byjax(src.occupant,"exosuit.browser","phasing_command","[phasing?"Dis":"En"]able phasing") src.occupant_message("En":"#f00\">Dis"]abled phasing.") diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 1967f1e6645..b7aeaed66cc 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -133,7 +133,7 @@ /obj/item/mecha_parts/mecha_equipment/proc/occupant_message(message) if(chassis) - chassis.occupant_message("\icon[src] [message]") + chassis.occupant_message("[bicon(src)] [message]") return /obj/item/mecha_parts/mecha_equipment/proc/log_message(message) diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 98db55e0f25..bef015cb7fa 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -296,7 +296,7 @@ //meh switch(mode) if(0) - if (istype(target, /turf/simulated/wall)) + if(istype(target, /turf/simulated/wall)) if(istype(target, /turf/simulated/wall/r_wall) && !canRwall) return 0 occupant_message("Deconstructing [target]...") @@ -306,7 +306,7 @@ target:ChangeTurf(/turf/simulated/floor/plating) playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) chassis.use_power(energy_drain) - else if (istype(target, /turf/simulated/floor)) + else if(istype(target, /turf/simulated/floor)) occupant_message("Deconstructing [target]...") set_ready_state(0) if(do_after_cooldown(target)) @@ -314,7 +314,7 @@ target:ChangeTurf(/turf/space) playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) chassis.use_power(energy_drain) - else if (istype(target, /obj/machinery/door/airlock)) + else if(istype(target, /obj/machinery/door/airlock)) occupant_message("Deconstructing [target]...") set_ready_state(0) if(do_after_cooldown(target)) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index ae5595d69e5..6660692ce62 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -16,7 +16,7 @@ if(size > M.maxsize) return 0 return 1 - else if (M.emagged == 1) + else if(M.emagged == 1) return 1 return 0 @@ -29,9 +29,9 @@ var/turf/curloc = get_turf(chassis) var/turf/targloc = get_turf(target) - if (!targloc || !istype(targloc) || !curloc) + if(!targloc || !istype(targloc) || !curloc) return 0 - if (targloc == curloc) + if(targloc == curloc) return 0 set_ready_state(0) @@ -166,7 +166,7 @@ to_chat(M, "HONK") M.sleeping = 0 M.stuttering = 20 - M.ear_deaf = 30 + M.adjustEarDamage(0,30) M.Weaken(3) if(prob(30)) M.Stun(10) @@ -222,7 +222,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/Topic(href, href_list) ..() - if (href_list["rearm"]) + if(href_list["rearm"]) rearm() return diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 4eae22d7646..46c92271308 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -283,7 +283,7 @@ else data["has_mech"] = 0 ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "mech_bay_console.tmpl", "Mech Bay Control Console", 500, 325) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index a88d1c49bad..22071dea277 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -153,7 +153,7 @@ I.loc = get_step(src,SOUTH) I.materials[MAT_METAL] = get_resource_cost_w_coeff(D,MAT_METAL) I.materials[MAT_GLASS] = get_resource_cost_w_coeff(D,MAT_GLASS) - visible_message("\icon[src] \The [src] beeps, \"\The [I] is complete.\"") + visible_message("[bicon(src)] \The [src] beeps, \"\The [I] is complete.\"") being_built = null updateUsrDialog() @@ -196,14 +196,14 @@ if(stat&(NOPOWER|BROKEN)) return 0 if(!check_resources(D)) - visible_message("\icon[src] \The [src] beeps, \"Not enough resources. Queue processing stopped.\"") + visible_message("[bicon(src)] \The [src] beeps, \"Not enough resources. Queue processing stopped.\"") temp = {"Not enough resources to build next part.
          Try again | Return"} return 0 remove_from_queue(1) build_part(D) D = listgetindex(queue, 1) - visible_message("\icon[src] \The [src] beeps, \"Queue processing finished successfully.\"") + visible_message("[bicon(src)] \The [src] beeps, \"Queue processing finished successfully.\"") /obj/machinery/mecha_part_fabricator/proc/list_queue() var/output = "Queue contains:" @@ -240,7 +240,7 @@ temp += "Return" updateUsrDialog() - visible_message("\icon[src] \The [src] beeps, \"Successfully synchronized with R&D server.\"") + visible_message("[bicon(src)] \The [src] beeps, \"Successfully synchronized with R&D server.\"") return temp = "Unable to connect to local R&D Database.
          Please check your connections and try again.
          Return" @@ -266,12 +266,12 @@ /obj/machinery/mecha_part_fabricator/interact(mob/user as mob) var/dat, left_part - if (..()) + if(..()) return user.set_machine(src) var/turf/exit = get_step(src,SOUTH) if(exit.density) - visible_message("\icon[src] \The [src] beeps, \"Error! Part outlet is obstructed.\"") + visible_message("[bicon(src)] \The [src] beeps, \"Error! Part outlet is obstructed.\"") return if(temp) left_part = temp @@ -289,9 +289,8 @@ if("parts") left_part += output_parts_list(part_set) left_part += "
          Return" - dat = {" - - [name] + dat = {" + [name] + + + + +

          Contents

          +
            +
          1. What's a Fax?
          2. +
          3. When to Fax?
          4. +
          5. How to Fax?
          6. +
          +

          + +

          What's a Fax?


          +
        • Faxes are your main method of communicating with the NAS Trurl, better known as Central Command.
        • +
        • Faxes allow personnel on the station to maintain open lines of communication with the NAS Trurl, allowing for vital information to flow both ways.
        • +
        • Being written communications, proper grammar, syntax and typography is required, in addition to a signature and, if applicable, a stamp. Failure to sign faxes will lead to an automatic rejection.
        • +
        • We at NanoTrasen provide Fax Machines to every Head of Staff, in addition to the Magistrate, NanoTrasen Representative, and Internal Affairs Agents.
        • +
        • This means that we trust the recipients of these fax machines to only use them in the proper circumstances (see When to Fax?).
        • + +

          When to Fax?


          +
        • While it is up to the discretion of each individual person to decide when to fax Central Command, there are some simple guidelines on when to do this.
        • +
        • Firstly, any situation that can reasonably be solved on-site, should be handled on-site. Knowledge of Standard Operating Procedure is mandatory for everyone with access to a fax machine.
        • +
        • Resolving issues on-site not only leads to more expedient problem-solving, it also frees up company resources and provides valuable work experience for all parties involved.
        • +
        • This means that you should work with the Heads of Staff concerning personnel and workplace issues, and attempt to resolve situations with them. If, for whatever reason, the relevent Head of Staff is not available or receptive, consider speaking with the Captain and/or NanoTrasen Representative.
        • +
        • If, for whatever reason, these issues cannot be solved on-site, either due to incompetence or just plain refusal to cooperate, faxing Central Command becomes a viable option.
        • +
        • Secondly, station status reports should be sent occasionally, but never at the start of the shift. Remember, we assign personnel to the station. We do not need a repeat of what we just signed off on.
        • +
        • Thirdly, staff/departmental evaluations are always welcome, especially in cases of noticeable (in)competence. Just as a brilliant coworker can be rewarded, an incompetent one can be punished.
        • +
        • Fourthly, do not issue faxes asking for sentences. You have an entire Security department and an associated Detective, not to mention on-site Space Law manuals.
        • +
        • Lastly, please pay attention to context. If the station is facing a massive emergency, such as a Class 7-10 Blob Organism, most, if not all, non-relevant faxes will be duly ignored.
        • + +

          How to Fax?


          +
        • Sending a fax is simple. Simply insert your ID into the fax machine, then log in.
        • +
        • Once logged in, insert a piece of paper and select the destination from the provided list. Remember, you can rename your fax from within the fax machine's menu.
        • +
        • You can send faxes to any other fax machine on the station, which can be a very useful tool when you need to issue broad communications to all of the Heads of Staff.
        • +
        • To send a fax to Central Command, simply select the correct destination, and send the fax. Keep in mind, the communication arrays need to recharge after sending a fax to Central Command, so make sure you sent everything you need.
        • +
        • Lastly, paper bundles can also be faxed as a single item, so feel free to bundle up all relevant documentation and send it in at once.
        • + +

+ + + + "} + /obj/item/weapon/book/manual/sop_science name = "Science Standard Operating Procedures" desc = "A set of guidelines aiming at the safe conduct of all scientific activities." @@ -1483,7 +1542,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 +2200,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 +2209,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 +2223,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 +2271,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 +2289,10 @@ Crew:
      • Crew members may freely walk in the hallways
      • -
      • Suit sensors are not mandatory.
      • +
      • Suit sensors are not mandatory.


      - +

      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 +2314,10 @@ Crew:
      • Employees are recommended to comply with all security requests.
      • -
      • Suit sensors are mandatory, but coordinate positions are not required.
      • +
      • Suit sensors are mandatory, but coordinate positions are not required.


      - +

      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 +2338,12 @@ Crew:
      • Suit sensors and coordinate positions are mandatory.
      • -
      • All crew members must remain in their departments.
      • -
      • Employees are required to comply with all security requests.
      • -
      • Emergency Response Team may be authorised. All crew are to comply with their direction.
      • +
      • All crew members must remain in their departments.
      • +
      • Employees are required to comply with all security requests.
      • +
      • Emergency Response Team may be authorised. All crew are to comply with their direction.


      - +

      Code Gamma


      Extremely hostile threat onboard the station.
      GAMMA Security level has been set by Centcom.
      @@ -2306,21 +2365,21 @@ Crew:
      • Employees are required to comply with all security requests.
      • -
      • All civilians are to seek their nearest head for transportation to a safe location.
      • +
      • All civilians are to seek their nearest head for transportation to a safe location.
      • All personnel are required to defend the station and help security with dealing with the threat. All crew must follow direct orders from Security Personell or Head of Staff.


      - +

      Hiring Policies


      • Authorisation from the relevant Department Head is required to be hired into a Department. If none exists, the HoP or Captain's authorisation is required.
      • Promotion to a Department Head requires authorisation from the Captain or Acting Captain.
      • CentComm Authorisation is required for hiring the following: Blueshield, Security Pod Pilot, Magistrate, Brig Physician, Nanotrasen Representative, Mechanic.
      • If no Department Head has yet been sent, any promotion to said position is on a temporary basis until one arrives.
      • -
      • All Security personnel are to be loyalty implanted.
      • +
      • All Security personnel are to be mindshield implanted.


      - +

      Firing Policies


      • If a crew is to be dismissed, their ID is to be terminated.
      • @@ -2329,7 +2388,7 @@
      • Demotion or Dismissal must have due cause.


      - +

      Causes for Demotion and Dismissal


      • A medium or higher crime may be grounds for dismissal, at the department head's discretion.
      • @@ -2344,11 +2403,11 @@
      • Failure or refusal to hand in any items, ID, etc, of their previous job, is to be considered theft.


      - +

      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


      • All personnel are required to assist with evacuation. All crew must be evacuated, regardless of conscious state.
      • @@ -2359,7 +2418,7 @@
      • Shortening time to shuttle launch may be authorised if a clear threat to life, limb, or shuttle integrity is present.


      - +

      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 +2435,7 @@
      1. Once the Viral Outbreak is over, all personnel are to return to regular duties.


      - +

      Evacuation


      • Immediate evacuation of all untrained personnel.
      • @@ -2384,7 +2443,7 @@
      • Atmospheric Technicians are to remove hazard.


      - +

      Meteor Storm


      • All crew to move to central parts of the station.
      • @@ -2392,7 +2451,7 @@
      • Personel that are doing EVA maintenance should seek shelter immediately.


      - +

      Singularity Containment Failure


      • Observation of Singularity movement.
      • diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index e3c65c2f35b..5e262ce4afa 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -19,7 +19,7 @@ to_chat(user, "You accidentally cut yourself with [src], like a doofus!") user.take_organ_damage(5,5) active = !active - if (active) + if(active) force = force_on throwforce = throwforce_on hitsound = 'sound/weapons/blade1.ogg' @@ -62,7 +62,8 @@ w_class = 3 w_class_on = 5 hitsound = "swing_hit" - flags = CONDUCT | NOSHIELD + flags = CONDUCT + armour_penetration = 100 origin_tech = "combat=3" attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") attack_verb_on = list() @@ -82,8 +83,9 @@ throw_speed = 3 throw_range = 5 hitsound = "swing_hit" - flags = NOSHIELD + armour_penetration = 35 origin_tech = "magnets=3;syndicate=4" + block_chance = 50 sharp = 1 edge = 1 var/hacked = 0 @@ -93,9 +95,9 @@ if(item_color == null) item_color = pick("red", "blue", "green", "purple") -/obj/item/weapon/melee/energy/sword/IsShield() +/obj/item/weapon/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance) if(active) - return 1 + return ..() return 0 /obj/item/weapon/melee/energy/sword/cyborg @@ -131,7 +133,7 @@ ..() item_color = null -/obj/item/weapon/melee/energy/sword/cyborg/saw/IsShield() +/obj/item/weapon/melee/energy/sword/cyborg/saw/hit_reaction() return 0 /obj/item/weapon/melee/energy/sword/saber @@ -204,7 +206,7 @@ throw_speed = 3 throw_range = 1 w_class = 4//So you can't hide it in your pocket or some such. - flags = NOSHIELD + armour_penetration = 50 attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") var/datum/effect/system/spark_spread/spark_system @@ -215,6 +217,7 @@ spark_system.attach(src) /obj/item/weapon/melee/energy/blade/dropped() + ..() qdel(src) /obj/item/weapon/melee/energy/blade/attack_self(mob/user) diff --git a/code/game/objects/items/weapons/misc.dm b/code/game/objects/items/weapons/misc.dm index ebe8ecb421d..2ff41257ea1 100644 --- a/code/game/objects/items/weapons/misc.dm +++ b/code/game/objects/items/weapons/misc.dm @@ -30,7 +30,7 @@ flags = CONDUCT force = 5.0 throwforce = 7.0 - w_class = 2.0 + w_class = 2 materials = list(MAT_METAL=50) attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") @@ -40,7 +40,7 @@ icon = 'icons/obj/items.dmi' icon_state = "c_tube" throwforce = 1 - w_class = 1.0 + w_class = 1 throw_speed = 4 throw_range = 5 @@ -62,7 +62,7 @@ var/data = "" var/base_url = "http://svn.slurm.us/public/spacestation13/misc/game_kit" item_state = "sheet-metal" - w_class = 5.0 + w_class = 5 */ /obj/item/weapon/gift @@ -73,7 +73,7 @@ var/size = 3.0 var/obj/item/gift = null item_state = "gift" - w_class = 4.0 + w_class = 4 /obj/item/weapon/kidanglobe name = "Kidan homeworld globe" diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 7fad9cbbe5f..8b5baf79a35 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -9,14 +9,13 @@ throwforce = 5.0 throw_speed = 3 throw_range = 7 - w_class = 3.0 + w_class = 3 attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") var/mopping = 0 var/mopcount = 0 var/mopcap = 5 var/mopspeed = 30 - /obj/item/weapon/mop/New() create_reagents(mopcap) janitorial_equipment += src @@ -34,7 +33,6 @@ reagents.reaction(A, TOUCH, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly. reagents.remove_any(1) //reaction() doesn't use up the reagents - /obj/item/weapon/mop/afterattack(atom/A, mob/user, proximity) if(!proximity) return @@ -80,4 +78,15 @@ force = 6 throwforce = 8 throw_range = 4 - mopspeed = 20 \ No newline at end of file + mopspeed = 20 + +/obj/item/weapon/mop/advanced/cyborg + mopcap = 40 + +/obj/item/weapon/mop/advanced/cyborg/New() + ..() + reagents.add_reagent("water", mopcap) + +/obj/item/weapon/mop/advanced/cyborg/examine(mob/user) + ..(user) + to_chat(user, "The mop's water tank has [round(reagents.get_reagent_amount("water"))] units of water left.") \ No newline at end of file diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index 866efe8763c..7e251532bd1 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -9,7 +9,7 @@ var/global/list/cached_icons = list() icon_state = "paint_neutral" item_state = "paintcan" materials = list(MAT_METAL=200) - w_class = 3.0 + w_class = 3 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(10,20,30,50,70) volume = 70 @@ -73,7 +73,7 @@ var/global/list/cached_icons = list() icon_state = "paint_neutral" color = "FFFFFF" item_state = "paintcan" - w_class = 3.0 + w_class = 3 /obj/item/weapon/paint/red name = "Red paint" @@ -117,7 +117,7 @@ var/global/list/cached_icons = list() attack_self(mob/user as mob) var/t1 = input(user, "Please select a color:", "Locking Computer", null) in list( "red", "blue", "green", "yellow", "black", "white") - if ((user.get_active_hand() != src || user.stat || user.restrained())) + if((user.get_active_hand() != src || user.stat || user.restrained())) return switch(t1) if("red") diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index 9e8f68faa73..88d3f202ac6 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -24,9 +24,9 @@ return for(var/obj/item/I in loadedItems) spawn(0) - to_chat(user, "\icon [I] It has \the [I] loaded.") + to_chat(user, "[bicon(I)] It has \the [I] loaded.") if(tank) - to_chat(user, "\icon [tank] It has \the [tank] mounted onto it.") + to_chat(user, "[bicon(tank)] It has \the [tank] mounted onto it.") /obj/item/weapon/pneumatic_cannon/attackby(obj/item/weapon/W, mob/user, params) @@ -132,7 +132,7 @@ maxWeightClass = 7 gasPerThrow = 5 -/datum/table_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but +/datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but name = "Pneumatic Cannon" result = /obj/item/weapon/pneumatic_cannon/ghetto tools = list(/obj/item/weapon/weldingtool, diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index a34a8328457..92bb7ac4c07 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -139,17 +139,17 @@ /obj/item/weapon/stock_parts/cell/pulse //200 pulse shots name = "pulse rifle power cell" - maxcharge = 40000 + maxcharge = 400000 rating = 3 chargerate = 1500 /obj/item/weapon/stock_parts/cell/pulse/carbine name = "pulse carbine power cell" - maxcharge = 4000 + maxcharge = 40000 /obj/item/weapon/stock_parts/cell/pulse/pistol name = "pulse pistol power cell" - maxcharge = 1600 + maxcharge = 16000 /obj/item/weapon/stock_parts/cell/ninja name = "spider-clan power cell" diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm new file mode 100644 index 00000000000..8feab4632d7 --- /dev/null +++ b/code/game/objects/items/weapons/powerfist.dm @@ -0,0 +1,100 @@ +/obj/item/weapon/melee/powerfist + name = "power-fist" + desc = "A metal gauntlet with a piston-powered ram ontop for that extra 'ompfh' in your punch." + icon_state = "powerfist" + item_state = "powerfist" + flags = CONDUCT + attack_verb = list("whacked", "fisted", "power-punched") + force = 12 + throwforce = 10 + throw_range = 7 + w_class = 3 + origin_tech = "combat=5;powerstorage=3;syndicate=3" + var/click_delay = 1.5 + var/fisto_setting = 1 + var/gasperfist = 3 + var/obj/item/weapon/tank/tank = null //Tank used for the gauntlet's piston-ram. + + +/obj/item/weapon/melee/powerfist/Destroy() + if(tank) + qdel(tank) + tank = null + return ..() + +/obj/item/weapon/melee/powerfist/examine(mob/user) + ..() + if(!in_range(user, src)) + to_chat(user, "You'll need to get closer to see any more.") + return + if(tank) + to_chat(user, "\icon [tank] It has \the [tank] mounted onto it.") + +/obj/item/weapon/melee/powerfist/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W, /obj/item/weapon/tank)) + if(!tank) + var/obj/item/weapon/tank/IT = W + if(IT.volume <= 3) + to_chat(user, "\The [IT] is too small for \the [src].") + return + updateTank(W, 0, user) + else if(istype(W, /obj/item/weapon/wrench)) + switch(fisto_setting) + if(1) + fisto_setting = 2 + if(2) + fisto_setting = 3 + if(3) + fisto_setting = 1 + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + to_chat(user, "You tweak \the [src]'s piston valve to [fisto_setting].") + else if(istype(W, /obj/item/weapon/screwdriver)) + if(tank) + updateTank(tank, 1, user) + + +/obj/item/weapon/melee/powerfist/proc/updateTank(obj/item/weapon/tank/thetank, removing = 0, mob/living/carbon/human/user) + if(removing) + if(!tank) + to_chat(user, "\The [src] currently has no tank attached to it.") + return + to_chat(user, "You detach \the [thetank] from \the [src].") + tank.forceMove(get_turf(user)) + user.put_in_hands(tank) + tank = null + if(!removing) + if(tank) + to_chat(user, "\The [src] already has a tank.") + return + if(!user.unEquip(thetank)) + return + to_chat(user, "You hook \the [thetank] up to \the [src].") + tank = thetank + thetank.forceMove(src) + + +/obj/item/weapon/melee/powerfist/attack(mob/living/target, mob/living/user) + if(!tank) + to_chat(user, "\The [src] can't operate without a source of gas!") + return + if(tank && !tank.air_contents.remove(gasperfist * fisto_setting)) + to_chat(user, "\The [src]'s piston-ram lets out a weak hiss, it needs more gas!") + playsound(loc, 'sound/effects/refill.ogg', 50, 1) + return + + user.do_attack_animation(target) + + target.apply_damage(force * fisto_setting, BRUTE) + target.visible_message("[user]'s powerfist lets out a loud hiss as they punch [target.name]!", \ + "You cry out in pain as [user]'s punch flings you backwards!") + new/obj/effect/kinetic_blast(target.loc) + playsound(loc, 'sound/weapons/resonator_blast.ogg', 50, 1) + playsound(loc, 'sound/weapons/genhit2.ogg', 50, 1) + + var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) + spawn(0) + target.throw_at(throw_target, 5 * fisto_setting, 0.2) + + add_logs(target, user, "power fisted", src) + + user.changeNext_move(CLICK_CD_MELEE * click_delay) \ No newline at end of file diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm index 9f0c824dead..d213b6bcbb6 100644 --- a/code/game/objects/items/weapons/scissors.dm +++ b/code/game/objects/items/weapons/scissors.dm @@ -118,7 +118,7 @@ H.losebreath += 10 //30 Oxy damage over time H.apply_damage(18, BRUTE, "head", sharp =1, edge =1, used_weapon = "scissors") var/turf/location = get_turf(H) - if (istype(location, /turf/simulated)) + if(istype(location, /turf/simulated)) location.add_blood(H) H.bloody_hands(H) H.bloody_body(H) diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index 589f91b8302..90c98c6fdac 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/wizard.dmi' icon_state = "scroll" var/uses = 4.0 - w_class = 2.0 + w_class = 2 item_state = "paper" throw_speed = 4 throw_range = 20 @@ -29,15 +29,15 @@ /obj/item/weapon/teleportation_scroll/Topic(href, href_list) ..() - if (usr.stat || usr.restrained() || src.loc != usr) + if(usr.stat || usr.restrained() || src.loc != usr) return var/mob/living/carbon/human/H = usr - if (!( istype(H, /mob/living/carbon/human))) + if(!( istype(H, /mob/living/carbon/human))) return 1 - if ((usr == src.loc || (in_range(src, usr) && istype(src.loc, /turf)))) + if((usr == src.loc || (in_range(src, usr) && istype(src.loc, /turf)))) usr.set_machine(src) - if (href_list["spell_teleport"]) - if (src.uses >= 1) + if(href_list["spell_teleport"]) + if(src.uses >= 1) teleportscroll(H) attack_self(H) return @@ -49,7 +49,7 @@ A = input(user, "Area to jump to", "BOOYEA", A) in teleportlocs var/area/thearea = teleportlocs[A] - if (user.stat || user.restrained()) + if(user.stat || user.restrained()) return if(!((user == loc || (in_range(src, user) && istype(src.loc, /turf))))) return diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm index 4add062aabc..bcc09a86f16 100644 --- a/code/game/objects/items/weapons/shards.dm +++ b/code/game/objects/items/weapons/shards.dm @@ -7,7 +7,7 @@ sharp = 1 edge = 1 desc = "Could probably be used as ... a throwing weapon?" - w_class = 1.0 + w_class = 1 force = 5.0 throwforce = 10.0 item_state = "shard-glass" @@ -53,7 +53,7 @@ /obj/item/weapon/shard/Crossed(AM as mob|obj) if(isliving(AM)) var/mob/living/M = AM - if (M.incorporeal_move || M.flying)//you are incorporal or flying..no shard stepping! + if(M.incorporeal_move || M.flying)//you are incorporal or flying..no shard stepping! return to_chat(M, "\red You step on \the [src]!") playsound(src.loc, 'sound/effects/glass_step.ogg', 50, 1) // not sure how to handle metal shards with sounds diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index a161755c285..809bf0d298d 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -1,5 +1,6 @@ /obj/item/weapon/shield name = "shield" + block_chance = 50 /obj/item/weapon/shield/riot name = "riot shield" @@ -17,8 +18,10 @@ attack_verb = list("shoved", "bashed") var/cooldown = 0 //shield bash cooldown. based on world.time -/obj/item/weapon/shield/riot/IsShield() - return 1 +/obj/item/weapon/shield/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type) + if(attack_type == THROWN_PROJECTILE_ATTACK) + final_block_chance += 30 + return ..() /obj/item/weapon/shield/riot/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/melee/baton)) @@ -41,12 +44,7 @@ icon_state = "buckler" item_state = "buckler" materials = list() - -/obj/item/weapon/shield/riot/buckler/IsShield() - if(prob(60)) - return 1 - else - return 0 + block_chance = 30 /obj/item/weapon/shield/energy name = "energy combat shield" @@ -62,8 +60,8 @@ attack_verb = list("shoved", "bashed") var/active = 0 -/obj/item/weapon/shield/energy/IsShield() - return (active) +/obj/item/weapon/shield/energy/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance) + return 0 /obj/item/weapon/shield/energy/IsReflect() return (active) @@ -109,8 +107,10 @@ w_class = 3 var/active = 0 -/obj/item/weapon/shield/riot/tele/IsShield() - return (active) +/obj/item/weapon/shield/riot/tele/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance) + if(active) + return ..() + return 0 /obj/item/weapon/shield/riot/tele/attack_self(mob/living/user) active = !active diff --git a/code/game/objects/items/weapons/signs.dm b/code/game/objects/items/weapons/signs.dm index 7ad4f40b668..2155aeb69c6 100644 --- a/code/game/objects/items/weapons/signs.dm +++ b/code/game/objects/items/weapons/signs.dm @@ -4,7 +4,7 @@ name = "blank picket sign" desc = "It's blank" force = 5 - w_class = 4.0 + w_class = 4 attack_verb = list("bashed","smacked") var/delayed = 0 //used to do delays @@ -35,7 +35,7 @@ sleep(8) delayed = 0 -/datum/table_recipe/picket_sign +/datum/crafting_recipe/picket_sign name = "Picket Sign" result = /obj/item/weapon/picket_sign reqs = list(/obj/item/stack/rods = 1, diff --git a/code/game/objects/items/weapons/soap.dm b/code/game/objects/items/weapons/soap.dm index 961547d362f..f21c0581888 100644 --- a/code/game/objects/items/weapons/soap.dm +++ b/code/game/objects/items/weapons/soap.dm @@ -4,7 +4,7 @@ gender = PLURAL icon = 'icons/obj/items.dmi' icon_state = "soap" - w_class = 1.0 + w_class = 1 throwforce = 0 throw_speed = 4 throw_range = 20 @@ -35,7 +35,7 @@ to_chat(user, "You 'clean' \the [target.name].") if(istype(target, /turf/simulated)) new /obj/effect/decal/cleanable/blood/gibs/cleangibs(target) - else if (istype(target,/mob/living/carbon)) + else if(istype(target,/mob/living/carbon)) for(var/obj/item/carried_item in target.contents) if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant. carried_item.add_blood(target)//Oh yes, there will be blood... diff --git a/code/game/objects/items/weapons/staff.dm b/code/game/objects/items/weapons/staff.dm index e36bed7a473..ffaadb59d59 100644 --- a/code/game/objects/items/weapons/staff.dm +++ b/code/game/objects/items/weapons/staff.dm @@ -7,8 +7,8 @@ throwforce = 5.0 throw_speed = 1 throw_range = 5 - w_class = 2.0 - flags = NOSHIELD + w_class = 2 + armour_penetration = 100 attack_verb = list("bludgeoned", "whacked", "disciplined") /obj/item/weapon/twohanded/staff/broom @@ -72,5 +72,4 @@ throwforce = 5.0 throw_speed = 1 throw_range = 5 - w_class = 2.0 - flags = NOSHIELD \ No newline at end of file + w_class = 2 diff --git a/code/game/objects/items/weapons/stock_parts.dm b/code/game/objects/items/weapons/stock_parts.dm index 6e0500ffd38..e6e58196108 100644 --- a/code/game/objects/items/weapons/stock_parts.dm +++ b/code/game/objects/items/weapons/stock_parts.dm @@ -59,7 +59,7 @@ desc = "What?" gender = PLURAL icon = 'icons/obj/stock_parts.dmi' - w_class = 2.0 + w_class = 2 var/rating = 1 New() src.pixel_x = rand(-5.0, 5) diff --git a/code/game/objects/items/weapons/storage/artistic_toolbox.dm b/code/game/objects/items/weapons/storage/artistic_toolbox.dm index 56a3279dde0..81ba661115a 100644 --- a/code/game/objects/items/weapons/storage/artistic_toolbox.dm +++ b/code/game/objects/items/weapons/storage/artistic_toolbox.dm @@ -73,7 +73,7 @@ ..() /obj/item/weapon/storage/toolbox/green/memetic/proc/consume(mob/M) - if (!M) + if(!M) return hunger = 0 hunger_message_level = 0 diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 6c59e98385f..fa8de4f51bf 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -10,7 +10,7 @@ item_state = "backpack" lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing_righthand.dmi' - w_class = 4.0 + w_class = 4 slot_flags = SLOT_BACK //ERROOOOO max_w_class = 3 max_combined_w_class = 21 @@ -63,13 +63,13 @@ . = ..() proc/failcheck(mob/user as mob) - if (prob(src.reliability)) return 1 //No failure - if (prob(src.reliability)) + if(prob(src.reliability)) return 1 //No failure + if(prob(src.reliability)) to_chat(user, "\red The Bluespace portal resists your attempt to add another item.")//light failure else to_chat(user, "\red The Bluespace generator malfunctions!") - for (var/obj/O in src.contents) //it broke, delete what was in it + for(var/obj/O in src.contents) //it broke, delete what was in it qdel(O) crit_fail = 1 icon_state = "brokenpack" @@ -85,7 +85,7 @@ desc = "Space Santa uses this to deliver toys to all the nice children in space on Christmas! Wow, it's pretty big!" icon_state = "giftbag0" item_state = "giftbag" - w_class = 4.0 + w_class = 4 max_w_class = 3 max_combined_w_class = 400 // can store a ton of shit! @@ -322,6 +322,25 @@ new /obj/item/clothing/mask/muzzle(src) new /obj/item/device/mmi/syndie(src) +/obj/item/weapon/storage/backpack/duffel/syndie/surgery_fake //for maint spawns + name = "surgery dufflebag" + desc = "A suspicious looking dufflebag for holding surgery tools." + icon_state = "duffel-syndimed" + item_state = "duffle-syndimed" + +/obj/item/weapon/storage/backpack/duffel/syndie/surgery_fake/New() + ..() + new /obj/item/weapon/scalpel(src) + new /obj/item/weapon/hemostat(src) + new /obj/item/weapon/retractor(src) + new /obj/item/weapon/cautery(src) + new /obj/item/weapon/bonegel(src) + new /obj/item/weapon/bonesetter(src) + new /obj/item/weapon/FixOVein(src) + if(prob(50)) + new /obj/item/weapon/circular_saw(src) + new /obj/item/weapon/surgicaldrill(src) + /obj/item/weapon/storage/backpack/duffel/captain name = "captain's duffelbag" desc = "A duffelbag designed to hold large quantities of condoms." diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 41bc851dff1..66cb11a9dd6 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -198,7 +198,7 @@ new /obj/item/seeds/grassseed(O.loc, O) for(var/mob/M in range(1)) - if (M.s_active == src) + if(M.s_active == src) src.close(M) @@ -263,7 +263,7 @@ if(!inserted || !S.amount) usr.unEquip(S) usr.update_icons() //update our overlays - if (usr.client && usr.s_active != src) + if(usr.client && usr.s_active != src) usr.client.screen -= S S.dropped(usr) if(!S.amount) @@ -296,7 +296,7 @@ var/row_num = 0 var/col_count = min(7,storage_slots) -1 - if (adjusted_contents > 7) + if(adjusted_contents > 7) row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. src.standard_orient_objs(row_num, col_count, numbered_contents) return @@ -389,7 +389,7 @@ throwforce = 10.0 throw_speed = 3 throw_range = 5 - w_class = 4.0 + w_class = 4 flags = CONDUCT materials = list(MAT_METAL=3000) @@ -432,17 +432,17 @@ /obj/item/weapon/storage/bag/tray/cyborg /obj/item/weapon/storage/bag/tray/cyborg/afterattack(atom/target, mob/user as mob) - if ( isturf(target) || istype(target,/obj/structure/table) ) + if( isturf(target) || istype(target,/obj/structure/table) ) var foundtable = istype(target,/obj/structure/table/) - if ( !foundtable ) //it must be a turf! + if( !foundtable ) //it must be a turf! for(var/obj/structure/table/T in target) foundtable = 1 break var turf/dropspot - if ( !foundtable ) // don't unload things onto walls or other silly places. + if( !foundtable ) // don't unload things onto walls or other silly places. dropspot = user.loc - else if ( isturf(target) ) // they clicked on a turf with a table in it + else if( isturf(target) ) // they clicked on a turf with a table in it dropspot = target else // they clicked on a table dropspot = target.loc @@ -462,8 +462,8 @@ if(I) step(I, pick(NORTH,SOUTH,EAST,WEST)) sleep(rand(2,4)) - if ( droppedSomething ) - if ( foundtable ) + if( droppedSomething ) + if( foundtable ) user.visible_message("\blue [user] unloads their service tray.") else user.visible_message("\blue [user] drops all the items on their tray.") diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 07c8d836049..43d0897b2f9 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -26,7 +26,7 @@ if(!istype(over_object, /obj/screen)) return ..() playsound(src.loc, "rustle", 50, 1, -5) - if (!M.restrained() && !M.stat && can_use()) + if(!M.restrained() && !M.stat && can_use()) switch(over_object.name) if("r_hand") M.unEquip(src) @@ -68,10 +68,12 @@ new /obj/item/weapon/crowbar(src) new /obj/item/weapon/wirecutters(src) new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange")) + update_icon() /obj/item/weapon/storage/belt/utility/full/multitool/New() ..() new /obj/item/device/multitool(src) + update_icon() /obj/item/weapon/storage/belt/utility/atmostech/New() ..() @@ -82,6 +84,7 @@ new /obj/item/weapon/wirecutters(src) new /obj/item/device/t_scanner(src) new /obj/item/weapon/extinguisher/mini(src) + update_icon() @@ -124,6 +127,7 @@ new /obj/item/weapon/reagent_containers/food/pill/salicylic(src) new /obj/item/weapon/reagent_containers/food/pill/salicylic(src) new /obj/item/weapon/reagent_containers/food/pill/salicylic(src) + update_icon() /obj/item/weapon/storage/belt/botany @@ -183,6 +187,7 @@ /obj/item/weapon/storage/belt/security/sec/New() ..() new /obj/item/device/flashlight/seclite(src) + update_icon() /obj/item/weapon/storage/belt/security/response_team/New() ..() @@ -191,6 +196,7 @@ new /obj/item/device/flash(src) new /obj/item/weapon/melee/classic_baton/telescopic(src) new /obj/item/weapon/grenade/flashbang(src) + update_icon() /obj/item/weapon/storage/belt/soulstone name = "soul stone belt" @@ -211,6 +217,7 @@ new /obj/item/device/soulstone(src) new /obj/item/device/soulstone(src) new /obj/item/device/soulstone(src) + update_icon() /obj/item/weapon/storage/belt/champion @@ -262,6 +269,7 @@ new /obj/item/weapon/soap(src) new /obj/item/weapon/grenade/chem_grenade/cleaner(src) new /obj/item/weapon/grenade/chem_grenade/cleaner(src) + update_icon() /obj/item/weapon/storage/belt/lazarus name = "trainer's belt" @@ -314,6 +322,7 @@ new /obj/item/ammo_casing/shotgun/beanbag(src) new /obj/item/ammo_casing/shotgun/beanbag(src) new /obj/item/ammo_casing/shotgun/beanbag(src) + update_icon() /obj/item/weapon/storage/belt/bandolier/update_icon() ..() @@ -365,6 +374,8 @@ for(var/obj/item/weapon/gun/magic/wand/W in contents) //All wands in this pack come in the best possible condition W.max_charges = initial(W.max_charges) W.charges = W.max_charges + update_icon() + /obj/item/weapon/storage/belt/fannypack name = "fannypack" @@ -442,13 +453,13 @@ can_hold = list() proc/failcheck(mob/user as mob) - if (prob(src.reliability)) return 1 //No failure - if (prob(src.reliability)) + if(prob(src.reliability)) return 1 //No failure + if(prob(src.reliability)) to_chat(user, "\red The Bluespace portal resists your attempt to add another item.")//light failure else to_chat(user, "\red The Bluespace generator malfunctions!") - for (var/obj/O in src.contents) //it broke, delete what was in it + for(var/obj/O in src.contents) //it broke, delete what was in it qdel(O) crit_fail = 1 return 0 @@ -518,9 +529,9 @@ // As a last resort, the belt can be used as a plastic explosive with a fixed timer (15 seconds). Naturally, you'll lose all your gear... // Of course, it could be worse. It could spawn a singularity! /obj/item/weapon/storage/belt/bluespace/owlman/afterattack(atom/target as obj|turf, mob/user as mob, flag) - if (!flag) + if(!flag) return - if (istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage) || istype(target, /obj/structure/table) || istype(target, /obj/structure/closet)) + if(istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage) || istype(target, /obj/structure/table) || istype(target, /obj/structure/closet)) return to_chat(user, "Planting explosives...") user.visible_message("[user.name] is fiddling with their toolbelt.") @@ -535,8 +546,8 @@ target = target loc = null var/location - if (isturf(target)) location = target - if (ismob(target)) + if(isturf(target)) location = target + if(ismob(target)) target:attack_log += "\[[time_stamp()]\] Had the [name] planted on them by [user.real_name] ([user.ckey])" user.visible_message("\red [user.name] finished planting an explosive on [target.name]!") target.overlays += image('icons/obj/assemblies.dmi', "plastic-explosive2") @@ -546,12 +557,12 @@ if(ismob(target) || isobj(target)) location = target.loc // These things can move explosion(location, -1, -1, 2, 3) - if (istype(target, /turf/simulated/wall)) target:dismantle_wall(1) + if(istype(target, /turf/simulated/wall)) target:dismantle_wall(1) else target.ex_act(1) - if (isobj(target)) - if (target) + if(isobj(target)) + if(target) qdel(target) - if (src) + if(src) qdel(src) */ diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index 89c2adad79d..c66d9b56150 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -4,7 +4,7 @@ icon_state ="bible" throw_speed = 1 throw_range = 5 - w_class = 3.0 + w_class = 3 var/mob/affecting = null var/deity_name = "Christ" @@ -52,7 +52,7 @@ else M.LAssailant = user - if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if(!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") to_chat(user, "\red You don't have the dexterity to do this!") return if(!chaplain) @@ -60,7 +60,7 @@ user.take_organ_damage(0,10) return - if ((CLUMSY in user.mutations) && prob(50)) + if((CLUMSY in user.mutations) && prob(50)) to_chat(user, "\red The [src] slips out of your hand and hits your head.") user.take_organ_damage(10) user.Paralyse(20) @@ -69,12 +69,12 @@ // if(..() == BLOCKED) // return - if (M.stat !=2) + if(M.stat !=2) /*if((M.mind in ticker.mode.cult) && (prob(20))) to_chat(M, "\red The power of [src.deity_name] clears your mind of heresy!") to_chat(user, "\red You see how [M]'s eyes become clear, the cult no longer holds control over him!") ticker.mode.remove_cultist(M.mind)*/ - if ((istype(M, /mob/living/carbon/human) && prob(60))) + if((istype(M, /mob/living/carbon/human) && prob(60))) bless(M) for(var/mob/O in viewers(M, null)) O.show_message(text("\red [] heals [] with the power of [src.deity_name]!", user, M), 1) @@ -96,7 +96,7 @@ /obj/item/weapon/storage/bible/afterattack(atom/A, mob/user as mob, proximity) if(!proximity) return - if (istype(A, /turf/simulated/floor)) + if(istype(A, /turf/simulated/floor)) to_chat(user, "You hit the floor with the bible.") if(user.mind && (user.mind.assigned_role == "Chaplain")) call(/obj/effect/rune/proc/talismanreveal)(src) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index ce1e6aad9bb..8348bef8bb1 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -39,22 +39,29 @@ New() ..() contents = list() - sleep(1) new /obj/item/clothing/mask/breath( src ) new /obj/item/weapon/tank/emergency_oxygen( src ) new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src ) return -/obj/item/weapon/storage/box/engineer/ +/obj/item/weapon/storage/box/engineer New() ..() contents = list() - sleep(1) new /obj/item/clothing/mask/breath( src ) new /obj/item/weapon/tank/emergency_oxygen/engi( src ) new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src ) return +/obj/item/weapon/storage/box/survival_mining + New() + ..() + contents = list() + new /obj/item/clothing/mask/breath(src) + new /obj/item/weapon/tank/emergency_oxygen/engi(src) + new /obj/item/weapon/crowbar/red(src) + new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src) + /obj/item/weapon/storage/box/gloves name = "box of latex gloves" desc = "Contains white gloves." @@ -261,6 +268,19 @@ new /obj/item/weapon/implantcase/death_alarm(src) new /obj/item/weapon/implanter(src) +/obj/item/weapon/storage/box/tapes + name = "Tape Box" + desc = "A box of spare recording tapes" + icon_state = "box" + + New() + ..() + new /obj/item/device/tape(src) + new /obj/item/device/tape(src) + new /obj/item/device/tape(src) + new /obj/item/device/tape(src) + new /obj/item/device/tape(src) + new /obj/item/device/tape(src) /obj/item/weapon/storage/box/rxglasses name = "prescription glasses" @@ -603,7 +623,7 @@ icon_state = "syringe" New() ..() - for (var/i; i < storage_slots; i++) + for(var/i; i < storage_slots; i++) new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src) /obj/item/weapon/storage/box/autoinjector/utility diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm index 390f7632ca3..543865aa592 100644 --- a/code/game/objects/items/weapons/storage/briefcase.dm +++ b/code/game/objects/items/weapons/storage/briefcase.dm @@ -8,7 +8,7 @@ force = 8.0 throw_speed = 2 throw_range = 4 - w_class = 4.0 + w_class = 4 max_w_class = 3 max_combined_w_class = 21 attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 31ead836204..367874b0d7d 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -115,7 +115,7 @@ desc = "A box of crayons for all your rune drawing needs." icon = 'icons/obj/crayons.dmi' icon_state = "crayonbox" - w_class = 2.0 + w_class = 2 storage_slots = 6 icon_type = "crayon" can_hold = list( @@ -192,7 +192,6 @@ /obj/item/weapon/storage/fancy/cigarettes/update_icon() icon_state = "[initial(icon_state)][contents.len]" - desc = "There are [contents.len] cig\s left!" return /obj/item/weapon/storage/fancy/cigarettes/proc/lace_cigarette(var/obj/item/clothing/mask/cigarette/C as obj) @@ -355,7 +354,7 @@ var/total_contents = src.contents.len - itemremoved src.icon_state = "vialbox[total_contents]" src.overlays.Cut() - if (!broken) + if(!broken) overlays += image(icon, src, "led[locked]") if(locked) overlays += image(icon, src, "cover") @@ -386,4 +385,4 @@ new /obj/item/weapon/egg_scoop(src) new /obj/item/weapon/fish_net(src) new /obj/item/weapon/tank_brush(src) - new /obj/item/weapon/fishfood(src) \ No newline at end of file + new /obj/item/weapon/fishfood(src) diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index a11d00dbccd..82ee049d51d 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -31,7 +31,7 @@ New() ..() - if (empty) return + if(empty) return icon_state = pick("ointment","firefirstaid") @@ -53,7 +53,7 @@ New() ..() - if (empty) return + if(empty) return new /obj/item/weapon/reagent_containers/food/pill/patch/styptic( src ) new /obj/item/weapon/reagent_containers/food/pill/patch/styptic( src ) new /obj/item/weapon/reagent_containers/food/pill/salicylic( src ) @@ -71,7 +71,7 @@ New() ..() - if (empty) return + if(empty) return icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3") @@ -95,7 +95,7 @@ New() ..() - if (empty) return + if(empty) return new /obj/item/weapon/reagent_containers/food/pill/salbutamol( src ) new /obj/item/weapon/reagent_containers/food/pill/salbutamol( src ) new /obj/item/weapon/reagent_containers/food/pill/salbutamol( src ) @@ -114,7 +114,7 @@ New() ..() - if (empty) return + if(empty) return icon_state = pick("brute","brute2") @@ -138,7 +138,7 @@ /obj/item/weapon/storage/firstaid/adv/New() ..() - if (empty) return + if(empty) return new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src ) new /obj/item/stack/medical/advanced/bruise_pack(src) new /obj/item/stack/medical/advanced/bruise_pack(src) @@ -164,7 +164,7 @@ /obj/item/weapon/storage/firstaid/tactical/New() ..() - if (empty) return + if(empty) return new /obj/item/clothing/accessory/stethoscope( src ) new /obj/item/weapon/defibrillator/compact/combat/loaded(src) new /obj/item/weapon/reagent_containers/hypospray/combat(src) @@ -209,7 +209,7 @@ icon_state = "pill_canister" icon = 'icons/obj/chemical.dmi' item_state = "contsolid" - w_class = 2.0 + w_class = 2 can_hold = list("/obj/item/weapon/reagent_containers/food/pill","/obj/item/weapon/dice","/obj/item/weapon/paper") allow_quick_gather = 1 use_to_pickup = 1 @@ -223,11 +223,11 @@ base_name = name /obj/item/weapon/storage/pill_bottle/MouseDrop(obj/over_object as obj) //Quick pillbottle fix. -Agouri - if (ishuman(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~ + if(ishuman(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~ var/mob/M = usr - if (!( istype(over_object, /obj/screen) )) + if(!( istype(over_object, /obj/screen) )) return ..() - if ((!( M.restrained() ) && !( M.stat ) /*&& M.pocket == src*/)) + if((!( M.restrained() ) && !( M.stat ) /*&& M.pocket == src*/)) switch(over_object.name) if("r_hand") M.unEquip(src) @@ -238,7 +238,7 @@ src.add_fingerprint(usr) return if(over_object == usr && in_range(src, usr) || usr.contents.Find(src)) - if (usr.s_active) + if(usr.s_active) usr.s_active.close(usr) src.show_to(usr) return diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index 33ddaf498f2..f3dab6ce8ea 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -30,24 +30,24 @@ //returns 1 if the master item's parent's MouseDrop() should be called, 0 otherwise. It's strange, but no other way of //doing it without the ability to call another proc's parent, really. /obj/item/weapon/storage/internal/proc/handle_mousedrop(mob/user as mob, obj/over_object as obj) - if (ishuman(user)) //so monkeys can take off their backpacks -- Urist + if(ishuman(user)) //so monkeys can take off their backpacks -- Urist - if (istype(user.loc,/obj/mecha)) // stops inventory actions in a mech + if(istype(user.loc,/obj/mecha)) // stops inventory actions in a mech return 0 if(over_object == user && Adjacent(user)) // this must come before the screen objects only block src.open(user) return 0 - if (!( istype(over_object, /obj/screen) )) + if(!( istype(over_object, /obj/screen) )) return 1 //makes sure master_item is equipped before putting it in hand, so that we can't drag it into our hand from miles away. //there's got to be a better way of doing this... - if (!(master_item.loc == user) || (master_item.loc && master_item.loc.loc == user)) + if(!(master_item.loc == user) || (master_item.loc && master_item.loc.loc == user)) return 0 - if (!( user.restrained() ) && !( user.stat )) + if(!( user.restrained() ) && !( user.stat )) switch(over_object.name) if("r_hand") user.unEquip(master_item) @@ -76,12 +76,12 @@ return 0 src.add_fingerprint(user) - if (master_item.loc == user) + if(master_item.loc == user) src.open(user) return 0 for(var/mob/M in range(1, master_item.loc)) - if (M.s_active == src) + if(M.s_active == src) src.close(M) return 1 diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index af927acf19a..7cc71918905 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -18,7 +18,7 @@ attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/card/id)) + if(istype(W, /obj/item/weapon/card/id)) if(src.broken) to_chat(user, "It appears to be broken.") return @@ -81,7 +81,7 @@ storage_slots = 1 /obj/item/weapon/storage/lockbox/loyalty - name = "Lockbox (Loyalty Implants)" + name = "Lockbox (Mindshield Implants)" req_access = list(access_security) New() diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index dba3fb620e3..dad7b46a161 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -23,7 +23,7 @@ var/l_hacking = 0 var/emagged = 0 var/open = 0 - w_class = 3.0 + w_class = 3 max_w_class = 2 max_combined_w_class = 14 @@ -33,19 +33,19 @@ attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(locked) - if ((istype(W, /obj/item/weapon/melee/energy/blade)) && (!src.emagged)) + if((istype(W, /obj/item/weapon/melee/energy/blade)) && (!src.emagged)) emag_act(user, W) - if (istype(W, /obj/item/weapon/screwdriver)) - if (do_after(user, 20, target = src)) + if(istype(W, /obj/item/weapon/screwdriver)) + if(do_after(user, 20, target = src)) src.open =! src.open user.show_message(text("\blue You [] the service panel.", (src.open ? "open" : "close"))) return - if ((istype(W, /obj/item/device/multitool)) && (src.open == 1)&& (!src.l_hacking)) + if((istype(W, /obj/item/device/multitool)) && (src.open == 1)&& (!src.l_hacking)) user.show_message(text("\red Now attempting to reset internal memory, please hold."), 1) src.l_hacking = 1 - if (do_after(usr, 100, target = src)) - if (prob(40)) + if(do_after(usr, 100, target = src)) + if(prob(40)) src.l_setshort = 1 src.l_set = 0 user.show_message(text("\red Internal memory reset. Please give it a few seconds to reinitialize."), 1) @@ -85,7 +85,7 @@ MouseDrop(over_object, src_location, over_location) - if (locked) + if(locked) src.add_fingerprint(usr) return ..() @@ -95,28 +95,28 @@ user.set_machine(src) var/dat = text("[]
        \n\nLock Status: []",src, (src.locked ? "LOCKED" : "UNLOCKED")) var/message = "Code" - if ((src.l_set == 0) && (!src.emagged) && (!src.l_setshort)) + if((src.l_set == 0) && (!src.emagged) && (!src.l_setshort)) dat += text("

        \n5-DIGIT PASSCODE NOT SET.
        ENTER NEW PASSCODE.
        ") - if (src.emagged) + if(src.emagged) dat += text("

        \nLOCKING SYSTEM ERROR - 1701") - if (src.l_setshort) + if(src.l_setshort) dat += text("

        \nALERT: MEMORY SYSTEM ERROR - 6040 201") message = text("[]", src.code) - if (!src.locked) + if(!src.locked) message = "*****" dat += text("


        \n>[]
        \n1-2-3
        \n4-5-6
        \n7-8-9
        \nR-0-E
        \n
        ", message, src, src, src, src, src, src, src, src, src, src, src, src) user << browse(dat, "window=caselock;size=300x280") Topic(href, href_list) ..() - if ((usr.stat || usr.restrained()) || (get_dist(src, usr) > 1)) + if((usr.stat || usr.restrained()) || (get_dist(src, usr) > 1)) return - if (href_list["type"]) - if (href_list["type"] == "E") - if ((src.l_set == 0) && (length(src.code) == 5) && (!src.l_setshort) && (src.code != "ERROR")) + if(href_list["type"]) + if(href_list["type"] == "E") + if((src.l_set == 0) && (length(src.code) == 5) && (!src.l_setshort) && (src.code != "ERROR")) src.l_code = src.code src.l_set = 1 - else if ((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1)) + else if((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1)) src.locked = 0 src.overlays = null overlays += image('icons/obj/storage.dmi', icon_opened) @@ -124,18 +124,18 @@ else src.code = "ERROR" else - if ((href_list["type"] == "R") && (src.emagged == 0) && (!src.l_setshort)) + if((href_list["type"] == "R") && (src.emagged == 0) && (!src.l_setshort)) src.locked = 1 src.overlays = null src.code = null src.close(usr) else src.code += text("[]", href_list["type"]) - if (length(src.code) > 5) + if(length(src.code) > 5) src.code = "ERROR" src.add_fingerprint(usr) for(var/mob/M in viewers(1, src.loc)) - if ((M.client && M.machine == src)) + if((M.client && M.machine == src)) src.attack_self(M) return return @@ -165,7 +165,7 @@ force = 8.0 throw_speed = 2 throw_range = 4 - w_class = 4.0 + w_class = 4 max_w_class = 3 max_combined_w_class = 21 attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") @@ -176,17 +176,17 @@ new /obj/item/weapon/pen(src) attack_hand(mob/user as mob) - if ((src.loc == user) && (src.locked == 1)) + if((src.loc == user) && (src.locked == 1)) to_chat(usr, "\red [src] is locked and cannot be opened!") - else if ((src.loc == user) && (!src.locked)) + else if((src.loc == user) && (!src.locked)) playsound(src.loc, "rustle", 50, 1, -5) - if (user.s_active) + if(user.s_active) user.s_active.close(user) //Close and re-open src.show_to(user) else ..() for(var/mob/M in range(1)) - if (M.s_active == src) + if(M.s_active == src) src.close(M) src.orient2hud(user) src.add_fingerprint(user) @@ -213,7 +213,7 @@ icon_locking = "safeb" icon_sparking = "safespark" force = 8.0 - w_class = 5.0 + w_class = 5 max_w_class = 8 anchored = 1.0 density = 0 diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 9bbc26017be..e2324fcb434 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -8,7 +8,7 @@ /obj/item/weapon/storage name = "storage" icon = 'icons/obj/storage.dmi' - w_class = 3.0 + w_class = 3 var/silent = 0 // No message on putting items in var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else) var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set) @@ -26,10 +26,10 @@ var/use_sound = "rustle" //sound played when used. null for no sound. /obj/item/weapon/storage/MouseDrop(obj/over_object as obj) - if (ishuman(usr)) //so monkeys can take off their backpacks -- Urist + if(ishuman(usr)) //so monkeys can take off their backpacks -- Urist var/mob/M = usr - if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech + if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech return if(over_object == M && Adjacent(M)) // this must come before the screen objects only block @@ -39,12 +39,12 @@ show_to(M) return - if ((istype(over_object, /obj/structure/table) || istype(over_object, /turf/simulated/floor)) \ + if((istype(over_object, /obj/structure/table) || istype(over_object, /turf/simulated/floor)) \ && contents.len && loc == usr && !usr.stat && !usr.restrained() && usr.canmove && over_object.Adjacent(usr) \ && !istype(src, /obj/item/weapon/storage/lockbox)) var/turf/T = get_turf(over_object) - if (istype(over_object, /turf/simulated/floor)) - if (get_turf(usr) != T) + if(istype(over_object, /turf/simulated/floor)) + if(get_turf(usr) != T) return // Can only empty containers onto the floor under you if("Yes" != alert(usr,"Empty \the [src] onto \the [T]?","Confirm","Yes","No")) return @@ -59,12 +59,12 @@ update_icon() // For content-sensitive icons return - if (!( istype(over_object, /obj/screen) )) + if(!( istype(over_object, /obj/screen) )) return ..() - if (!(src.loc == usr) || (src.loc && src.loc.loc == usr)) + if(!(src.loc == usr) || (src.loc && src.loc.loc == usr)) return playsound(src.loc, "rustle", 50, 1, -5) - if (!( M.restrained() ) && !( M.stat )) + if(!( M.restrained() ) && !( M.stat )) switch(over_object.name) if("r_hand") if(!M.unEquip(src)) @@ -77,7 +77,7 @@ src.add_fingerprint(usr) return if(over_object == usr && in_range(src, usr) || usr.contents.Find(src)) - if (usr.s_active) + if(usr.s_active) usr.s_active.close(usr) src.show_to(usr) return @@ -94,7 +94,7 @@ L += S.return_inv() for(var/obj/item/weapon/gift/G in src) L += G.gift - if (istype(G.gift, /obj/item/weapon/storage)) + if(istype(G.gift, /obj/item/weapon/storage)) L += G.gift:return_inv() for(var/obj/item/weapon/folder/F in src) L += F.contents @@ -128,11 +128,11 @@ return /obj/item/weapon/storage/proc/open(mob/user as mob) - if (src.use_sound) + if(src.use_sound) playsound(src.loc, src.use_sound, 50, 1, -5) orient2hud(user) - if (user.s_active) + if(user.s_active) user.s_active.close(user) show_to(user) @@ -153,7 +153,7 @@ O.layer = 20 O.plane = HUD_PLANE cx++ - if (cx > mx) + if(cx > mx) cx = tx cy-- src.closer.screen_loc = "[mx+1],[my]" @@ -173,7 +173,7 @@ ND.sample_object.layer = 20 ND.sample_object.plane = HUD_PLANE cx++ - if (cx > (4+cols)) + if(cx > (4+cols)) cx = 4 cy-- else @@ -184,7 +184,7 @@ O.layer = 20 O.plane = HUD_PLANE cx++ - if (cx > (4+cols)) + if(cx > (4+cols)) cx = 4 cy-- src.closer.screen_loc = "[4+cols+1]:16,2:16" @@ -224,7 +224,7 @@ //var/mob/living/carbon/human/H = user var/row_num = 0 var/col_count = min(7,storage_slots) -1 - if (adjusted_contents > 7) + if(adjusted_contents > 7) row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. src.standard_orient_objs(row_num, col_count, numbered_contents) return @@ -249,7 +249,7 @@ break if(!ok) if(!stop_messages) - if (istype(W, /obj/item/weapon/hand_labeler)) + if(istype(W, /obj/item/weapon/hand_labeler)) return 0 to_chat(usr, "[src] cannot hold [W].") return 0 @@ -260,7 +260,7 @@ to_chat(usr, "[src] cannot hold [W].") return 0 - if (W.w_class > max_w_class) + if(W.w_class > max_w_class) if(!stop_messages) to_chat(usr, "[W] is too big for this [src].") return 0 @@ -301,18 +301,18 @@ W.loc = src W.on_enter_storage(src) if(usr) - if (usr.client && usr.s_active != src) + if(usr.client && usr.s_active != src) usr.client.screen -= W W.dropped(usr) add_fingerprint(usr) if(!prevent_warning && !istype(W, /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow)) for(var/mob/M in viewers(usr, null)) - if (M == usr) + if(M == usr) to_chat(usr, "You put the [W] into [src].") - else if (M in range(1)) //If someone is standing close enough, they can tell what it is... + else if(M in range(1)) //If someone is standing close enough, they can tell what it is... M.show_message("[usr] puts [W] into [src].") - else if (W && W.w_class >= 3.0) //Otherwise they can only see large or normal items from a distance... + else if(W && W.w_class >= 3.0) //Otherwise they can only see large or normal items from a distance... M.show_message("[usr] puts [W] into [src].") src.orient2hud(usr) @@ -331,8 +331,8 @@ F.update_icon(1) for(var/mob/M in range(1, src.loc)) - if (M.s_active == src) - if (M.client) + if(M.s_active == src) + if(M.client) M.client.screen -= W if(new_location) @@ -373,9 +373,6 @@ handle_item_insertion(W) return 1 -/obj/item/weapon/storage/dropped(mob/user as mob) - return - /obj/item/weapon/storage/attack_hand(mob/user as mob) playsound(src.loc, "rustle", 50, 1, -5) @@ -392,14 +389,14 @@ return src.orient2hud(user) - if (src.loc == user) - if (user.s_active) + if(src.loc == user) + if(user.s_active) user.s_active.close(user) src.show_to(user) else ..() for(var/mob/M in range(1)) - if (M.s_active == src) + if(M.s_active == src) src.close(M) src.add_fingerprint(user) return @@ -409,7 +406,7 @@ set category = "Object" collection_mode = !collection_mode - switch (collection_mode) + switch(collection_mode) if(1) to_chat(usr, "[src] now picks up all items in a tile at once.") if(0) @@ -488,19 +485,19 @@ return //Otherwise we'll try to fold it. - if ( contents.len ) + if( contents.len ) return - if ( !ispath(src.foldable) ) + if( !ispath(src.foldable) ) return var/found = 0 // Close any open UI windows first for(var/mob/M in range(1)) - if (M.s_active == src) + if(M.s_active == src) src.close(M) - if ( M == user ) + if( M == user ) found = 1 - if ( !found ) // User is too far away + if( !found ) // User is too far away return // Now make the cardboard to_chat(user, "You fold [src] flat.") @@ -514,14 +511,14 @@ var/depth = 0 var/atom/cur_atom = src - while (cur_atom && !(cur_atom in container.contents)) - if (isarea(cur_atom)) + while(cur_atom && !(cur_atom in container.contents)) + if(isarea(cur_atom)) return -1 - if (istype(cur_atom.loc, /obj/item/weapon/storage)) + if(istype(cur_atom.loc, /obj/item/weapon/storage)) depth++ cur_atom = cur_atom.loc - if (!cur_atom) + if(!cur_atom) return -1 //inside something with a null loc. return depth @@ -532,14 +529,14 @@ var/depth = 0 var/atom/cur_atom = src - while (cur_atom && !isturf(cur_atom)) - if (isarea(cur_atom)) + while(cur_atom && !isturf(cur_atom)) + if(isarea(cur_atom)) return -1 - if (istype(cur_atom.loc, /obj/item/weapon/storage)) + if(istype(cur_atom.loc, /obj/item/weapon/storage)) depth++ cur_atom = cur_atom.loc - if (!cur_atom) + if(!cur_atom) return -1 //inside something with a null loc. return depth diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 22e46163fa3..fd44bacbf53 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -9,7 +9,7 @@ throwforce = 10.0 throw_speed = 2 throw_range = 7 - w_class = 4.0 + w_class = 4 materials = list(MAT_METAL = 500) origin_tech = "combat=1" attack_verb = list("robusted") @@ -17,7 +17,7 @@ New() ..() - if (src.type == /obj/item/weapon/storage/toolbox) + if(src.type == /obj/item/weapon/storage/toolbox) to_chat(world, "BAD: [src] ([src.type]) spawned at [src.x] [src.y] [src.z]") qdel(src) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index e5ebf843c6e..71d488672aa 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -1,7 +1,7 @@ /obj/item/weapon/storage/box/syndicate/ New() ..() - switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "bond" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "implant" = 1, "hacker" = 1, "lordsingulo" = 1, "darklord" = 1))) + switch(pickweight(list("bloodyspai" = 1, "stealth" = 1, "bond" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "implant" = 1, "hacker" = 1, "lordsingulo" = 1, "darklord" = 1))) if("bloodyspai") new /obj/item/clothing/under/chameleon(src) new /obj/item/clothing/mask/gas/voice(src) @@ -37,7 +37,7 @@ new /obj/item/weapon/gun/projectile/revolver(src) new /obj/item/ammo_box/a357(src) new /obj/item/weapon/card/emag(src) - new /obj/item/weapon/c4(src) + new /obj/item/weapon/grenade/plastic/c4(src) new /obj/item/clothing/gloves/color/latex/nitrile(src) new /obj/item/clothing/mask/gas/clown_hat(src) new /obj/item/clothing/under/suit_jacket/really_black(src) @@ -118,7 +118,16 @@ ..() new /obj/item/clothing/suit/space/rig/syndi/elite(src) new /obj/item/clothing/head/helmet/space/rig/syndi/elite(src) - return + +/obj/item/weapon/storage/box/syndie_kit/shielded_hardsuit + name = "Boxed Shielded Syndicate Hardsuit and Helmet" + can_hold = list("/obj/item/clothing/suit/space/rig/shielded/syndi", "/obj/item/clothing/head/helmet/space/rig/shielded/syndi") + max_w_class = 4 + +/obj/item/weapon/storage/box/syndie_kit/shielded_hardsuit/New() + ..() + new /obj/item/clothing/suit/space/rig/shielded/syndi(src) + new /obj/item/clothing/head/helmet/space/rig/shielded/syndi(src) /obj/item/weapon/storage/box/syndie_kit/conversion name = "box (CK)" diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index db834beeb45..305befe2ecb 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -24,6 +24,7 @@ return /obj/item/weapon/melee/baton/CheckParts() + ..() bcell = locate(/obj/item/weapon/stock_parts/cell) in contents update_icon() @@ -132,6 +133,11 @@ /obj/item/weapon/melee/baton/proc/baton_stun(mob/living/L, mob/user) + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(H.check_shields(0, "[user]'s [name]", src, MELEE_ATTACK)) //No message; check_shields() handles that + playsound(L, 'sound/weapons/Genhit.ogg', 50, 1) + return user.lastattacked = L L.lastattacker = user @@ -182,13 +188,6 @@ /obj/item/weapon/melee/baton/loaded/robot hitcost = 1000 - -/obj/item/weapon/melee/baton/loaded/ntcane - name = "fancy cane" - desc = "A cane with special engraving on it. It has a strange button on the handle..." - icon_state = "cane_nt" - item_state = "cane_nt" - //Makeshift stun baton. Replacement for stun gloves. /obj/item/weapon/melee/baton/cattleprod name = "stunprod" @@ -207,4 +206,4 @@ else if(!bcell) icon_state = "stunprod_nocell" else - icon_state = "stunprod" \ No newline at end of file + icon_state = "stunprod" diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 63346476021..55f7c4d5eb8 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -46,11 +46,15 @@ return if(!isliving(target)) return - if (user.a_intent == I_HARM) + if(user.a_intent == I_HARM) if(!..()) return if(!isrobot(target)) return else if(cooldown <= 0) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + if(H.check_shields(0, "[user]'s [name]", src, MELEE_ATTACK)) + return 0 playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1) target.Weaken(3) add_logs(target, user, "stunned", object="[src]") @@ -68,6 +72,13 @@ else return ..() +/obj/item/weapon/melee/classic_baton/ntcane + name = "fancy cane" + desc = "A cane with special engraving on it. It seems well suited for fending off assailants..." + icon_state = "cane_nt" + item_state = "cane_nt" + needs_permit = 0 + //Telescopic baton /obj/item/weapon/melee/classic_baton/telescopic name = "telescopic baton" diff --git a/code/game/objects/items/weapons/syndie_uplink.dm b/code/game/objects/items/weapons/syndie_uplink.dm index 173c9ff2960..3dd9a230ad1 100644 --- a/code/game/objects/items/weapons/syndie_uplink.dm +++ b/code/game/objects/items/weapons/syndie_uplink.dm @@ -10,7 +10,7 @@ var/mob/currentUser = null var/obj/item/device/radio/origradio = null flags = CONDUCT | ONBELT - w_class = 2.0 + w_class = 2 item_state = "radio" throw_speed = 4 throw_range = 20 @@ -31,7 +31,7 @@ slot_flags = SLOT_BELT item_state = "radio" throwforce = 5 - w_class = 2.0 + w_class = 2 throw_speed = 4 throw_range = 20 materials = list(MAT_METAL=100) diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm index 4f5db94d4af..62c2f7aabfd 100644 --- a/code/game/objects/items/weapons/table_rack_parts.dm +++ b/code/game/objects/items/weapons/table_rack_parts.dm @@ -96,7 +96,7 @@ */ /obj/item/weapon/rack_parts/attackby(obj/item/weapon/W as obj, mob/user as mob, params) ..() - if (istype(W, /obj/item/weapon/wrench)) + if(istype(W, /obj/item/weapon/wrench)) new /obj/item/stack/sheet/metal(user.loc) qdel(src) diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 68fe80fdbfb..af2c59c4759 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -4,76 +4,90 @@ name = "Jetpack (Empty)" desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution." icon_state = "jetpack" - w_class = 4.0 + w_class = 4 item_state = "jetpack" distribute_pressure = ONE_ATMOSPHERE*O2STANDARD var/datum/effect/system/ion_trail_follow/ion_trail - var/on = 0.0 - var/stabilization_on = 0 + actions_types = list(/datum/action/item_action/set_internals, /datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization) + var/on = 0 + var/stabilizers = 0 var/volume_rate = 500 //Needed for borg jetpack transfer - action_button_name = "Toggle Jetpack" /obj/item/weapon/tank/jetpack/New() ..() - src.ion_trail = new /datum/effect/system/ion_trail_follow() - src.ion_trail.set_up(src) - return + ion_trail = new /datum/effect/system/ion_trail_follow() + ion_trail.set_up(src) /obj/item/weapon/tank/jetpack/Destroy() qdel(ion_trail) ion_trail = null return ..() +/obj/item/weapon/tank/jetpack/ui_action_click(mob/user, actiontype) + if(actiontype == /datum/action/item_action/toggle_jetpack) + cycle(user) + else if(actiontype == /datum/action/item_action/jetpack_stabilization) + toggle_stabilization(user) + else + toggle_internals(user) + +/obj/item/weapon/tank/jetpack/proc/toggle_stabilization(mob/user) + if(on) + stabilizers = !stabilizers + to_chat(user, "You turn [src]'s stabilization [stabilizers ? "on" : "off"].") + + /obj/item/weapon/tank/jetpack/examine(mob/user) if(!..(user, 0)) return if(air_contents.oxygen < 10) - to_chat(user, text("\red The meter on the [src.name] indicates you are almost out of air!")) + to_chat(user, "The meter on [src] indicates you are almost out of air!") playsound(user, 'sound/effects/alert.ogg', 50, 1) -/obj/item/weapon/tank/jetpack/verb/toggle_rockets() - set name = "Toggle Jetpack Stabilization" - set category = "Object" - src.stabilization_on = !( src.stabilization_on ) - to_chat(usr, "You toggle the stabilization [stabilization_on? "on":"off"].") - return +/obj/item/weapon/tank/jetpack/proc/cycle(mob/user) + if(user.incapacitated()) + return - -/obj/item/weapon/tank/jetpack/verb/toggle() - set name = "Toggle Jetpack" - set category = "Object" - on = !on - if(on) - icon_state = "[icon_state]-on" -// item_state = "[item_state]-on" - ion_trail.start() + if(!on) + turn_on() + to_chat(user, "You turn the jetpack on.") else - icon_state = initial(icon_state) -// item_state = initial(item_state) - ion_trail.stop() - return + turn_off() + to_chat(user, "You turn the jetpack off.") + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + + +/obj/item/weapon/tank/jetpack/proc/turn_on() + on = TRUE + icon_state = "[initial(icon_state)]-on" + ion_trail.start() + +/obj/item/weapon/tank/jetpack/proc/turn_off() + on = FALSE + stabilizers = FALSE + icon_state = initial(icon_state) + ion_trail.stop() /obj/item/weapon/tank/jetpack/proc/allow_thrust(num, mob/living/user as mob) - if(!(src.on)) + if(!on) return 0 - if((num < 0.005 || src.air_contents.total_moles() < num)) - src.ion_trail.stop() + if((num < 0.005 || air_contents.total_moles() < num)) + turn_off() return 0 - var/datum/gas_mixture/G = src.air_contents.remove(num) - - var/allgases = G.carbon_dioxide + G.nitrogen + G.oxygen + G.toxins //fuck trace gases -Pete - if(allgases >= 0.005) - . = 1 - - qdel(G) - -/obj/item/weapon/tank/jetpack/ui_action_click() - toggle() + var/datum/gas_mixture/removed = air_contents.remove(num) + if(removed.total_moles() < 0.005) + turn_off() + return 0 + var/turf/T = get_turf(user) + T.assume_air(removed) + return 1 /obj/item/weapon/tank/jetpack/void name = "Void Jetpack (Oxygen)" @@ -124,8 +138,8 @@ /obj/item/weapon/tank/jetpack/carbondioxide/New() ..() - src.ion_trail = new /datum/effect/system/ion_trail_follow() - src.ion_trail.set_up(src) + ion_trail = new /datum/effect/system/ion_trail_follow() + ion_trail.set_up(src) air_contents.carbon_dioxide = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) /obj/item/weapon/tank/jetpack/carbondioxide/examine(mob/user) @@ -133,35 +147,32 @@ return if(air_contents.carbon_dioxide < 10) - to_chat(user, text("\red The meter on the [src.name] indicates you are almost out of air!")) + to_chat(user, "The meter on [src] indicates you are almost out of air!") playsound(user, 'sound/effects/alert.ogg', 50, 1) /obj/item/weapon/tank/jetpack/rig name = "jetpack" var/obj/item/weapon/rig/holder + actions_types = list(/datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization) /obj/item/weapon/tank/jetpack/rig/examine() to_chat(usr, "It's a jetpack. If you can see this, report it on the bug tracker.") return 0 /obj/item/weapon/tank/jetpack/rig/allow_thrust(num, mob/living/user as mob) - - if(!(src.on)) + if(!on) return 0 if(!istype(holder) || !holder.air_supply) return 0 - var/obj/item/weapon/tank/pressure_vessel = holder.air_supply - - if((num < 0.005 || pressure_vessel.air_contents.total_moles() < num)) - src.ion_trail.stop() + var/datum/gas_mixture/removed = holder.air_supply.air_contents.remove(num) + if(removed.total_moles() < 0.005) + turn_off() return 0 - var/datum/gas_mixture/G = pressure_vessel.air_contents.remove(num) + var/turf/T = get_turf(user) + T.assume_air(removed) - var/allgases = G.carbon_dioxide + G.nitrogen + G.oxygen + G.toxins - if(allgases >= 0.005) - . = 1 - qdel(G) + return 1 \ No newline at end of file diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 6767b88ac0d..485b800c105 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -72,7 +72,7 @@ if(..(user, 0)) if(air_contents.oxygen < 1 && loc==usr) to_chat(user, "\red The meter on the [src.name] indicates you are almost out of air!") - to_chat(user, sound('sound/effects/alert.ogg')) + user << sound('sound/effects/alert.ogg') /obj/item/weapon/tank/air/New() ..() @@ -100,9 +100,9 @@ /obj/item/weapon/tank/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob, params) ..() - if (istype(W, /obj/item/weapon/flamethrower)) + if(istype(W, /obj/item/weapon/flamethrower)) var/obj/item/weapon/flamethrower/F = W - if ((!F.status)||(F.ptank)) return + if((!F.status)||(F.ptank)) return src.master = F F.ptank = src user.unEquip(src) @@ -124,7 +124,7 @@ if(..(user, 0)) if(air_contents.toxins < 0.2 && loc==usr) to_chat(user, text("\red The meter on the [src.name] indicates you are almost out of plasma!")) - to_chat(user, sound('sound/effects/alert.ogg')) + user << sound('sound/effects/alert.ogg') /* * Emergency Oxygen @@ -135,7 +135,7 @@ icon_state = "emergency" flags = CONDUCT slot_flags = SLOT_BELT - w_class = 2.0 + w_class = 2 force = 4.0 distribute_pressure = ONE_ATMOSPHERE*O2STANDARD volume = 3 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011) @@ -151,7 +151,7 @@ if(..(user, 0)) if(air_contents.oxygen < 0.2 && loc==usr) to_chat(user, text("\red The meter on the [src.name] indicates you are almost out of air!")) - to_chat(user, sound('sound/effects/alert.ogg')) + user << sound('sound/effects/alert.ogg') /obj/item/weapon/tank/emergency_oxygen/engi name = "extended-capacity emergency oxygen tank" diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index b86ccbff3cf..9415e49d3cd 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -16,6 +16,7 @@ throw_speed = 1 throw_range = 4 + actions_types = list(/datum/action/item_action/set_internals) var/datum/gas_mixture/air_contents = null var/distribute_pressure = ONE_ATMOSPHERE var/integrity = 3 @@ -24,9 +25,9 @@ /obj/item/weapon/tank/New() ..() - src.air_contents = new /datum/gas_mixture() - src.air_contents.volume = volume //liters - src.air_contents.temperature = T20C + air_contents = new /datum/gas_mixture() + air_contents.volume = volume //liters + air_contents.temperature = T20C processing_objects.Add(src) return @@ -39,42 +40,78 @@ return ..() + +/obj/item/weapon/tank/ui_action_click(mob/user) + toggle_internals(user) + +/obj/item/weapon/tank/proc/toggle_internals(mob/user) + var/mob/living/carbon/C = user + if(!istype(C)) + return 0 + + if(C.internal == src) + to_chat(C, "You close \the [src] valve.") + C.internal = null + C.update_internals_hud_icon(0) + else + var/can_open_valve = 0 + if(C.wear_mask && C.wear_mask.flags & AIRTIGHT) + can_open_valve = 1 + else if(ishuman(C)) + var/mob/living/carbon/human/H = C + if(H.head && H.head.flags & AIRTIGHT) + can_open_valve = 1 + + if(can_open_valve) + if(C.internal) + to_chat(C, "You switch your internals to [src].") + else + to_chat(C, "You open \the [src] valve.") + C.internal = src + C.update_internals_hud_icon(1) + else + to_chat(C, "You are not wearing a suitable mask or helmet.") + return 0 + + C.update_action_buttons_icon() + + /obj/item/weapon/tank/examine(mob/user) var/obj/icon = src - if (istype(src.loc, /obj/item/assembly)) - icon = src.loc - if (!in_range(src, user)) - if (icon == src) - to_chat(user, "\blue It's \a \icon[icon][src]! If you want any more information you'll need to get closer.") + if(istype(loc, /obj/item/assembly)) + icon = loc + if(!in_range(src, user)) + if(icon == src) + to_chat(user, "\blue It's \a [bicon(icon)][src]! If you want any more information you'll need to get closer.") return - var/celsius_temperature = src.air_contents.temperature-T0C + var/celsius_temperature = air_contents.temperature-T0C var/descriptive - if (celsius_temperature < 20) + if(celsius_temperature < 20) descriptive = "cold" - else if (celsius_temperature < 40) + else if(celsius_temperature < 40) descriptive = "room temperature" - else if (celsius_temperature < 80) + else if(celsius_temperature < 80) descriptive = "lukewarm" - else if (celsius_temperature < 100) + else if(celsius_temperature < 100) descriptive = "warm" - else if (celsius_temperature < 300) + else if(celsius_temperature < 300) descriptive = "hot" else descriptive = "furiously hot" - to_chat(user, "\blue \The \icon[icon][src] feels [descriptive]") + to_chat(user, "\blue \The [bicon(icon)][src] feels [descriptive]") return /obj/item/weapon/tank/blob_act() if(prob(50)) - var/turf/location = src.loc - if (!( istype(location, /turf) )) + var/turf/location = loc + if(!( istype(location, /turf) )) qdel(src) - if(src.air_contents) + if(air_contents) location.assume_air(air_contents) qdel(src) @@ -82,18 +119,18 @@ /obj/item/weapon/tank/attackby(obj/item/weapon/W as obj, mob/user as mob, params) ..() - src.add_fingerprint(user) - if (istype(src.loc, /obj/item/assembly)) - icon = src.loc + add_fingerprint(user) + if(istype(loc, /obj/item/assembly)) + icon = loc - if ((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1) + if((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1) atmosanalyzer_scan(air_contents, user) if(istype(W, /obj/item/device/assembly_holder)) bomb_assemble(W,user) /obj/item/weapon/tank/attack_self(mob/user as mob) - if (!(src.air_contents)) + if(!(air_contents)) return ui_interact(user) @@ -130,7 +167,7 @@ // update the ui if it exists, returns null if no ui is passed/found ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300) @@ -142,49 +179,23 @@ ui.set_auto_update(1) /obj/item/weapon/tank/Topic(href, href_list) - ..() - if (usr.stat|| usr.restrained()) - return 0 - if (src.loc != usr) - return 0 + if(..()) + return 1 - if (href_list["dist_p"]) - if (href_list["dist_p"] == "reset") - src.distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE - else if (href_list["dist_p"] == "max") - src.distribute_pressure = TANK_MAX_RELEASE_PRESSURE + if(href_list["dist_p"]) + if(href_list["dist_p"] == "reset") + distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE + else if(href_list["dist_p"] == "max") + distribute_pressure = TANK_MAX_RELEASE_PRESSURE else var/cp = text2num(href_list["dist_p"]) - src.distribute_pressure += cp - src.distribute_pressure = min(max(round(src.distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE) - if (href_list["stat"]) - if(istype(loc,/mob/living/carbon)) - var/mob/living/carbon/location = loc - if(location.internal == src) - location.internal = null - location.internals.icon_state = "internal0" - to_chat(usr, "\blue You close the tank release valve.") - if (location.internals) - location.internals.icon_state = "internal0" - else + distribute_pressure += cp + distribute_pressure = min(max(round(distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE) - var/can_open_valve - if(location.wear_mask && (location.wear_mask.flags & AIRTIGHT)) - can_open_valve = 1 - else if(istype(location,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = location - if(H.head && (H.head.flags & AIRTIGHT)) - can_open_valve = 1 + if(href_list["stat"]) + toggle_internals(usr) - if(can_open_valve) - location.internal = src - to_chat(usr, "\blue You open \the [src] valve.") - if (location.internals) - location.internals.icon_state = "internal1" - else - to_chat(usr, "\blue You need something to connect to \the [src].") - - src.add_fingerprint(usr) + add_fingerprint(usr) return 1 @@ -226,9 +237,9 @@ var/pressure = air_contents.return_pressure() if(pressure > TANK_FRAGMENT_PRESSURE) - if(!istype(src.loc,/obj/item/device/transfer_valve)) - message_admins("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast] (JMP)") - log_game("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast] at [x], [y], [z]") + if(!istype(loc,/obj/item/device/transfer_valve)) + message_admins("Explosive tank rupture! last key to touch the tank was [fingerprintslast] (JMP)") + log_game("Explosive tank rupture! last key to touch the tank was [fingerprintslast] at [x], [y], [z]") // to_chat(world, "\blue[x],[y] tank is exploding: [pressure] kPa") //Give the gas a chance to build up more pressure through reacting air_contents.react() @@ -241,8 +252,8 @@ // to_chat(world, "\blue Exploding Pressure: [pressure] kPa, intensity: [range]") explosion(epicenter, round(range*0.25), round(range*0.5), round(range), round(range*1.5)) - if(istype(src.loc,/obj/item/device/transfer_valve)) - qdel(src.loc) + if(istype(loc,/obj/item/device/transfer_valve)) + qdel(loc) else qdel(src) @@ -253,7 +264,7 @@ if(!T) return T.assume_air(air_contents) - playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3) + playsound(loc, 'sound/effects/spray.ogg', 10, 1, -3) qdel(src) else integrity-- diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index 1d9cce844ff..e6e88563d4b 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -5,10 +5,10 @@ icon = 'icons/obj/watertank.dmi' icon_state = "waterbackpack" item_state = "waterbackpack" - w_class = 4.0 + w_class = 4 slot_flags = SLOT_BACK slowdown = 1 - action_button_name = "Toggle Mister" + actions_types = list(/datum/action/item_action/toggle_mister) var/obj/item/weapon/noz var/on = 0 @@ -22,10 +22,14 @@ /obj/item/weapon/watertank/ui_action_click() toggle_mister() +/obj/item/weapon/watertank/item_action_slot_check(slot, mob/user) + if(slot == slot_back) + return 1 + /obj/item/weapon/watertank/verb/toggle_mister() set name = "Toggle Mister" set category = "Object" - if (usr.get_item_by_slot(slot_back) != src) + if(usr.get_item_by_slot(slot_back) != src) to_chat(usr, "The watertank needs to be on your back to use.") return if(usr.incapacitated()) @@ -52,7 +56,8 @@ return new /obj/item/weapon/reagent_containers/spray/mister(src) /obj/item/weapon/watertank/equipped(mob/user, slot) - if (slot != slot_back) + ..() + if(slot != slot_back) remove_noz() /obj/item/weapon/watertank/proc/remove_noz() @@ -62,7 +67,7 @@ return /obj/item/weapon/watertank/Destroy() - if (on) + if(on) remove_noz() qdel(noz) noz = null @@ -75,8 +80,8 @@ ..() /obj/item/weapon/watertank/MouseDrop(obj/over_object) - if(ishuman(src.loc)) - var/mob/living/carbon/human/H = src.loc + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc switch(over_object.name) if("r_hand") if(H.r_hand) @@ -108,7 +113,7 @@ icon = 'icons/obj/watertank.dmi' icon_state = "mister" item_state = "mister" - w_class = 4.0 + w_class = 4 amount_per_transfer_from_this = 50 possible_transfer_amounts = list(25,50,100) volume = 500 @@ -125,6 +130,7 @@ return /obj/item/weapon/reagent_containers/spray/mister/dropped(mob/user as mob) + ..() to_chat(user, "The mister snaps back onto the watertank.") tank.on = 0 loc = tank @@ -133,7 +139,7 @@ return /proc/check_tank_exists(parent_tank, var/mob/living/carbon/human/M, var/obj/O) - if (!parent_tank || !istype(parent_tank, /obj/item/weapon/watertank)) //To avoid weird issues from admin spawns + if(!parent_tank || !istype(parent_tank, /obj/item/weapon/watertank)) //To avoid weird issues from admin spawns M.unEquip(O) qdel(0) return 0 @@ -198,6 +204,7 @@ return new /obj/item/weapon/extinguisher/mini/nozzle(src) /obj/item/weapon/watertank/atmos/dropped(mob/user as mob) + ..() icon_state = "waterbackpackatmos" if(istype(noz, /obj/item/weapon/extinguisher/mini/nozzle)) var/obj/item/weapon/extinguisher/mini/nozzle/N = noz @@ -255,6 +262,7 @@ return /obj/item/weapon/extinguisher/mini/nozzle/dropped(mob/user as mob) + ..() to_chat(user, "The nozzle snaps back onto the tank!") tank.on = 0 loc = tank diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 99567b5952a..4728e8c730e 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -17,7 +17,7 @@ var/broadcasting = null var/listening = 1.0 flags = CONDUCT - w_class = 2.0 + w_class = 2 item_state = "electronic" throw_speed = 4 throw_range = 20 @@ -27,7 +27,7 @@ /obj/item/weapon/locator/attack_self(mob/user as mob) add_fingerprint(usr) var/dat - if (temp) + if(temp) dat = "[src.temp]

        Clear" else dat = {" @@ -52,25 +52,25 @@ Frequency: to_chat(usr, "\The [src] is malfunctioning.") return 1 - if (href_list["refresh"]) + if(href_list["refresh"]) temp = "Persistent Signal Locator
        " var/turf/sr = get_turf(src) - if (sr) + if(sr) temp += "Located Beacons:
        " for(var/obj/item/device/radio/beacon/W in beacons) - if (W.frequency == frequency && !W.syndicate) - if (W && W.z == z) + if(W.frequency == frequency && !W.syndicate) + if(W && W.z == z) var/turf/TB = get_turf(W) temp += "[W.code]: [TB.x], [TB.y], [TB.z]
        " temp += "Located Implants:
        " - for (var/obj/item/weapon/implant/tracking/T in tracked_implants) - if (!T.implanted || !T.imp_in) + for(var/obj/item/weapon/implant/tracking/T in tracked_implants) + if(!T.implanted || !T.imp_in) continue - if (T && T.z == z) + if(T && T.z == z) temp += "[T.id]: [T.imp_in.x], [T.imp_in.y], [T.imp_in.z]
        " temp += "You are at \[[sr.x],[sr.y],[sr.z]\]." @@ -78,11 +78,11 @@ Frequency: else temp += "Processing error: Unable to locate orbital position.
        " else - if (href_list["freq"]) + if(href_list["freq"]) frequency += text2num(href_list["freq"]) frequency = sanitize_frequency(frequency) else - if (href_list["temp"]) + if(href_list["temp"]) temp = null attack_self(usr) @@ -98,7 +98,7 @@ Frequency: icon_state = "hand_tele" item_state = "electronic" throwforce = 0 - w_class = 2.0 + w_class = 2 throw_speed = 3 throw_range = 5 materials = list(MAT_METAL=10000) @@ -123,12 +123,12 @@ Frequency: if(T.x>world.maxx-8 || T.x<8) continue //putting them at the edge is dumb if(T.y>world.maxy-8 || T.y<8) continue A = get_area(T) - if (A.tele_proof == 1) continue // Telescience-proofed areas require a beacon. + if(A.tele_proof == 1) continue // Telescience-proofed areas require a beacon. turfs += T if(turfs.len) L["None (Dangerous)"] = pick(turfs) var/t1 = input(user, "Please select a teleporter to lock in on.", "Hand Teleporter") as null|anything in L - if (!t1 || (user.get_active_hand() != src || user.stat || user.restrained())) + if(!t1 || (user.get_active_hand() != src || user.stat || user.restrained())) return if(active_portals >= 3) user.show_message("\The [src] is recharging!") diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 2a9b64748dd..1452273573a 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -24,7 +24,7 @@ slot_flags = SLOT_BELT force = 5.0 throwforce = 7.0 - w_class = 2.0 + w_class = 2 materials = list(MAT_METAL=150) origin_tech = "materials=1;engineering=1" attack_verb = list("bashed", "battered", "bludgeoned", "whacked") @@ -41,7 +41,7 @@ flags = CONDUCT slot_flags = SLOT_BELT force = 5.0 - w_class = 1.0 + w_class = 1 throwforce = 5.0 throw_speed = 3 throw_range = 5 @@ -56,29 +56,29 @@ /obj/item/weapon/screwdriver/New() switch(pick("red","blue","purple","brown","green","cyan","yellow")) - if ("red") + if("red") icon_state = "screwdriver2" item_state = "screwdriver" - if ("blue") + if("blue") icon_state = "screwdriver" item_state = "screwdriver_blue" - if ("purple") + if("purple") icon_state = "screwdriver3" item_state = "screwdriver_purple" - if ("brown") + if("brown") icon_state = "screwdriver4" item_state = "screwdriver_brown" - if ("green") + if("green") icon_state = "screwdriver5" item_state = "screwdriver_green" - if ("cyan") + if("cyan") icon_state = "screwdriver6" item_state = "screwdriver_cyan" - if ("yellow") + if("yellow") icon_state = "screwdriver7" item_state = "screwdriver_yellow" - if (prob(75)) + if(prob(75)) src.pixel_y = rand(0, 16) return @@ -104,7 +104,7 @@ force = 6.0 throw_speed = 3 throw_range = 7 - w_class = 2.0 + w_class = 2 materials = list(MAT_METAL=80) origin_tech = "materials=1;engineering=1" attack_verb = list("pinched", "nipped") @@ -119,7 +119,7 @@ item_state = "cutters_yellow" /obj/item/weapon/wirecutters/attack(mob/living/carbon/human/C as mob, mob/user as mob) - if(C.handcuffed) + if(istype(C) && C.handcuffed) if(istype(C.handcuffed, /obj/item/weapon/restraints/handcuffs/cable)) usr.visible_message("\The [usr] cuts \the [C]'s restraints with \the [src]!",\ "You cut \the [C]'s restraints with \the [src]!",\ @@ -235,7 +235,7 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting] - if (!S) + if(!S) return if(!(S.status & ORGAN_ROBOT) || user.a_intent != I_HELP || S.open == 2) @@ -243,7 +243,7 @@ if(S.brute_dam) if(S.brute_dam < ROBOLIMB_SELF_REPAIR_CAP) - if (remove_fuel(0,null)) + if(remove_fuel(0,null)) playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) S.heal_damage(15,0,0,1) user.visible_message("\The [user] patches some dents on \the [M]'s [S.name] with \the [src].") @@ -345,7 +345,7 @@ if(!message) to_chat(user, "You switch [src] off.") else - to_chat(user, "[src] shuts off!") + visible_message("[src] shuts off!") force = 3 damtype = "brute" hitsound = "swing_hit" @@ -365,7 +365,7 @@ /obj/item/weapon/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user) if(!status) var/obj/item/stack/rods/R = I - if (R.use(1)) + if(R.use(1)) var/obj/item/weapon/flamethrower/F = new /obj/item/weapon/flamethrower(user.loc) if(!remove_item_from_storage(F)) user.unEquip(src) @@ -409,7 +409,7 @@ icon_state = "upindwelder" item_state = "upindwelder" max_fuel = 80 - w_class = 3.0 + w_class = 3 materials = list(MAT_METAL=70, MAT_GLASS=120) origin_tech = "engineering=3" @@ -419,7 +419,7 @@ icon_state = "exwelder" item_state = "exwelder" max_fuel = 40 - w_class = 3.0 + w_class = 3 materials = list(MAT_METAL=70, MAT_GLASS=120) origin_tech = "engineering=4;plasmatech=3" var/last_gen = 0 @@ -453,7 +453,7 @@ force = 5.0 throwforce = 7.0 item_state = "crowbar" - w_class = 2.0 + w_class = 2 materials = list(MAT_METAL=50) origin_tech = "engineering=1" attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") @@ -479,7 +479,7 @@ icon = 'icons/obj/weapons.dmi' icon_state = "kit" flags = CONDUCT - w_class = 2.0 + w_class = 2 origin_tech = "combat=2" var/open = 0 diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 29bcb4f8fe2..7ecbef740cd 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -74,7 +74,7 @@ to_chat(user, "You dedicate your module to [name].") else to_chat(user, "You grab the [name] with both hands.") - if (wieldsound) + if(wieldsound) playsound(loc, wieldsound, 50, 1) var/obj/item/weapon/twohanded/offhand/O = new(user) ////Let's reserve his other hand~ O.name = "[name] - offhand" @@ -90,12 +90,13 @@ return ..() /obj/item/weapon/twohanded/dropped(mob/user) + ..() //handles unwielding a twohanded weapon when dropped as well as clearing up the offhand if(user) var/obj/item/weapon/twohanded/O = user.get_inactive_hand() if(istype(O)) O.unwield(user) - return unwield(user) + return unwield(user) /obj/item/weapon/twohanded/update_icon() return @@ -109,7 +110,7 @@ ///////////OFFHAND/////////////// /obj/item/weapon/twohanded/offhand - w_class = 5.0 + w_class = 5 icon_state = "offhand" name = "offhand" flags = ABSTRACT @@ -120,18 +121,10 @@ /obj/item/weapon/twohanded/offhand/wield() qdel(src) -/obj/item/weapon/twohanded/offhand/IsShield()//if the actual twohanded weapon is a shield, we count as a shield too! - var/mob/user = loc - if(!istype(user)) return 0 - var/obj/item/I = user.get_active_hand() - if(I == src) I = user.get_inactive_hand() - if(!I) return 0 - return I.IsShield() - ///////////Two hand required objects/////////////// //This is for objects that require two hands to even pick up /obj/item/weapon/twohanded/required/ - w_class = 5.0 + w_class = 5 /obj/item/weapon/twohanded/required/attack_self() return @@ -165,7 +158,7 @@ throwforce = 15 sharp = 1 edge = 1 - w_class = 4.0 + w_class = 4 slot_flags = SLOT_BACK force_unwielded = 5 force_wielded = 24 @@ -200,14 +193,15 @@ throwforce = 5.0 throw_speed = 1 throw_range = 5 - w_class = 2.0 + w_class = 2 force_unwielded = 3 force_wielded = 34 wieldsound = 'sound/weapons/saberon.ogg' unwieldsound = 'sound/weapons/saberoff.ogg' - flags = NOSHIELD + armour_penetration = 35 origin_tech = "magnets=3;syndicate=4" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + block_chance = 75 sharp = 1 edge = 1 no_embed = 1 // Like with the single-handed esword, this shouldn't be embedding in people. @@ -237,11 +231,10 @@ user.dir = i sleep(1) -/obj/item/weapon/twohanded/dualsaber/IsShield() +/obj/item/weapon/twohanded/dualsaber/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance) if(wielded) - return 1 - else - return 0 + return ..() + return 0 /obj/item/weapon/twohanded/dualsaber/green/New() blade_color = "green" @@ -287,14 +280,14 @@ name = "spear" desc = "A haphazardly-constructed yet still deadly weapon of ancient design." force = 10 - w_class = 4.0 + w_class = 4 slot_flags = SLOT_BACK force_unwielded = 10 force_wielded = 18 // Was 13, Buffed - RR throwforce = 20 throw_speed = 3 + armour_penetration = 10 no_spin_thrown = 1 // Thrown spears that spin look dumb. -Fox - flags = NOSHIELD attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") /obj/item/weapon/twohanded/spear/update_icon() @@ -364,12 +357,12 @@ throwforce = 15 throw_speed = 1 throw_range = 5 - w_class = 4.0 // can't fit in backpacks + w_class = 4 // can't fit in backpacks force_unwielded = 15 //still pretty robust force_wielded = 40 //you'll gouge their eye out! Or a limb...maybe even their entire body! wieldsound = 'sound/weapons/chainsawstart.ogg' hitsound = null - flags = NOSHIELD + armour_penetration = 35 origin_tech = "materials=6;syndicate=4" attack_verb = list("sawed", "cut", "hacked", "carved", "cleaved", "butchered", "felled", "timbered") sharp = 1 @@ -578,7 +571,7 @@ Z.ex_act(2) charged = 3 playsound(user, 'sound/weapons/marauder.ogg', 50, 1) - else if (istype(A, /obj/structure) || istype(A, /obj/mecha/)) + else if(istype(A, /obj/structure) || istype(A, /obj/mecha/)) var/obj/Z = A Z.ex_act(2) charged = 3 diff --git a/code/game/objects/items/weapons/vending_items.dm b/code/game/objects/items/weapons/vending_items.dm index 9f22daf08f8..a6a53b03606 100644 --- a/code/game/objects/items/weapons/vending_items.dm +++ b/code/game/objects/items/weapons/vending_items.dm @@ -10,7 +10,7 @@ throwforce = 10.0 throw_speed = 1 throw_range = 7 - w_class = 4.0 + w_class = 4 var/charges = 0 //how many restocking "charges" the refill has diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 8ff2f931159..b9c946c6210 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -5,7 +5,7 @@ icon_state = "toyhammer" slot_flags = SLOT_BELT throwforce = 0 - w_class = 1.0 + w_class = 1 throw_speed = 7 throw_range = 15 attack_verb = list("banned") @@ -50,13 +50,11 @@ edge = 1 w_class = 3 attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + block_chance = 50 - IsShield() - return 1 - - suicide_act(mob/user) - to_chat(viewers(user), "[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.") - return(BRUTELOSS) +/obj/item/weapon/claymore/suicide_act(mob/user) + user.visible_message("[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.") + return(BRUTELOSS) /obj/item/weapon/claymore/ceremonial name = "ceremonial claymore" @@ -77,6 +75,7 @@ w_class = 3 hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + block_chance = 50 /obj/item/weapon/katana/cursed slot_flags = null @@ -85,9 +84,6 @@ user.visible_message("[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") return(BRUTELOSS) -/obj/item/weapon/katana/IsShield() - return 1 - /obj/item/weapon/harpoon name = "harpoon" sharp = 1 diff --git a/code/game/objects/items/weapons/wires.dm b/code/game/objects/items/weapons/wires.dm index abae807c80a..2e9fcdbff1a 100644 --- a/code/game/objects/items/weapons/wires.dm +++ b/code/game/objects/items/weapons/wires.dm @@ -17,7 +17,7 @@ /obj/item/weapon/wire/proc/update() - if (src.amount > 1) + if(src.amount > 1) src.icon_state = "spool_wire" src.desc = text("This is just spool of regular insulated wire. It consists of about [] unit\s of wire.", src.amount) else @@ -26,7 +26,7 @@ return /obj/item/weapon/wire/attack_self(mob/user as mob) - if (src.laying) + if(src.laying) src.laying = 0 to_chat(user, "\blue You're done laying wire!") else diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index a8579613604..4e318d26fed 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -19,10 +19,6 @@ var/being_shocked = 0 - // What reagents should be logged when transferred TO this object? - // Reagent ID => friendly name - var/list/reagents_to_log=list() - var/on_blueprints = FALSE //Are we visible on the station blueprints at roundstart? var/force_blueprints = FALSE //forces the obj to be on the blueprints, regardless of when it was created. @@ -103,18 +99,18 @@ var/is_in_use = 0 var/list/nearby = viewers(1, src) for(var/mob/M in nearby) - if ((M.client && M.machine == src)) + if((M.client && M.machine == src)) is_in_use = 1 src.attack_hand(M) - if (istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) - if (!(usr in nearby)) - if (usr.client && usr.machine==src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh. + if(istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) + if(!(usr in nearby)) + if(usr.client && usr.machine==src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh. is_in_use = 1 src.attack_ai(usr) // check for TK users - if (istype(usr, /mob/living/carbon/human)) + if(istype(usr, /mob/living/carbon/human)) if(istype(usr.l_hand, /obj/item/tk_grab) || istype(usr.r_hand, /obj/item/tk_grab/)) if(!(usr in nearby)) if(usr.client && usr.machine==src) @@ -128,7 +124,7 @@ var/list/nearby = viewers(1, src) var/is_in_use = 0 for(var/mob/M in nearby) - if ((M.client && M.machine == src)) + if((M.client && M.machine == src)) is_in_use = 1 src.interact(M) var/ai_in_use = AutoUpdateAI(src) diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 7b54984399a..23f5707c766 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -9,7 +9,7 @@ // creates a new object and deletes itself /obj/random/New() ..() - if (!prob(spawn_nothing_percentage)) + if(!prob(spawn_nothing_percentage)) spawn_item() qdel(src) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 2bcabd8ac15..70b3e3c1d67 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -66,7 +66,7 @@ /obj/structure/proc/do_climb(var/mob/living/user) - if (!can_touch(user) || !climbable) + if(!can_touch(user) || !climbable) return for(var/obj/O in range(0, src)) @@ -89,7 +89,7 @@ climber = null return - if (!can_touch(user) || !climbable) + if(!can_touch(user) || !climbable) climber = null return @@ -99,7 +99,7 @@ return usr.loc = get_turf(src) - if (get_turf(user) == get_turf(src)) + if(get_turf(user) == get_turf(src)) usr.visible_message("[user] climbs onto \the [src]!") climber = null @@ -150,16 +150,16 @@ return /obj/structure/proc/can_touch(var/mob/user) - if (!user) + if(!user) return 0 if(!Adjacent(user)) return 0 - if (user.restrained() || user.buckled) + if(user.restrained() || user.buckled) to_chat(user, "You need your hands and legs free for this.") return 0 - if (user.stat || user.paralysis || user.sleeping || user.lying || user.weakened) + if(user.stat || user.paralysis || user.sleeping || user.lying || user.weakened) return 0 - if (issilicon(user)) + if(issilicon(user)) to_chat(user, "You need hands for this.") return 0 return 1 diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index 86aa341d39c..93f4bb7be9b 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -49,10 +49,10 @@ /obj/structure/sign/barsign/attack_hand(mob/user as mob) - if (!src.allowed(user)) + if(!src.allowed(user)) to_chat(user, "Access denied.") return - if (broken) + if(broken) to_chat(user, "The controls seem unresponsive.") return pick_sign() diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index f7e178716c5..31958409954 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -14,7 +14,7 @@ LINEN BINS throwforce = 1 throw_speed = 1 throw_range = 2 - w_class = 1.0 + w_class = 1 item_color = "white" slot_flags = SLOT_BACK diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm index a91b5aa3564..3c68792fece 100644 --- a/code/game/objects/structures/coathanger.dm +++ b/code/game/objects/structures/coathanger.dm @@ -15,10 +15,10 @@ /obj/structure/coatrack/attackby(obj/item/weapon/W as obj, mob/user as mob, params) var/can_hang = 0 - for (var/T in allowed) + for(var/T in allowed) if(istype(W,T)) can_hang = 1 - if (can_hang && !coat) + if(can_hang && !coat) user.visible_message("[user] hangs [W] on \the [src].", "You hang [W] on the \the [src]") coat = W user.drop_item(src) @@ -30,11 +30,11 @@ /obj/structure/coatrack/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) var/can_hang = 0 - for (var/T in allowed) + for(var/T in allowed) if(istype(mover,T)) can_hang = 1 - if (can_hang && !coat) + if(can_hang && !coat) src.visible_message("[mover] lands on \the [src].") coat = mover coat.loc = src @@ -45,9 +45,9 @@ /obj/structure/coatrack/update_icon() overlays.Cut() - if (istype(coat, /obj/item/clothing/suit/storage/labcoat)) + if(istype(coat, /obj/item/clothing/suit/storage/labcoat)) overlays += image(icon, icon_state = "coat_lab") - if (istype(coat, /obj/item/clothing/suit/storage/labcoat/cmo)) + if(istype(coat, /obj/item/clothing/suit/storage/labcoat/cmo)) overlays += image(icon, icon_state = "coat_cmo") - if (istype(coat, /obj/item/clothing/suit/storage/det_suit)) + if(istype(coat, /obj/item/clothing/suit/storage/det_suit)) overlays += image(icon, icon_state = "coat_det") \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 44048f5113c..de0ef28d255 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -66,8 +66,8 @@ loc.Exited(M) M.loc = destination loc.Entered(M, ignoreRest = 1) - for (var/atom/movable/AM in loc) - if (istype(AM, /obj/item)) + for(var/atom/movable/AM in loc) + if(istype(AM, /obj/item)) continue AM.Crossed(M) @@ -149,7 +149,7 @@ qdel(src) if(2) if(prob(50)) - for (var/atom/movable/A as mob|obj in src) + for(var/atom/movable/A as mob|obj in src) A.forceMove(loc) A.ex_act(severity++) new /obj/item/stack/sheet/metal(loc) @@ -335,7 +335,7 @@ to_chat(user, "It won't budge!") if(!lastbang) lastbang = 1 - for (var/mob/M in hearers(src, null)) + for(var/mob/M in hearers(src, null)) to_chat(M, text("BANG, bang!", max(0, 5 - get_dist(src, M)))) spawn(30) lastbang = 0 @@ -384,10 +384,11 @@ /obj/structure/closet/container_resist(var/mob/living/L) var/breakout_time = 2 //2 minutes by default if(opened) - if (L.loc == src) + if(L.loc == src) L.forceMove(get_turf(src)) // Let's just be safe here return //Door's open... wait, why are you in it's contents then? if(!welded) + open() //for cardboard boxes return //closed but not welded... // else Meh, lets just keep it at 2 minutes for now // breakout_time++ //Harder to get out of welded lockers than locked lockers diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index dad7aecb190..45c2f538e26 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -36,7 +36,7 @@ if(!L.stat) L.do_alert_animation(L) egged = 1 - to_chat(alerted, sound('sound/machines/chime.ogg')) + alerted << sound('sound/machines/chime.ogg') ..() /mob/living/proc/do_alert_animation(atom/A) diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index 13c4c999ef5..715d16f9ebd 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -21,7 +21,7 @@ if(fireaxe) hasaxe = 1 - if (isrobot(user) || src.locked) + if(isrobot(user) || src.locked) if(istype(O, /obj/item/device/multitool)) to_chat(user, "\red Resetting circuitry...") playsound(user, 'sound/machines/lockreset.ogg', 50, 1) @@ -53,7 +53,7 @@ src.localopened = 1 update_icon() return - if (istype(O, /obj/item/weapon/twohanded/fireaxe) && src.localopened) + if(istype(O, /obj/item/weapon/twohanded/fireaxe) && src.localopened) if(!fireaxe) if(O:wielded) to_chat(user, "\red Unwield the axe first.") @@ -155,7 +155,7 @@ set name = "Open/Close" set category = "Object" - if (isrobot(usr) || src.locked || src.smashed) + if(isrobot(usr) || src.locked || src.smashed) if(src.locked) to_chat(usr, "\red The cabinet won't budge!") else if(src.smashed) @@ -169,10 +169,10 @@ set name = "Remove Fire Axe" set category = "Object" - if (isrobot(usr)) + if(isrobot(usr)) return - if (localopened) + if(localopened) if(fireaxe) usr.put_in_hands(fireaxe) fireaxe = null diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 2b6660d077f..20a110f18d0 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -101,6 +101,8 @@ /obj/structure/closet/lawcloset/New() ..() + new /obj/item/weapon/storage/box/tapes(src) + new /obj/item/weapon/book/manual/faxes(src) new /obj/item/clothing/under/lawyer/female(src) new /obj/item/clothing/under/lawyer/black(src) new /obj/item/clothing/under/lawyer/red(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index 51f01d874a8..74b811eae24 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -11,6 +11,7 @@ New() ..() new /obj/item/clothing/under/rank/cargotech(src) + new /obj/item/clothing/under/rank/cargotech/skirt(src) new /obj/item/clothing/shoes/black(src) new /obj/item/device/radio/headset/headset_cargo(src) new /obj/item/clothing/gloves/fingerless(src) @@ -30,11 +31,10 @@ New() ..() new /obj/item/clothing/under/rank/cargo(src) + new /obj/item/clothing/under/rank/cargo/skirt(src) new /obj/item/clothing/shoes/brown(src) new /obj/item/device/radio/headset/headset_cargo(src) new /obj/item/clothing/gloves/fingerless(src) -// new /obj/item/weapon/cartridge/quartermaster(src) - new /obj/item/weapon/mining_voucher(src) new /obj/item/clothing/suit/fire/firefighter(src) new /obj/item/weapon/tank/emergency_oxygen(src) new /obj/item/clothing/mask/gas(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm b/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm index 50ad1500192..7c58f4a2b1a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm @@ -13,14 +13,12 @@ ..() new /obj/item/clothing/under/rank/chaplain(src) new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/suit/nun(src) - new /obj/item/clothing/head/nun_hood(src) - new /obj/item/clothing/suit/chaplain_hoodie(src) - new /obj/item/clothing/head/chaplain_hood(src) + new /obj/item/clothing/suit/hooded/nun(src) + new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) new /obj/item/clothing/suit/holidaypriest(src) new /obj/item/clothing/under/wedding/bride_white(src) new /obj/item/weapon/storage/backpack/cultpack (src) - new /obj/item/clothing/head/helmet/knight/templar(src) + new /obj/item/clothing/head/helmet/riot/knight/templar(src) new /obj/item/clothing/suit/armor/riot/knight/templar(src) new /obj/item/weapon/storage/fancy/candle_box/eternal(src) new /obj/item/weapon/storage/fancy/candle_box/eternal(src) @@ -28,4 +26,4 @@ new /obj/item/clothing/gloves/ring/silver(src) new /obj/item/clothing/gloves/ring/silver(src) new /obj/item/clothing/gloves/ring/gold(src) - new /obj/item/clothing/gloves/ring/gold(src) \ No newline at end of file + new /obj/item/clothing/gloves/ring/gold(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 1746211e248..7c880918e41 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -15,9 +15,11 @@ else new /obj/item/weapon/storage/backpack/satchel_eng(src) new /obj/item/weapon/storage/backpack/duffel/engineering(src) + new /obj/item/clothing/head/beret/ce(src) new /obj/item/areaeditor/blueprints(src) new /obj/item/weapon/storage/box/permits(src) new /obj/item/clothing/under/rank/chief_engineer(src) + new /obj/item/clothing/under/rank/chief_engineer/skirt(src) new /obj/item/clothing/head/hardhat/white(src) new /obj/item/clothing/glasses/welding/superior(src) new /obj/item/clothing/gloves/color/yellow(src) @@ -104,6 +106,7 @@ new /obj/item/weapon/storage/toolbox/mechanical(src) new /obj/item/device/radio/headset/headset_eng(src) new /obj/item/clothing/under/rank/engineer(src) + new /obj/item/clothing/under/rank/engineer/skirt(src) new /obj/item/clothing/suit/storage/hazardvest(src) new /obj/item/clothing/mask/gas(src) new /obj/item/clothing/glasses/meson(src) @@ -139,4 +142,4 @@ new /obj/item/weapon/tank/emergency_oxygen/engi(src) new /obj/item/weapon/watertank/atmos(src) new /obj/item/clothing/suit/fire/atmos(src) - new /obj/item/clothing/head/hardhat/atmos(src) \ No newline at end of file + new /obj/item/clothing/head/hardhat/atmos(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index 896ab5e1dd1..a008e3843e9 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -70,8 +70,8 @@ New() ..() for(var/i in 1 to 5) - new /obj/item/weapon/reagent_containers/food/drinks/milk(src) - new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src) + new /obj/item/weapon/reagent_containers/food/condiment/milk(src) + new /obj/item/weapon/reagent_containers/food/condiment/soymilk(src) for(var/i in 1 to 2) new /obj/item/weapon/storage/fancy/egg_box(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm index 4a8c3a4195a..149793399ed 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm @@ -26,19 +26,19 @@ else var/lazors = 0 var/shottas = 0 - for (var/obj/item/weapon/gun/G in contents) - if (istype(G, /obj/item/weapon/gun/energy)) + for(var/obj/item/weapon/gun/G in contents) + if(istype(G, /obj/item/weapon/gun/energy)) lazors++ - if (istype(G, /obj/item/weapon/gun/projectile/)) + if(istype(G, /obj/item/weapon/gun/projectile/)) shottas++ - if (lazors || shottas) - for (var/i = 0 to 2) + if(lazors || shottas) + for(var/i = 0 to 2) var/image/gun = image(icon(src.icon)) - if (lazors > 0 && (shottas <= 0 || prob(50))) + if(lazors > 0 && (shottas <= 0 || prob(50))) lazors-- gun.icon_state = "laser" - else if (shottas > 0) + else if(shottas > 0) shottas-- gun.icon_state = "projectile" @@ -49,7 +49,7 @@ if(broken) overlays += icon(src.icon,"broken") - else if (locked) + else if(locked) overlays += icon(src.icon,"locked") else overlays += icon(src.icon,"open") \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 17f208e28e9..c0603396325 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -156,13 +156,13 @@ new /obj/item/clothing/head/bio_hood/cmo(src) new /obj/item/clothing/shoes/white(src) switch(pick("blue", "green", "purple")) - if ("blue") + if("blue") new /obj/item/clothing/under/rank/medical/blue(src) new /obj/item/clothing/head/surgery/blue(src) - if ("green") + if("green") new /obj/item/clothing/under/rank/medical/green(src) new /obj/item/clothing/head/surgery/green(src) - if ("purple") + if("purple") new /obj/item/clothing/under/rank/medical/purple(src) new /obj/item/clothing/head/surgery/purple(src) new /obj/item/clothing/suit/storage/labcoat/cmo(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 0433ba0479f..51e3e8d06c3 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -53,11 +53,11 @@ new /obj/item/device/radio/headset( src ) /obj/structure/closet/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (src.opened) - if (istype(W, /obj/item/weapon/grab)) + if(src.opened) + if(istype(W, /obj/item/weapon/grab)) src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet user.drop_item() - if (W) W.forceMove(loc) + if(W) W.forceMove(loc) else if(istype(W, /obj/item/weapon/card/id)) if(src.broken) to_chat(user, "\red It appears to be broken.") diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 488a422af86..cfecee359d6 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -46,7 +46,7 @@ new /obj/item/device/radio/headset/heads/rd(src) new /obj/item/weapon/tank/air(src) new /obj/item/clothing/mask/gas(src) - new /obj/item/clothing/suit/armor/reactive(src) + new /obj/item/clothing/suit/armor/reactive/teleport(src) new /obj/item/device/flash(src) new /obj/item/device/laser_pointer(src) new /obj/item/weapon/door_remote/research_director(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index fe1e33d0999..db589c027e6 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -133,7 +133,7 @@ /obj/structure/closet/secure_closet/container_resist(var/mob/living/L) var/breakout_time = 2 //2 minutes by default if(opened) - if (L.loc == src) + if(L.loc == src) L.forceMove(get_turf(src)) // Let's just be safe here return //Door's open... wait, why are you in it's contents then? if(!locked && !welded) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 2b823041950..66c470882c8 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -14,6 +14,7 @@ new /obj/item/weapon/storage/backpack/captain(src) else new /obj/item/weapon/storage/backpack/satchel_cap(src) + new /obj/item/weapon/book/manual/faxes(src) new /obj/item/weapon/storage/backpack/duffel/captain(src) new /obj/item/clothing/suit/captunic(src) new /obj/item/clothing/suit/captunic/capjacket(src) @@ -42,6 +43,7 @@ New() ..() + new /obj/item/weapon/book/manual/faxes(src) new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/clothing/head/hopcap(src) new /obj/item/weapon/cartridge/hop(src) @@ -51,7 +53,6 @@ new /obj/item/clothing/suit/armor/vest(src) new /obj/item/weapon/gun/energy/gun(src) new /obj/item/device/flash(src) - new /obj/item/weapon/mining_voucher(src) new /obj/item/clothing/accessory/petcollar(src) new /obj/item/weapon/door_remote/civillian(src) @@ -98,11 +99,13 @@ new /obj/item/weapon/storage/backpack/security(src) else new /obj/item/weapon/storage/backpack/satchel_sec(src) + new /obj/item/weapon/book/manual/faxes(src) new /obj/item/weapon/cartridge/hos(src) new /obj/item/device/radio/headset/heads/hos/alt(src) new /obj/item/clothing/under/rank/head_of_security(src) new /obj/item/clothing/under/rank/head_of_security/formal(src) new /obj/item/clothing/under/rank/head_of_security/corp(src) + new /obj/item/clothing/under/rank/head_of_security/skirt(src) new /obj/item/clothing/suit/armor/hos(src) new /obj/item/clothing/suit/armor/hos/alt(src) new /obj/item/clothing/head/HoS(src) @@ -145,6 +148,7 @@ new /obj/item/clothing/under/rank/warden(src) new /obj/item/clothing/under/rank/warden/formal(src) new /obj/item/clothing/under/rank/warden/corp(src) + new /obj/item/clothing/under/rank/warden/skirt(src) new /obj/item/clothing/glasses/hud/security/sunglasses(src) new /obj/item/clothing/mask/gas/sechailer/warden(src) new /obj/item/taperoll/police(src) @@ -259,6 +263,7 @@ New() ..() + new /obj/item/weapon/book/manual/faxes(src) new /obj/item/weapon/storage/briefcase(src) new /obj/item/device/paicard(src) new /obj/item/device/flash(src) @@ -270,6 +275,8 @@ new /obj/item/clothing/under/lawyer/female(src) new /obj/item/clothing/head/ntrep(src) new /obj/item/clothing/shoes/sandal/fancy(src) + new /obj/item/weapon/storage/box/tapes(src) + new /obj/item/device/taperecorder(src) /obj/structure/closet/secure_closet/security/cargo @@ -315,8 +322,8 @@ ..() new /obj/item/clothing/under/det(src) new /obj/item/clothing/suit/storage/det_suit(src) - new /obj/item/clothing/suit/storage/forensics/blue(src) - new /obj/item/clothing/suit/storage/forensics/red(src) + new /obj/item/clothing/suit/storage/det_suit/forensics/blue(src) + new /obj/item/clothing/suit/storage/det_suit/forensics/red(src) new /obj/item/clothing/gloves/color/black(src) new /obj/item/clothing/head/det_hat(src) new /obj/item/clothing/shoes/brown(src) @@ -347,7 +354,7 @@ /obj/structure/closet/secure_closet/injection name = "lethal injections locker" - req_access = list(access_captain) + req_access = list(access_security) New() diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index 8a701bedd72..3f49d3e3bde 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -22,7 +22,7 @@ L.client.perspective = EYE_PERSPECTIVE L.client.eye = src L.loc = src - L.sdisabilities += MUTE + L.disabilities += MUTE health = L.health + 100 //stoning damaged mobs will result in easier to shatter statues intialTox = L.getToxLoss() intialFire = L.getFireLoss() @@ -54,7 +54,7 @@ M.adjustFireLoss(intialFire - M.getFireLoss()) M.adjustBruteLoss(intialBrute - M.getBruteLoss()) M.setOxyLoss(intialOxy) - if (timer <= 0) + if(timer <= 0) dump_contents() processing_objects.Remove(src) qdel(src) @@ -77,7 +77,7 @@ for(var/mob/living/M in src) M.loc = src.loc - M.sdisabilities -= MUTE + M.disabilities -= MUTE M.take_overall_damage((M.health - health - 100),0) //any new damage the statue incurred is transfered to the mob if(M.client) M.client.eye = M.client.mob @@ -145,7 +145,7 @@ return /obj/structure/closet/statue/proc/shatter(mob/user as mob) - if (user) + if(user) user.dust() dump_contents() visible_message("\red [src] shatters!. ") diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index c99790c4011..3fda5f8c603 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -22,36 +22,36 @@ /obj/structure/closet/emcloset/New() ..() - switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10, "nothing" = 0, "delete" = 0))) - if ("small") + switch(pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10, "nothing" = 0, "delete" = 0))) + if("small") new /obj/item/weapon/tank/emergency_oxygen(src) new /obj/item/weapon/tank/emergency_oxygen(src) new /obj/item/clothing/mask/breath(src) new /obj/item/clothing/mask/breath(src) - if ("aid") + if("aid") new /obj/item/weapon/tank/emergency_oxygen(src) new /obj/item/weapon/storage/toolbox/emergency(src) new /obj/item/clothing/mask/breath(src) new /obj/item/weapon/storage/firstaid/o2(src) - if ("tank") + if("tank") new /obj/item/weapon/tank/emergency_oxygen/engi(src) new /obj/item/clothing/mask/breath(src) new /obj/item/weapon/tank/emergency_oxygen/engi(src) new /obj/item/clothing/mask/breath(src) - if ("both") + if("both") new /obj/item/weapon/storage/toolbox/emergency(src) new /obj/item/weapon/tank/emergency_oxygen/engi(src) new /obj/item/clothing/mask/breath(src) new /obj/item/weapon/storage/firstaid/o2(src) - if ("nothing") + if("nothing") // doot // teehee - Ah, tg coders... - if ("delete") + if("delete") qdel(src) //If you want to re-add fire, just add "fire" = 15 to the pick list. - /*if ("fire") + /*if("fire") new /obj/structure/closet/firecloset(src.loc) qdel(src)*/ diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index dfeb734391d..c23701575df 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -38,6 +38,9 @@ new /obj/item/clothing/under/rank/security/formal(src) new /obj/item/clothing/under/rank/security/formal(src) new /obj/item/clothing/under/rank/security/formal(src) + new /obj/item/clothing/under/rank/security/skirt(src) + new /obj/item/clothing/under/rank/security/skirt(src) + new /obj/item/clothing/under/rank/security/skirt(src) new /obj/item/clothing/shoes/jackboots(src) new /obj/item/clothing/shoes/jackboots(src) new /obj/item/clothing/shoes/jackboots(src) @@ -173,9 +176,12 @@ new /obj/item/clothing/under/rank/atmospheric_technician(src) new /obj/item/clothing/under/rank/atmospheric_technician(src) new /obj/item/clothing/under/rank/atmospheric_technician(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/shoes/black(src) + new /obj/item/clothing/under/rank/atmospheric_technician/skirt(src) + new /obj/item/clothing/under/rank/atmospheric_technician/skirt(src) + new /obj/item/clothing/under/rank/atmospheric_technician/skirt(src) + new /obj/item/clothing/shoes/workboots(src) + new /obj/item/clothing/shoes/workboots(src) + new /obj/item/clothing/shoes/workboots(src) new /obj/item/clothing/head/hardhat/red(src) new /obj/item/clothing/head/hardhat/red(src) new /obj/item/clothing/head/hardhat/red(src) @@ -195,9 +201,12 @@ new /obj/item/clothing/under/rank/engineer(src) new /obj/item/clothing/under/rank/engineer(src) new /obj/item/clothing/under/rank/engineer(src) - new /obj/item/clothing/shoes/orange(src) - new /obj/item/clothing/shoes/orange(src) - new /obj/item/clothing/shoes/orange(src) + new /obj/item/clothing/under/rank/engineer/skirt(src) + new /obj/item/clothing/under/rank/engineer/skirt(src) + new /obj/item/clothing/under/rank/engineer/skirt(src) + new /obj/item/clothing/shoes/workboots(src) + new /obj/item/clothing/shoes/workboots(src) + new /obj/item/clothing/shoes/workboots(src) new /obj/item/clothing/head/hardhat(src) new /obj/item/clothing/head/hardhat(src) new /obj/item/clothing/head/hardhat(src) @@ -239,6 +248,8 @@ new /obj/item/clothing/under/rank/medical/green(src) new /obj/item/clothing/head/surgery/green(src) new /obj/item/clothing/under/rank/medical/purple(src) + new /obj/item/clothing/under/rank/medical/skirt(src) + new /obj/item/clothing/under/rank/medical/skirt(src) new /obj/item/clothing/head/surgery/purple(src) new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/black(src) @@ -271,6 +282,9 @@ new /obj/item/clothing/under/rank/scientist(src) new /obj/item/clothing/under/rank/scientist(src) new /obj/item/clothing/under/rank/scientist(src) + new /obj/item/clothing/under/rank/scientist/skirt(src) + new /obj/item/clothing/under/rank/scientist/skirt(src) + new /obj/item/clothing/under/rank/scientist/skirt(src) new /obj/item/clothing/suit/storage/labcoat(src) new /obj/item/clothing/suit/storage/labcoat(src) new /obj/item/clothing/suit/storage/labcoat(src) @@ -293,6 +307,8 @@ new /obj/item/clothing/glasses/hud/diagnostic(src) new /obj/item/clothing/under/rank/roboticist(src) new /obj/item/clothing/under/rank/roboticist(src) + new /obj/item/clothing/under/rank/roboticist/skirt(src) + new /obj/item/clothing/under/rank/roboticist/skirt(src) new /obj/item/clothing/suit/storage/labcoat(src) new /obj/item/clothing/suit/storage/labcoat(src) new /obj/item/clothing/shoes/black(src) @@ -312,6 +328,8 @@ ..() new /obj/item/clothing/under/rank/chemist(src) new /obj/item/clothing/under/rank/chemist(src) + new /obj/item/clothing/under/rank/chemist/skirt(src) + new /obj/item/clothing/under/rank/chemist/skirt(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/suit/storage/labcoat/chemist(src) @@ -354,6 +372,8 @@ ..() new /obj/item/clothing/under/rank/virologist(src) new /obj/item/clothing/under/rank/virologist(src) + new /obj/item/clothing/under/rank/virologist/skirt(src) + new /obj/item/clothing/under/rank/virologist/skirt(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/suit/storage/labcoat/virologist(src) @@ -375,6 +395,8 @@ ..() new /obj/item/clothing/under/rank/medical(src) new /obj/item/clothing/under/rank/medical(src) + new /obj/item/clothing/under/rank/medical/skirt(src) + new /obj/item/clothing/under/rank/medical/skirt(src) new /obj/item/clothing/under/rank/medical/blue(src) new /obj/item/clothing/under/rank/medical/green(src) new /obj/item/clothing/under/rank/medical/purple(src) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index c4129596892..c4178baec15 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -185,7 +185,7 @@ qdel(src) return if(3.0) - if (prob(50)) + if(prob(50)) qdel(src) return else @@ -497,7 +497,7 @@ /obj/structure/closet/crate/large/close() . = ..() - if (.)//we can hold up to one large item + if(.)//we can hold up to one large item var/found = 0 for(var/obj/structure/S in src.loc) if(S == src) @@ -524,7 +524,7 @@ /obj/structure/closet/crate/secure/large/close() . = ..() - if (.)//we can hold up to one large item + if(.)//we can hold up to one large item var/found = 0 for(var/obj/structure/S in src.loc) if(S == src) diff --git a/code/game/objects/structures/crates_lockers/walllocker.dm b/code/game/objects/structures/crates_lockers/walllocker.dm index d07ee623d38..25a41a8dde7 100644 --- a/code/game/objects/structures/crates_lockers/walllocker.dm +++ b/code/game/objects/structures/crates_lockers/walllocker.dm @@ -27,7 +27,7 @@ icon_opened = "emergopen" /obj/structure/closet/walllocker/emerglocker/attack_hand(mob/user as mob) - if (istype(user, /mob/living/silicon/ai)) //Added by Strumpetplaya - AI shouldn't be able to + if(istype(user, /mob/living/silicon/ai)) //Added by Strumpetplaya - AI shouldn't be able to return //activate emergency lockers. This fixes that. (Does this make sense, the AI can't call attack_hand, can it? --Mloc) if(!amount) to_chat(usr, "It's empty.") diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 90a95253a96..6b732653a64 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -128,7 +128,7 @@ var/global/list/captain_display_cases = list() ..(user) to_chat(user, "Peering through the glass, you see that it contains:") if(occupant) - to_chat(user, "\icon[occupant] \A [occupant].") + to_chat(user, "[bicon(occupant)] \A [occupant].") else to_chat(user, "Nothing.") @@ -140,17 +140,17 @@ var/global/list/captain_display_cases = list() /obj/structure/displaycase/ex_act(severity) switch(severity) - if (1) + if(1) new /obj/item/weapon/shard(loc) - if (occupant) + if(occupant) dump() qdel(src) - if (2) - if (prob(50)) + if(2) + if(prob(50)) src.health -= 15 src.healthcheck() - if (3) - if (prob(50)) + if(3) + if(prob(50)) src.health -= 5 src.healthcheck() @@ -162,15 +162,15 @@ var/global/list/captain_display_cases = list() return /obj/structure/displaycase/blob_act() - if (prob(75)) + if(prob(75)) new /obj/item/weapon/shard(loc) if(occupant) dump() qdel(src) /obj/structure/displaycase/proc/healthcheck() - if (src.health <= 0) + if(src.health <= 0) health = 0 - if (!( src.destroyed )) + if(!( src.destroyed )) src.density = 0 src.destroyed = 1 new /obj/item/weapon/shard(loc) @@ -217,9 +217,9 @@ var/global/list/captain_display_cases = list() return locked = !locked if(!locked) - to_chat(user, "\icon[src] \The [src] clicks as locks release, and it slowly opens for you.") + to_chat(user, "[bicon(src)] \The [src] clicks as locks release, and it slowly opens for you.") else - to_chat(user, "\icon[src] You close \the [src] and swipe your card, locking it.") + to_chat(user, "[bicon(src)] You close \the [src] and swipe your card, locking it.") update_icon() return if(istype(W,/obj/item/weapon/crowbar) && (!locked || destroyed)) @@ -273,7 +273,7 @@ var/global/list/captain_display_cases = list() update_icon() /obj/structure/displaycase/attack_hand(mob/user as mob) - if (destroyed || (!locked && user.a_intent == I_HARM)) + if(destroyed || (!locked && user.a_intent == I_HARM)) if(occupant) dump() to_chat(user, "You smash your fist into the delicate electronics at the bottom of the case, and deactivate the hover field.") @@ -305,7 +305,7 @@ var/global/list/captain_display_cases = list() dump() update_icon() else - to_chat(src, "\icon[src] \The [src] is empty!") + to_chat(src, "[bicon(src)] \The [src] is empty!") else user.visible_message("[user.name] gently runs his hands over \the [src] in appreciation of its contents.", \ "You gently run your hands over \the [src] in appreciation of its contents.", \ diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index fef41df80b8..a88c36973de 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -150,7 +150,7 @@ obj/structure/door_assembly/multi_tile/Move() if(istype(W, /obj/item/weapon/weldingtool) && ( (istext(glass)) || (glass == 1) || (!anchored) )) var/obj/item/weapon/weldingtool/WT = W - if (WT.remove_fuel(0, user)) + if(WT.remove_fuel(0, user)) playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) if(istext(glass)) user.visible_message("[user] welds the [glass] plating off the airlock assembly.", "You start to weld the [glass] plating off the airlock assembly.") @@ -234,7 +234,7 @@ obj/structure/door_assembly/multi_tile/Move() src.state = 1 src.name = "Wired Airlock Assembly" var/obj/item/weapon/airlock_electronics/ae - if (!electronics) + if(!electronics) ae = new/obj/item/weapon/airlock_electronics( src.loc ) else ae = electronics @@ -243,8 +243,8 @@ obj/structure/door_assembly/multi_tile/Move() else if(istype(W, /obj/item/stack/sheet) && !glass) var/obj/item/stack/sheet/S = W - if (S) - if (S.amount>=1) + if(S) + if(S.amount>=1) if(istype(S, /obj/item/stack/sheet/rglass)) playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") @@ -272,7 +272,7 @@ obj/structure/door_assembly/multi_tile/Move() var/path if(istext(glass)) path = text2path("/obj/machinery/door/airlock/[glass]") - else if (glass == 1) + else if(glass == 1) path = text2path("/obj/machinery/door/airlock[glass_type]") else path = text2path("/obj/machinery/door/airlock[airlock_type]") @@ -297,9 +297,9 @@ obj/structure/door_assembly/multi_tile/Move() /obj/structure/door_assembly/proc/update_state() icon_state = "door_as_[glass == 1 ? "g" : ""][istext(glass) ? glass : base_icon_state][state]" name = "" - switch (state) + switch(state) if(0) - if (anchored) + if(anchored) name = "Secured " if(1) name = "Wired " diff --git a/code/game/objects/structures/engicart.dm b/code/game/objects/structures/engicart.dm index 76dbc81ca43..cce6c1c1bdb 100644 --- a/code/game/objects/structures/engicart.dm +++ b/code/game/objects/structures/engicart.dm @@ -80,7 +80,7 @@ else to_chat(user, fail_msg) else if(istype(I, /obj/item/weapon/wrench)) - if (!anchored && !isinspace()) + if(!anchored && !isinspace()) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) user.visible_message( \ "[user] tightens \the [src]'s casters.", \ diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index d0521d33f0e..e5a89aa1fad 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -28,10 +28,10 @@ /obj/structure/extinguisher_cabinet/attack_hand(mob/user) if(isrobot(user) || isalien(user)) return - if (ishuman(user)) + if(ishuman(user)) var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] - if (user.hand) + if(user.hand) temp = H.organs_by_name["l_hand"] if(temp && !temp.is_usable()) to_chat(user, "You try to move your [temp.name], but cannot!") diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 30dec267502..2d1afd939d7 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -86,7 +86,7 @@ to_chat(user, "[src] is blocked!") return if(istype(W, /obj/item/weapon/screwdriver)) - if (!istype(T, /turf/simulated/floor)) + if(!istype(T, /turf/simulated/floor)) to_chat(user, "[src] bolts must be tightened on the floor!") return user.visible_message("[user] tightens some bolts on the wall.", "You tighten the bolts on the wall.") diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index ab167113178..e4f8acd2c5b 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -191,20 +191,34 @@ icon_state = "fullgrass_[rand(1, 3)]" -/obj/structure/flora/kirbyplants +/obj/item/weapon/twohanded/required/kirbyplants name = "potted plant" icon = 'icons/obj/flora/plants.dmi' icon_state = "plant-1" anchored = 0 layer = 5 + w_class = 5 + force = 10 + throwforce = 13 + throw_speed = 2 + throw_range = 4 -/obj/structure/flora/kirbyplants/New() +/obj/item/weapon/twohanded/required/kirbyplants/New() ..() icon_state = "plant-[rand(1,35)]" if(prob(1)) icon_state = "plant-36" -/obj/structure/flora/kirbyplants/dead +/obj/item/weapon/twohanded/required/kirbyplants/equipped(mob/living/user) + var/image/I = image(icon = 'icons/obj/flora/plants.dmi' , icon_state = src.icon_state, loc = user) + I.override = 1 + user.add_alt_appearance("sneaking_mission", I, player_list) + +/obj/item/weapon/twohanded/required/kirbyplants/dropped(mob/living/user) + ..() + user.remove_alt_appearance("sneaking_mission") + +/obj/item/weapon/twohanded/required/kirbyplants/dead name = "\improper RD's potted plant" desc = "A gift from the botanical staff, presented after the RD's reassignment. There's a tag on it that says \"Y'all come back now, y'hear?\"\nIt doesn't look very healthy..." icon_state = "plant-dead" @@ -274,10 +288,10 @@ /* /obj/structure/bush/Bumped(M as mob) - if (istype(M, /mob/living/simple_animal)) + if(istype(M, /mob/living/simple_animal)) var/mob/living/simple_animal/A = M A.loc = get_turf(src) - else if (istype(M, /mob/living/carbon/monkey)) + else if(istype(M, /mob/living/carbon/monkey)) var/mob/living/carbon/monkey/A = M A.loc = get_turf(src) */ diff --git a/code/game/objects/structures/foodcart.dm b/code/game/objects/structures/foodcart.dm index e2df39180d9..071200c8ca0 100644 --- a/code/game/objects/structures/foodcart.dm +++ b/code/game/objects/structures/foodcart.dm @@ -55,7 +55,7 @@ if(!success) to_chat(user, fail_msg) else if(istype(I, /obj/item/weapon/wrench)) - if (!anchored && !isinspace()) + if(!anchored && !isinspace()) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) user.visible_message( \ "[user] tightens \the [src]'s casters.", \ diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 33a153dd90f..bcb2f5d53a3 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -41,7 +41,7 @@ else if(!anchored) playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) to_chat(user, "\blue Now securing the girder") - if(get_turf(user, 40)) + if(do_after(user, 40, target = src)) to_chat(user, "\blue You secured the girder!") new/obj/structure/girder( src.loc ) qdel(src) @@ -106,7 +106,7 @@ else if(S.amount < 2) return ..() to_chat(user, "\blue Now adding plating...") - if (do_after(user,40, target = src)) + if(do_after(user,40, target = src)) if(!src || !S || S.amount < 2) return S.use(2) to_chat(user, "\blue You added the plating!") @@ -125,7 +125,7 @@ new /obj/structure/falsewall/reinforced (src.loc) qdel(src) else - if (src.icon_state == "reinforced") //I cant believe someone would actually write this line of code... + if(src.icon_state == "reinforced") //I cant believe someone would actually write this line of code... if(S.amount < 1) return ..() to_chat(user, "\blue Now finalising reinforced wall.") if(do_after(user, 50, target = src)) @@ -141,7 +141,7 @@ else if(S.amount < 1) return ..() to_chat(user, "\blue Now reinforcing girders") - if (do_after(user,60, target = src)) + if(do_after(user,60, target = src)) if(!src || !S || S.amount < 1) return S.use(1) to_chat(user, "\blue Girders reinforced!") @@ -161,7 +161,7 @@ else if(S.amount < 2) return ..() to_chat(user, "\blue Now adding plating...") - if (do_after(user,40, target = src)) + if(do_after(user,40, target = src)) if(!src || !S || S.amount < 2) return S.use(2) to_chat(user, "\blue You added the plating!") @@ -176,7 +176,7 @@ else if(istype(W, /obj/item/pipe)) var/obj/item/pipe/P = W - if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds. + if(P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds. user.drop_item() P.loc = src.loc to_chat(user, "\blue You fit the pipe into the [src]!") @@ -211,13 +211,13 @@ qdel(src) return if(2.0) - if (prob(75)) + if(prob(75)) var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) new remains(loc) qdel(src) return if(3.0) - if (prob(40)) + if(prob(40)) var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) new remains(loc) qdel(src) @@ -282,12 +282,12 @@ qdel(src) return if(2.0) - if (prob(30)) + if(prob(30)) new /obj/effect/decal/remains/human(loc) qdel(src) return if(3.0) - if (prob(5)) + if(prob(5)) new /obj/effect/decal/remains/human(loc) qdel(src) return diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 9c1a9e6867a..4cb2b20f99e 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -81,7 +81,7 @@ user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) var/mob/living/carbon/slime/S = user - if (!S.is_adult) + if(!S.is_adult) return playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) @@ -142,7 +142,10 @@ if(iswirecutter(W)) if(!shock(user, 100)) playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) - new /obj/item/stack/rods(loc, 2) + if(!destroyed) + new /obj/item/stack/rods(loc, 2) + else + new /obj/item/stack/rods(loc) qdel(src) else if((isscrewdriver(W)) && (istype(loc, /turf/simulated) || anchored)) if(!shock(user, 90)) diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 299f776c4f7..d6d2c84ecd4 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -3,7 +3,7 @@ desc = "A folded membrane which rapidly expands into a large cubical shape on activation." icon = 'icons/obj/inflatable.dmi' icon_state = "folded_wall" - w_class = 3.0 + w_class = 3 /obj/item/inflatable/attack_self(mob/user) playsound(loc, 'sound/items/zip.ogg', 75, 1) @@ -25,7 +25,7 @@ var/health = 50.0 -/obj/structure/inflatable/New(location) +/obj/structure/inflatable/initialize(location) ..() air_update_turf(1) @@ -89,14 +89,14 @@ /obj/structure/inflatable/attack_slime(mob/user as mob) var/mob/living/carbon/slime/S = user - if (!S.is_adult) + if(!S.is_adult) return attack_generic(user, rand(10, 15)) /obj/structure/inflatable/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(!istype(W)) return - if (can_puncture(W)) + if(can_puncture(W)) visible_message("\red [user] pierces [src] with [W]!") deflate(1) if(W.damtype == BRUTE || W.damtype == BURN) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index e51ea6eb3ac..e51a7e3aac2 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -90,7 +90,7 @@ reagents.reaction(src.loc) src.reagents.clear_reagents() else if(istype(I, /obj/item/weapon/wrench)) - if (!anchored && !isinspace()) + if(!anchored && !isinspace()) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) user.visible_message( \ "[user] tightens \the [src]'s casters.", \ diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm index 0f8cde25dbe..d661fb60b9e 100644 --- a/code/game/objects/structures/lamarr_cage.dm +++ b/code/game/objects/structures/lamarr_cage.dm @@ -12,16 +12,16 @@ /obj/structure/lamarr/ex_act(severity) switch(severity) - if (1) + if(1) new /obj/item/weapon/shard(loc) Break() qdel(src) - if (2) - if (prob(50)) + if(2) + if(prob(50)) src.health -= 15 src.healthcheck() - if (3) - if (prob(50)) + if(3) + if(prob(50)) src.health -= 5 src.healthcheck() @@ -34,14 +34,14 @@ /obj/structure/lamarr/blob_act() - if (prob(75)) + if(prob(75)) new /obj/item/weapon/shard(loc) Break() qdel(src) /obj/structure/lamarr/proc/healthcheck() - if (src.health <= 0) - if (!( src.destroyed )) + if(src.health <= 0) + if(!( src.destroyed )) src.density = 0 src.destroyed = 1 new /obj/item/weapon/shard(loc) @@ -66,12 +66,12 @@ return /obj/structure/lamarr/attack_hand(mob/user as mob) - if (src.destroyed) + if(src.destroyed) return else to_chat(usr, text("\blue You kick the lab cage.")) for(var/mob/O in oviewers()) - if ((O.client && !( O.blinded ))) + if((O.client && !( O.blinded ))) to_chat(O, text("\red [] kicks the lab cage.", usr)) src.health -= 2 healthcheck() diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index d7704265861..bfb607585b0 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -18,14 +18,14 @@ icon = 'icons/obj/smoothlattice.dmi' icon_state = "latticeblank" updateOverlays() - for (var/dir in cardinal) + for(var/dir in cardinal) var/obj/structure/lattice/L if(locate(/obj/structure/lattice, get_step(src, dir))) L = locate(/obj/structure/lattice, get_step(src, dir)) L.updateOverlays() /obj/structure/lattice/Destroy() - for (var/dir in cardinal) + for(var/dir in cardinal) var/obj/structure/lattice/L if(locate(/obj/structure/lattice, get_step(src, dir))) L = locate(/obj/structure/lattice, get_step(src, dir)) @@ -51,11 +51,11 @@ /obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob, params) - if (istype(C, /obj/item/stack/tile/plasteel) || istype(C, /obj/item/stack/rods)) + if(istype(C, /obj/item/stack/tile/plasteel) || istype(C, /obj/item/stack/rods)) var/turf/T = get_turf(src) T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead return - if (istype(C, /obj/item/weapon/weldingtool)) + if(istype(C, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = C if(WT.remove_fuel(0, user)) to_chat(user, "\blue Slicing lattice joints ...") @@ -72,7 +72,7 @@ var/dir_sum = 0 - for (var/direction in cardinal) + for(var/direction in cardinal) if(locate(/obj/structure/lattice, get_step(src, direction))) dir_sum += direction else diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 01c9442ea33..9ce9e59e423 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -16,152 +16,155 @@ var/hardness = 1 var/oreAmount = 7 - New(location) - ..() - icon_state = mineralType - name = "[mineralType] door" - air_update_turf(1) +/obj/structure/mineral_door/New(location) + ..() + icon_state = mineralType + name = "[mineralType] door" - Destroy() - density = 0 - air_update_turf(1) - return ..() +/obj/structure/mineral_door/initialize() + ..() + air_update_turf(1) - Move() - var/turf/T = loc - ..() - move_update_air(T) +/obj/structure/mineral_door/Destroy() + density = 0 + air_update_turf(1) + return ..() - Bumped(atom/user) - ..() - if(!state) - return TryToSwitchState(user) - return +/obj/structure/mineral_door/Move() + var/turf/T = loc + ..() + move_update_air(T) - attack_ai(mob/user as mob) //those aren't machinery, they're just big fucking slabs of a mineral - if(isAI(user)) //so the AI can't open it - return - else if(isrobot(user)) //but cyborgs can - if(get_dist(user,src) <= 1) //not remotely though - return TryToSwitchState(user) - - attack_hand(mob/user as mob) +/obj/structure/mineral_door/Bumped(atom/user) + ..() + if(!state) return TryToSwitchState(user) + return - CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group) return 0 - if(istype(mover, /obj/effect/beam)) - return !opacity - return !density +/obj/structure/mineral_door/attack_ai(mob/user as mob) //those aren't machinery, they're just big fucking slabs of a mineral + if(isAI(user)) //so the AI can't open it + return + else if(isrobot(user)) //but cyborgs can + if(get_dist(user,src) <= 1) //not remotely though + return TryToSwitchState(user) - CanAtmosPass() - return !density +/obj/structure/mineral_door/attack_hand(mob/user as mob) + return TryToSwitchState(user) - proc/TryToSwitchState(atom/user) - if(isSwitchingStates) return - if(ismob(user)) - var/mob/M = user - if(world.time - user.last_bumped <= 60) return //NOTE do we really need that? - if(M.client) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(!C.handcuffed) - SwitchState() - else +/obj/structure/mineral_door/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + if(air_group) return 0 + if(istype(mover, /obj/effect/beam)) + return !opacity + return !density + +/obj/structure/mineral_door/CanAtmosPass() + return !density + +/obj/structure/mineral_door/proc/TryToSwitchState(atom/user) + if(isSwitchingStates) return + if(ismob(user)) + var/mob/M = user + if(world.time - user.last_bumped <= 60) return //NOTE do we really need that? + if(M.client) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(!C.handcuffed) SwitchState() - else if(istype(user, /obj/mecha)) - SwitchState() + else + SwitchState() + else if(istype(user, /obj/mecha)) + SwitchState() - proc/SwitchState() - if(state) - Close() - else - Open() - - proc/Open() - isSwitchingStates = 1 - playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 1) - flick("[mineralType]opening",src) - sleep(10) - density = 0 - opacity = 0 - state = 1 - update_icon() - isSwitchingStates = 0 - air_update_turf(1) - - proc/Close() - isSwitchingStates = 1 - playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 1) - flick("[mineralType]closing",src) - sleep(10) - density = 1 - opacity = 1 - state = 0 - update_icon() - isSwitchingStates = 0 - air_update_turf(1) +/obj/structure/mineral_door/proc/SwitchState() + if(state) + Close() + else + Open() +/obj/structure/mineral_door/proc/Open() + isSwitchingStates = 1 + playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 1) + flick("[mineralType]opening",src) + sleep(10) + density = 0 + opacity = 0 + state = 1 update_icon() - if(state) - icon_state = "[mineralType]open" - else - icon_state = mineralType + isSwitchingStates = 0 + air_update_turf(1) - attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(istype(W,/obj/item/weapon/pickaxe)) - var/obj/item/weapon/pickaxe/digTool = W - to_chat(user, "You start digging the [name].") - if(do_after(user,digTool.digspeed*hardness, target = src) && src) - to_chat(user, "You finished digging.") - Dismantle() - else if(istype(W,/obj/item/weapon)) //not sure, can't not just weapons get passed to this proc? - hardness -= W.force/100 - to_chat(user, "You hit the [name] with your [W.name]!") - CheckHardness() - else - attack_hand(user) - return +/obj/structure/mineral_door/proc/Close() + isSwitchingStates = 1 + playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 1) + flick("[mineralType]closing",src) + sleep(10) + density = 1 + opacity = 1 + state = 0 + update_icon() + isSwitchingStates = 0 + air_update_turf(1) - proc/CheckHardness() - if(hardness <= 0) +/obj/structure/mineral_door/update_icon() + if(state) + icon_state = "[mineralType]open" + else + icon_state = mineralType + +/obj/structure/mineral_door/attackby(obj/item/weapon/W as obj, mob/user as mob, params) + if(istype(W,/obj/item/weapon/pickaxe)) + var/obj/item/weapon/pickaxe/digTool = W + to_chat(user, "You start digging the [name].") + if(do_after(user,digTool.digspeed*hardness, target = src) && src) + to_chat(user, "You finished digging.") + Dismantle() + else if(istype(W,/obj/item/weapon)) //not sure, can't not just weapons get passed to this proc? + hardness -= W.force/100 + to_chat(user, "You hit the [name] with your [W.name]!") + CheckHardness() + else + attack_hand(user) + return + +/obj/structure/mineral_door/proc/CheckHardness() + if(hardness <= 0) + Dismantle(1) + +/obj/structure/mineral_door/proc/Dismantle(devastated = 0) + if(!devastated) + if(mineralType == "metal") + var/ore = /obj/item/stack/sheet/metal + for(var/i = 1, i <= oreAmount, i++) + new ore(get_turf(src)) + else + var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]") + for(var/i = 1, i <= oreAmount, i++) + new ore(get_turf(src)) + else + if(mineralType == "metal") + var/ore = /obj/item/stack/sheet/metal + for(var/i = 3, i <= oreAmount, i++) + new ore(get_turf(src)) + else + var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]") + for(var/i = 3, i <= oreAmount, i++) + new ore(get_turf(src)) + qdel(src) + +/obj/structure/mineral_door/ex_act(severity = 1) + switch(severity) + if(1) Dismantle(1) - - proc/Dismantle(devastated = 0) - if(!devastated) - if (mineralType == "metal") - var/ore = /obj/item/stack/sheet/metal - for(var/i = 1, i <= oreAmount, i++) - new ore(get_turf(src)) - else - var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]") - for(var/i = 1, i <= oreAmount, i++) - new ore(get_turf(src)) - else - if (mineralType == "metal") - var/ore = /obj/item/stack/sheet/metal - for(var/i = 3, i <= oreAmount, i++) - new ore(get_turf(src)) - else - var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]") - for(var/i = 3, i <= oreAmount, i++) - new ore(get_turf(src)) - qdel(src) - - ex_act(severity = 1) - switch(severity) - if(1) + if(2) + if(prob(20)) Dismantle(1) - if(2) - if(prob(20)) - Dismantle(1) - else - hardness-- - CheckHardness() - if(3) - hardness -= 0.1 + else + hardness-- CheckHardness() - return + if(3) + hardness -= 0.1 + CheckHardness() + return /obj/structure/mineral_door/iron mineralType = "metal" @@ -285,4 +288,4 @@ CheckHardness() playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index d0e8d4c9c85..83220bb6a33 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -76,7 +76,7 @@ /obj/structure/mirror/attack_slime(mob/living/user as mob) var/mob/living/carbon/slime/S = user - if (!S.is_adult) + if(!S.is_adult) return user.do_attack_animation(src) if(shattered) diff --git a/code/game/objects/structures/misc.dm b/code/game/objects/structures/misc.dm index 1b8737e1ddd..81511f16aa1 100644 --- a/code/game/objects/structures/misc.dm +++ b/code/game/objects/structures/misc.dm @@ -34,7 +34,7 @@ attack_hand(mob/user as mob) - if (user.mind.special_role=="Ninja") + if(user.mind.special_role=="Ninja") switch(alert("Phase Jaunt relay primed, target locked as [station_name()], initiate VOID-shift translocation? (Warning! Internals required!)",,"Yes","No")) if("Yes") diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index c8e600c658d..68589112080 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -23,15 +23,15 @@ /obj/structure/mopbucket/examine(mob/user) if(..(user, 1)) - to_chat(usr, text("\icon[] [] contains [] units of water left!", src, src.name, src.reagents.total_volume)) + to_chat(usr, "[bicon(src)] [src] contains [reagents.total_volume] units of water left!") /obj/structure/mopbucket/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/mop)) - if (src.reagents.total_volume >= 2) + if(istype(W, /obj/item/weapon/mop)) + if(src.reagents.total_volume >= 2) src.reagents.trans_to(W, 2) to_chat(user, "\blue You wet the mop") playsound(src.loc, 'sound/effects/slosh.ogg', 25, 1) - if (src.reagents.total_volume < 1) + if(src.reagents.total_volume < 1) to_chat(user, "\blue Out of water!") return @@ -41,10 +41,10 @@ qdel(src) return if(2.0) - if (prob(50)) + if(prob(50)) qdel(src) return if(3.0) - if (prob(5)) + if(prob(5)) qdel(src) return diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index f9809b422ca..71a0c8379a9 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -55,14 +55,14 @@ qdel(src) return if(2.0) - if (prob(50)) + if(prob(50)) for(var/atom/movable/A as mob|obj in src) A.forceMove(loc) ex_act(severity) qdel(src) return if(3.0) - if (prob(5)) + if(prob(5)) for(var/atom/movable/A as mob|obj in src) A.forceMove(loc) ex_act(severity) @@ -75,9 +75,9 @@ /obj/structure/morgue/attack_hand(mob/user as mob) - if (connected) + if(connected) for(var/atom/movable/A as mob|obj in connected.loc) - if (!( A.anchored )) + if(!( A.anchored )) A.forceMove(src) playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) qdel(connected) @@ -88,7 +88,7 @@ step(connected, dir) connected.layer = OBJ_LAYER var/turf/T = get_step(src, dir) - if (T.contents.Find(connected)) + if(T.contents.Find(connected)) connected.connected = src icon_state = "morgue0" for(var/atom/movable/A as mob|obj in src) @@ -103,14 +103,14 @@ return /obj/structure/morgue/attackby(P as obj, mob/user as mob, params) - if (istype(P, /obj/item/weapon/pen)) + if(istype(P, /obj/item/weapon/pen)) var/t = input(user, "What would you like the label to be?", text("[]", name), null) as text - if (user.get_active_hand() != P) + if(user.get_active_hand() != P) return - if ((!in_range(src, usr) && loc != user)) + if((!in_range(src, usr) && loc != user)) return t = sanitize(copytext(t,1,MAX_MESSAGE_LEN)) - if (t) + if(t) name = text("Morgue- '[]'", t) overlays += image(icon, "morgue_label") else @@ -120,13 +120,13 @@ return /obj/structure/morgue/relaymove(mob/user as mob) - if (user.stat) + if(user.stat) return connected = new /obj/structure/m_tray( loc ) step(connected, dir) connected.layer = OBJ_LAYER var/turf/T = get_step(src, dir) - if (T.contents.Find(connected)) + if(T.contents.Find(connected)) connected.connected = src icon_state = "morgue0" for(var/atom/movable/A as mob|obj in src) @@ -147,7 +147,7 @@ var/mob/living/carbon/CM = L if(!istype(CM)) return - if (CM.stat || CM.restrained()) + if(CM.stat || CM.restrained()) return to_chat(CM, "You attempt to slide yourself out of \the [src]...") @@ -170,9 +170,9 @@ /obj/structure/m_tray/attack_hand(mob/user as mob) - if (connected) + if(connected) for(var/atom/movable/A as mob|obj in loc) - if (!( A.anchored )) + if(!( A.anchored )) A.forceMove(connected) connected.connected = null connected.update() @@ -182,16 +182,16 @@ return /obj/structure/m_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) - if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src) || user.contents.Find(O))) + if((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src) || user.contents.Find(O))) return - if (!ismob(O) && !istype(O, /obj/structure/closet/body_bag)) + if(!ismob(O) && !istype(O, /obj/structure/closet/body_bag)) return - if (!ismob(user) || user.stat || user.lying || user.stunned) + if(!ismob(user) || user.stat || user.lying || user.stunned) return O.forceMove(loc) - if (user != O) + if(user != O) for(var/mob/B in viewers(user, 3)) - if ((B.client && !( B.blinded ))) + if((B.client && !( B.blinded ))) to_chat(B, text("\red [] stuffs [] into []!", user, O, src)) return @@ -235,10 +235,10 @@ var/locked = 0 /obj/structure/crematorium/proc/update() - if (connected) + if(connected) icon_state = "crema0" else - if (contents.len) + if(contents.len) icon_state = "crema2" else icon_state = "crema1" @@ -253,14 +253,14 @@ qdel(src) return if(2.0) - if (prob(50)) + if(prob(50)) for(var/atom/movable/A as mob|obj in src) A.forceMove(loc) ex_act(severity) qdel(src) return if(3.0) - if (prob(5)) + if(prob(5)) for(var/atom/movable/A as mob|obj in src) A.forceMove(loc) ex_act(severity) @@ -273,23 +273,23 @@ /obj/structure/crematorium/attack_hand(mob/user as mob) - if (cremating) + if(cremating) to_chat(usr, "\red It's locked.") return - if ((connected) && (locked == 0)) + if((connected) && (locked == 0)) for(var/atom/movable/A as mob|obj in connected.loc) - if (!( A.anchored )) + if(!( A.anchored )) A.forceMove(src) playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) qdel(connected) connected = null - else if (locked == 0) + else if(locked == 0) playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) connected = new /obj/structure/c_tray( loc ) step(connected, SOUTH) connected.layer = OBJ_LAYER var/turf/T = get_step(src, SOUTH) - if (T.contents.Find(connected)) + if(T.contents.Find(connected)) connected.connected = src icon_state = "crema0" for(var/atom/movable/A as mob|obj in src) @@ -302,14 +302,14 @@ update() /obj/structure/crematorium/attackby(P as obj, mob/user as mob, params) - if (istype(P, /obj/item/weapon/pen)) + if(istype(P, /obj/item/weapon/pen)) var/t = input(user, "What would you like the label to be?", text("[]", name), null) as text - if (user.get_active_hand() != P) + if(user.get_active_hand() != P) return - if ((!in_range(src, usr) > 1 && loc != user)) + if((!in_range(src, usr) > 1 && loc != user)) return t = sanitize(copytext(t,1,MAX_MESSAGE_LEN)) - if (t) + if(t) name = text("Crematorium- '[]'", t) else name = "Crematorium" @@ -317,13 +317,13 @@ return /obj/structure/crematorium/relaymove(mob/user as mob) - if (user.stat || locked) + if(user.stat || locked) return connected = new /obj/structure/c_tray( loc ) step(connected, SOUTH) connected.layer = OBJ_LAYER var/turf/T = get_step(src, SOUTH) - if (T.contents.Find(connected)) + if(T.contents.Find(connected)) connected.connected = src icon_state = "crema0" for(var/atom/movable/A as mob|obj in src) @@ -339,12 +339,12 @@ return //don't let you cremate something twice or w/e if(contents.len <= 0) - for (var/mob/M in viewers(src)) + for(var/mob/M in viewers(src)) M.show_message("You hear a hollow crackle.", 1) return else - for (var/mob/M in viewers(src)) + for(var/mob/M in viewers(src)) M.show_message("You hear a roar as the crematorium activates.", 1) cremating = 1 @@ -354,7 +354,7 @@ for(var/mob/living/M in search_contents_for(/mob/living)) if(!M || !isnull(M.gcDestroyed)) continue - if (M.stat!=2) + if(M.stat!=2) M.emote("scream") if(istype(user)) M.attack_log += "\[[time_stamp()]\] Has been cremated by [user.name] ([user.ckey])" @@ -385,7 +385,7 @@ var/mob/living/carbon/CM = L if(!istype(CM)) return - if (CM.stat || CM.restrained()) + if(CM.stat || CM.restrained()) return to_chat(CM, "You attempt to slide yourself out of \the [src]...") @@ -406,9 +406,9 @@ throwpass = 1 /obj/structure/c_tray/attack_hand(mob/user as mob) - if (connected) + if(connected) for(var/atom/movable/A as mob|obj in loc) - if (!( A.anchored )) + if(!( A.anchored )) A.forceMove(connected) //Foreach goto(26) connected.connected = null @@ -419,16 +419,16 @@ return /obj/structure/c_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) - if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src) || user.contents.Find(O))) + if((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src) || user.contents.Find(O))) return - if (!ismob(O) && !istype(O, /obj/structure/closet/body_bag)) + if(!ismob(O) && !istype(O, /obj/structure/closet/body_bag)) return - if (!ismob(user) || user.stat || user.lying || user.stunned) + if(!ismob(user) || user.stat || user.lying || user.stunned) return O.forceMove(loc) - if (user != O) + if(user != O) for(var/mob/B in viewers(user, 3)) - if ((B.client && !( B.blinded ))) + if((B.client && !( B.blinded ))) to_chat(B, text("\red [] stuffs [] into []!", user, O, src)) //Foreach goto(99) return @@ -441,58 +441,32 @@ /obj/machinery/crema_switch/attack_hand(mob/user as mob) if(allowed(usr)) - for (var/obj/structure/crematorium/C in world) - if (C.id == id) - if (!C.cremating) + for(var/obj/structure/crematorium/C in world) + if(C.id == id) + if(!C.cremating) C.cremate(user) else to_chat(usr, "\red Access denied.") return -/hook/Login/proc/update_morgue(var/client/client, var/mob/L) - //Update morgues on login/logout - if (L.stat == DEAD) - var/obj/structure/morgue/Morgue = null - var/mob/living/carbon/human/C = null - if (istype(L,/mob/dead/observer)) //We're a ghost, let's find our corpse - var/mob/dead/observer/G = L - if(!G.mind) //This'll probably break morgue sprites, but the line under the next If statement causes runtimes with Assume Direct Control. - return - if (G.can_reenter_corpse && G.mind.current) - C = G.mind.current - else if (istype(L,/mob/living/carbon/human)) - C = L +/mob/proc/update_morgue() + if(stat == DEAD) + var/obj/structure/morgue/morgue + var/mob/living/C = src + var/mob/dead/observer/G = src + if(istype(G) && G.can_reenter_corpse && G.mind) //We're a ghost, let's find our corpse + C = G.mind.current + if(istype(C)) //We found our corpse, is it inside a morgue? + morgue = get(C.loc, /obj/structure/morgue) + if(morgue) + morgue.update() - if (C) //We found our corpse, is it inside a morgue? - if (istype(C.loc,/obj/structure/morgue)) - Morgue = C.loc - else if (istype(C.loc,/obj/structure/closet/body_bag)) - var/obj/structure/closet/body_bag/B = C.loc - if (istype(B.loc,/obj/structure/morgue)) - Morgue = B.loc - if (Morgue) - Morgue.update() +/hook/mob_login/proc/update_morgue(var/client/client, var/mob/mob) + //Update morgues on login + mob.update_morgue() + return 1 -/hook/Logout/proc/update_morgue(var/client/client, var/mob/L) - //Update morgues on login/logout - if (L.stat == DEAD) - var/obj/structure/morgue/Morgue = null - var/mob/living/carbon/human/C = null - if (istype(L,/mob/dead/observer)) //We're a ghost, let's find our corpse - var/mob/dead/observer/G = L - if(!G.mind) //This'll probably break morgue sprites, but the line under the next If statement causes runtimes with Assume Direct Control. - return 1 - if (G.can_reenter_corpse && G.mind.current) - C = G.mind.current - else if (istype(L,/mob/living/carbon/human)) - C = L - - if (C) //We found our corpse, is it inside a morgue? - if (istype(C.loc,/obj/structure/morgue)) - Morgue = C.loc - else if (istype(C.loc,/obj/structure/closet/body_bag)) - var/obj/structure/closet/body_bag/B = C.loc - if (istype(B.loc,/obj/structure/morgue)) - Morgue = B.loc - if (Morgue) - Morgue.update() \ No newline at end of file +/hook/mob_logout/proc/update_morgue(var/client/client, var/mob/mob) + //Update morgues on logout + mob.update_morgue() + return 1 diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index 9750d449bca..563f9c5faa9 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -58,7 +58,7 @@ // and play var/turf/source = get_turf(instrumentObj) for(var/mob/M in hearers(15, source)) - if(!M.client || !(M.client.prefs.toggles & SOUND_INSTRUMENTS)) + if(!M.client || !(M.client.prefs.sound & SOUND_INSTRUMENTS)) continue M.playsound_local(source, soundfile, 100, falloff = 5) @@ -129,7 +129,7 @@ return ui = nanomanager.try_update_ui(user, instrumentObj, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, instrumentObj, ui_key, "song.tmpl", instrumentObj.name, 700, 500) ui.set_initial_data(data) ui.open() @@ -298,11 +298,11 @@ song.Topic(href, href_list) /obj/structure/piano/attackby(obj/item/O as obj, mob/user as mob, params) - if (istype(O, /obj/item/weapon/wrench)) - if (!anchored && !isinspace()) + if(istype(O, /obj/item/weapon/wrench)) + if(!anchored && !isinspace()) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, " You begin to tighten \the [src] to the floor...") - if (do_after(user, 20, target = src)) + if(do_after(user, 20, target = src)) user.visible_message( \ "[user] tightens \the [src]'s casters.", \ " You have tightened \the [src]'s casters. Now it can be played again.", \ @@ -311,7 +311,7 @@ else if(anchored) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, " You begin to loosen \the [src]'s casters...") - if (do_after(user, 40, target = src)) + if(do_after(user, 40, target = src)) user.visible_message( \ "[user] loosens \the [src]'s casters.", \ " You have loosened \the [src]. Now it can be pulled somewhere else.", \ diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm index 3f5decad98e..d58888d6e24 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm @@ -47,7 +47,7 @@ /obj/structure/stool/bed/nest/user_buckle_mob(mob/living/M, mob/living/user) - if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || usr.stat || M.buckled || istype(user, /mob/living/silicon/pai) ) + if( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || usr.stat || M.buckled || istype(user, /mob/living/silicon/pai) ) return if(M.get_int_organ(/obj/item/organ/internal/xenos/plasmavessel)) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index ecf2324673d..f13bffb9d44 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -16,7 +16,7 @@ var/movable = 0 // For mobility checks /obj/structure/stool/bed/MouseDrop(atom/over_object) - ..(over_object, 1) + ..(over_object, skip_fucking_stool_shit = 1) /obj/structure/stool/psychbed name = "psych bed" diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 952f442b4f2..b8ce126bbfa 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -149,6 +149,15 @@ anchored = 0 movable = 1 +/obj/structure/stool/bed/chair/comfy/attackby(obj/item/weapon/W, mob/user, params) + if(iswrench(W)) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + new /obj/item/stack/sheet/metal(get_turf(src)) + new /obj/item/stack/sheet/metal(get_turf(src)) + qdel(src) + else + ..() + /obj/structure/stool/bed/chair/office/Bump(atom/A) ..() if(!buckled_mob) return diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index efdadfbb7c2..da69c025bb8 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -11,12 +11,12 @@ qdel(src) return if(2.0) - if (prob(70)) + if(prob(70)) new /obj/item/stack/sheet/metal(src.loc) qdel(src) return if(3.0) - if (prob(50)) + if(prob(50)) new /obj/item/stack/sheet/metal(src.loc) qdel(src) return @@ -34,17 +34,17 @@ qdel(src) return -/obj/structure/stool/MouseDrop(atom/over_object, skip_fucking_stool_shit = 0) +/obj/structure/stool/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params, skip_fucking_stool_shit = 0) if(skip_fucking_stool_shit) return ..(over_object) - if (istype(over_object, /mob/living/carbon/human)) + if(istype(over_object, /mob/living/carbon/human)) var/mob/living/carbon/human/H = over_object - if (H==usr && !H.restrained() && !H.stat && in_range(src, over_object)) + if(H==usr && !H.restrained() && !H.stat && in_range(src, over_object)) var/obj/item/weapon/stool/S = new/obj/item/weapon/stool() S.origin = src src.loc = S H.put_in_hands(S) - H.visible_message("\red [H] grabs [src] from the floor!", "\red You grab [src] from the floor!") + H.visible_message("[H] grabs [src] from the floor!", "You grab [src] from the floor!") /obj/item/weapon/stool name = "stool" @@ -53,19 +53,19 @@ icon_state = "stool" force = 10 throwforce = 10 - w_class = 5.0 + w_class = 5 var/obj/structure/stool/origin = null /obj/item/weapon/stool/attack_self(mob/user as mob) ..() origin.loc = get_turf(src) user.unEquip(src) - user.visible_message("\blue [user] puts [src] down.", "\blue You put [src] down.") + user.visible_message("[user] puts [src] down.", "You put [src] down.") qdel(src) /obj/item/weapon/stool/attack(mob/M as mob, mob/user as mob) - if (prob(5) && istype(M,/mob/living)) - user.visible_message("\red [user] breaks [src] over [M]'s back!.") + if(prob(5) && istype(M,/mob/living)) + user.visible_message("[user] breaks [src] over [M]'s back!.") user.unEquip(src) var/obj/item/stack/sheet/metal/m = new/obj/item/stack/sheet/metal m.loc = get_turf(src) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 8bab5ac467b..b21fa103427 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -58,14 +58,14 @@ var/subtype = null for(var/direction in list(turn(dir,90), turn(dir,-90)) ) var/obj/structure/table/T = locate(/obj/structure/table,get_step(src,direction)) - if (T && T.flipped) + if(T && T.flipped) type++ if(type == 1) subtype = direction == turn(dir,90) ? "-" : "+" var/base = "table" - if (istype(src, /obj/structure/table/woodentable)) + if(istype(src, /obj/structure/table/woodentable)) base = "wood" - if (istype(src, /obj/structure/table/reinforced)) + if(istype(src, /obj/structure/table/reinforced)) base = "rtable" icon_state = "[base]flip[type][type == 1 ? subtype : ""]" @@ -79,11 +79,11 @@ qdel(src) return if(2.0) - if (prob(50)) + if(prob(50)) qdel(src) return if(3.0) - if (prob(25)) + if(prob(25)) destroy() else return @@ -138,8 +138,8 @@ return 1 if(locate(/obj/structure/table) in get_turf(mover)) return 1 - if (flipped) - if (get_dir(loc, target) == dir) + if(flipped) + if(get_dir(loc, target) == dir) return !density else return 1 @@ -154,13 +154,13 @@ //checks if projectile 'P' from turf 'from' can hit whatever is behind the table. Returns 1 if it can, 0 if bullet stops. /obj/structure/table/proc/check_cover(obj/item/projectile/P, turf/from) var/turf/cover = flipped ? get_turf(src) : get_step(loc, get_dir(from, loc)) - if (get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close + if(get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close return 1 - if (get_turf(P.original) == cover) + if(get_turf(P.original) == cover) var/chance = 20 - if (ismob(P.original)) + if(ismob(P.original)) var/mob/M = P.original - if (M.lying) + if(M.lying) chance += 20 //Lying down lets you catch less bullets if(flipped) if(get_dir(loc, from) == dir) //Flipped tables catch mroe bullets @@ -169,7 +169,7 @@ return 1 //But only from one side if(prob(chance)) health -= P.damage/2 - if (health > 0) + if(health > 0) visible_message("[P] hits \the [src]!") return 0 else @@ -181,8 +181,8 @@ /obj/structure/table/CheckExit(atom/movable/O as mob|obj, target as turf) if(istype(O) && O.checkpass(PASSTABLE)) return 1 - if (flipped) - if (get_dir(loc, target) == dir) + if(flipped) + if(get_dir(loc, target) == dir) return !density else return 1 @@ -190,13 +190,13 @@ /obj/structure/table/MouseDrop_T(obj/O as obj, mob/user as mob) ..() - if ((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O)) + if((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O)) return if(isrobot(user)) return if(!user.drop_item()) return - if (O.loc != src.loc) + if(O.loc != src.loc) step(O, get_dir(O, src)) return @@ -221,11 +221,11 @@ qdel(I) /obj/structure/table/attackby(obj/item/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/grab)) + if(istype(W, /obj/item/weapon/grab)) tablepush(W, user) return - if (istype(W, /obj/item/weapon/wrench)) + if(istype(W, /obj/item/weapon/wrench)) user.visible_message("[user] is disassembling \a [src].", "You start disassembling \the [src].") playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 50, target = src)) @@ -267,11 +267,11 @@ if(T && !T.flipped) return 0 T = locate() in get_step(src.loc,direction) - if (!T || T.flipped) + if(!T || T.flipped) return 1 - if (istype(T,/obj/structure/table/reinforced/)) + if(istype(T,/obj/structure/table/reinforced/)) var/obj/structure/table/reinforced/R = T - if (R.status == 2) + if(R.status == 2) return 0 return T.straight_table_check(direction) @@ -281,7 +281,7 @@ set category = null set src in oview(1) - if (!can_touch(usr) || ismouse(usr)) + if(!can_touch(usr) || ismouse(usr)) return if(!flip(get_cardinal_dir(usr,src))) @@ -301,13 +301,13 @@ set category = "Object" set src in oview(1) - if (!unflip()) + if(!unflip()) to_chat(usr, "It won't budge.") return /obj/structure/table/proc/flip(var/direction) - if (flipped) + if(flipped) return 0 if( !straight_table_check(turn(direction,90)) || !straight_table_check(turn(direction,-90)) ) @@ -317,8 +317,8 @@ verbs +=/obj/structure/table/proc/do_put var/list/targets = list(get_step(src,dir),get_step(src,turn(dir, 45)),get_step(src,turn(dir, -45))) - for (var/atom/movable/A in get_turf(src)) - if (!A.anchored) + for(var/atom/movable/A in get_turf(src)) + if(!A.anchored) spawn(0) A.throw_at(pick(targets),1,1) @@ -337,14 +337,14 @@ return 1 /obj/structure/table/proc/unflip() - if (!flipped) + if(!flipped) return 0 var/can_flip = 1 - for (var/mob/A in oview(src,0))//src.loc) - if (istype(A)) + for(var/mob/A in oview(src,0))//src.loc) + if(istype(A)) can_flip = 0 - if (!can_flip) + if(!can_flip) return 0 verbs -=/obj/structure/table/proc/do_put @@ -482,33 +482,33 @@ canSmoothWith = list(/obj/structure/table/reinforced, /obj/structure/table) /obj/structure/table/reinforced/flip(var/direction) - if (status == 2) + if(status == 2) return 0 else return ..() /obj/structure/table/reinforced/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/weldingtool)) + if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W if(WT.remove_fuel(0, user)) if(src.status == 2) to_chat(user, "\blue Now weakening the reinforced table") playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if (do_after(user, 50, target = src)) + if(do_after(user, 50, target = src)) if(!src || !WT.isOn()) return to_chat(user, "\blue Table weakened") src.status = 1 else to_chat(user, "\blue Now strengthening the reinforced table") playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if (do_after(user, 50, target = src)) + if(do_after(user, 50, target = src)) if(!src || !WT.isOn()) return to_chat(user, "\blue Table strengthened") src.status = 2 return return - if (istype(W, /obj/item/weapon/wrench)) + if(istype(W, /obj/item/weapon/wrench)) if(src.status == 2) return @@ -571,18 +571,18 @@ . = . || mover.checkpass(PASSTABLE) /obj/structure/rack/MouseDrop_T(obj/O as obj, mob/user as mob) - if ((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O)) + if((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O)) return if(isrobot(user)) return if(!user.drop_item()) return - if (O.loc != src.loc) + if(O.loc != src.loc) step(O, get_dir(O, src)) return /obj/structure/rack/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/wrench)) + if(istype(W, /obj/item/weapon/wrench)) new /obj/item/weapon/rack_parts( src.loc ) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) qdel(src) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index efef25723a5..5d8c98be329 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -174,11 +174,11 @@ on = !on update_icon() if(on) - if (M.loc == loc) + if(M.loc == loc) wash(M) check_heat(M) M.water_act(100, convertHeat(), src) - for (var/atom/movable/G in src.loc) + for(var/atom/movable/G in src.loc) G.clean_blood() G.water_act(100, convertHeat(), src) @@ -283,9 +283,9 @@ washears = !(H.head.flags_inv & HIDEEARS) if(H.wear_mask) - if (washears) + if(washears) washears = !(H.wear_mask.flags_inv & HIDEEARS) - if (washglasses) + if(washglasses) washglasses = !(H.wear_mask.flags_inv & HIDEEYES) if(H.head) @@ -382,10 +382,10 @@ if(!Adjacent(user)) return - if (ishuman(user)) + if(ishuman(user)) var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] - if (user.hand) + if(user.hand) temp = H.organs_by_name["l_hand"] if(temp && !temp.is_usable()) to_chat(user, "You try to move your [temp.name], but cannot!") @@ -434,7 +434,7 @@ var/wateract = 0 wateract = (O.wash(user, src)) busy = 0 - if (wateract) + if(wateract) O.water_act(20,310.15,src) /obj/structure/sink/kitchen diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 529dbb447a8..47e0823f549 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -76,7 +76,7 @@ obj/structure/windoor_assembly/Destroy() if("01") if(istype(W, /obj/item/weapon/weldingtool) && !anchored ) var/obj/item/weapon/weldingtool/WT = W - if (WT.remove_fuel(0,user)) + if(WT.remove_fuel(0,user)) user.visible_message("[user] dissassembles the windoor assembly.", "You start to dissassemble the windoor assembly.") playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) @@ -307,7 +307,7 @@ obj/structure/windoor_assembly/Destroy() set src in oview(1) if(usr.stat || !usr.canmove || usr.restrained()) return - if (src.anchored) + if(src.anchored) to_chat(usr, "It is fastened to the floor; therefore, you can't rotate it!") return 0 //if(src.state != "01") diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index b4ae7069768..77a38aa056a 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -130,7 +130,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) user.visible_message("[user] smashes through [src]!") destroy() - else if (user.a_intent == I_HARM) + else if(user.a_intent == I_HARM) user.changeNext_move(CLICK_CD_MELEE) playsound(get_turf(src), 'sound/effects/glassknock.ogg', 80, 1) user.visible_message("\red [user.name] bangs against the [src.name]!", \ @@ -171,27 +171,27 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f /obj/structure/window/attack_slime(mob/living/user as mob) var/mob/living/carbon/slime/S = user - if (!S.is_adult) + if(!S.is_adult) return attack_generic(user, rand(10, 15)) /obj/structure/window/attackby(obj/item/weapon/W as obj, mob/living/user as mob, params) if(!istype(W)) return//I really wish I did not need this - if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) + if(istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) var/obj/item/weapon/grab/G = W if(istype(G.affecting,/mob/living)) var/mob/living/M = G.affecting var/state = G.state qdel(W) //gotta delete it here because if window breaks, it won't get deleted - switch (state) + switch(state) if(1) M.visible_message("[user] slams [M] against \the [src]!") M.apply_damage(7) hit(10) if(2) M.visible_message("[user] bashes [M] against \the [src]!") - if (prob(50)) + if(prob(50)) M.Weaken(1) M.apply_damage(10) hit(25) @@ -232,16 +232,16 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) for(var/i=0;i=G.max_amount) continue G.attackby(NG, user, params) - if (reinf) + if(reinf) var/obj/item/stack/rods/NR = new (src.loc) - for (var/obj/item/stack/rods/R in src.loc) + for(var/obj/item/stack/rods/R in src.loc) if(R==NR) continue if(R.amount>=R.max_amount) @@ -341,10 +341,13 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f ini_dir = dir if(!color && !istype(src,/obj/structure/window/plasmabasic) && !istype(src,/obj/structure/window/plasmareinforced)) color = color_windows(src) - air_update_turf(1) update_nearby_icons() return +/obj/structure/window/initialize() + air_update_turf(1) + return ..() + /obj/structure/window/Destroy() density = 0 air_update_turf(1) @@ -405,10 +408,13 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f /obj/structure/window/plasmabasic/New(Loc,re=0) ..() ini_dir = dir - air_update_turf(1) update_nearby_icons() return +/obj/structure/window/plasmabasic/initialize() + ..() + air_update_turf(1) + /obj/structure/window/plasmabasic/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > T0C + 32000) hit(round(exposed_volume / 1000), 0) @@ -436,10 +442,13 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f /obj/structure/window/plasmareinforced/New(Loc,re=0) ..() ini_dir = dir - air_update_turf(1) update_nearby_icons() return +/obj/structure/window/plasmareinforced/initialize() + ..() + air_update_turf(1) + /obj/structure/window/plasmareinforced/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) return @@ -508,7 +517,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f update_icon() for(var/obj/structure/window/reinforced/polarized/W in range(src,range)) - if (W.id == src.id || !W.id) + if(W.id == src.id || !W.id) spawn(0) W.toggle() return @@ -519,4 +528,4 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f toggle_tint() /obj/machinery/button/windowtint/update_icon() - icon_state = "light[active]" \ No newline at end of file + icon_state = "light[active]" diff --git a/code/game/response_team.dm b/code/game/response_team.dm index d9b8cfcc375..93c0368f268 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -9,6 +9,7 @@ var/list/response_team_members = list() var/responseteam_age = 21 // Minimum account age to play as an ERT member var/datum/response_team/active_team = null var/send_emergency_team +var/ert_request_answered = 0 /client/proc/response_team() set name = "Dispatch CentComm Response Team" @@ -47,6 +48,7 @@ var/send_emergency_team if(!ert_type) return + ert_request_answered = 1 message_admins("[key_name_admin(usr)] is dispatching an Emergency Response Team", 1) log_admin("[key_name(usr)] used Dispatch Emergency Response Team..") trigger_armed_response_team(ert_type) @@ -59,100 +61,87 @@ var/send_emergency_team else return pick_ert_type() if("Code Red") - if(alert("Confirm: Deploy code 'RED' medium ERT?", "Emergency Response Team", "Confirm", "Cancel") == "Confirm") + if(alert("Confirm: Deploy code 'RED' medium ERT?", "Emergency Response Team", "Confirm", "Cancel") == "Confirm") return new /datum/response_team/red else return pick_ert_type() if("Code Gamma") - if(alert("Confirm: Deploy code 'GAMMA' elite ERT?", "Emergency Response Team", "Confirm", "Cancel") == "Confirm") + if(alert("Confirm: Deploy code 'GAMMA' elite ERT?", "Emergency Response Team", "Confirm", "Cancel") == "Confirm") return new /datum/response_team/gamma else return pick_ert_type() return 0 -/mob/dead/observer/verb/JoinResponseTeam() - set category = "Ghost" - set name = "Join Emergency Response Team" - set desc = "Join the Emergency Response Team. Only possible if it has been called by the crew." - - if(!istype(usr,/mob/dead/observer) && !istype(usr,/mob/new_player)) - to_chat(usr, "You need to be an observer or new player to use this.") - return +/mob/dead/observer/proc/JoinResponseTeam() if(!send_emergency_team) - to_chat(usr, "No emergency response team is currently being sent.") - return + to_chat(src, "No emergency response team is currently being sent.") + return 0 - if(jobban_isbanned(usr, ROLE_ERT)) - to_chat(usr, "You are jobbanned from the emergency reponse team!") - return + if(jobban_isbanned(src, ROLE_ERT)) + to_chat(src, "You are jobbanned from the emergency reponse team!") + return 0 - var/player_age_check = check_client_age(usr.client, responseteam_age) + var/player_age_check = check_client_age(src.client, responseteam_age) if(player_age_check && config.use_age_restriction_for_antags) - to_chat(usr, "This role is not yet available to you. You need to wait another [player_age_check] days.") - return + to_chat(src, "This role is not yet available to you. You need to wait another [player_age_check] days.") + return 0 if(src.has_enabled_antagHUD == 1 && config.antag_hud_restricted) - to_chat(usr, "\blue Upon using the antagHUD you forfeited the ability to join the round.") - return + to_chat(src, "\blue Upon using the antagHUD you forfeited the ability to join the round.") + return 0 if(response_team_members.len > 6) - to_chat(usr, "The emergency response team is already full!") - return + to_chat(src, "The emergency response team is already full!") + return 0 - for (var/obj/effect/landmark/L in landmarks_list) - if (L.name == "Response Team") + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "Response Team") L.name = null - - if(alert(usr, "Would you like to join the Emergency Response Team?", "Emergency Response Team", "Yes", "No") == "No") - L.name = "Response Team" - return - if(!src.client) return - var/client/C = src.client - var/mob/living/carbon/human/new_commando = C.create_response_team(L.loc) - qdel(L) - new_commando.mind.key = usr.key - new_commando.key = usr.key - new_commando.update_icons() - - return + spawn(-1) + var/client/C = src.client + var/mob/living/carbon/human/new_commando = C.create_response_team(L.loc) + qdel(L) + new_commando.mind.key = src.key + new_commando.key = src.key + new_commando.update_icons() + return 1 /proc/trigger_armed_response_team(var/datum/response_team/response_team_type) active_team = response_team_type - active_team.announce_team() send_emergency_team = 1 - sleep(600 * 5) - send_emergency_team = 0 // Can no longer join the ERT. - -/* - var/area/security/nuke_storage/nukeloc = locate() //To find the nuke in the vault - var/obj/machinery/nuclearbomb/nuke = locate() in nukeloc - if(!nuke) - nuke = locate() in world - var/obj/item/weapon/paper/P = new - P.info = "Your orders, Commander, are to use all means necessary to return the station to a survivable condition.
        To this end, you have been provided with the best tools we can give for Security, Medical, Engineering and Janitorial duties. The nuclear authorization code is: [ nuke ? nuke.r_code : "UNKNOWN"]. Be warned, if you detonate this without good reason, we will hold you to account for damages. Memorise this code, and then destroy this message." - P.name = "ERT Orders and Emergency Nuclear Code" - var/obj/item/weapon/stamp/centcom/stamp = new - P.stamp(stamp) - qdel(stamp) - for (var/obj/effect/landmark/A in world) - if (A.name == "nukecode") - P.loc = A.loc - qdel(A) - continue -*/ + var/list/ert_candidates = pollCandidates("Join the Emergency Response Team?",, responseteam_age, 600) + if(!ert_candidates.len) + active_team.cannot_send_team() + send_emergency_team = 0 + return + var/teamsize = 0 + for(var/mob/dead/observer/M in ert_candidates) + teamsize += M.JoinResponseTeam() + send_emergency_team = 0 + if (!teamsize) + active_team.cannot_send_team() + return + active_team.announce_team() /client/proc/create_response_team(obj/spawn_location) var/mob/living/carbon/human/M = new(null) var/obj/item/organ/external/head/head_organ = M.get_organ("head") response_team_members |= M - var/new_gender = alert(usr, "Please select your gender.", "Character Generation", "Male", "Female") - if (new_gender) + var/new_gender = alert(src, "Please select your gender.", "ERT Character Generation", "Male", "Female") + + var/class = 0 + while(!class) + class = input(src, "Which loadout would you like to choose?") in active_team.get_slot_list() + if(!active_team.check_slot_available(class)) // Because the prompt does not update automatically when a slot gets filled. + class = 0 + + if(new_gender) if(new_gender == "Male") M.change_gender(MALE) else @@ -201,12 +190,6 @@ var/send_emergency_team ticker.minds += M.mind //Adds them to regular mind list. M.loc = spawn_location - var/class = 0 - while (!class) - class = input("Which loadout would you like to choose?") in active_team.get_slot_list() - if(!active_team.check_slot_available(class)) // Because the prompt does not update automatically when a slot gets filled. - class = 0 - active_team.equip_officer(class, M) return M @@ -258,7 +241,7 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/engineer(M), slot_back) M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/responseteam(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_in_backpack) var/obj/item/weapon/card/id/W = new(src) W.assignment = "Emergency Response Team Member" @@ -273,7 +256,7 @@ var/send_emergency_team pda.ownjob = "Emergency Response Team Member" pda.name = "PDA-[M.real_name] ([pda.ownjob])" pda.icon_state = "pda-engineer" - M.equip_to_slot_or_del(pda, slot_wear_pda) + M.equip_to_slot_or_del(pda, slot_belt) if("Security") @@ -282,7 +265,7 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/security(M), slot_back) M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/responseteam(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/response_team(M), slot_belt) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/response_team(M), slot_in_backpack) var/obj/item/weapon/card/id/W = new(src) W.assignment = "Emergency Response Team Member" @@ -297,7 +280,7 @@ var/send_emergency_team pda.ownjob = "Emergency Response Team Member" pda.name = "PDA-[M.real_name] ([pda.ownjob])" pda.icon_state = "pda-security" - M.equip_to_slot_or_del(pda, slot_wear_pda) + M.equip_to_slot_or_del(pda, slot_belt) if("Medic") @@ -319,7 +302,7 @@ var/send_emergency_team pda.ownjob = "Emergency Response Team Member" pda.name = "PDA-[M.real_name] ([pda.ownjob])" pda.icon_state = "pda-medical" - M.equip_to_slot_or_del(pda, slot_wear_pda) + M.equip_to_slot_or_del(pda, slot_belt) if("Commander") @@ -346,18 +329,20 @@ var/send_emergency_team pda.owner = M.real_name pda.ownjob = "Emergency Response Team Leader" pda.name = "PDA-[M.real_name] ([pda.ownjob])" - M.equip_to_slot_or_del(pda, slot_wear_pda) + M.equip_to_slot_or_del(pda, slot_belt) +/datum/response_team/proc/cannot_send_team() + command_announcement.Announce("[station_name()], we are unfortunately unable to send you an Emergency Response Team at this time.", "ERT Unavailable") /datum/response_team/proc/announce_team() - command_announcement.Announce("Attention, [station_name()]. We are attempting to assemble a team of highly trained assistants to aid(?) you. Standby.", "Central Command") + command_announcement.Announce("Attention, [station_name()]. We are sending a team of highly trained assistants to aid(?) you. Standby.", "ERT En-Route") // -- AMBER TEAM -- /datum/response_team/amber /datum/response_team/amber/announce_team() - command_announcement.Announce("Attention, [station_name()]. We are attempting to assemble a code AMBER light Emergency Response Team. Standby.", "Central Command") + command_announcement.Announce("Attention, [station_name()]. We are sending a code AMBER light Emergency Response Team. Standby.", "ERT En-Route") /datum/response_team/amber/equip_officer(var/officer_type, var/mob/living/carbon/human/M) ..() @@ -397,13 +382,12 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/ert/medical(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/medical/response_team(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/ert/medical(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/o2(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/brute(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/medical/response_team(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/CMO(M), slot_l_store) M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_r_store) @@ -414,12 +398,11 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/ert/command(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/ert/command(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/storage/lockbox/loyalty(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(M), slot_l_store) M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_r_store) @@ -429,7 +412,7 @@ var/send_emergency_team /datum/response_team/red /datum/response_team/red/announce_team() - command_announcement.Announce("Attention, [station_name()]. We are attempting to assemble a code RED Emergency Response Team. Standby.", "Central Command") + command_announcement.Announce("Attention, [station_name()]. We are sending a code RED Emergency Response Team. Standby.", "ERT En-Route") /datum/response_team/red/equip_officer(var/officer_type, var/mob/living/carbon/human/M) ..() @@ -479,7 +462,6 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/medical(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/health_advanced(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/defibrillator/compact/loaded(M), slot_belt) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/ert/medical(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_in_backpack) @@ -488,6 +470,7 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/surgery(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/defibrillator/compact/loaded(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/CMO(M), slot_l_store) M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_r_store) @@ -498,12 +481,12 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/commander(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/nuclear(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/ert/commander(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/storage/lockbox/loyalty(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/nuclear(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(M), slot_l_store) M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_r_store) @@ -513,7 +496,7 @@ var/send_emergency_team /datum/response_team/gamma /datum/response_team/gamma/announce_team() - command_announcement.Announce("Attention, [station_name()]. We are attempting to assemble a code GAMMA elite Emergency Response Team. Standby.", "Central Command") + command_announcement.Announce("Attention, [station_name()]. We are sending a code GAMMA elite Emergency Response Team. Standby.", "ERT En-Route") /datum/response_team/gamma/equip_officer(var/officer_type, var/mob/living/carbon/human/M) ..() @@ -561,12 +544,12 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/medical(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/night(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/defibrillator/compact/loaded(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/ert/medical(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/surgery(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/defibrillator/compact/loaded(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(src), slot_l_store) M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_r_store) @@ -579,13 +562,13 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/commander(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/night(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/nuclear(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/ert/commander(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/storage/lockbox/loyalty(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/nuclear(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(M), slot_l_store) M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_r_store) diff --git a/code/game/skincmd.dm b/code/game/skincmd.dm index fd9131538e4..7d27a1ce6df 100644 --- a/code/game/skincmd.dm +++ b/code/game/skincmd.dm @@ -8,6 +8,6 @@ set hidden = 1 var/ref = copytext(data, 1, findtext(data, ";")) - if (src.skincmds[ref] != null) + if(src.skincmds[ref] != null) var/obj/a = src.skincmds[ref] a.SkinCmd(src, copytext(data, findtext(data, ";") + 1)) \ No newline at end of file diff --git a/code/game/sound.dm b/code/game/sound.dm index 1890a0966e7..7bf3af10e9c 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -25,7 +25,7 @@ var/list/ricochet = list('sound/weapons/effects/ric1.ogg', 'sound/weapons/effect var/turf/turf_source = get_turf(source) // Looping through the player list has the added bonus of working for mobs inside containers - for (var/P in player_list) + for(var/P in player_list) var/mob/M = P if(!M || !M.client) continue @@ -48,7 +48,7 @@ var/const/FALLOFF_SOUNDS = 0.5 S.channel = 0 //Any channel S.volume = vol S.environment = -1 - if (vary) + if(vary) if(frequency) S.frequency = frequency else @@ -69,20 +69,20 @@ var/const/FALLOFF_SOUNDS = 0.5 var/datum/gas_mixture/hearer_env = T.return_air() var/datum/gas_mixture/source_env = turf_source.return_air() - if (hearer_env && source_env) + if(hearer_env && source_env) var/pressure = min(hearer_env.return_pressure(), source_env.return_pressure()) - if (pressure < ONE_ATMOSPHERE) + if(pressure < ONE_ATMOSPHERE) pressure_factor = max((pressure - SOUND_MINIMUM_PRESSURE)/(ONE_ATMOSPHERE - SOUND_MINIMUM_PRESSURE), 0) else //in space pressure_factor = 0 - if (distance <= 1) + if(distance <= 1) pressure_factor = max(pressure_factor, 0.15) //hearing through contact S.volume *= pressure_factor - if (S.volume <= 0) + if(S.volume <= 0) return //no volume means no sound var/dx = turf_source.x - T.x // Hearing from the right/left @@ -108,29 +108,29 @@ var/const/FALLOFF_SOUNDS = 0.5 /proc/get_sfx(soundin) if(istext(soundin)) switch(soundin) - if ("shatter") + if("shatter") soundin = pick(shatter_sound) - if ("explosion") + if("explosion") soundin = pick(explosion_sound) - if ("sparks") + if("sparks") soundin = pick(spark_sound) - if ("rustle") + if("rustle") soundin = pick(rustle_sound) - if ("bodyfall") + if("bodyfall") soundin = pick(bodyfall_sound) - if ("punch") + if("punch") soundin = pick(punch_sound) - if ("clownstep") + if("clownstep") soundin = pick(clown_sound) - if ("jackboot") + if("jackboot") soundin = pick(jackboot_sound) - if ("swing_hit") + if("swing_hit") soundin = pick(swing_hit_sound) - if ("hiss") + if("hiss") soundin = pick(hiss_sound) - if ("pageturn") + if("pageturn") soundin = pick(page_sound) - if ("gunshot") + if("gunshot") soundin = pick(gun_sound) if("computer_ambience") soundin = pick(computer_ambience) diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index be8828a2dc9..3bce2fcfe3d 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -89,7 +89,7 @@ bloodcolor = M.feet_blood_color M.track_blood-- - if (bloodDNA) + if(bloodDNA) src.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,bloodDNA,M.dir,0,bloodcolor) // Coming var/turf/simulated/from = get_step(M,reverse_direction(M.dir)) if(istype(from) && from) @@ -97,25 +97,24 @@ bloodDNA = null - switch (src.wet) + switch(src.wet) if(TURF_WET_WATER) - if (!(M.slip("wet floor", 4, 2, 0, 1))) + if(!(M.slip("wet floor", 4, 2, 0, 1))) M.inertia_dir = 0 return if(TURF_WET_LUBE) //lube - if(M.slip("floor", 0, 7, 4, 0, 1)) - M.take_organ_damage(2) // Was 5 -- TLE + M.slip("floor", 0, 5, 3, 0, 1) if(TURF_WET_ICE) // Ice - if (!(prob(30) && M.slip("icy floor", 4, 2, 1, 1))) + if(!(prob(30) && M.slip("icy floor", 4, 2, 1, 1))) M.inertia_dir = 0 //returns 1 if made bloody, returns 0 otherwise /turf/simulated/add_blood(mob/living/carbon/human/M) - if (!..()) + if(!..()) return 0 var/obj/effect/decal/cleanable/blood/B = locate() in contents //check for existing blood splatter diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index f150be57ba6..3c73c0789e7 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -48,8 +48,8 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," //turf/simulated/floor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) -// if ((istype(mover, /obj/machinery/vehicle) && !(src.burnt))) -// if (!( locate(/obj/machinery/mass_driver, src) )) +// if((istype(mover, /obj/machinery/vehicle) && !(src.burnt))) +// if(!( locate(/obj/machinery/mass_driver, src) )) // return 0 // return ..() @@ -75,7 +75,7 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," src.hotspot_expose(1000,CELL_VOLUME) if(prob(33)) new /obj/item/stack/sheet/metal(src) if(3.0) - if (prob(50)) + if(prob(50)) src.break_tile() src.hotspot_expose(1000,CELL_VOLUME) return @@ -129,16 +129,17 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," /turf/simulated/floor/proc/make_plating() return ChangeTurf(/turf/simulated/floor/plating) -/turf/simulated/floor/ChangeTurf(turf/simulated/floor/T) +/turf/simulated/floor/ChangeTurf(turf/simulated/floor/T, defer_change = FALSE, keep_icon = TRUE) if(!istype(src,/turf/simulated/floor)) return ..() //fucking turfs switch the fucking src of the fucking running procs if(!ispath(T,/turf/simulated/floor)) return ..() var/old_icon = icon_regular_floor var/old_plating = icon_plating var/old_dir = dir var/turf/simulated/floor/W = ..() - W.icon_regular_floor = old_icon - W.icon_plating = old_plating - W.dir = old_dir + if(keep_icon) + W.icon_regular_floor = old_icon + W.icon_plating = old_plating + W.dir = old_dir W.update_icon() return W diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 764ca6055d4..dcc05e5acfe 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -30,13 +30,13 @@ to_chat(user, "Repair the plating first!") return 1 var/obj/item/stack/rods/R = C - if (R.get_amount() < 2) + if(R.get_amount() < 2) to_chat(user, "You need two rods to make a reinforced floor!") return 1 else to_chat(user, "You begin reinforcing the floor...") if(do_after(user, 30, target = src)) - if (R.get_amount() >= 2 && !istype(src, /turf/simulated/floor/engine)) + if(R.get_amount() >= 2 && !istype(src, /turf/simulated/floor/engine)) ChangeTurf(/turf/simulated/floor/engine) playsound(src, 'sound/items/Deconstruct.ogg', 80, 1) R.use(2) diff --git a/code/game/turfs/simulated/shuttle.dm b/code/game/turfs/simulated/shuttle.dm index a169d588dd2..ac520ca8c0f 100644 --- a/code/game/turfs/simulated/shuttle.dm +++ b/code/game/turfs/simulated/shuttle.dm @@ -62,4 +62,4 @@ /turf/simulated/shuttle/floor4/vox //Vox skipjack floors name = "skipjack floor" oxygen = 0 - nitrogen = MOLES_N2STANDARD + MOLES_O2STANDARD \ No newline at end of file + nitrogen = MOLES_N2STANDARD + MOLES_O2STANDARD diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 7f4ac1704d9..4d7c8ccd5da 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -140,7 +140,7 @@ if(!devastated) playsound(src, 'sound/items/Welder.ogg', 100, 1) new /obj/structure/girder(src) - if (mineral == "metal") + if(mineral == "metal") new /obj/item/stack/sheet/metal( src ) new /obj/item/stack/sheet/metal( src ) else @@ -148,7 +148,7 @@ new M( src ) new M( src ) else - if (mineral == "metal") + if(mineral == "metal") new /obj/item/stack/sheet/metal( src ) new /obj/item/stack/sheet/metal( src ) new /obj/item/stack/sheet/metal( src ) @@ -258,8 +258,8 @@ /turf/simulated/wall/attack_hand(mob/user as mob) user.changeNext_move(CLICK_CD_MELEE) - if (HULK in user.mutations) - if (prob(hardness) || rotting) + if(HULK in user.mutations) + if(prob(hardness) || rotting) playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) to_chat(user, text("You smash through the wall.")) user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) @@ -287,7 +287,7 @@ /turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob, params) user.changeNext_move(CLICK_CD_MELEE) - if (!user.IsAdvancedToolUser()) + if(!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return @@ -376,7 +376,7 @@ visible_message("[user] slices apart \the [src]!","You hear metal being sliced apart.") //DRILLING - else if (istype(W, /obj/item/weapon/pickaxe/drill/diamonddrill)) + else if(istype(W, /obj/item/weapon/pickaxe/drill/diamonddrill)) to_chat(user, "You begin to drill though the wall.") @@ -385,7 +385,7 @@ dismantle_wall() visible_message("[user] drills through \the [src]!","You hear the grinding of metal.") - else if (istype(W, /obj/item/weapon/pickaxe/drill/jackhammer)) + else if(istype(W, /obj/item/weapon/pickaxe/drill/jackhammer)) to_chat(user, "You begin to disintegrates the wall.") diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm index 8a36ea5af6b..d4f0767d755 100644 --- a/code/game/turfs/simulated/walls_mineral.dm +++ b/code/game/turfs/simulated/walls_mineral.dm @@ -134,7 +134,7 @@ /* /turf/simulated/wall/mineral/proc/shock() - if (electrocute_mob(user, C, src)) + if(electrocute_mob(user, C, src)) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm index 1d792647042..27154fd00fb 100644 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ b/code/game/turfs/simulated/walls_reinforced.dm @@ -15,7 +15,7 @@ /turf/simulated/wall/r_wall/attackby(obj/item/W as obj, mob/user as mob, params) user.changeNext_move(CLICK_CD_MELEE) - if (!user.IsAdvancedToolUser()) + if(!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return @@ -90,7 +90,7 @@ return if(1) - if (istype(W, /obj/item/weapon/screwdriver)) + if(istype(W, /obj/item/weapon/screwdriver)) to_chat(user, "You begin removing the support lines.") playsound(src, 'sound/items/Screwdriver.ogg', 100, 1) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index efe3bdb6e55..48f892caff0 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -116,9 +116,9 @@ A.z = target_z A.x = world.maxx - 2 spawn (0) - if ((A && A.loc)) + if((A && A.loc)) A.loc.Entered(A) - else if (src.x >= world.maxx) + else if(src.x >= world.maxx) if(istype(A, /obj/effect/meteor)) qdel(A) return @@ -141,9 +141,9 @@ A.z = target_z A.x = 3 spawn (0) - if ((A && A.loc)) + if((A && A.loc)) A.loc.Entered(A) - else if (src.y <= 1) + else if(src.y <= 1) if(istype(A, /obj/effect/meteor)) qdel(A) return @@ -165,10 +165,10 @@ A.z = target_z A.y = world.maxy - 2 spawn (0) - if ((A && A.loc)) + if((A && A.loc)) A.loc.Entered(A) - else if (src.y >= world.maxy) + else if(src.y >= world.maxy) if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) qdel(A) return @@ -190,7 +190,7 @@ A.z = target_z A.y = 3 spawn (0) - if ((A && A.loc)) + if((A && A.loc)) A.loc.Entered(A) return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 8541a638040..d76791e7f97 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -86,7 +86,7 @@ return 0 /turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area) - if (!mover) + if(!mover) return 1 @@ -109,7 +109,7 @@ large_dense += border_obstacle //Then, check the turf itself - if (!src.CanPass(mover, src)) + if(!src.CanPass(mover, src)) mover.Bump(src, 1) return 0 @@ -156,9 +156,11 @@ qdel(L) //Creates a new turf -/turf/proc/ChangeTurf(var/path) - if(!path) return - if(path == type) return src +/turf/proc/ChangeTurf(path, defer_change = FALSE, keep_icon = TRUE) + if(!path) + return + if(!use_preloader && path == type) // Don't no-op if the map loader requires it to be reconstructed + return src var/old_opacity = opacity var/old_dynamic_lighting = dynamic_lighting var/list/old_affecting_lights = affecting_lights @@ -167,12 +169,10 @@ if(air_master) air_master.remove_from_active(src) - var/turf/W = new path(src) + if(!defer_change) + W.AfterChange() - if(istype(W, /turf/simulated)) - W:Assimilate_Air() - W.RemoveLattice() W.blueprint_data = old_blueprint_data for(var/turf/space/S in range(W,1)) @@ -189,13 +189,22 @@ else lighting_clear_overlays() - W.levelupdate() - W.CalculateAdjacentTurfs() + return W - if(!can_have_cabling()) +// I'm including `ignore_air` because BYOND lacks positional-only arguments +/turf/proc/AfterChange(ignore_air, keep_cabling = FALSE) //called after a turf has been replaced in ChangeTurf() + levelupdate() + CalculateAdjacentTurfs() + + if(!keep_cabling && !can_have_cabling()) for(var/obj/structure/cable/C in contents) qdel(C) - return W + +/turf/simulated/AfterChange(ignore_air, keep_cabling = FALSE) + ..() + RemoveLattice() + if(!ignore_air) + Assimilate_Air() //////Assimilate Air////// /turf/simulated/proc/Assimilate_Air() @@ -404,4 +413,4 @@ /turf/proc/add_blueprints_preround(atom/movable/AM) if(!ticker || ticker.current_state != GAME_STATE_PLAYING) - add_blueprints(AM) \ No newline at end of file + add_blueprints(AM) diff --git a/code/game/turfs/unsimulated/beach.dm b/code/game/turfs/unsimulated/beach.dm index 89881767844..970467c2ced 100644 --- a/code/game/turfs/unsimulated/beach.dm +++ b/code/game/turfs/unsimulated/beach.dm @@ -68,6 +68,7 @@ icon = 'icons/turf/floors/seadrop-o.dmi' layer = MOB_LAYER + 0.1 smooth = SMOOTH_TRUE + anchored = 1 canSmoothWith = list( /turf/unsimulated/beach/water/drop, /turf/unsimulated/beach/water/drop/dense, /turf/unsimulated/beach/water, /turf/unsimulated/beach/water/dense, diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm index f63535fb082..8df18294f04 100644 --- a/code/game/turfs/unsimulated/floor.dm +++ b/code/game/turfs/unsimulated/floor.dm @@ -4,6 +4,7 @@ icon_state = "Floor3" /turf/unsimulated/floor/grass + name = "grass patch" icon_state = "grass1" /turf/unsimulated/floor/grass/New() @@ -16,18 +17,44 @@ icon_state = "snow" /turf/unsimulated/floor/chasm - name = "sinkhole" + name = "chasm" desc = "It's difficult to see the bottom." - density = 1 + density = 0 icon = 'icons/turf/floors/Chasms.dmi' icon_state = "Fill" - smooth = SMOOTH_TRUE - canSmoothWith = null + smooth = SMOOTH_MORE + canSmoothWith = list(/turf/unsimulated/floor/chasm) -/turf/unsimulated/floor/chasm/New() - spawn(1) - smooth_icon(src) - smooth_icon_neighbors(src) +/turf/unsimulated/floor/chasm/Entered(mob/living/M, atom/OL, ignoreRest = 0) + // "fall" south + if(istype(M)) + spawn(1) + if(step(M, SOUTH)) + M.emote("scream") + +/turf/unsimulated/floor/chasm/dense + density = 1 + +/turf/unsimulated/floor/lava + name = "lava" + desc = "That looks... a bit dangerous" + icon = 'icons/turf/floors/lava.dmi' + icon_state = "smooth" + smooth = SMOOTH_MORE + canSmoothWith = list(/turf/unsimulated/floor/lava) + var/lava_damage = 250 + var/lava_fire = 20 + light_range = 2 + light_color = "#FFC040" + +/turf/unsimulated/floor/lava/Entered(mob/living/M, atom/OL, ignoreRest = 0) + if(istype(M)) + M.apply_damage(lava_damage, BURN) + M.adjust_fire_stacks(lava_fire) + M.IgniteMob() + +/turf/unsimulated/floor/lava/dense + density = 1 /turf/unsimulated/floor/abductor name = "alien floor" @@ -40,4 +67,24 @@ /turf/unsimulated/floor/vox icon_state = "dark" nitrogen = 100 - oxygen = 0 \ No newline at end of file + oxygen = 0 + +/turf/unsimulated/floor/carpet + name = "Carpet" + icon = 'icons/turf/floors/carpet.dmi' + icon_state = "carpet" + smooth = SMOOTH_TRUE + canSmoothWith = null + + footstep_sounds = list( + "human" = list('sound/effects/footstep/carpet_human.ogg'), + "xeno" = list('sound/effects/footstep/carpet_xeno.ogg') + ) + +/turf/unsimulated/floor/wood + icon_state = "wood" + + footstep_sounds = list( + "human" = list('sound/effects/footstep/wood_all.ogg'), //@RonaldVanWonderen of Freesound.org + "xeno" = list('sound/effects/footstep/wood_all.ogg') //@RonaldVanWonderen of Freesound.org + ) diff --git a/code/game/turfs/unsimulated/walls.dm b/code/game/turfs/unsimulated/walls.dm index 571983f0966..42a8b133a24 100644 --- a/code/game/turfs/unsimulated/walls.dm +++ b/code/game/turfs/unsimulated/walls.dm @@ -25,6 +25,11 @@ turf/unsimulated/wall/splashscreen /turf/unsimulated/wall/other icon_state = "r_wall" +/turf/unsimulated/wall/metal + icon = 'icons/turf/walls/wall.dmi' + icon_state = "wall" + smooth = SMOOTH_TRUE + /turf/unsimulated/wall/abductor icon_state = "alien1" explosion_block = 50 \ No newline at end of file diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 48bb773c453..e5f02a0a45a 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -63,7 +63,8 @@ var/global/admin_ooc_colour = "#b82e00" var/display_name = src.key if(prefs.unlock_content) if(prefs.toggles & MEMBER_PUBLIC) - display_name = "[display_name]" + var/icon/byond = icon('icons/member_content.dmi', "blag") + display_name = "[bicon(byond)][display_name]" if(holder) if(holder.fakekey) if(C.holder) @@ -74,7 +75,7 @@ var/global/admin_ooc_colour = "#b82e00" /proc/toggle_ooc() config.ooc_allowed = ( !config.ooc_allowed ) - if (config.ooc_allowed) + if(config.ooc_allowed) to_chat(world, "The OOC channel has been globally enabled!") else to_chat(world, "The OOC channel has been globally disabled!") diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index 857fcadb48a..afc8db25b65 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -52,11 +52,11 @@ /mob/living/carbon/human/verb/suicide() set hidden = 1 - if (stat == DEAD) + if(stat == DEAD) to_chat(src, "You're already dead!") return - if (!ticker) + if(!ticker) to_chat(src, "You can't commit suicide before the game starts!") return @@ -65,7 +65,7 @@ to_chat(src, "You try to bring yourself to commit suicide, but - something prevents you!") return - if (suiciding) + if(suiciding) to_chat(src, "You're already committing suicide! Be patient!") return @@ -88,15 +88,15 @@ /mob/living/carbon/brain/verb/suicide() set hidden = 1 - if (stat == 2) + if(stat == 2) to_chat(src, "You're already dead!") return - if (!ticker) + if(!ticker) to_chat(src, "You can't commit suicide before the game starts!") return - if (suiciding) + if(suiciding) to_chat(src, "You're already committing suicide! Be patient!") return @@ -113,11 +113,11 @@ /mob/living/silicon/ai/verb/suicide() set hidden = 1 - if (stat == 2) + if(stat == 2) to_chat(src, "You're already dead!") return - if (suiciding) + if(suiciding) to_chat(src, "You're already committing suicide! Be patient!") return @@ -133,11 +133,11 @@ /mob/living/silicon/robot/verb/suicide() set hidden = 1 - if (stat == 2) + if(stat == 2) to_chat(src, "You're already dead!") return - if (suiciding) + if(suiciding) to_chat(src, "You're already committing suicide! Be patient!") return @@ -161,7 +161,7 @@ var/obj/item/device/paicard/card = loc card.removePersonality() var/turf/T = get_turf_or_move(card.loc) - for (var/mob/M in viewers(T)) + for(var/mob/M in viewers(T)) M.show_message("\blue [src] flashes a message across its screen, \"Wiping core files. Please acquire a new personality to continue using pAI device functions.\"", 3, "\blue [src] bleeps electronically.", 2) death(0, 1) else @@ -170,11 +170,11 @@ /mob/living/carbon/alien/humanoid/verb/suicide() set hidden = 1 - if (stat == 2) + if(stat == 2) to_chat(src, "You're already dead!") return - if (suiciding) + if(suiciding) to_chat(src, "You're already committing suicide! Be patient!") return @@ -190,11 +190,11 @@ /mob/living/carbon/slime/verb/suicide() set hidden = 1 - if (stat == 2) + if(stat == 2) to_chat(src, "You're already dead!") return - if (suiciding) + if(suiciding) to_chat(src, "You're already committing suicide! Be patient!") return diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index 3be9262d1ad..4e822710cd0 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -27,7 +27,7 @@ entry += " - Observing" else entry += " - DEAD" - else if (istype(C.mob, /mob/new_player)) + else if(istype(C.mob, /mob/new_player)) entry += " - New Player" else entry += " - DEAD" @@ -122,7 +122,7 @@ if(!C.holder.fakekey) msg += "\t[C] is a [C.holder.rank]\n" num_admins_online++ - else if (check_rights(R_MOD|R_MENTOR, 0, C.mob) && !check_rights(R_ADMIN, 0, C.mob)) + else if(check_rights(R_MOD|R_MENTOR, 0, C.mob) && !check_rights(R_ADMIN, 0, C.mob)) modmsg += "\t[C] is a [C.holder.rank]\n" num_mods_online++ diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm index 1c5365a6b96..3027864ace6 100644 --- a/code/modules/admin/DB ban/functions.dm +++ b/code/modules/admin/DB ban/functions.dm @@ -17,6 +17,7 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration = var/kickbannedckey //Defines whether this proc should kick the banned person, if they are connected (if banned_mob is defined). //some ban types kick players after this proc passes (tempban, permaban), but some are specific to db_ban, so //they should kick within this proc. + var/isjobban // For job bans, which need to be inserted into the job ban lists switch(bantype) if(BANTYPE_PERMA) bantype_str = "PERMABAN" @@ -31,9 +32,11 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration = bantype_str = "JOB_PERMABAN" duration = -1 bantype_pass = 1 + isjobban = 1 if(BANTYPE_JOB_TEMP) bantype_str = "JOB_TEMPBAN" bantype_pass = 1 + isjobban = 1 if(BANTYPE_APPEARANCE) bantype_str = "APPEARANCE_BAN" duration = -1 @@ -134,11 +137,15 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration = if(banned_mob && banned_mob.client && banned_mob.client.ckey == banckey) del(banned_mob.client) + if(isjobban) + jobban_client_fullban(ckey, job) + datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "") if(!check_rights(R_BAN)) return var/bantype_str + var/isjobban // For job bans, which need to be removed from the job ban lists if(bantype) var/bantype_pass = 0 switch(bantype) @@ -151,9 +158,11 @@ datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "") if(BANTYPE_JOB_PERMA) bantype_str = "JOB_PERMABAN" bantype_pass = 1 + isjobban = 1 if(BANTYPE_JOB_TEMP) bantype_str = "JOB_TEMPBAN" bantype_pass = 1 + isjobban = 1 if(BANTYPE_APPEARANCE) bantype_str = "APPEARANCE_BAN" bantype_pass = 1 @@ -206,6 +215,8 @@ datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "") return DB_ban_unban_by_id(ban_id) + if(isjobban) + jobban_unban_client(ckey, job) datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null) @@ -215,18 +226,20 @@ datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null) to_chat(usr, "Cancelled") return - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, duration, reason FROM [format_table_name("ban")] WHERE id = [banid]") + var/DBQuery/query = dbcon.NewQuery("SELECT ckey, duration, reason, job FROM [format_table_name("ban")] WHERE id = [banid]") query.Execute() var/eckey = usr.ckey //Editing admin ckey var/pckey //(banned) Player ckey var/duration //Old duration var/reason //Old reason + var/job //Old job if(query.NextRow()) pckey = query.item[1] duration = query.item[2] reason = query.item[3] + job = query.item[4] else to_chat(usr, "Invalid ban id. Contact the database admin") return @@ -259,6 +272,8 @@ datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null) if("unban") if(alert("Unban [pckey]?", "Unban?", "Yes", "No") == "Yes") DB_ban_unban_by_id(banid) + if(job && length(job)) + jobban_unban_client(pckey, job) return else to_chat(usr, "Cancelled") @@ -396,7 +411,6 @@ datum/admins/proc/DB_ban_unban_by_id(var/id) output += "

        " output += " Match(min. 3 characters to search by key or ip, and 7 to search by cid)
        " output += "" - output += "Please note that all jobban bans or unbans are in-effect the following round.
        " output += "This search shows only last 100 bans." if(adminckey || playerckey || playerip || playercid || dbbantype) diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index c8ae67d4cab..3d7b11390eb 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -1,10 +1,10 @@ //Blocks an attempt to connect before even creating our client datum thing. world/IsBanned(key,address,computer_id) - if (!key || !address || !computer_id) + if(!key || !address || !computer_id) log_access("Failed Login (invalid data): [key] [address]-[computer_id]") return list("reason"="invalid login data", "desc"="Error: Could not check ban status, please try again. Error message: Your computer provided invalid or blank information to the server on connection (BYOND Username, IP, and Computer ID). Provided information for reference: Username: '[key]' IP: '[address]' Computer ID: '[computer_id]'. If you continue to get this error, please restart byond or contact byond support.") - if (text2num(computer_id) == 2147483647) //this cid causes stickybans to go haywire + if(text2num(computer_id) == 2147483647) //this cid causes stickybans to go haywire log_access("Failed Login (invalid cid): [key] [address]-[computer_id]") return list("reason"="invalid login data", "desc"="Error: Could not check ban status, Please try again. Error message: Your computer provided an invalid Computer ID.") var/admin = 0 @@ -34,7 +34,7 @@ world/IsBanned(key,address,computer_id) //Ban Checking . = CheckBan(ckey(key), computer_id, address) if(.) - if (admin) + if(admin) log_admin("The admin [key] has been allowed to bypass a matching ban on [.["key"]]") message_admins("The admin [key] has been allowed to bypass a matching ban on [.["key"]]") addclientmessage(ckey,"You have been allowed to bypass a matching ban on [.["key"]].") @@ -71,13 +71,13 @@ world/IsBanned(key,address,computer_id) var/duration = query.item[7] var/bantime = query.item[8] var/bantype = query.item[9] - if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN") + if(bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN") //admin bans MUST match on ckey to prevent cid-spoofing attacks // as well as dynamic ip abuse - if (pckey != ckey) + if(pckey != ckey) continue - if (admin) - if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN") + if(admin) + if(bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN") log_admin("The admin [key] is admin banned, and has been disallowed access") message_admins("The admin [key] is admin banned, and has been disallowed access") else @@ -102,11 +102,11 @@ world/IsBanned(key,address,computer_id) return . . = ..() //default pager ban stuff - if (.) + if(.) //byond will not trigger isbanned() for "global" host bans, //ie, ones where the "apply to this game only" checkbox is not checked (defaults to not checked) //So it's safe to let admins walk thru host/sticky bans here - if (admin) + if(admin) log_admin("The admin [key] has been allowed to bypass a matching host/sticky ban") message_admins("The admin [key] has been allowed to bypass a matching host/sticky ban") addclientmessage(ckey,"You have been allowed to bypass a matching host/sticky ban.") diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm index 64e6ad6dec4..172e826a0bb 100644 --- a/code/modules/admin/NewBan.dm +++ b/code/modules/admin/NewBan.dm @@ -15,8 +15,8 @@ var/savefile/Banlist Banlist.cd = "/base" if( "[ckey][id]" in Banlist.dir ) Banlist.cd = "[ckey][id]" - if (Banlist["temp"]) - if (!GetExp(Banlist["minutes"])) + if(Banlist["temp"]) + if(!GetExp(Banlist["minutes"])) ClearTempbans() return 0 else @@ -27,7 +27,7 @@ var/savefile/Banlist .["reason"] = "ckey/id" return . else - for (var/A in Banlist.dir) + for(var/A in Banlist.dir) Banlist.cd = "/base/[A]" var/matches if( ckey == Banlist["key"] ) @@ -43,7 +43,7 @@ var/savefile/Banlist if(matches) if(Banlist["temp"]) - if (!GetExp(Banlist["minutes"])) + if(!GetExp(Banlist["minutes"])) ClearTempbans() return 0 else @@ -66,13 +66,13 @@ var/savefile/Banlist Banlist = new("data/banlist.bdb") log_admin("Loading Banlist") - if (!length(Banlist.dir)) log_admin("Banlist is empty.") + if(!length(Banlist.dir)) log_admin("Banlist is empty.") - if (!Banlist.dir.Find("base")) + if(!Banlist.dir.Find("base")) log_admin("Banlist missing base dir.") Banlist.dir.Add("base") Banlist.cd = "/base" - else if (Banlist.dir.Find("base")) + else if(Banlist.dir.Find("base")) Banlist.cd = "/base" ClearTempbans() @@ -82,16 +82,16 @@ var/savefile/Banlist UpdateTime() Banlist.cd = "/base" - for (var/A in Banlist.dir) + for(var/A in Banlist.dir) Banlist.cd = "/base/[A]" - if (!Banlist["key"] || !Banlist["id"]) + if(!Banlist["key"] || !Banlist["id"]) RemoveBan(A) log_admin("Invalid Ban.") message_admins("Invalid Ban.") continue - if (!Banlist["temp"]) continue - if (CMinutes >= Banlist["minutes"]) RemoveBan(A) + if(!Banlist["temp"]) continue + if(CMinutes >= Banlist["minutes"]) RemoveBan(A) return 1 @@ -100,25 +100,25 @@ var/savefile/Banlist var/bantimestamp - if (temp) + if(temp) UpdateTime() bantimestamp = CMinutes + minutes Banlist.cd = "/base" - if ( Banlist.dir.Find("[ckey][computerid]") ) - to_chat(usr, text("\red Ban already exists.")) + if( Banlist.dir.Find("[ckey][computerid]") ) + to_chat(usr, "Ban already exists.") return 0 else Banlist.dir.Add("[ckey][computerid]") Banlist.cd = "/base/[ckey][computerid]" - to_chat(Banlist["key"], ckey) - to_chat(Banlist["id"], computerid) - to_chat(Banlist["ip"], address) - to_chat(Banlist["reason"], reason) - to_chat(Banlist["bannedby"], bannedby) - to_chat(Banlist["temp"], temp) - if (temp) - to_chat(Banlist["minutes"], bantimestamp) + Banlist["key"] << ckey + Banlist["id"] << computerid + Banlist["ip"] << address + Banlist["reason"] << reason + Banlist["bannedby"] << bannedby + Banlist["temp"] << temp + if(temp) + Banlist["minutes"] << bantimestamp if(!temp) add_note(ckey, "Permanently banned - [reason]", null, bannedby, 0) else @@ -134,7 +134,7 @@ var/savefile/Banlist Banlist["id"] >> id Banlist.cd = "/base" - if (!Banlist.dir.Remove(foldername)) return 0 + if(!Banlist.dir.Remove(foldername)) return 0 if(!usr) log_admin("Ban Expired: [key]") @@ -145,9 +145,9 @@ var/savefile/Banlist message_admins("[key_name_admin(usr)] unbanned: [key]") feedback_inc("ban_unban",1) usr.client.holder.DB_ban_unban( ckey(key), BANTYPE_ANY_FULLBAN) - for (var/A in Banlist.dir) + for(var/A in Banlist.dir) Banlist.cd = "/base/[A]" - if (key == Banlist["key"] /*|| id == Banlist["id"]*/) + if(key == Banlist["key"] /*|| id == Banlist["id"]*/) Banlist.cd = "/base" Banlist.dir.Remove(A) continue @@ -157,13 +157,13 @@ var/savefile/Banlist /proc/GetExp(minutes as num) UpdateTime() var/exp = minutes - CMinutes - if (exp <= 0) + if(exp <= 0) return 0 else var/timeleftstring - if (exp >= 1440) //1440 = 1 day in minutes + if(exp >= 1440) //1440 = 1 day in minutes timeleftstring = "[round(exp / 1440, 0.1)] Days" - else if (exp >= 60) //60 = 1 hour in minutes + else if(exp >= 60) //60 = 1 hour in minutes timeleftstring = "[round(exp / 60, 0.1)] Hours" else timeleftstring = "[exp] Minutes" @@ -174,7 +174,7 @@ var/savefile/Banlist var/dat //var/dat = "
        Unban Player: \blue(U) = Unban , (E) = Edit Ban\green (Total
        " Banlist.cd = "/base" - for (var/A in Banlist.dir) + for(var/A in Banlist.dir) count++ Banlist.cd = "/base/[A]" var/ref = "\ref[src]" @@ -211,23 +211,23 @@ var/savefile/Banlist Banlist.cd = "/base" Banlist.dir.Add("trash[i]trashid[i]") Banlist.cd = "/base/trash[i]trashid[i]" - to_chat(Banlist["key"], "trash[i]") + Banlist["key"] << "trash[i]" else Banlist.cd = "/base" Banlist.dir.Add("[last]trashid[i]") Banlist.cd = "/base/[last]trashid[i]" - to_chat(Banlist["key"], last) - to_chat(Banlist["id"], "trashid[i]") - to_chat(Banlist["reason"], "Trashban[i].") - to_chat(Banlist["temp"], a) - to_chat(Banlist["minutes"], CMinutes + rand(1,2000)) - to_chat(Banlist["bannedby"], "trashmin") + Banlist["key"] << last + Banlist["id"] << "trashid[i]" + Banlist["reason"] << "Trashban[i]." + Banlist["temp"] << a + Banlist["minutes"] << CMinutes + rand(1,2000) + Banlist["bannedby"] << "trashmin" last = "trash[i]" Banlist.cd = "/base" /proc/ClearAllBans() Banlist.cd = "/base" - for (var/A in Banlist.dir) + for(var/A in Banlist.dir) RemoveBan(A) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 7e5edf7c8bb..233cc931831 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -8,8 +8,9 @@ var/global/nologevent = 0 msg = "ADMIN LOG: [msg]" log_adminwarn(msg) for(var/client/C in admins) - if(R_SERVER & C.holder.rights) - to_chat(C, msg) + if(R_ADMIN & C.holder.rights) + if(C.prefs && !(C.prefs.toggles & CHAT_NO_ADMINLOGS)) + to_chat(C, msg) /proc/msg_admin_attack(var/text) //Toggleable Attack Messages log_attack(text) @@ -103,7 +104,7 @@ var/global/nologevent = 0 Subtle message "} - if (M.client) + if(M.client) if(!istype(M, /mob/new_player)) body += "

        " body += "Transformation:" @@ -191,7 +192,7 @@ var/global/nologevent = 0 Shade "} - if (M.client) + if(M.client) body += {"

        Other actions:
        @@ -243,7 +244,7 @@ var/global/nologevent = 0 if(!check_rights(R_EVENT)) return - if (!istype(src,/datum/admins)) + if(!istype(src,/datum/admins)) src = usr.client.holder var/dat @@ -576,7 +577,7 @@ var/global/nologevent = 0 return config.looc_allowed = !(config.looc_allowed) - if (config.looc_allowed) + if(config.looc_allowed) to_chat(world, "The LOOC channel has been globally enabled!") else to_chat(world, "The LOOC channel has been globally disabled!") @@ -592,7 +593,7 @@ var/global/nologevent = 0 return config.dsay_allowed = !(config.dsay_allowed) - if (config.dsay_allowed) + if(config.dsay_allowed) to_chat(world, "Deadchat has been globally enabled!") else to_chat(world, "Deadchat has been globally disabled!") @@ -643,7 +644,7 @@ var/global/nologevent = 0 return enter_allowed = !( enter_allowed ) - if (!( enter_allowed )) + if(!( enter_allowed )) to_chat(world, "New players may no longer enter the game.") else to_chat(world, "New players may now enter the game.") @@ -661,7 +662,7 @@ var/global/nologevent = 0 return config.allow_ai = !( config.allow_ai ) - if (!( config.allow_ai )) + if(!( config.allow_ai )) to_chat(world, "The AI job is no longer chooseable.") else to_chat(world, "The AI job is chooseable now.") @@ -679,7 +680,7 @@ var/global/nologevent = 0 return abandon_allowed = !( abandon_allowed ) - if (abandon_allowed) + if(abandon_allowed) to_chat(world, "You may now respawn.") else to_chat(world, "You may no longer respawn :(") @@ -709,13 +710,13 @@ var/global/nologevent = 0 if(!check_rights(R_SERVER)) return - if (!ticker || ticker.current_state != GAME_STATE_PREGAME) + if(!ticker || ticker.current_state != GAME_STATE_PREGAME) ticker.delay_end = !ticker.delay_end log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].") message_admins("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1) return //alert("Round end delayed", null, null, null, null, null) going = !( going ) - if (!( going )) + if(!( going )) to_chat(world, "The game start has been delayed.") log_admin("[key_name(usr)] delayed the game.") else @@ -728,34 +729,34 @@ var/global/nologevent = 0 /proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode if(!ticker || !ticker.mode) return 0 - if (!istype(M)) + if(!istype(M)) return 0 if((M.mind in ticker.mode.head_revolutionaries) || (M.mind in ticker.mode.revolutionaries)) - if (ticker.mode.config_tag == "revolution") + if(ticker.mode.config_tag == "revolution") return 2 return 1 if(M.mind in ticker.mode.cult) - if (ticker.mode.config_tag == "cult") + if(ticker.mode.config_tag == "cult") return 2 return 1 if(M.mind in ticker.mode.malf_ai) - if (ticker.mode.config_tag == "malfunction") + if(ticker.mode.config_tag == "malfunction") return 2 return 1 if(M.mind in ticker.mode.syndicates) - if (ticker.mode.config_tag == "nuclear") + if(ticker.mode.config_tag == "nuclear") return 2 return 1 if(M.mind in ticker.mode.wizards) - if (ticker.mode.config_tag == "wizard") + if(ticker.mode.config_tag == "wizard") return 2 return 1 if(M.mind in ticker.mode.changelings) - if (ticker.mode.config_tag == "changeling") + if(ticker.mode.config_tag == "changeling") return 2 return 1 if(M.mind in ticker.mode.abductors) - if (ticker.mode.config_tag == "abduction") + if(ticker.mode.config_tag == "abduction") return 2 return 1 if(isrobot(M)) @@ -829,7 +830,7 @@ var/global/nologevent = 0 return guests_allowed = !( guests_allowed ) - if (!( guests_allowed )) + if(!( guests_allowed )) to_chat(world, "Guests may no longer enter the game.") else to_chat(world, "Guests may now enter the game.") @@ -846,7 +847,7 @@ var/global/nologevent = 0 else if(isrobot(S)) var/mob/living/silicon/robot/R = S to_chat(usr, "CYBORG [key_name(S, usr)]'s [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independent)"] laws:") - else if (ispAI(S)) + else if(ispAI(S)) var/mob/living/silicon/pai/P = S to_chat(usr, "pAI [key_name(S, usr)]'s laws:") to_chat(usr, "[P.pai_law0]") @@ -856,7 +857,7 @@ var/global/nologevent = 0 else to_chat(usr, "SILICON [key_name(S, usr)]'s laws:") - if (S.laws == null) + if(S.laws == null) to_chat(usr, "[key_name(S, usr)]'s laws are null. Contact a coder.") else S.laws.show_laws(usr) @@ -888,7 +889,7 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space /proc/move_gamma_ship() var/area/fromArea var/area/toArea - if (gamma_ship_location == 1) + if(gamma_ship_location == 1) fromArea = locate(/area/shuttle/gamma/space) toArea = locate(/area/shuttle/gamma/station) else @@ -905,7 +906,7 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space for(var/obj/machinery/alarm/A in toArea) A.first_run() - if (gamma_ship_location) + if(gamma_ship_location) gamma_ship_location = 0 else gamma_ship_location = 1 @@ -955,18 +956,18 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space return //extra sanity check to make sure only observers are shoved into things //same as assume-direct-control perm requirements. - if (!check_rights(R_VAREDIT,0)) //no varedit, check if they have r_admin and r_debug + if(!check_rights(R_VAREDIT,0)) //no varedit, check if they have r_admin and r_debug if(!check_rights(R_ADMIN|R_DEBUG,0)) //if they don't have r_admin and r_debug, return return 0 //otherwise, if they have no varedit, but do have r_admin and r_debug, execute the rest of the code - if (!frommob.ckey) + if(!frommob.ckey) return 0 if(istype(tothing, /obj/item)) var/mob/living/toitem = tothing var/ask = alert("Are you sure you want to allow [frommob.name]([frommob.key]) to possess [toitem.name]?", "Place ghost in control of item?", "Yes", "No") - if (ask != "Yes") + if(ask != "Yes") return 1 if(!frommob || !toitem) //make sure the mobs don't go away while we waited for a response @@ -986,12 +987,12 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space var/mob/living/tomob = tothing var/question = "" - if (tomob.ckey) + if(tomob.ckey) question = "This mob already has a user ([tomob.key]) in control of it! " question += "Are you sure you want to place [frommob.name]([frommob.key]) in control of [tomob.name]?" var/ask = alert(question, "Place ghost in control of mob?", "Yes", "No") - if (ask != "Yes") + if(ask != "Yes") return 1 if(!frommob || !tomob) //make sure the mobs don't go away while we waited for a response diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index 7f709f431ba..3eb12b11e68 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -23,20 +23,20 @@ if(!message) return var/F = investigate_subject2file(subject) if(!F) return - to_chat(F, "[time_stamp()] \ref[src] ([x],[y],[z]) || [src] [message]
        ") + investigate_log_subjects |= subject + F << "[time_stamp()] \ref[src] ([x],[y],[z]) || [src] [message]
        " //ADMINVERBS -/client/proc/investigate_show( subject in list("hrefs","notes","pda","singulo","atmos","watchlist","ntsl","gold core","cult", "experimentor", "wires") ) +/client/proc/investigate_show( subject in investigate_log_subjects ) set name = "Investigate" set category = "Admin" if(!holder) return switch(subject) - if("singulo") //general one-round-only stuff - var/F = investigate_subject2file(subject) - if(!F) - to_chat(src, "Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.") - return - src << browse(F,"window=investigate[subject];size=800x300") + if("notes") + show_note() + + if("watchlist") + watchlist_show() if("hrefs") //persistant logs and stuff if(config && config.log_hrefs) @@ -49,50 +49,9 @@ to_chat(src, "Error: admin_investigate: Href Logging is not on.") return - if("pda") //general one-round-only stuff + else //general one-round-only stuff var/F = investigate_subject2file(subject) if(!F) to_chat(src, "Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.") return src << browse(F,"window=investigate[subject];size=800x300") - - if("cult") - var/F = investigate_subject2file(subject) - if(!F) - to_chat(src, "Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.") - return - src << browse(F,"window=investigate[subject];size=800x300") - - if("atmos") - var/F = investigate_subject2file(subject) - if(!F) - to_chat(src, "Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.") - return - src << browse(F,"window=investigate[subject];size=800x300") - - if("ntsl") - var/F = investigate_subject2file(subject) - if(!F) - to_chat(src, "Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.") - return - src << browse(F,"window=investigate[subject];size=800x300") - - if("experimentor") - var/F = investigate_subject2file(subject) - if(!F) - to_chat(src, "Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.") - return - src << browse(F,"window=investigate[subject];size=800x300") - - if("wires") - var/F = investigate_subject2file(subject) - if(!F) - to_chat(src, "Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.") - return - src << browse(F,"window=investigate[subject];size=800x300") - - if("watchlist") - watchlist_show() - - if("notes") - show_note() \ No newline at end of file diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 92eafe2c245..f96a4833ef6 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -56,6 +56,7 @@ var/list/admin_verbs_admin = list( /datum/admins/proc/show_player_notes, /client/proc/free_slot, /*frees slot for chosen job*/ /client/proc/toggleattacklogs, + /client/proc/toggleadminlogs, /client/proc/toggledebuglogs, /client/proc/update_mob_sprite, /client/proc/toggledrones, @@ -72,7 +73,8 @@ var/list/admin_verbs_admin = list( /client/proc/change_human_appearance_admin, /* Allows an admin to change the basic appearance of human-based mobs */ /client/proc/change_human_appearance_self, /* Allows the human-based mob itself change its basic appearance */ /client/proc/debug_variables, - /client/proc/show_snpc_verbs + /client/proc/show_snpc_verbs, + /client/proc/reset_all_tcs /*resets all telecomms scripts*/ ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, @@ -614,7 +616,7 @@ var/list/admin_verbs_snpc = list( var/message = input("What do you want the message to be?", "Make Sound") as text|null if(!message) return - for (var/mob/V in hearers(O)) + for(var/mob/V in hearers(O)) V.show_message(message, 2) log_admin("[key_name(usr)] made [O] at [O.x], [O.y], [O.z] make a sound") message_admins("\blue [key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z] make a sound") @@ -642,7 +644,7 @@ var/list/admin_verbs_snpc = list( if(mob.control_object) if(!msg) return - for (var/mob/V in hearers(mob.control_object)) + for(var/mob/V in hearers(mob.control_object)) V.show_message("[mob.control_object.name] says: \"" + msg + "\"", 2) log_admin("[key_name(usr)] used oSay on [mob.control_object]: [msg]") message_admins("[key_name_admin(usr)] used oSay on [mob.control_object]: [msg]") @@ -856,14 +858,14 @@ var/list/admin_verbs_snpc = list( return var/list/jobs = list() - for (var/datum/job/J in job_master.occupations) - if (J.current_positions >= J.total_positions && J.total_positions != -1) + for(var/datum/job/J in job_master.occupations) + if(J.current_positions >= J.total_positions && J.total_positions != -1) jobs += J.title - if (!jobs.len) + if(!jobs.len) to_chat(usr, "There are no fully staffed jobs.") return var/job = input("Please select job slot to free", "Free Job Slot") as null|anything in jobs - if (job) + if(job) job_master.FreeRole(job) log_admin("[key_name(usr)] has freed a job slot for [job].") message_admins("[key_name_admin(usr)] has freed a job slot for [job].") @@ -877,11 +879,25 @@ var/list/admin_verbs_snpc = list( prefs.toggles ^= CHAT_ATTACKLOGS prefs.save_preferences(src) - if (prefs.toggles & CHAT_ATTACKLOGS) + if(prefs.toggles & CHAT_ATTACKLOGS) to_chat(usr, "You now will get attack log messages") else to_chat(usr, "You now won't get attack log messages") +/client/proc/toggleadminlogs() + set name = "Toggle Admin Log Messages" + set category = "Preferences" + + if(!check_rights(R_ADMIN)) + return + + prefs.toggles ^= CHAT_NO_ADMINLOGS + prefs.save_preferences(src) + if(prefs.toggles & CHAT_NO_ADMINLOGS) + to_chat(usr, "You now won't get admin log messages.") + else + to_chat(usr, "You now will get admin log messages.") + /client/proc/toggledrones() set name = "Toggle Maintenance Drones" set category = "Server" @@ -902,7 +918,7 @@ var/list/admin_verbs_snpc = list( prefs.toggles ^= CHAT_DEBUGLOGS prefs.save_preferences(src) - if (prefs.toggles & CHAT_DEBUGLOGS) + if(prefs.toggles & CHAT_DEBUGLOGS) to_chat(usr, "You now will get debug log messages") else to_chat(usr, "You now won't get debug log messages") @@ -932,7 +948,7 @@ var/list/admin_verbs_snpc = list( var/confirm = alert("Are you sure you want to send the global message?", "Confirm Man Up Global", "Yes", "No") if(confirm == "Yes") - for (var/mob/T as mob in mob_list) + for(var/mob/T as mob in mob_list) to_chat(T, "
        Man up.
        Deal with it.

        Move on.

        ") T << 'sound/voice/ManUp1.ogg' diff --git a/code/modules/admin/banappearance.dm b/code/modules/admin/banappearance.dm index 7244e1152af..b039f6bd634 100644 --- a/code/modules/admin/banappearance.dm +++ b/code/modules/admin/banappearance.dm @@ -4,12 +4,12 @@ var/appearanceban_runonce //Updates legacy bans with new info var/appearance_keylist[0] //to store the keys /proc/appearance_fullban(mob/M, reason) - if (!M || !M.key) return + if(!M || !M.key) return appearance_keylist.Add(text("[M.ckey] ## [reason]")) appearance_savebanfile() /proc/appearance_client_fullban(ckey) - if (!ckey) return + if(!ckey) return appearance_keylist.Add(text("[ckey]")) appearance_savebanfile() @@ -47,7 +47,7 @@ DEBUG log_admin("Loading appearance_rank") S["runonce"] >> appearanceban_runonce - if (!length(appearance_keylist)) + if(!length(appearance_keylist)) appearance_keylist=list() log_admin("appearance_keylist was empty") else @@ -86,7 +86,7 @@ DEBUG /proc/appearance_remove(X) - for (var/i = 1; i <= length(appearance_keylist); i++) + for(var/i = 1; i <= length(appearance_keylist); i++) if( findtext(appearance_keylist[i], "[X]") ) appearance_keylist.Remove(appearance_keylist[i]) appearance_savebanfile() diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index 34365264674..1f385093683 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -1,38 +1,48 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 var/jobban_runonce // Updates legacy bans with new info -var/jobban_keylist[0] //to store the keys & ranks +var/jobban_keylist[0] // Linear list of jobban strings, kept around for the legacy system +var/jobban_assoclist[0] // Associative list, for efficiency + +// Matches string-based jobbans into ckey, rank, and reason groups +var/regex/jobban_regex = regex("(\[\\S]+) - (\[^#]+\[^# ])(?: ## (.+))?") + +/proc/jobban_assoc_insert(ckey, rank, reason) + if(!ckey || !rank) + return + if(!jobban_assoclist[ckey]) + jobban_assoclist[ckey] = list() + jobban_assoclist[ckey][rank] = reason || "Reason Unspecified" /proc/jobban_fullban(mob/M, rank, reason) - if (!M || !M.key) return + if(!M || !M.key) + return jobban_keylist.Add(text("[M.ckey] - [rank] ## [reason]")) - jobban_savebanfile() + jobban_assoc_insert(M.ckey, rank, reason) + if(config.ban_legacy_system) + jobban_savebanfile() /proc/jobban_client_fullban(ckey, rank) - if (!ckey || !rank) return + if(!ckey || !rank) + return jobban_keylist.Add(text("[ckey] - [rank]")) - jobban_savebanfile() + jobban_assoc_insert(ckey, rank) + if(config.ban_legacy_system) + jobban_savebanfile() //returns a reason if M is banned from rank, returns 0 otherwise /proc/jobban_isbanned(mob/M, rank) - if(M && rank) + if(!M || !rank) + return 0 - //if(_jobban_isbanned(M, rank)) return "Reason Unspecified" //for old jobban - if (guest_jobbans(rank)) - if(config.guest_jobban && IsGuestKey(M.key)) - return "Guest Job-ban" -// if(config.usewhitelist && !check_whitelist(M)) -// return "Karma Job" + if(config.guest_jobban && guest_jobbans(rank)) + if(IsGuestKey(M.key)) + return "Guest Job-ban" - for (var/s in jobban_keylist) - if( findtext(s,"[M.ckey] - [rank]") == 1 ) - var/startpos = findtext(s, "## ")+3 - if(startpos && startpos> jobban_runonce - if (!length(jobban_keylist)) + if(!length(jobban_keylist)) jobban_keylist=list() log_admin("jobban_keylist was empty") + + for(var/s in jobban_keylist) + if(jobban_regex.Find(s)) + jobban_assoc_insert(jobban_regex.group[1], jobban_regex.group[2], jobban_regex.group[3]) + else + log_debug("Skipping malformed job ban: [s]") else if(!establish_db_connection()) log_to_dd("Database connection failed. Reverting to the legacy ban system.") @@ -71,42 +87,56 @@ DEBUG return //Job permabans - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, job FROM [format_table_name("ban")] WHERE bantype = 'JOB_PERMABAN' AND isnull(unbanned)") - query.Execute() + var/DBQuery/permabans = dbcon.NewQuery("SELECT ckey, job FROM [format_table_name("ban")] WHERE bantype = 'JOB_PERMABAN' AND isnull(unbanned)") + permabans.Execute() + // Job tempbans + var/DBQuery/tempbans = dbcon.NewQuery("SELECT ckey, job FROM [format_table_name("ban")] WHERE bantype = 'JOB_TEMPBAN' AND isnull(unbanned) AND expiration_time > Now()") + tempbans.Execute() - while(query.NextRow()) - var/ckey = query.item[1] - var/job = query.item[2] - - jobban_keylist.Add("[ckey] - [job]") - - //Job tempbans - var/DBQuery/query1 = dbcon.NewQuery("SELECT ckey, job FROM [format_table_name("ban")] WHERE bantype = 'JOB_TEMPBAN' AND isnull(unbanned) AND expiration_time > Now()") - query1.Execute() - - while(query1.NextRow()) - var/ckey = query1.item[1] - var/job = query1.item[2] + while(TRUE) + var/ckey + var/job + if(permabans.NextRow()) + ckey = permabans.item[1] + job = permabans.item[2] + else if(tempbans.NextRow()) + ckey = tempbans.item[1] + job = tempbans.item[2] + else + break jobban_keylist.Add("[ckey] - [job]") + jobban_assoc_insert(ckey, job) /proc/jobban_savebanfile() var/savefile/S=new("data/job_full.ban") - to_chat(S["keys[0]"], jobban_keylist) + S["keys[0]"] << jobban_keylist /proc/jobban_unban(mob/M, rank) jobban_remove("[M.ckey] - [rank]") - jobban_savebanfile() +/proc/jobban_unban_client(ckey, rank) + jobban_remove("[ckey] - [rank]") /proc/ban_unban_log_save(var/formatted_log) text2file(formatted_log,"data/ban_unban_log.txt") /proc/jobban_remove(X) - for (var/i = 1; i <= length(jobban_keylist); i++) + for(var/i = 1; i <= length(jobban_keylist); i++) if( findtext(jobban_keylist[i], "[X]") ) + // This need to be here, instead of jobban_unban, due to direct calls to jobban_remove + if(jobban_regex.Find(X)) + var/ckey = jobban_regex.group[1] + var/rank = jobban_regex.group[2] + if(jobban_assoclist[ckey] && jobban_assoclist[ckey][rank]) + jobban_assoclist[ckey] -= rank + else + log_debug("Attempted to remove non-existent job ban: [X]") + else + log_debug("Failed to remove malformed job ban from associative list: [X]") jobban_keylist.Remove(jobban_keylist[i]) - jobban_savebanfile() + if(config.ban_legacy_system) + jobban_savebanfile() return 1 return 0 diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index 455bea43014..34fcd5738c2 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -92,7 +92,7 @@ qdel(I) /obj/effect/buildmode_line - var/image/I + var/image/I var/client/cl /obj/effect/buildmode_line/New(var/client/c, var/atom/atom_a, var/atom/atom_b, var/linename) @@ -101,13 +101,13 @@ I = image('icons/misc/mark.dmi', src, "line", 19.0) var/x_offset = ((atom_b.x * 32) + atom_b.pixel_x) - ((atom_a.x * 32) + atom_a.pixel_x) var/y_offset = ((atom_b.y * 32) + atom_b.pixel_y) - ((atom_a.y * 32) + atom_a.pixel_y) - + var/matrix/M = matrix() M.Translate(0, 16) M.Scale(1, sqrt((x_offset * x_offset) + (y_offset * y_offset)) / 32) M.Turn(90 - Atan2(x_offset, y_offset)) // So... You pass coords in order x,y to this version of atan2. It should be called acsc2. M.Translate(atom_a.pixel_x, atom_a.pixel_y) - + transform = M cl = c cl.images += I @@ -242,6 +242,7 @@ if(FILL_BUILDMODE) to_chat(user, "***********************************************************") to_chat(user, "Left Mouse Button on turf/obj/mob = Select corner") + to_chat(user, "Left Mouse Button + Alt on turf/obj/mob = Delete region") to_chat(user, "Right Mouse Button on buildmode button = Select object type") to_chat(user, "***********************************************************") if(LINK_BUILDMODE) @@ -509,16 +510,20 @@ cornerB = select_tile(get_turf(object)) if(left_click) //rectangular if(cornerA && cornerB) - if(!objholder) - to_chat(user, "Select object type first.") + if(alt_click) + empty_region(block(get_turf(cornerA),get_turf(cornerB))) + deselect_region() else - for(var/turf/T in block(get_turf(cornerA),get_turf(cornerB))) - if(ispath(objholder,/turf)) - T.ChangeTurf(objholder) - else - var/obj/A = new objholder(T) - A.dir = build_dir - deselect_region() + if(!objholder) + to_chat(user, "Select object type first.") + else + for(var/turf/T in block(get_turf(cornerA),get_turf(cornerB))) + if(ispath(objholder,/turf)) + T.ChangeTurf(objholder) + else + var/obj/A = new objholder(T) + A.dir = build_dir + deselect_region() return //Something wrong - Reset @@ -567,13 +572,13 @@ if(P.id_tag && P.id_tag != 1 && alert(holder, "Warning: This will unlink something else from the door. Continue?", "Buildmode", "Yes", "No") == "No") goto(line_jump) P.id_tag = M.id - + line_jump // For the goto valid_links = 0 for(var/obj/effect/buildmode_line/L in link_lines) qdel(L) link_lines -= L - + if(istype(link_obj, /obj/machinery/door_control)) var/obj/machinery/door_control/M = link_obj for(var/obj/machinery/door/airlock/P in range(M.range,M)) diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 4a892d893da..af3853c1d05 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -1,6 +1,6 @@ /var/create_mob_html = null /datum/admins/proc/create_mob(var/mob/user) - if (!create_mob_html) + if(!create_mob_html) var/mobjs = null mobjs = jointext(typesof(/mob), ";") create_mob_html = file2text('html/create_object.html') diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm index c5cb9f42152..bec74191121 100644 --- a/code/modules/admin/create_object.dm +++ b/code/modules/admin/create_object.dm @@ -2,7 +2,7 @@ var/create_object_html = null var/list/create_object_forms = list(/obj, /obj/structure, /obj/machinery, /obj/effect, /obj/item, /obj/mecha, /obj/item/weapon, /obj/item/clothing, /obj/item/stack, /obj/item/device, /obj/item/weapon/reagent_containers, /obj/item/weapon/gun) /datum/admins/proc/create_object(var/mob/user) - if (!create_object_html) + if(!create_object_html) var/objectjs = null objectjs = jointext(typesof(/obj), ";") create_object_html = file2text('html/create_object.html') @@ -14,7 +14,7 @@ var/list/create_object_forms = list(/obj, /obj/structure, /obj/machinery, /obj/e var/path = input("Select the path of the object you wish to create.", "Path", /obj) in create_object_forms var/html_form = create_object_forms[path] - if (!html_form) + if(!html_form) var/objectjs = jointext(typesof(path), ";") html_form = file2text('html/create_object.html') html_form = replacetext(html_form, "null /* object types */", "\"[objectjs]\"") diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm index fdaa103b5d5..5edffa65cbf 100644 --- a/code/modules/admin/create_turf.dm +++ b/code/modules/admin/create_turf.dm @@ -1,6 +1,6 @@ /var/create_turf_html = null /datum/admins/proc/create_turf(var/mob/user) - if (!create_turf_html) + if(!create_turf_html) var/turfjs = null turfjs = jointext(typesof(/turf), ";") create_turf_html = file2text('html/create_object.html') diff --git a/code/modules/admin/newbanjob.dm b/code/modules/admin/newbanjob.dm deleted file mode 100644 index 71d61567962..00000000000 --- a/code/modules/admin/newbanjob.dm +++ /dev/null @@ -1,274 +0,0 @@ -var/savefile/Banlistjob - - -/proc/_jobban_isbanned(var/client/clientvar, var/rank) - if(!clientvar) return 1 - ClearTempbansjob() - var/id = clientvar.computer_id - var/key = clientvar.ckey - if (guest_jobbans(rank)) - if(config.guest_jobban && IsGuestKey(key)) - return 1 - Banlistjob.cd = "/base" - if (Banlistjob.dir.Find("[key][id][rank]")) - return 1 - - Banlistjob.cd = "/base" - for (var/A in Banlistjob.dir) - Banlistjob.cd = "/base/[A]" - if ((id == Banlistjob["id"] || key == Banlistjob["key"]) && rank == Banlistjob["rank"]) - return 1 - return 0 - -/proc/LoadBansjob() - - Banlistjob = new("data/job_fullnew.bdb") - log_admin("Loading Banlistjob") - - if (!length(Banlistjob.dir)) log_admin("Banlistjob is empty.") - - if (!Banlistjob.dir.Find("base")) - log_admin("Banlistjob missing base dir.") - Banlistjob.dir.Add("base") - Banlistjob.cd = "/base" - else if (Banlistjob.dir.Find("base")) - Banlistjob.cd = "/base" - - ClearTempbansjob() - return 1 - -/proc/ClearTempbansjob() - UpdateTime() - - Banlistjob.cd = "/base" - for (var/A in Banlistjob.dir) - Banlistjob.cd = "/base/[A]" - //if (!Banlistjob["key"] || !Banlistjob["id"]) - // RemoveBanjob(A, "full") - // log_admin("Invalid Ban.") - // message_admins("Invalid Ban.") - // continue - - if (!Banlistjob["temp"]) continue - if (CMinutes >= Banlistjob["minutes"]) RemoveBanjob(A) - - return 1 - - -/proc/AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, rank) - UpdateTime() - var/bantimestamp - if (temp) - UpdateTime() - bantimestamp = CMinutes + minutes - if(rank == "Heads") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Personnel") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Captain") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Security") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") - return 1 - if(rank == "Security") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Security") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Warden") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Detective") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Security Officer") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Cyborg") - return 1 - if(rank == "Engineering") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Station Engineer") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Life Support Specialist") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Cyborg") - return 1 - if(rank == "Research") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Scientist") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Geneticist") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director") - return 1 - if(rank == "Medical") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Geneticist") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Medical Doctor") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chemist") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Cyborg") - return 1 - if(rank == "CE_Station_Engineer") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Station Engineer") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer") - return 1 - if(rank == "CE_Atmospheric_Tech") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Life Support Specialist") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer") - return 1 - if(rank == "CE_Shaft_Miner") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Shaft Miner") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer") - return 1 - if(rank == "Chemist_RD_CMO") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chemist") - return 1 - if(rank == "Geneticist_RD_CMO") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Geneticist") - return 1 - if(rank == "MD_CMO") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Medical Doctor") - return 1 - if(rank == "Scientist_RD") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Scientist") - return 1 - if(rank == "AI_Cyborg") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Cyborg") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "AI") - return 1 - if(rank == "Detective_HoS") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Detective") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Security") - return 1 - if(rank == "Virologist_RD_CMO") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Virologist") - return 1 - - Banlistjob.cd = "/base" - if ( Banlistjob.dir.Find("[ckey][computerid][rank]") ) - to_chat(usr, text("\red Banjob already exists.")) - return 0 - else - Banlistjob.dir.Add("[ckey][computerid][rank]") - Banlistjob.cd = "/base/[ckey][computerid][rank]" - to_chat(Banlistjob["key"], ckey) - to_chat(Banlistjob["id"], computerid) - to_chat(Banlistjob["rank"], rank) - to_chat(Banlistjob["reason"], reason) - to_chat(Banlistjob["bannedby"], bannedby) - to_chat(Banlistjob["temp"], temp) - if (temp) - to_chat(Banlistjob["minutes"], bantimestamp) - - return 1 - -/proc/RemoveBanjob(foldername) - var/key - var/id - var/rank - Banlistjob.cd = "/base/[foldername]" - Banlistjob["key"] >> key - Banlistjob["id"] >> id - Banlistjob["rank"] >> rank - Banlistjob.cd = "/base" - - if (!Banlistjob.dir.Remove(foldername)) return 0 - - if(!usr) - log_admin("Banjob Expired: [key]") - message_admins("Banjob Expired: [key]") - else - log_admin("[key_name_admin(usr)] unjobbanned [key] from [rank]") - message_admins("[key_name_admin(usr)] unjobbanned:[key] from [rank]") - ban_unban_log_save("[key_name_admin(usr)] unjobbanned [key] from [rank]") - feedback_inc("ban_job_unban",1) - feedback_add_details("ban_job_unban","- [rank]") - - for (var/A in Banlistjob.dir) - Banlistjob.cd = "/base/[A]" - if ((key == Banlistjob["key"] || id == Banlistjob["id"]) && (rank == Banlistjob["rank"])) - Banlistjob.cd = "/base" - Banlistjob.dir.Remove(A) - continue - - return 1 - -/proc/GetBanExpjob(minutes as num) - UpdateTime() - var/exp = minutes - CMinutes - if (exp <= 0) - return 0 - else - var/timeleftstring - if (exp >= 1440) //1440 = 1 day in minutes - timeleftstring = "[round(exp / 1440, 0.1)] Days" - else if (exp >= 60) //60 = 1 hour in minutes - timeleftstring = "[round(exp / 60, 0.1)] Hours" - else - timeleftstring = "[exp] Minutes" - return timeleftstring - -/datum/admins/proc/unjobbanpanel() - var/count = 0 - var/dat - //var/dat = "
        Unban Player: \blue(U) = Unban , (E) = Edit Ban\green (Total
        " - Banlistjob.cd = "/base" - for (var/A in Banlistjob.dir) - count++ - Banlistjob.cd = "/base/[A]" - dat += text("") - - dat += "
        (U) Key: [Banlistjob["key"]] Rank: [Banlistjob["rank"]] ([Banlistjob["temp"] ? "[GetBanExpjob(Banlistjob["minutes"]) ? GetBanExpjob(Banlistjob["minutes"]) : "Removal pending" ]" : "Permaban"])(By: [Banlistjob["bannedby"]])(Reason: [Banlistjob["reason"]])
        " - dat = "
        Bans: (U) = Unban , - ([count] Bans)
        [dat]" - usr << browse(dat, "window=unbanp;size=875x400") - -/*/datum/admins/proc/permjobban(ckey, computerid, reason, bannedby, temp, minutes, rank) - if(AddBanjob(ckey, computerid, reason, usr.ckey, 0, 0, job)) - to_chat(M, "\redYou have been banned from [job] by [usr.client.ckey].\nReason: [reason].") - to_chat(M, "\red This is a permanent ban.") - if(config.banappeals) - to_chat(M, "\red To try to resolve this matter head to [config.banappeals]") - else - to_chat(M, "\red No ban appeals URL has been set.") - log_admin("[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis is a permanent ban.") - message_admins("\blue[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis is a permanent ban.") -/datum/admins/proc/timejobban(ckey, computerid, reason, bannedby, temp, minutes, rank) - if(AddBanjob(ckey, computerid, reason, usr.ckey, 1, mins, job)) - to_chat(M, "\redYou have been jobbanned from [job] by [usr.client.ckey].\nReason: [reason].") - to_chat(M, "\red This is a temporary ban, it will be removed in [mins] minutes.") - if(config.banappeals) - to_chat(M, "\red To try to resolve this matter head to [config.banappeals]") - else - to_chat(M, "\red No ban appeals URL has been set.") - log_admin("[usr.client.ckey] has jobbanned from [job] [ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.") - message_admins("\blue[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")*/ -//////////////////////////////////// DEBUG //////////////////////////////////// - -/proc/CreateBansjob() - - UpdateTime() - - var/i - var/last - - for(i=0, i<1001, i++) - var/a = pick(1,0) - var/b = pick(1,0) - if(b) - Banlistjob.cd = "/base" - Banlistjob.dir.Add("trash[i]trashid[i]") - Banlistjob.cd = "/base/trash[i]trashid[i]" - to_chat(Banlistjob["key"], "trash[i]") - else - Banlistjob.cd = "/base" - Banlistjob.dir.Add("[last]trashid[i]") - Banlistjob.cd = "/base/[last]trashid[i]" - to_chat(Banlistjob["key"], last) - to_chat(Banlistjob["id"], "trashid[i]") - to_chat(Banlistjob["reason"], "Trashban[i].") - to_chat(Banlistjob["temp"], a) - to_chat(Banlistjob["minutes"], CMinutes + rand(1,2000)) - to_chat(Banlistjob["bannedby"], "trashmin") - last = "trash[i]" - - Banlistjob.cd = "/base" - -/proc/ClearAllBansjob() - Banlistjob.cd = "/base" - for (var/A in Banlistjob.dir) - RemoveBanjob(A, "full") diff --git a/code/modules/admin/permissionverbs/permissionedit.dm b/code/modules/admin/permissionverbs/permissionedit.dm index d91f04aa4df..b840cad783d 100644 --- a/code/modules/admin/permissionverbs/permissionedit.dm +++ b/code/modules/admin/permissionverbs/permissionedit.dm @@ -156,7 +156,7 @@ /datum/admins/proc/updateranktodb(ckey,newrank) establish_db_connection() - if (!dbcon.IsConnected()) + if(!dbcon.IsConnected()) return var/sql_ckey = sanitizeSQL(ckey) var/sql_admin_rank = sanitizeSQL(newrank) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 3ad363e2f68..42be00bea23 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -1,6 +1,6 @@ /datum/admins/proc/player_panel_new()//The new one - if (!usr.client.holder) + if(!usr.client.holder) return var/dat = "Admin Player Panel" @@ -29,7 +29,7 @@ var maintable_data = document.getElementById('maintable_data'); var ltr = maintable_data.getElementsByTagName("tr"); - for ( var i = 0; i < ltr.length; ++i ) + for( var i = 0; i < ltr.length; ++i ) { try{ var tr = ltr\[i\]; @@ -42,7 +42,7 @@ var search = lsearch\[0\]; //var inner_span = li.getElementsByTagName("span")\[1\] //Should only ever contain one element. //document.write("

        "+search.innerText+"
        "+filter+"
        "+search.innerText.indexOf(filter)) - if ( search.innerText.toLowerCase().indexOf(filter) == -1 ) + if( search.innerText.toLowerCase().indexOf(filter) == -1 ) { //document.write("a"); //ltr.removeChild(tr); @@ -329,7 +329,7 @@ //The old one /datum/admins/proc/player_panel_old() - if (!usr.client.holder) + if(!usr.client.holder) return var/dat = "Player Menu" dat += "

        " @@ -399,10 +399,10 @@ /datum/admins/proc/check_antagonists() if(!check_rights(R_ADMIN)) return - if (ticker && ticker.current_state >= GAME_STATE_PLAYING) + if(ticker && ticker.current_state >= GAME_STATE_PLAYING) var/dat = "Round Status

        Round Status

        " dat += "Current Game Mode: [ticker.mode.name]
        " - dat += "Round Duration: [round(world.time / 36000)]:[add_zero(num2text(world.time / 600 % 60), 2)]:[add_zero(num2text(world.time / 10 % 60), 2)]
        " + dat += "Round Duration: [round(ROUND_TIME / 36000)]:[add_zero(num2text(ROUND_TIME / 600 % 60), 2)]:[add_zero(num2text(ROUND_TIME / 10 % 60), 2)]
        " dat += "Emergency shuttle
        " if(shuttle_master.emergency.mode < SHUTTLE_CALL) dat += "Call Shuttle
        " @@ -540,12 +540,12 @@ return txt /datum/admins/proc/check_role_table_row(mob/M, show_objectives) - if (!istype(M)) + if(!istype(M)) return "" var/txt = check_antagonists_line(M, close = 0) - if (show_objectives) + if(show_objectives) txt += {" "} diff --git a/code/modules/computer3/buildandrepair.dm b/code/modules/computer3/buildandrepair.dm index 4ea984d15d1..2165205e354 100644 --- a/code/modules/computer3/buildandrepair.dm +++ b/code/modules/computer3/buildandrepair.dm @@ -2,7 +2,7 @@ /obj/item/part/computer/circuitboard density = 0 anchored = 0 - w_class = 2.0 + w_class = 2 name = "Circuit board" icon = 'icons/obj/module.dmi' icon_state = "id_mod" diff --git a/code/modules/computer3/component.dm b/code/modules/computer3/component.dm index 6dac7aebb31..0070c057fcd 100644 --- a/code/modules/computer3/component.dm +++ b/code/modules/computer3/component.dm @@ -14,7 +14,7 @@ gender = PLURAL icon = 'icons/obj/stock_parts.dmi' icon_state = "hdd1" - w_class = 2.0 + w_class = 2 var/emagged = 0 crit_fail = 0 @@ -116,9 +116,9 @@ if(3) if(equip_to_reader(card, L)) to_chat(usr, "You insert the card into reader slot") - else if (equip_to_writer(card, L) && dualslot) + else if(equip_to_writer(card, L) && dualslot) to_chat(usr, "You insert the card into writer slot") - else if (dualslot) + else if(dualslot) to_chat(usr, "There is already something in both slots.") else to_chat(usr, "There is already something in the reader slot.") @@ -146,18 +146,18 @@ var/mob/living/L = usr switch(slot) if(1) - if (remove_reader(L)) + if(remove_reader(L)) to_chat(L, "You remove the card from reader slot") else to_chat(L, "There is no card in the reader slot") if(2) - if (remove_writer(L)) + if(remove_writer(L)) to_chat(L, "You remove the card from writer slot") else to_chat(L, "There is no card in the writer slot") if(3) - if (remove_reader(L)) - if (remove_writer(L)) + if(remove_reader(L)) + if(remove_writer(L)) to_chat(L, "You remove cards from both slots") else to_chat(L, "You remove the card from reader slot") @@ -167,10 +167,10 @@ else to_chat(L, "There are no cards in both slots") if(4) - if (!remove_reader(L)) - if (remove_writer(L)) + if(!remove_reader(L)) + if(remove_writer(L)) to_chat(L, "You remove the card from writer slot") - else if (!dualslot) + else if(!dualslot) to_chat(L, "There is no card in the reader slot") else to_chat(L, "There are no cards in both slots") diff --git a/code/modules/computer3/computer.dm b/code/modules/computer3/computer.dm index 75252b33107..eca1207c692 100644 --- a/code/modules/computer3/computer.dm +++ b/code/modules/computer3/computer.dm @@ -212,15 +212,15 @@ qdel(src) return if(2.0) - if (prob(25)) + if(prob(25)) qdel(src) return - if (prob(50)) + if(prob(50)) for(var/x in verbs) verbs -= x set_broken() if(3.0) - if (prob(25)) + if(prob(25)) for(var/x in verbs) verbs -= x set_broken() @@ -229,7 +229,7 @@ blob_act() - if (prob(75)) + if(prob(75)) set_broken() density = 0 @@ -443,7 +443,7 @@ //Returns percentage of battery charge remaining. Returns -1 if no battery is installed. proc/check_battery_status() - if (battery) + if(battery) var/obj/item/weapon/stock_parts/cell/B = battery return round(B.charge / (B.maxcharge / 100)) else diff --git a/code/modules/computer3/computers/aifixer.dm b/code/modules/computer3/computers/aifixer.dm index a52e40a0d54..7e1f3959e9f 100644 --- a/code/modules/computer3/computers/aifixer.dm +++ b/code/modules/computer3/computers/aifixer.dm @@ -19,7 +19,7 @@ if(!computer.cradle.occupant) overlay.icon_state = "ai-fixer-empty" else - if (computer.cradle.occupant.health >= 0 && computer.cradle.occupant.stat != 2) + if(computer.cradle.occupant.health >= 0 && computer.cradle.occupant.stat != 2) overlay.icon_state = "ai-fixer-full" else overlay.icon_state = "ai-fixer-404" @@ -39,34 +39,34 @@ proc/aifixer_menu() var/dat = "" - if (computer.cradle.occupant) + if(computer.cradle.occupant) var/laws dat += "

        Stored AI: [computer.cradle.occupant.name]

        " dat += "System integrity: [(computer.cradle.occupant.health+100)/2]%
        " - if (computer.cradle.occupant.laws.zeroth) + if(computer.cradle.occupant.laws.zeroth) laws += "0: [computer.cradle.occupant.laws.zeroth]
        " var/number = 1 - for (var/index = 1, index <= computer.cradle.occupant.laws.inherent.len, index++) + for(var/index = 1, index <= computer.cradle.occupant.laws.inherent.len, index++) var/law = computer.cradle.occupant.laws.inherent[index] - if (length(law) > 0) + if(length(law) > 0) laws += "[number]: [law]
        " number++ - for (var/index = 1, index <= computer.cradle.occupant.laws.supplied.len, index++) + for(var/index = 1, index <= computer.cradle.occupant.laws.supplied.len, index++) var/law = computer.cradle.occupant.laws.supplied[index] - if (length(law) > 0) + if(length(law) > 0) laws += "[number]: [law]
        " number++ dat += "Laws:
        [laws]
        " - if (computer.cradle.occupant.stat == 2) + if(computer.cradle.occupant.stat == 2) dat += "AI non-functional" else dat += "AI functional" - if (!computer.cradle.busy) + if(!computer.cradle.busy) dat += "

        [topic_link(src,"fix","Begin Reconstruction")]" else dat += "

        Reconstruction in process, please wait.
        " @@ -77,7 +77,7 @@ if(!interactable() || !computer.cradle || ..(href,href_list)) return - if ("fix" in href_list) + if("fix" in href_list) var/mob/living/silicon/ai/occupant = computer.cradle.occupant if(!occupant) return @@ -85,7 +85,7 @@ computer.overlays += image('icons/obj/computer.dmi', "ai-fixer-on") var/i = 0 - while (occupant.health < 100) + while(occupant.health < 100) if(!computer || (computer.stat&~MAINT)) // takes some time, keep checking break @@ -94,7 +94,7 @@ occupant.adjustToxLoss(-1) occupant.adjustBruteLoss(-1) occupant.updatehealth() - if (occupant.health >= 0 && computer.cradle.occupant.stat == 2) + if(occupant.health >= 0 && computer.cradle.occupant.stat == 2) occupant.stat = 0 occupant.lying = 0 dead_mob_list -= occupant diff --git a/code/modules/computer3/computers/arcade.dm b/code/modules/computer3/computers/arcade.dm index 6949bfff107..29ada5126c3 100644 --- a/code/modules/computer3/computers/arcade.dm +++ b/code/modules/computer3/computers/arcade.dm @@ -76,7 +76,7 @@ dat += "

        [temp]

        " dat += "
        Health: [player_hp] | Magic: [player_mp] | Enemy Health: [enemy_hp]
        " - if (gameover) + if(gameover) dat += "
        [topic_link(src,"newgame","New Game")]" else dat += "
        [topic_link(src,"attack","Attack")] | [topic_link(src,"heal","Heal")] | [topic_link(src,"charge","Recharge Power")]" @@ -89,8 +89,8 @@ /datum/file/program/arcade/Topic(href, list/href_list) if(!interactable() || ..(href,href_list)) return - if (!blocked && !gameover) - if ("attack" in href_list) + if(!blocked && !gameover) + if("attack" in href_list) blocked = 1 var/attackamt = rand(2,6) temp = "You attack for [attackamt] damage!" @@ -102,7 +102,7 @@ enemy_hp -= attackamt arcade_action() - else if ("heal" in href_list) + else if("heal" in href_list) blocked = 1 var/pointamt = rand(1,3) var/healamt = rand(6,8) @@ -117,7 +117,7 @@ computer.updateUsrDialog() arcade_action() - else if ("charge" in href_list) + else if("charge" in href_list) blocked = 1 var/chargeamt = rand(4,7) temp = "You regain [chargeamt] points" @@ -129,7 +129,7 @@ sleep(10) arcade_action() - if ("newgame" in href_list) //Reset everything + if("newgame" in href_list) //Reset everything temp = "New Round" player_hp = 30 player_mp = 10 @@ -141,25 +141,25 @@ /datum/file/program/arcade/proc/arcade_action() - if ((enemy_mp <= 0) || (enemy_hp <= 0)) + if((enemy_mp <= 0) || (enemy_hp <= 0)) if(!gameover) gameover = 1 temp = "[enemy_name] has fallen! Rejoice!" if(computer.toybox) computer.toybox.dispense() - else if ((enemy_mp <= 5) && (prob(70))) + else if((enemy_mp <= 5) && (prob(70))) var/stealamt = rand(2,3) temp = "[enemy_name] steals [stealamt] of your power!" player_mp -= stealamt - if (player_mp <= 0) + if(player_mp <= 0) gameover = 1 sleep(10) temp = "You have been drained! GAME OVER" feedback_inc("arcade_loss_mana_normal") - else if ((enemy_hp <= 10) && (enemy_mp > 4)) + else if((enemy_hp <= 10) && (enemy_mp > 4)) temp = "[enemy_name] heals for 4 health!" enemy_hp += 4 enemy_mp -= 4 @@ -169,7 +169,7 @@ temp = "[enemy_name] attacks for [attackamt] damage!" player_hp -= attackamt - if ((player_mp <= 0) || (player_hp <= 0)) + if((player_mp <= 0) || (player_hp <= 0)) gameover = 1 temp = "You have been crushed! GAME OVER" feedback_inc("arcade_loss_hp_normal") diff --git a/code/modules/computer3/computers/atmos_alert.dm b/code/modules/computer3/computers/atmos_alert.dm index 1d834565cac..894286d334b 100644 --- a/code/modules/computer3/computers/atmos_alert.dm +++ b/code/modules/computer3/computers/atmos_alert.dm @@ -41,7 +41,7 @@ priority_alarms -= zone if(severity=="severe") priority_alarms += zone - else if (severity=="minor") + else if(severity=="minor") minor_alarms += zone update_icon() return diff --git a/code/modules/computer3/computers/camera.dm b/code/modules/computer3/computers/camera.dm index 7cf5fd0439a..cb31379a59f 100644 --- a/code/modules/computer3/computers/camera.dm +++ b/code/modules/computer3/computers/camera.dm @@ -181,7 +181,7 @@ //proc/camera_list(var/datum/file/camnet_key/key) get_machines(var/datum/file/camnet_key/key) - if (!computer || computer.z > 6) + if(!computer || computer.z > 6) return null var/list/L = list() diff --git a/code/modules/computer3/computers/card.dm b/code/modules/computer3/computers/card.dm index 978d597144e..1a6fe38a46e 100644 --- a/code/modules/computer3/computers/card.dm +++ b/code/modules/computer3/computers/card.dm @@ -181,7 +181,7 @@ // assume linked_db since called by interact() var/crew = "" var/list/L = list() - for (var/datum/data/record/t in data_core.general) + for(var/datum/data/record/t in data_core.general) var/R = t.fields["name"] + " - " + t.fields["rank"] L += R for(var/R in sortList(L)) @@ -269,7 +269,7 @@ computer.cardslot.insert(card,1) if("print" in href_list) - if (printing) + if(printing) return printing = 1 @@ -277,7 +277,7 @@ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( computer.loc ) P.info = "Crew Manifest:
        " var/list/L = list() - for (var/datum/data/record/t in data_core.general) + for(var/datum/data/record/t in data_core.general) var/R = t.fields["name"] + " - " + t.fields["rank"] L += R for(var/R in sortList(L)) diff --git a/code/modules/computer3/computers/cloning.dm b/code/modules/computer3/computers/cloning.dm index f90ba3e57e3..73978ad6aed 100644 --- a/code/modules/computer3/computers/cloning.dm +++ b/code/modules/computer3/computers/cloning.dm @@ -35,29 +35,29 @@ scanner = locate(/obj/machinery/dna_scannernew) in nearby pod1 = locate(/obj/machinery/clonepod) in nearby - if (pod1) + if(pod1) pod1.connected = src // Some variable the pod needs proc/ScanningMenu() - if (isnull(scanner)) + if(isnull(scanner)) return "ERROR: No Scanner detected!
        " var/dat = "

        Scanner Functions

        " dat += "
        " - if (!scanner.occupant) + if(!scanner.occupant) dat += "Scanner Unoccupied" else if(loading) dat += "[scanner.occupant] => Scanning..." else - if (scanner.occupant.ckey != scantemp_ckey) + if(scanner.occupant.ckey != scantemp_ckey) scantemp = "Ready to Scan" scantemp_ckey = scanner.occupant.ckey dat += "[scanner.occupant] => [scantemp]" dat += "
        " - if (scanner.occupant) + if(scanner.occupant) dat += topic_link(src,"scan","Start Scan") + "
        " if(scanner.locked) dat += topic_link(src,"lock","Unlock Scanner") @@ -68,12 +68,12 @@ // Footer dat += "

        Database Functions

        " - if (records.len > 0) + if(records.len > 0) dat += topic_link(src,"menu=2","View Records ([records.len])") + "
        " else dat += fake_link("View Records (0)") - if (has_disk) + if(has_disk) dat += topic_link(src,"eject_disk","Eject Disk") + "
        " return dat @@ -88,7 +88,7 @@ var/dat = "

        Selected Record

        " to_chat(dat += topic_link(src,"menu=2",", Back") + "

        ") - if (!active_record) + if(!active_record) dat += "Record not found." else dat += "

        [active_record.fields["name"]]

        " @@ -96,7 +96,7 @@ var/obj/item/weapon/implant/health/H = locate(active_record.fields["imp"]) - if ((H) && (istype(H))) + if((H) && (istype(H))) dat += "Health Implant Data:
        [H.sensehealth()]

        " else dat += "Unable to locate Health Implant.

        " @@ -104,11 +104,11 @@ dat += "Unique Identifier:
        [active_record.fields["UI"]]
        " dat += "Structural Enzymes:
        [active_record.fields["SE"]]
        " - if (has_disk) + if(has_disk) dat += "
        " dat += "

        Inserted Disk

        " dat += "Contents: " - if (computer.floppy.inserted.files.len == 0) + if(computer.floppy.inserted.files.len == 0) dat += "Empty" else for(var/datum/file/data/genome/G in computer.floppy.inserted.files) @@ -170,9 +170,9 @@ if(loading || !interactable()) return - if (href_list["menu"]) + if(href_list["menu"]) menu = text2num(href_list["menu"]) - else if (("scan" in href_list) && !isnull(scanner)) + else if(("scan" in href_list) && !isnull(scanner)) scantemp = "" loading = 1 @@ -186,16 +186,16 @@ //No locking an open scanner. - else if (("lock" in href_list) && !isnull(scanner)) - if ((!scanner.locked) && (scanner.occupant)) + else if(("lock" in href_list) && !isnull(scanner)) + if((!scanner.locked) && (scanner.occupant)) scanner.locked = 1 else scanner.locked = 0 - else if ("view_rec" in href_list) + else if("view_rec" in href_list) active_record = locate(href_list["view_rec"]) if(istype(active_record,/datum/data/record)) - if ( !active_record.fields["ckey"] || active_record.fields["ckey"] == "" ) + if( !active_record.fields["ckey"] || active_record.fields["ckey"] == "" ) del(active_record) temp = "Record Corrupt" else @@ -204,16 +204,16 @@ active_record = null temp = "Record missing." - else if ("del_rec" in href_list) - if ((!active_record) || (menu < 3)) + else if("del_rec" in href_list) + if((!active_record) || (menu < 3)) return - if (menu == 3) //If we are viewing a record, confirm deletion + if(menu == 3) //If we are viewing a record, confirm deletion temp = "Delete record?" menu = 4 - else if (menu == 4) + else if(menu == 4) var/obj/item/weapon/card/id/C = usr.get_active_hand() - if (istype(C)||istype(C, /obj/item/device/pda)) + if(istype(C)||istype(C, /obj/item/device/pda)) if(check_access(C)) temp = "[active_record.fields["name"]] => Record deleted." records.Remove(active_record) @@ -222,7 +222,7 @@ else temp = "Access Denied." - else if ("eject_disk" in href_list) + else if("eject_disk" in href_list) if(computer.floppy) computer.floppy.eject_disk() @@ -243,7 +243,7 @@ if(/datum/file/data/genome/cloning) active_record = G:record else if("savefile" in href_list) - if (!active_record || !computer || !computer.floppy) + if(!active_record || !computer || !computer.floppy) temp = "Save error." computer.updateUsrDialog() return @@ -272,10 +272,10 @@ if(!rval) temp = "Disk write error." - else if ("refresh" in href_list) + else if("refresh" in href_list) computer.updateUsrDialog() - else if ("clone" in href_list) + else if("clone" in href_list) //Look for that player! They better be dead! if(active_record) //Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs. @@ -303,22 +303,22 @@ return proc/scan_mob(mob/living/carbon/human/subject as mob) - if ((isnull(subject)) || (!(ishuman(subject))) || (!subject.dna)) + if((isnull(subject)) || (!(ishuman(subject))) || (!subject.dna)) scantemp = "Unable to locate valid genetic data." return - if (!getbrain(subject)) + if(!getbrain(subject)) scantemp = "No signs of intelligence detected." return - if (subject.suiciding == 1) + if(subject.suiciding == 1) scantemp = "Subject's brain is not responding to scanning stimuli." return - if ((!subject.ckey) || (!subject.client)) + if((!subject.ckey) || (!subject.client)) scantemp = "Mental interface failure." return - if (NOCLONE in subject.mutations) + if(NOCLONE in subject.mutations) scantemp = "Mental interface failure." return - if (!isnull(find_record(subject.ckey))) + if(!isnull(find_record(subject.ckey))) scantemp = "Subject already in database." return @@ -341,7 +341,7 @@ //Add an implant if needed var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject) - if (isnull(imp)) + if(isnull(imp)) imp = new /obj/item/weapon/implant/health(subject) imp.implanted = subject R.fields["imp"] = "\ref[imp]" @@ -349,7 +349,7 @@ else R.fields["imp"] = "\ref[imp]" - if (!isnull(subject.mind)) //Save that mind so traitors can continue traitoring after cloning. + if(!isnull(subject.mind)) //Save that mind so traitors can continue traitoring after cloning. R.fields["mind"] = "\ref[subject.mind]" records += R @@ -358,6 +358,6 @@ //Find a specific record by key. proc/find_record(var/find_key) for(var/datum/data/record/R in records) - if (R.fields["ckey"] == find_key) + if(R.fields["ckey"] == find_key) return R return null diff --git a/code/modules/computer3/computers/communications.dm b/code/modules/computer3/computers/communications.dm index b738cef704e..2f02bdcfdb3 100644 --- a/code/modules/computer3/computers/communications.dm +++ b/code/modules/computer3/computers/communications.dm @@ -59,8 +59,8 @@ Topic(var/href, var/list/href_list) if(!interactable() || !computer.radio || ..(href,href_list) ) return - if (!(computer.z in config.station_levels)) - to_chat(usr, "\red Unable to establish a connection: \black You're too far away from the station!") + if(!(computer.z in config.station_levels)) + to_chat(usr, "Unable to establish a connection: You're too far away from the station!") return if("main" in href_list) @@ -85,7 +85,7 @@ var/obj/item/I = M.get_active_hand() I = I.GetID() - if (istype(I,/obj/item/weapon/card/id)) + if(istype(I,/obj/item/weapon/card/id)) if(access_captain in I.GetAccess()) var/old_level = security_level if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN @@ -146,7 +146,7 @@ state = STATE_MESSAGELIST if("viewmessage" in href_list) state = STATE_VIEWMESSAGE - if (!currmsg) + if(!currmsg) if(href_list["message-num"]) currmsg = text2num(href_list["message-num"]) else @@ -247,7 +247,7 @@ aistate = STATE_MESSAGELIST if("ai-viewmessage" in href_list) aistate = STATE_VIEWMESSAGE - if (!aicurrmsg) + if(!aicurrmsg) if(href_list["message-num"]) aicurrmsg = text2num(href_list["message-num"]) else @@ -281,16 +281,16 @@ proc/main_menu() var/dat = "" - if (computer.radio.subspace) + if(computer.radio.subspace) if(shuttle_master.emergency.mode == SHUTTLE_CALL) var/timeleft = shuttle_master.emergency.timeLeft() dat += "Emergency shuttle\n
        \nETA: [timeleft / 60 % 60]:[add_zero(num2text(timeleft % 60), 2)]" refresh = 1 else refresh = 0 - if (authenticated) + if(authenticated) dat += "
        \[ Log Out \]" - if (authenticated==2) + if(authenticated==2) dat += "
        \[ Make An Announcement \]" if(computer.emagged == 0) dat += "
        \[ Send an emergency message to Centcomm \]" @@ -300,7 +300,7 @@ dat += "
        \[ Change alert level \]" /*if(emergency_shuttle.location()) - if (emergency_shuttle.online()) + if(emergency_shuttle.online()) dat += "
        \[ Cancel Shuttle Call \]" else dat += "
        \[ Call Emergency Shuttle \]"*/ @@ -335,16 +335,16 @@ for(var/i = 1; i<=messagetitle.len; i++) dat += "
        [messagetitle[i]]" if(STATE_VIEWMESSAGE) - if (currmsg) + if(currmsg) dat += "[messagetitle[currmsg]]

        [messagetext[currmsg]]" - if (authenticated) + if(authenticated) dat += "

        \[ Delete \]" else state = STATE_MESSAGELIST interact() return if(STATE_DELMESSAGE) - if (currmsg) + if(currmsg) dat += "Are you sure you want to delete this message? \[ OK | Cancel \]" else state = STATE_MESSAGELIST diff --git a/code/modules/computer3/computers/law.dm b/code/modules/computer3/computers/law.dm index ec278163b2a..d75a016f680 100644 --- a/code/modules/computer3/computers/law.dm +++ b/code/modules/computer3/computers/law.dm @@ -24,8 +24,8 @@ attackby(obj/item/weapon/aiModule/module as obj, mob/user as mob, params) - if (user.z > 6) - to_chat(user, "\red Unable to establish a connection: \black You're too far away from the station!") + if(user.z > 6) + to_chat(user, "Unable to establish a connection: You're too far away from the station!") return if(istype(module, /obj/item/weapon/aiModule)) module.install(src) @@ -43,7 +43,7 @@ src.current = select_active_ai(user) - if (!src.current) + if(!src.current) to_chat(usr, "No active AIs detected.") else to_chat(usr, "[src.current.name] selected for law changes.") @@ -75,7 +75,7 @@ src.current = freeborg() - if (!src.current) + if(!src.current) to_chat(usr, "No free cyborgs detected.") else to_chat(usr, "[src.current.name] selected for law changes.") diff --git a/code/modules/computer3/computers/medical.dm b/code/modules/computer3/computers/medical.dm index aeda16c4414..27002c264c2 100644 --- a/code/modules/computer3/computers/medical.dm +++ b/code/modules/computer3/computers/medical.dm @@ -49,21 +49,21 @@ scan = computer.cardslot.reader if(!interactable()) return - if (computer.z > 6) - to_chat(usr, "\red Unable to establish a connection: \black You're too far away from the station!") + if(computer.z > 6) + to_chat(usr, "Unable to establish a connection: You're too far away from the station!") return var/dat - if (temp) + if(temp) dat = text("[src.temp]

        Clear Screen") else dat = text("Confirm Identity (R): []
        ", src, (scan ? text("[]", scan.name) : "----------")) - if (computer.cardslot.dualslot) + if(computer.cardslot.dualslot) dat += text("Check Identity (W): []
        ", src, (scan2 ? text("[]", scan2.name) : "----------")) if(scan2 && !scan) dat += text("
        Insert card into reader slot to log in.

        ") - if (src.authenticated) + if(src.authenticated) switch(src.screen) if(1.0) dat += {" @@ -86,12 +86,8 @@ if(3.0) dat += text("Records Maintenance
        \nBackup To Disk
        \nUpload From disk
        \nDelete All Records
        \n
        \nBack", src, src, src, src) if(4.0) - var/icon/front = new(active1.fields["photo"], dir = SOUTH) - var/icon/side = new(active1.fields["photo"], dir = WEST) - usr << browse_rsc(front, "front.png") - usr << browse_rsc(side, "side.png") dat += "
        Medical Record

        " - if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + if((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) dat += "
        NameReal NameAssigned JobKeyOptionsPMTraitor?
        Not found!
        Show Objective diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 99595d9a02c..e2b6ab56d62 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -14,7 +14,7 @@ dat += "" dat += "
        " switch(current_tab) - if (0) // Debug + if(0) // Debug if(check_rights(R_ADMIN,0)) dat += {"

        Admin Secrets

        @@ -67,7 +67,7 @@
        "} - if (1) + if(1) if(check_rights((R_EVENT|R_SERVER),0)) dat += {"
        @@ -83,10 +83,13 @@ Security Level - Gamma   Security Level - Epsilon   Security Level - Delta
        + Create Weather
        + Weather - Ash Storm   + Weather - Advanced Darkness  
        "} - if (2) + if(2) if(check_rights((R_SERVER|R_EVENT),0)) dat += {"
        @@ -104,6 +107,7 @@ Dodgeball (TDM)!
        Round-enders
        The floor is lava! (DANGEROUS: extremely lame)
        + The floor is fake-lava! (non-harmful)
        Turn all humans into monkeys
        Make all items look like guns
        Warp all Players to Prison
        diff --git a/code/modules/admin/sql_notes.dm b/code/modules/admin/sql_notes.dm index df02b6f0c9c..338993af58c 100644 --- a/code/modules/admin/sql_notes.dm +++ b/code/modules/admin/sql_notes.dm @@ -33,7 +33,7 @@ return var/admin_sql_ckey = sanitizeSQL(adminckey) if(!server) - if (config && config.server_name) + if(config && config.server_name) server = config.server_name server = sanitizeSQL(server) var/DBQuery/query_noteadd = dbcon.NewQuery("INSERT INTO [format_table_name("notes")] (ckey, timestamp, notetext, adminckey, server) VALUES ('[target_sql_ckey]', '[timestamp]', '[notetext]', '[admin_sql_ckey]', '[server]')") diff --git a/code/modules/admin/stickyban.dm b/code/modules/admin/stickyban.dm index a772edc2608..bddebcff602 100644 --- a/code/modules/admin/stickyban.dm +++ b/code/modules/admin/stickyban.dm @@ -2,32 +2,32 @@ if(!check_rights(R_BAN)) return - switch (action) - if ("show") + switch(action) + if("show") stickyban_show() return - if ("add") + if("add") var/list/ban = list() var/ckey ban["admin"] = usr.key ban["type"] = list("sticky") ban["reason"] = "(InGameBan)([usr.key])" //this will be displayed in dd only - if (data["ckey"]) + if(data["ckey"]) ckey = ckey(data["ckey"]) else ckey = input(usr,"Ckey","Ckey","") as text|null - if (!ckey) + if(!ckey) return ckey = ckey(ckey) - if (get_stickyban_from_ckey(ckey)) + if(get_stickyban_from_ckey(ckey)) to_chat(usr, "Error: Can not add a stickyban: User already has a current sticky ban") - if (data["reason"]) + if(data["reason"]) ban["message"] = data["reason"] else var/reason = input(usr,"Reason","Reason","Ban Evasion") as text|null - if (!reason) + if(!reason) return ban["message"] = "[reason]" @@ -36,18 +36,18 @@ log_admin("[key_name(usr)] has stickybanned [ckey].\nReason: [ban["message"]]") message_admins("[key_name_admin(usr)] has stickybanned [ckey].\nReason: [ban["message"]]") - if ("remove") - if (!data["ckey"]) + if("remove") + if(!data["ckey"]) return var/ckey = data["ckey"] var/ban = get_stickyban_from_ckey(ckey) - if (!ban) + if(!ban) to_chat(usr, "Error: No sticky ban for [ckey] found!") return - if (alert("Are you sure you want to remove the sticky ban on [ckey]?","Are you sure","Yes","No") == "No") + if(alert("Are you sure you want to remove the sticky ban on [ckey]?","Are you sure","Yes","No") == "No") return - if (!get_stickyban_from_ckey(ckey)) + if(!get_stickyban_from_ckey(ckey)) to_chat(usr, "Error: The ban disappeared.") return world.SetConfig("ban", ckey, null) @@ -55,46 +55,46 @@ log_admin("[key_name(usr)] removed [ckey]'s stickyban") message_admins("[key_name_admin(usr)] removed [ckey]'s stickyban") - if ("remove_alt") - if (!data["ckey"]) + if("remove_alt") + if(!data["ckey"]) return var/ckey = data["ckey"] - if (!data["alt"]) + if(!data["alt"]) return var/alt = ckey(data["alt"]) var/ban = get_stickyban_from_ckey(ckey) - if (!ban) + if(!ban) to_chat(usr, "Error: No sticky ban for [ckey] found!") return var/found = 0 //we have to do it this way because byond keeps the case in its sticky ban matches WHY!!! - for (var/key in ban["keys"]) - if (ckey(key) == alt) + for(var/key in ban["keys"]) + if(ckey(key) == alt) found = 1 break - if (!found) + if(!found) to_chat(usr, "Error: [alt] is not linked to [ckey]'s sticky ban!") return - if (alert("Are you sure you want to disassociate [alt] from [ckey]'s sticky ban? \nNote: Nothing stops byond from re-linking them","Are you sure","Yes","No") == "No") + if(alert("Are you sure you want to disassociate [alt] from [ckey]'s sticky ban? \nNote: Nothing stops byond from re-linking them","Are you sure","Yes","No") == "No") return //we have to do this again incase something changes ban = get_stickyban_from_ckey(ckey) - if (!ban) + if(!ban) to_chat(usr, "Error: The ban disappeared.") return found = 0 - for (var/key in ban["keys"]) - if (ckey(key) == alt) + for(var/key in ban["keys"]) + if(ckey(key) == alt) ban["keys"] -= key found = 1 break - if (!found) + if(!found) to_chat(usr, "Error: [alt] link to [ckey]'s sticky ban disappeared.") return @@ -103,21 +103,21 @@ log_admin("[key_name(usr)] has disassociated [alt] from [ckey]'s sticky ban") message_admins("[key_name_admin(usr)] has disassociated [alt] from [ckey]'s sticky ban") - if ("edit") - if (!data["ckey"]) + if("edit") + if(!data["ckey"]) return var/ckey = data["ckey"] var/ban = get_stickyban_from_ckey(ckey) - if (!ban) + if(!ban) to_chat(usr, "Error: No sticky ban for [ckey] found!") return var/oldreason = ban["message"] var/reason = input(usr,"Reason","Reason","[ban["message"]]") as text|null - if (!reason || reason == oldreason) + if(!reason || reason == oldreason) return //we have to do this again incase something changed while we waited for input ban = get_stickyban_from_ckey(ckey) - if (!ban) + if(!ban) to_chat(usr, "Error: The ban disappeared.") return ban["message"] = "[reason]" @@ -133,13 +133,13 @@ /datum/admins/proc/stickyban_gethtml(ckey, ban) . = "\[-\][ckey]
        " . += "[ban["message"]] \[Edit\]
        " - if (ban["admin"]) + if(ban["admin"]) . += "[ban["admin"]]
        " else . += "LEGACY
        " . += "Caught keys
        \n
          " - for (var/key in ban["keys"]) - if (ckey(key) == ckey) + for(var/key in ban["keys"]) + if(ckey(key) == ckey) continue . += "
        1. \[-\][key]
        2. " . += "
        \n" @@ -168,17 +168,17 @@ usr << browse(html,"window=stickybans;size=700x400") /proc/get_stickyban_from_ckey(var/ckey) - if (!ckey) + if(!ckey) return null ckey = ckey(ckey) . = null - for (var/key in world.GetConfig("ban")) - if (ckey(key) == ckey) + for(var/key in world.GetConfig("ban")) + if(ckey(key) == ckey) . = stickyban2list(world.GetConfig("ban",key)) break /proc/stickyban2list(var/ban) - if (!ban) + if(!ban) return null . = params2list(ban) .["keys"] = splittext(.["keys"], ",") @@ -187,16 +187,16 @@ .["computer_id"] = splittext(.["computer_id"], ",") /proc/list2stickyban(var/list/ban) - if (!ban || !islist(ban)) + if(!ban || !islist(ban)) return null . = ban.Copy() - if (.["keys"]) + if(.["keys"]) .["keys"] = jointext(.["keys"], ",") - if (.["type"]) + if(.["type"]) .["type"] = jointext(.["type"], ",") - if (.["IP"]) + if(.["IP"]) .["IP"] = jointext(.["IP"], ",") - if (.["computer_id"]) + if(.["computer_id"]) .["computer_id"] = jointext(.["computer_id"], ",") . = list2params(.) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index b46e5401528..27048b441dd 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -412,7 +412,7 @@ else if(expression[start + 1] == "\[" && islist(v)) var/list/L = v var/index = SDQL_expression(source, expression[start + 2]) - if (isnum(index) && (!IsInteger(index) || L.len < index)) + if(isnum(index) && (!IsInteger(index) || L.len < index)) to_chat(world, "Invalid list index: [index]") return null return L[index] @@ -424,7 +424,7 @@ for(var/arg in arguments) new_args[++new_args.len] = SDQL_expression(source, arg) - if (object == world) // Global proc. + if(object == world) // Global proc. procname = "/proc/[procname]" return call(procname)(arglist(new_args)) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm index 5aa2aa0dc93..0d0573e3760 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm @@ -358,7 +358,7 @@ else if(token(i + 1) == "\[") // list index var/list/expression = list() i = expression(i + 2, expression) - if (token(i) != "]") + if(token(i) != "]") parse_error("Missing ] at the end of list access.") L += "\[" diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index 5cbb8dd26d5..2512171e80d 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -24,7 +24,8 @@ admin_forcemove(usr, T) log_admin("[key_name(usr)] jumped to [A]") - message_admins("[key_name_admin(usr)] jumped to [A]") + if(!isobserver(usr)) + message_admins("[key_name_admin(usr)] jumped to [A]") feedback_add_details("admin_verb","JA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/jumptoturf(var/turf/T in world) @@ -35,7 +36,8 @@ return log_admin("[key_name(usr)] jumped to [T.x], [T.y], [T.z] in [T.loc]") - message_admins("[key_name_admin(usr)] jumped to [T.x], [T.y], [T.z] in [T.loc]", 1) + if(!isobserver(usr)) + message_admins("[key_name_admin(usr)] jumped to [T.x], [T.y], [T.z] in [T.loc]", 1) admin_forcemove(usr, T) feedback_add_details("admin_verb","JT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return @@ -48,7 +50,8 @@ return log_admin("[key_name(usr)] jumped to [key_name(M)]") - message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1) + if(!isobserver(usr)) + message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1) if(src.mob) var/mob/A = src.mob var/turf/T = get_turf(M) @@ -69,7 +72,8 @@ if(T) admin_forcemove(usr, T) feedback_add_details("admin_verb","JC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]") + if(!isobserver(usr)) + message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]") /client/proc/jumptokey() set category = "Admin" @@ -87,7 +91,8 @@ return var/mob/M = selection:mob log_admin("[key_name(usr)] jumped to [key_name(M)]") - message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1) + if(!isobserver(usr)) + message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1) admin_forcemove(usr, M.loc) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index e533a4716b6..319830d0235 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -99,7 +99,7 @@ adminhelp(msg) //admin we are replying to has vanished, adminhelp instead return - if (src.handle_spam_prevention(msg,MUTE_ADMINHELP)) + if(src.handle_spam_prevention(msg,MUTE_ADMINHELP)) return //clean the message if it's not sent by a high-rank admin diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 3f116b0a0d5..784f924966f 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -27,7 +27,7 @@ msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN)) log_admin("MOD: [key_name(src)] : [msg]") - if (!msg) + if(!msg) return var/spanclass = "mod_channel" diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm index e1225275e17..85591ee3159 100644 --- a/code/modules/admin/verbs/atmosdebug.dm +++ b/code/modules/admin/verbs/atmosdebug.dm @@ -6,37 +6,41 @@ to_chat(src, "Only administrators may use this command.") return feedback_add_details("admin_verb","CP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - + if(alert("WARNING: This command should not be run on a live server. Do you want to continue?", "Check Piping", "No", "Yes") == "No") return to_chat(usr, "Checking for disconnected pipes...") //all plumbing - yes, some things might get stated twice, doesn't matter. - for (var/obj/machinery/atmospherics/plumbing in world) - if (plumbing.nodealert) + for(var/obj/machinery/atmospherics/plumbing in world) + if(plumbing.nodealert) to_chat(usr, "Unconnected [plumbing.name] located at [plumbing.x],[plumbing.y],[plumbing.z] ([get_area(plumbing.loc)])") //Manifolds - for (var/obj/machinery/atmospherics/pipe/manifold/pipe in world) - if (!pipe.node1 || !pipe.node2 || !pipe.node3) + for(var/obj/machinery/atmospherics/pipe/manifold/pipe in world) + if(!pipe.node1 || !pipe.node2 || !pipe.node3) to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") //Pipes - for (var/obj/machinery/atmospherics/pipe/simple/pipe in world) - if (!pipe.node1 || !pipe.node2) + for(var/obj/machinery/atmospherics/pipe/simple/pipe in world) + if(!pipe.node1 || !pipe.node2) to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") to_chat(usr, "Checking for overlapping pipes...") - next_turf: - for(var/turf/T in world) - for(var/dir in cardinal) - var/check = 0 - for(var/obj/machinery/atmospherics/pipe in T) - if(dir & pipe.initialize_directions) - check++ - if(check > 1) + for(var/turf/T in world) + for(var/dir in cardinal) + var/list/check = list(0, 0, 0) + var/done = 0 + for(var/obj/machinery/atmospherics/pipe in T) + if(dir & pipe.initialize_directions) + for(var/ct in pipe.connect_types) + check[ct]++ + if(check[ct] > 1) to_chat(usr, "Overlapping pipe ([pipe.name]) located at [T.x],[T.y],[T.z] ([get_area(T)])") - continue next_turf + done = 1 + break + if(done) + break to_chat(usr, "Done") /client/proc/powerdebug() @@ -47,13 +51,13 @@ return feedback_add_details("admin_verb","CPOW") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - for (var/datum/powernet/PN in powernets) - if (!PN.nodes || !PN.nodes.len) + for(var/datum/powernet/PN in powernets) + if(!PN.nodes || !PN.nodes.len) if(PN.cables && (PN.cables.len > 1)) var/obj/structure/cable/C = PN.cables[1] to_chat(usr, "Powernet with no nodes! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]") - if (!PN.cables || (PN.cables.len < 10)) + if(!PN.cables || (PN.cables.len < 10)) if(PN.cables && (PN.cables.len > 1)) var/obj/structure/cable/C = PN.cables[1] to_chat(usr, "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]") diff --git a/code/modules/admin/verbs/cinematic.dm b/code/modules/admin/verbs/cinematic.dm index 570d73e19a8..3449350e11f 100644 --- a/code/modules/admin/verbs/cinematic.dm +++ b/code/modules/admin/verbs/cinematic.dm @@ -1,17 +1,17 @@ -/client/proc/cinematic(var/cinematic as anything in list("explosion",null)) - set name = "Play cinematic" +/client/proc/cinematic(cinematic as anything in list("explosion", null)) + set name = "cinematic" set category = "Debug" - set desc = "Shows a cinematic, will work like a normal nuke" // Intended for testing but I thought it might be nice for events on the rare occasion Feel free to comment it out if it's not wanted. - if(alert("Are you sure you want to run [cinematic]?","Confirmation","Yes","No")=="No") return - if(!ticker) return + set desc = "Shows a cinematic." // Intended for testing but I thought it might be nice for events on the rare occasion Feel free to comment it out if it's not wanted. + set hidden = 1 + if(!ticker) + return switch(cinematic) if("explosion") - var/parameter = input(src,"station_missed = ?","Enter Parameter",0) as num + var/parameter = input(src, "station_missed = ?", "Enter Parameter", 0) as num var/override switch(parameter) if(1) - override = input(src,"mode = ?","Enter Parameter",null) as anything in list("nuclear emergency","no override") + override = input(src, "mode = ?","Enter Parameter", null) as anything in list("nuclear emergency", "fake", "no override") if(0) - override = input(src,"mode = ?","Enter Parameter",null) as anything in list("blob","nuclear emergency","AI malfunction","no override") - ticker.station_explosion_cinematic(parameter,override) - return \ No newline at end of file + override = input(src, "mode = ?","Enter Parameter", null) as anything in list("blob", "nuclear emergency", "AI malfunction", "no override") + ticker.station_explosion_cinematic(parameter, override) \ No newline at end of file diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index 74596c333cc..690cac87536 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -17,24 +17,24 @@ to_chat(src, "You have deadchat muted.") return - if (handle_spam_prevention(msg,MUTE_DEADCHAT)) + if(handle_spam_prevention(msg,MUTE_DEADCHAT)) return var/stafftype = null - if (check_rights(R_MENTOR, 0)) + if(check_rights(R_MENTOR, 0)) stafftype = "MENTOR" - if (check_rights(R_MOD, 0)) + if(check_rights(R_MOD, 0)) stafftype = "MOD" - if (check_rights(R_ADMIN, 0)) + if(check_rights(R_ADMIN, 0)) stafftype = "ADMIN" msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN)) log_admin("[key_name(src)] : [msg]") - if (!msg) + if(!msg) return var/prefix = "[stafftype] ([src.key])" diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index b85d19451fe..c04940a3cfa 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -194,7 +194,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that return var/turf/T = mob.loc - if (!( istype(T, /turf) )) + if(!( istype(T, /turf) )) return var/datum/gas_mixture/env = T.return_air() @@ -399,12 +399,12 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(!check_rights(R_EVENT)) return - if (!ticker) + if(!ticker) alert("Wait until the game starts") return - if (istype(M, /mob/living/carbon/human)) + if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - if (H.wear_id) + if(H.wear_id) var/obj/item/weapon/card/id/id = H.wear_id if(istype(H.wear_id, /obj/item/device/pda)) var/obj/item/device/pda/pda = H.wear_id @@ -595,64 +595,75 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that "space pirate", "soviet admiral", "tunnel clown", + "survivor", "masked killer", "singuloth knight", "dark lord", "assassin", + "spy", "death commando", - "syndicate commando", + "syndicate agent", + "syndicate operative", + "syndicate strike team", + "syndicate officer", "chrono legionnaire", - "special ops officer", - "special ops formal", "blue wizard", "red wizard", "marisa wizard", "emergency response team member", "emergency response team leader", - "nanotrasen officer", - "nanotrasen captain", + "nt vip guest", + "nt navy officer", // now in jobs list + "nt navy captain", + "nt special ops officer", // now in jobs list + "nt special ops formal", ) - var/dostrip = input("Do you want to strip [M] before equipping them? (0=no, 1=yes)", "STRIPTEASE") as null|anything in list(0,1) - if(isnull(dostrip)) - return + var/dostrip = 0 + switch(alert("Strip [M] before dressing?", "Strip?", "Yes", "No", "Cancel")) + if("Yes") + dostrip = 1 + if("Cancel") + return var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in dresspacks - if (isnull(dresscode)) + if(isnull(dresscode)) return - var/datum/job/jobdatum - if (dresscode == "as job...") + if(dresscode == "as job...") var/jobname = input("Select job", "Robust quick dress shop") as null|anything in get_all_jobs() jobdatum = job_master.GetJob(jobname) - feedback_add_details("admin_verb","SEQ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb", "SEQ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! if(dostrip) - for (var/obj/item/I in M) - if (istype(I, /obj/item/weapon/implant)) + for(var/obj/item/I in M) + if(istype(I, /obj/item/weapon/implant)) continue if(istype(I, /obj/item/organ)) continue qdel(I) switch(dresscode) - if ("strip") + if("strip") //do nothing - if ("as job...") + if("as job...") if(jobdatum) dresscode = "[jobdatum.title]" jobdatum.equip(M) + equip_special_id(M,jobdatum.access,jobdatum.title, jobdatum.idtype) - if ("standard space gear") + if("standard space gear") M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) var /obj/item/weapon/tank/jetpack/J = new /obj/item/weapon/tank/jetpack/oxygen(M) M.equip_to_slot_or_del(J, slot_back) - J.toggle() + J.turn_on() M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask) J.Topic(null, list("stat" = 1)) - if ("Engineer RIG","CE RIG","Mining RIG","Syndi RIG","Wizard RIG","Medical RIG","Atmos RIG") + equip_special_id(M,get_all_accesses(), "Space Explorer", /obj/item/weapon/card/id) + + if("Engineer RIG", "CE RIG", "Mining RIG", "Syndi RIG", "Wizard RIG", "Medical RIG", "Atmos RIG") if(dresscode=="Engineer RIG") M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig(M), slot_head) @@ -676,61 +687,53 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/atmos(M), slot_head) var /obj/item/weapon/tank/jetpack/J = new /obj/item/weapon/tank/jetpack/oxygen(M) M.equip_to_slot_or_del(J, slot_back) - J.toggle() + J.turn_on() M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask) + equip_special_id(M,get_all_accesses(), "RIG Tester", /obj/item/weapon/card/id) J.Topic(null, list("stat" = 1)) - if ("tournament standard red","tournament standard green") //we think stunning weapon is too overpowered to use it on tournaments. --rastaf0 - if (dresscode=="tournament standard red") + if("tournament standard red", "tournament standard green") //we think stunning weapon is too overpowered to use it on tournaments. --rastaf0 + if(dresscode=="tournament standard red") M.equip_to_slot_or_del(new /obj/item/clothing/under/color/red(M), slot_w_uniform) else M.equip_to_slot_or_del(new /obj/item/clothing/under/color/green(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/thunderdome(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/destroyer(M), slot_r_hand) M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_hand) M.equip_to_slot_or_del(new /obj/item/weapon/grenade/smokebomb(M), slot_r_store) - - if ("tournament gangster") //gangster are supposed to fight each other. --rastaf0 + if("tournament gangster") //gangster are supposed to fight each other. --rastaf0 M.equip_to_slot_or_del(new /obj/item/clothing/under/det(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_suit(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(M), slot_head) - - M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/proto(M), slot_r_hand) M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_l_store) - if ("tournament chef") //Steven Seagal FTW + if("tournament chef") //Steven Seagal FTW M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/rollingpin(M), slot_r_hand) M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_hand) M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_r_store) M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_s_store) - if ("tournament janitor") + if("tournament janitor") M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) var/obj/item/weapon/storage/backpack/backpack = new(M) for(var/obj/item/I in backpack) del(I) M.equip_to_slot_or_del(backpack, slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/mop(M), slot_r_hand) var/obj/item/weapon/reagent_containers/glass/bucket/bucket = new(M) bucket.reagents.add_reagent("water", 70) M.equip_to_slot_or_del(bucket, slot_l_hand) - M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_r_store) M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_l_store) M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) @@ -741,51 +744,61 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - if ("pirate") + if("pirate") M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand) + equip_special_id(M,get_all_accesses(), "Pirate", /obj/item/weapon/card/id) - if ("space pirate") + if("space pirate") M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/pirate(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/pirate(M), slot_head) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand) + equip_special_id(M,get_all_accesses(), "Space Pirate", /obj/item/weapon/card/id) - if ("soviet soldier") + if("soviet soldier") M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(M), slot_head) + equip_special_id(M,get_all_accesses(), "Soviet Soldier", /obj/item/weapon/card/id) - if("tunnel clown")//Tunnel clowns rule! + if("tunnel clown") M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask) M.equip_to_slot_or_del(new /obj/item/clothing/head/chaplain_hood(M), slot_head) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/clothing/suit/chaplain_hoodie(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(M), slot_l_store) M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_r_store) - - var/obj/item/weapon/card/id/W = new(M) - W.name = "[M.real_name]'s ID Card (Tunnel Clown!)" - W.access = get_all_accesses() - W.assignment = "Tunnel Clown!" - W.registered_name = M.real_name - M.equip_to_slot_or_del(W, slot_wear_id) - + equip_special_id(M,get_all_accesses(), "Tunnel Clown", /obj/item/weapon/card/id) + M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M) M.equip_to_slot_or_del(fire_axe, slot_r_hand) + if("survivor") + M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + equip_special_id(M,get_all_accesses(), "Survivor", /obj/item/weapon/card/id) + for(var/obj/item/carried_item in M.contents) + if(!istype(carried_item, /obj/item/weapon/implant)) + carried_item.add_blood(M) + if("masked killer") M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask) @@ -795,46 +808,40 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store) M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store) - + M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) + equip_special_id(M,get_all_accesses(), "Masked Killer", /obj/item/weapon/card/id/syndicate, "syndie") var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M) M.equip_to_slot_or_del(fire_axe, slot_r_hand) - for(var/obj/item/carried_item in M.contents) - if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant. + if(!istype(carried_item, /obj/item/weapon/implant)) carried_item.add_blood(M)//Oh yes, there will be blood... if("dark lord") M.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear) M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/dualsaber/red(M), slot_l_hand) - var/obj/item/clothing/head/chaplain_hood/hood = new(M) hood.name = "dark lord hood" M.equip_to_slot_or_del(hood, slot_head) - var/obj/item/clothing/suit/chaplain_hoodie/robe = new(M) robe.name = "dark lord robes" M.equip_to_slot_or_del(robe, slot_wear_suit) - - var/obj/item/weapon/card/id/syndicate/W = new(M) - W.name = "[M.real_name]'s ID Card (Dark Lord)" - W.icon_state = "syndie" - W.access = get_all_accesses() - W.assignment = "Dark Lord" - W.registered_name = M.real_name - M.equip_to_slot_or_del(W, slot_wear_id) + equip_special_id(M,get_all_accesses(), "Dark Lord", /obj/item/weapon/card/id/syndicate, "syndie") if("assassin") M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/clothing/suit/wcoat(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store) - + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = new(M) for(var/obj/item/briefcase_item in sec_briefcase) qdel(briefcase_item) @@ -843,163 +850,236 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that sec_briefcase.contents += new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba sec_briefcase.contents += new /obj/item/ammo_box/a357 - sec_briefcase.contents += new /obj/item/weapon/c4 + sec_briefcase.contents += new /obj/item/weapon/grenade/plastic/c4 + // briefcase must be unlocked by setting the code. M.equip_to_slot_or_del(sec_briefcase, slot_l_hand) - + var/obj/item/weapon/implant/dust/DUST = new /obj/item/weapon/implant/dust(M) + DUST.implant(M) var/obj/item/device/pda/heads/pda = new(M) pda.owner = M.real_name pda.ownjob = "Reaper" pda.name = "PDA-[M.real_name] ([pda.ownjob])" - M.equip_to_slot_or_del(pda, slot_belt) + equip_special_id(M,get_all_accesses(), "Reaper", /obj/item/weapon/card/id/syndicate, "syndie") - var/obj/item/weapon/card/id/syndicate/W = new(M) - W.name = "[M.real_name]'s ID Card (Reaper)" - W.icon_state = "syndie" - W.access = get_all_accesses() - W.assignment = "Reaper" - W.registered_name = M.real_name - M.equip_to_slot_or_del(W, slot_wear_id) + if("spy") + M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/pistol(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/suppressor(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/card/emag(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/chameleon(M), slot_glasses) + var/obj/item/clothing/gloves/combat/G = new /obj/item/clothing/gloves/combat(src) + G.name = "black gloves" + M.equip_to_slot_or_del(G, slot_gloves) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store) + M.equip_to_slot_or_del(new /obj/item/weapon/pen/sleepy(M), slot_r_store) + var/obj/item/weapon/implant/dust/DUST = new /obj/item/weapon/implant/dust(M) + DUST.implant(M) + var/obj/item/weapon/implant/dust/STOR = new /obj/item/weapon/implant/storage(M) + STOR.implant(M) + var/obj/item/device/pda/heads/pda = new(M) + pda.owner = M.real_name + pda.ownjob = "Spy" + pda.name = "PDA-[M.real_name] ([pda.ownjob])" + M.equip_to_slot_or_del(pda, slot_belt) + equip_special_id(M,get_all_accesses(), "Spy", /obj/item/weapon/card/id/syndicate, "syndie") - if("death commando")//Was looking to add this for a while. + if("death commando") M.equip_death_commando() - if("syndicate commando") + if("syndicate agent") + M.equip_or_collect(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) + M.equip_or_collect(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_or_collect(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/device/flashlight(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/card/emag(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt) + M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear) + equip_special_id(M,get_syndicate_access("Syndicate Operative"), "Syndicate Agent", /obj/item/weapon/card/id/syndicate, "syndie") + var/obj/item/device/radio/uplink/U = new /obj/item/device/radio/uplink(M) + U.hidden_uplink.uplink_owner="[M.key]" + U.hidden_uplink.uses = 20 + M.equip_to_slot_or_del(U, slot_r_store) + + if("syndicate operative") + M.equip_or_collect(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) + M.equip_or_collect(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_or_collect(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/pill/initropidril(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/gun/projectile/automatic/pistol(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/ammo_box/magazine/m10mm(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/crowbar/red(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/clothing/glasses/night(M), slot_glasses) + M.equip_or_collect(new /obj/item/weapon/storage/belt/military(M), slot_belt) + M.equip_or_collect(new /obj/item/weapon/grenade/plastic/c4(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer(M), slot_l_store) + M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/device/flashlight(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/clothing/mask/gas/syndicate(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/syndi(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/syndi(M), slot_head) + var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate/alt(M) + R.set_frequency(SYND_FREQ) + M.equip_to_slot_or_del(R, slot_l_ear) + var/obj/item/device/radio/uplink/U = new /obj/item/device/radio/uplink(M) + U.hidden_uplink.uplink_owner="[M.key]" + U.hidden_uplink.uses = 20 + M.equip_to_slot_or_del(U, slot_r_store) + M.equip_or_collect(new /obj/item/weapon/tank/jetpack/oxygen/harness(M), slot_in_backpack) + equip_special_id(M,get_syndicate_access("Syndicate Operative"), "Syndicate Operative", /obj/item/weapon/card/id/syndicate, "syndie") + var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(M) + E.implant(M) + + if("syndicate strike team") M.equip_syndicate_commando() - if("nanotrasen officer") + if("syndicate officer") + M.equip_or_collect(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) + M.equip_or_collect(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_or_collect(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/pill/initropidril(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/clothing/glasses/thermal(M), slot_glasses) + M.equip_or_collect(new /obj/item/weapon/storage/belt/military(M), slot_belt) + M.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer(M), slot_l_store) + M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/clothing/mask/gas/syndicate(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/red/strike(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/red/strike(M), slot_head) + var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate/alt(M) + R.set_frequency(SYND_FREQ) + M.equip_to_slot_or_del(R, slot_l_ear) + var/obj/item/device/radio/uplink/U = new /obj/item/device/radio/uplink(M) + U.hidden_uplink.uplink_owner="[M.key]" + U.hidden_uplink.uses = 50 + M.equip_to_slot_or_del(U, slot_r_store) + M.equip_or_collect(new /obj/item/weapon/tank/jetpack/oxygen/harness(M), slot_in_backpack) + equip_special_id(M,get_all_accesses() + get_syndicate_access("Syndicate Commando"), "Syndicate Officer", /obj/item/weapon/card/id/syndicate, "commander") + var/obj/item/weapon/implant/dust/DUST = new /obj/item/weapon/implant/dust(M) + DUST.implant(M) + if("nt vip guest") + M.equip_or_collect(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform) + M.equip_or_collect(new /obj/item/clothing/shoes/black(M), slot_shoes) + M.equip_or_collect(new /obj/item/clothing/gloves/color/black(M), slot_gloves) + M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + M.equip_or_collect(new /obj/item/clothing/head/that(M), slot_head) + M.equip_or_collect(new /obj/item/device/radio/headset/ert(M), slot_l_ear) + M.equip_or_collect(new /obj/item/device/pda/(M), slot_belt) + equip_special_id(M,get_centcom_access("VIP Guest"), "VIP Guest", /obj/item/weapon/card/id/centcom) + + if("nt navy officer") + M.equip_or_collect(new /obj/item/clothing/under/rank/centcom/officer(M), slot_w_uniform) M.equip_or_collect(new /obj/item/clothing/shoes/centcom(M), slot_shoes) M.equip_or_collect(new /obj/item/clothing/gloves/color/white(M), slot_gloves) - M.equip_or_collect(new /obj/item/device/radio/headset/heads/captain/alt(M), slot_l_ear) + M.equip_or_collect(new /obj/item/device/radio/headset/centcom(M), slot_l_ear) M.equip_or_collect(new /obj/item/clothing/head/beret/centcom/officer(M), slot_head) + M.equip_or_collect(new /obj/item/device/pda/centcom(M), slot_belt) + M.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) + M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/implanter/dust(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(M), slot_in_backpack) + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M) + L.imp_in = M + L.implanted = 1 + M.sec_hud_set_implants() + equip_special_id(M,get_centcom_access("Nanotrasen Navy Officer"), "Nanotrasen Navy Officer", /obj/item/weapon/card/id/centcom) - var/obj/item/device/pda/centcom/pda = new(M) - pda.owner = M.real_name - pda.ownjob = "Nanotrasen Navy Officer" - pda.name = "PDA-[M.real_name] ([pda.ownjob])" - - M.equip_or_collect(pda, slot_r_store) - M.equip_or_collect(new /obj/item/clothing/glasses/sunglasses(M), slot_l_store) - M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_belt) - - var/obj/item/weapon/card/id/centcom/W = new(M) - W.name = "[M.real_name]'s ID Card (Nanotrasen Navy Officer)" - W.assignment = "Nanotrasen Navy Officer" - W.access = get_centcom_access(W.assignment) - W.registered_name = M.real_name - M.equip_or_collect(W, slot_wear_id) - - if("nanotrasen captain") + if("nt navy captain") M.equip_or_collect(new /obj/item/clothing/under/rank/centcom/captain(M), slot_w_uniform) M.equip_or_collect(new /obj/item/clothing/shoes/centcom(M), slot_shoes) M.equip_or_collect(new /obj/item/clothing/gloves/color/white(M), slot_gloves) - M.equip_or_collect(new /obj/item/device/radio/headset/heads/captain/alt(M), slot_l_ear) + M.equip_or_collect(new /obj/item/device/radio/headset/centcom(M), slot_l_ear) M.equip_or_collect(new /obj/item/clothing/head/beret/centcom/captain(M), slot_head) + M.equip_or_collect(new /obj/item/device/pda/centcom(M), slot_belt) + M.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) + M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/implanter/dust(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(M), slot_in_backpack) + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M) + L.imp_in = M + L.implanted = 1 + M.sec_hud_set_implants() + equip_special_id(M,get_centcom_access("Nanotrasen Navy Captain"), "Nanotrasen Navy Captain", /obj/item/weapon/card/id/centcom) - var/obj/item/device/pda/centcom/pda = new(M) - pda.owner = M.real_name - pda.ownjob = "Nanotrasen Navy Captain" - pda.name = "PDA-[M.real_name] ([pda.ownjob])" + if("emergency response team member", "emergency response team leader") + var/datum/response_team/equip_team = null + switch(alert("Level", "Emergency Response Team", "Amber", "Red", "Gamma")) + if("Amber") + equip_team = new /datum/response_team/amber + if("Red") + equip_team = new /datum/response_team/red + if("Gamma") + equip_team = new /datum/response_team/gamma + if(!equip_team) + return + if(dresscode == "emergency response team leader") + equip_team.equip_officer("Commander", M) + else + switch(alert("Loadout Type", "Emergency Response Team", "Security", "Engineer", "Medic")) + if("Commander") + equip_team.equip_officer("Commander", M) + if("Security") + equip_team.equip_officer("Security", M) + if("Engineer") + equip_team.equip_officer("Engineer", M) + if("Medic") + equip_team.equip_officer("Medic", M) + else + to_chat(src, "Invalid ERT Loadout selected") - M.equip_or_collect(pda, slot_r_store) - M.equip_or_collect(new /obj/item/clothing/glasses/sunglasses(M), slot_l_store) - M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_belt) - - var/obj/item/weapon/card/id/centcom/W = new(M) - W.name = "[M.real_name]'s ID Card (Nanotrasen Navy Captain)" - W.access = get_all_accesses() - W.assignment = "Nanotrasen Navy Captain" - W.access = get_centcom_access(W.assignment) - W.registered_name = M.real_name - M.equip_or_collect(W, slot_wear_id) - - if("emergency response team member") - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset/ert/alt(M), slot_l_ear) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert(M), slot_back) - - var/obj/item/weapon/card/id/W = new(M) - W.name = "[M.real_name]'s ID Card (Emergency Response Team - Member)" - W.icon_state = "ERT_empty" - W.assignment = "Emergency Response Team Member" - W.access = get_centcom_access(W.assignment) - W.registered_name = M.real_name - M.equip_to_slot_or_del(W, slot_wear_id) - - var/obj/item/device/pda/centcom/pda = new(M) - pda.owner = M.real_name - pda.ownjob = "Emergency Response Team" - pda.name = "PDA-[M.real_name] ([pda.ownjob])" - - if("emergency response team leader") - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset/ert/alt(M), slot_l_ear) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/commander(M), slot_back) - - var/obj/item/weapon/card/id/W = new(M) - W.name = "[M.real_name]'s ID Card (Emergency Response Team - Leader)" - W.icon_state = "ERT_leader" - W.assignment = "Emergency Response Team Leader" - W.access = get_centcom_access(W.assignment) - W.registered_name = M.real_name - M.equip_to_slot_or_del(W, slot_wear_id) - - var/obj/item/device/pda/centcom/pda = new(M) - pda.owner = M.real_name - pda.ownjob = "Emergency Response Team Leader" - pda.name = "PDA-[M.real_name] ([pda.ownjob])" - - if("special ops officer") + if("nt special ops officer") M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate/combat(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset/centcom(src), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head) // job has /obj/item/clothing/head/beret/centcom/officer/navy + M.equip_to_slot_or_del(new /obj/item/device/pda/centcom(M), slot_belt) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/cyber(M), slot_glasses) // job has /obj/item/clothing/glasses/hud/security/sunglasses + M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_belt) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(M), slot_back) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/deathsquad/officer(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset/ert/alt(src), slot_l_ear) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/cyber(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/matches(M), slot_r_store) - M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/dualsaber/red(M), slot_l_store) - - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/implanter/dust(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/implanter/death_alarm(M), slot_in_backpack) + equip_special_id(M,get_centcom_access("Special Operations Officer"), "Special Operations Officer", /obj/item/weapon/card/id/centcom) + // The following items are unique to this outfit - the special ops officer job does not spawn with them. + M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/dualsaber/red(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/pinpointer/advpinpointer(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(src), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/zipties(src), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/syndie/advance(src), slot_in_backpack) - - - var/obj/item/weapon/card/id/W = new(M) - W.name = "[M.real_name]'s ID Card" - W.icon_state = "commander" - W.assignment = "Special Operations Officer" - W.access = get_centcom_access(W.assignment) - W.registered_name = M.real_name - M.equip_to_slot_or_del(W, slot_wear_id) - - if("special ops formal") - M.equip_or_collect(new /obj/item/clothing/under/rank/centcom/captain(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset/ert/alt(src), slot_l_ear) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/cyber(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/zipties(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/matches(M), slot_r_store) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/advance(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/implanter/loyalty(M), slot_in_backpack) + + if("nt special ops formal") + M.equip_or_collect(new /obj/item/clothing/under/rank/centcom/captain(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset/centcom(src), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/cyber(M), slot_glasses) // special + M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_belt) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/matches(M), slot_r_store) - M.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_l_store) + M.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_in_backpack) var/obj/item/device/pda/centcom/pda = new(M) pda.owner = M.real_name @@ -1008,18 +1088,10 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that pda.name = "PDA-[M.real_name] ([pda.ownjob])" pda.desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a special edition designed for military field work." - M.equip_or_collect(pda, slot_wear_pda) - - M.equip_or_collect(new /obj/item/clothing/glasses/sunglasses(M), slot_l_store) - M.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_r_store) - - var/obj/item/weapon/card/id/W = new(M) - W.name = "[M.real_name]'s ID Card (Special Operations Officer)" - W.icon_state = "commander" - W.assignment = "Special Operations Officer" - W.access = get_centcom_access(W.assignment) - W.registered_name = M.real_name - M.equip_to_slot_or_del(W, slot_wear_id) + M.equip_or_collect(pda, slot_belt) + M.equip_or_collect(new /obj/item/weapon/implanter/dust(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(M), slot_in_backpack) + equip_special_id(M,get_centcom_access("Special Operations Officer"), "Special Operations Officer", /obj/item/weapon/card/id/centcom) if("singuloth knight") M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate/combat(M), slot_w_uniform) @@ -1033,16 +1105,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/claymore/ceremonial(M), slot_belt) M.equip_to_slot_or_del(new /obj/item/weapon/tank/oxygen(M), slot_s_store) M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/knighthammer(M), slot_back) - - - var/obj/item/weapon/card/id/W = new(M) - W.name = "[M.real_name]'s ID Card (Singuloth Knight)" - W.icon_state = "syndie" - W.access = get_all_accesses() - W.access += get_all_centcom_access() - W.assignment = "Singuloth Knight" - W.registered_name = M.real_name - M.equip_to_slot_or_del(W, slot_wear_id) + equip_special_id(M,get_all_accesses(), "Singuloth Knight", /obj/item/weapon/card/id) if("blue wizard") M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) @@ -1055,6 +1118,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff(M), slot_l_hand) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) + equip_special_id(M,get_all_accesses(), "Wizard", /obj/item/weapon/card/id) if("red wizard") M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) @@ -1067,6 +1131,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff(M), slot_l_hand) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) + equip_special_id(M,get_all_accesses(), "Wizard", /obj/item/weapon/card/id) if("marisa wizard") M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) @@ -1079,6 +1144,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff(M), slot_l_hand) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) + equip_special_id(M,get_all_accesses(), "Wizard", /obj/item/weapon/card/id) if("soviet admiral") M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head) @@ -1090,14 +1156,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt) M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) - var/obj/item/weapon/card/id/W = new(M) - W.name = "[M.real_name]'s ID Card" - W.icon_state = "commander" - W.access = get_all_accesses() - W.access += get_all_centcom_access() - W.assignment = "Admiral" - W.registered_name = M.real_name - M.equip_to_slot_or_del(W, slot_wear_id) + equip_special_id(M,get_all_accesses() + get_all_centcom_access(), "Admiral", /obj/item/weapon/card/id, "commander") + //W.icon_state = "commander" if("chrono legionnaire") M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/chronos(M), slot_head) @@ -1109,12 +1169,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/chrono_eraser(M), slot_back) M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(src), slot_s_store) - var/obj/item/weapon/card/id/W = new(M) - W.name = "[M.real_name]'s ID Card" - W.icon_state = "syndie" - W.assignment = "Chrono Legionnaire" - W.registered_name = M.real_name - M.equip_to_slot_or_del(W, slot_wear_id) + equip_special_id(M,get_all_accesses() + get_all_centcom_access(), "Chrono Legionnaire", /obj/item/weapon/card/id/syndicate, "syndie") M.regenerate_icons() @@ -1122,6 +1177,19 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that message_admins("\blue [key_name_admin(usr)] changed the equipment of [key_name_admin(M)] to [dresscode].", 1) return +/client/proc/equip_special_id(var/mob/living/carbon/human/H, var/list/theaccess = null, var/jobtext, var/obj/item/weapon/card/id/id_type = /obj/item/weapon/card/id, var/special_icon = null) + if(!check_rights(R_EVENT)) + return + + var/obj/item/weapon/card/id/W = new id_type(H) + if(special_icon) + W.icon_state = special_icon + W.name = "[H.real_name]'s ID Card ([jobtext])" + W.access = theaccess + W.assignment = "[jobtext]" + W.registered_name = H.real_name + H.equip_to_slot_or_del(W, slot_wear_id) + /client/proc/startSinglo() set category = "Debug" set name = "Start Singularity" diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index 70505b8abdf..9b9a7c6caae 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -83,20 +83,20 @@ "_default" = "NO_FILTER" ) var/output = "Radio Report
        " - for (var/fq in radio_controller.frequencies) + for(var/fq in radio_controller.frequencies) output += "Freq: [fq]
        " var/list/datum/radio_frequency/fqs = radio_controller.frequencies[fq] - if (!fqs) + if(!fqs) output += "  ERROR
        " continue - for (var/filter in fqs.devices) + for(var/filter in fqs.devices) var/list/f = fqs.devices[filter] - if (!f) + if(!f) output += "  [filters[filter]]: ERROR
        " continue output += "  [filters[filter]]: [f.len]
        " - for (var/device in f) - if (isobj(device)) + for(var/device in f) + if(isobj(device)) output += "    [device] ([device:x],[device:y],[device:z] in area [get_area(device:loc)])
        " else output += "    [device]
        " diff --git a/code/modules/admin/verbs/freeze.dm b/code/modules/admin/verbs/freeze.dm index f6d31d6bede..3537dd3d6df 100644 --- a/code/modules/admin/verbs/freeze.dm +++ b/code/modules/admin/verbs/freeze.dm @@ -93,7 +93,7 @@ var/global/list/frozen_mob_list = list() return else if(usr) - if (usr.client) + if(usr.client) if(usr.client.holder) var/adminomaly = new/obj/effect/overlay/adminoverlay if(M.can_move == 1) diff --git a/code/modules/admin/verbs/honksquad.dm b/code/modules/admin/verbs/honksquad.dm index dd37a828302..0833ccdb669 100644 --- a/code/modules/admin/verbs/honksquad.dm +++ b/code/modules/admin/verbs/honksquad.dm @@ -50,7 +50,7 @@ var/global/sent_honksquad = 0 //Spawns HONKsquad and equips them. for(var/obj/effect/landmark/L in landmarks_list) if(honksquad_number<=0) break - if (L.name == "HONKsquad") + if(L.name == "HONKsquad") honk_leader_selected = honksquad_number == 1?1:0 var/mob/living/carbon/human/new_honksquad = create_honksquad(L, honk_leader_selected) @@ -59,7 +59,7 @@ var/global/sent_honksquad = 0 new_honksquad.key = pick(commandos) commandos -= new_honksquad.key new_honksquad.internal = new_honksquad.s_store - new_honksquad.internals.icon_state = "internal1" + new_honksquad.update_internals_hud_icon(1) //So they don't forget their code or mission. new_honksquad.mind.store_memory("Mission: \red [input].") @@ -111,7 +111,7 @@ var/global/sent_honksquad = 0 equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(src), slot_w_uniform) equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(src), slot_wear_mask) equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(src), slot_shoes) - equip_to_slot_or_del(new /obj/item/device/pda/clown(src), slot_wear_pda) + equip_to_slot_or_del(new /obj/item/device/pda/clown(src), slot_belt) equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(src), slot_wear_mask) equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/weapon/bikehorn(src), slot_in_backpack) diff --git a/code/modules/admin/verbs/map_template_loadverb.dm b/code/modules/admin/verbs/map_template_loadverb.dm index fc010de8a43..f447810d860 100644 --- a/code/modules/admin/verbs/map_template_loadverb.dm +++ b/code/modules/admin/verbs/map_template_loadverb.dm @@ -1,10 +1,9 @@ /client/proc/map_template_load() set category = "Debug" - set name = "Map Template - Place" + set name = "Map template - Place" if(!holder) return - var/datum/map_template/template var/map = input(usr, "Choose a Map Template to place at your CURRENT LOCATION","Place Map Template") as null|anything in map_templates @@ -16,22 +15,27 @@ if(!T) return + if(!template.fits_in_map_bounds(T, centered = TRUE)) + to_chat(usr, "Map is too large to fit in bounds. Map's dimensions: ([template.width], [template.height])") + return + var/list/preview = list() for(var/S in template.get_affected_turfs(T,centered = TRUE)) preview += image('icons/turf/overlays.dmi',S,"greenOverlay") usr.client.images += preview if(alert(usr,"Confirm location.","Template Confirm","Yes","No") == "Yes") - template.load(T, centered = TRUE) - message_admins("[key_name_admin(usr)] has placed a map template ([template.name]) at (JMP)") + var/timer = start_watch() + message_admins("[key_name_admin(usr)] has started to place the map template ([template.name]) at (JMP)") + if(template.load(T, centered = TRUE)) + message_admins("[key_name_admin(usr)] has placed a map template ([template.name]) at (JMP). Took [stop_watch(timer)]s.") + else + to_chat(usr, "Failed to place map") usr.client.images -= preview /client/proc/map_template_upload() set category = "Debug" set name = "Map Template - Upload" - if(!holder) - return - var/map = input(usr, "Choose a Map Template to upload to template storage","Upload Map Template") as null|file if(!map) return @@ -39,7 +43,12 @@ to_chat(usr, "Bad map file: [map]") return + var/timer = start_watch() + message_admins("[key_name_admin(usr)] has begun uploading a map template ([map])") var/datum/map_template/M = new(map=map, rename="[map]") - M.preload_size(map) - map_templates[M.name] = M - message_admins("[key_name_admin(usr)] has uploaded a map template ([map])") + if(M.preload_size(map)) + to_chat(usr, "Map template '[map]' ready to place ([M.width]x[M.height])") + map_templates[M.name] = M + message_admins("[key_name_admin(usr)] has uploaded a map template ([map]). Took [stop_watch(timer)]s.") + else + to_chat(usr, "Map template '[map]' failed to load properly") diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index c59cd417c91..6578898a0bd 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -86,7 +86,7 @@ var/intercom_range_display_status = 0 if(!(locate(/obj/structure/grille,T))) var/window_check = 0 for(var/obj/structure/window/W in T) - if (W.dir == turn(C1.dir,180) || W.is_fulltile() ) + if(W.dir == turn(C1.dir,180) || W.is_fulltile() ) window_check = 1 break if(!window_check) @@ -115,7 +115,7 @@ var/intercom_range_display_status = 0 for(var/obj/item/device/radio/intercom/I in world) for(var/turf/T in orange(7,I)) var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T) - if (!(F in view(7,I.loc))) + if(!(F in view(7,I.loc))) qdel(F) feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/massmodvar.dm b/code/modules/admin/verbs/massmodvar.dm index 185d513d2fc..c416f224cf9 100644 --- a/code/modules/admin/verbs/massmodvar.dm +++ b/code/modules/admin/verbs/massmodvar.dm @@ -34,7 +34,7 @@ return var/list/names = list() - for (var/V in O.vars) + for(var/V in O.vars) names += V names = sortList(names) @@ -72,7 +72,7 @@ else if(isicon(var_value)) to_chat(usr, "Variable appears to be ICON.") - var_value = "\icon[var_value]" + var_value = "[bicon(var_value)]" default = "icon" else if(istype(var_value,/atom) || istype(var_value,/datum)) @@ -123,7 +123,7 @@ var/original_name - if (!istype(O, /atom)) + if(!istype(O, /atom)) original_name = "\ref[O] ([O])" else original_name = O:name @@ -135,33 +135,33 @@ if(method) if(istype(O, /mob)) for(var/mob/M in mob_list) - if ( istype(M , O.type) ) + if( istype(M , O.type) ) M.vars[variable] = O.vars[variable] else if(istype(O, /obj)) for(var/obj/A in world) - if ( istype(A , O.type) ) + if( istype(A , O.type) ) A.vars[variable] = O.vars[variable] else if(istype(O, /turf)) for(var/turf/A in world) - if ( istype(A , O.type) ) + if( istype(A , O.type) ) A.vars[variable] = O.vars[variable] else if(istype(O, /mob)) for(var/mob/M in mob_list) - if (M.type == O.type) + if(M.type == O.type) M.vars[variable] = O.vars[variable] else if(istype(O, /obj)) for(var/obj/A in world) - if (A.type == O.type) + if(A.type == O.type) A.vars[variable] = O.vars[variable] else if(istype(O, /turf)) for(var/turf/A in world) - if (A.type == O.type) + if(A.type == O.type) A.vars[variable] = O.vars[variable] if("edit referenced object") @@ -175,32 +175,32 @@ if(method) if(istype(O, /mob)) for(var/mob/M in mob_list) - if ( istype(M , O.type) ) + if( istype(M , O.type) ) M.vars[variable] = O.vars[variable] else if(istype(O, /obj)) for(var/obj/A in world) - if ( istype(A , O.type) ) + if( istype(A , O.type) ) A.vars[variable] = O.vars[variable] else if(istype(O, /turf)) for(var/turf/A in world) - if ( istype(A , O.type) ) + if( istype(A , O.type) ) A.vars[variable] = O.vars[variable] else if(istype(O, /mob)) for(var/mob/M in mob_list) - if (M.type == O.type) + if(M.type == O.type) M.vars[variable] = O.vars[variable] else if(istype(O, /obj)) for(var/obj/A in world) - if (A.type == O.type) + if(A.type == O.type) A.vars[variable] = O.vars[variable] else if(istype(O, /turf)) for(var/turf/A in world) - if (A.type == O.type) + if(A.type == O.type) A.vars[variable] = O.vars[variable] if("num") @@ -216,7 +216,7 @@ if(method) if(istype(O, /mob)) for(var/mob/M in mob_list) - if ( istype(M , O.type) ) + if( istype(M , O.type) ) if(variable=="light_range") M.set_light(new_value) else @@ -224,7 +224,7 @@ else if(istype(O, /obj)) for(var/obj/A in world) - if ( istype(A , O.type) ) + if( istype(A , O.type) ) if(variable=="light_range") A.set_light(new_value) else @@ -232,7 +232,7 @@ else if(istype(O, /turf)) for(var/turf/A in world) - if ( istype(A , O.type) ) + if( istype(A , O.type) ) if(variable=="light_range") A.set_light(new_value) else @@ -241,7 +241,7 @@ else if(istype(O, /mob)) for(var/mob/M in mob_list) - if (M.type == O.type) + if(M.type == O.type) if(variable=="light_range") M.set_light(new_value) else @@ -249,7 +249,7 @@ else if(istype(O, /obj)) for(var/obj/A in world) - if (A.type == O.type) + if(A.type == O.type) if(variable=="light_range") A.set_light(new_value) else @@ -257,7 +257,7 @@ else if(istype(O, /turf)) for(var/turf/A in world) - if (A.type == O.type) + if(A.type == O.type) if(variable=="light_range") A.set_light(new_value) else @@ -271,32 +271,32 @@ if(method) if(istype(O, /mob)) for(var/mob/M in mob_list) - if ( istype(M , O.type) ) + if( istype(M , O.type) ) M.vars[variable] = O.vars[variable] else if(istype(O, /obj)) for(var/obj/A in world) - if ( istype(A , O.type) ) + if( istype(A , O.type) ) A.vars[variable] = O.vars[variable] else if(istype(O, /turf)) for(var/turf/A in world) - if ( istype(A , O.type) ) + if( istype(A , O.type) ) A.vars[variable] = O.vars[variable] else if(istype(O, /mob)) for(var/mob/M in mob_list) - if (M.type == O.type) + if(M.type == O.type) M.vars[variable] = O.vars[variable] else if(istype(O, /obj)) for(var/obj/A in world) - if (A.type == O.type) + if(A.type == O.type) A.vars[variable] = O.vars[variable] else if(istype(O, /turf)) for(var/turf/A in world) - if (A.type == O.type) + if(A.type == O.type) A.vars[variable] = O.vars[variable] if("file") @@ -307,32 +307,32 @@ if(method) if(istype(O, /mob)) for(var/mob/M in mob_list) - if ( istype(M , O.type) ) + if( istype(M , O.type) ) M.vars[variable] = O.vars[variable] else if(istype(O.type, /obj)) for(var/obj/A in world) - if ( istype(A , O.type) ) + if( istype(A , O.type) ) A.vars[variable] = O.vars[variable] else if(istype(O.type, /turf)) for(var/turf/A in world) - if ( istype(A , O.type) ) + if( istype(A , O.type) ) A.vars[variable] = O.vars[variable] else if(istype(O, /mob)) for(var/mob/M in mob_list) - if (M.type == O.type) + if(M.type == O.type) M.vars[variable] = O.vars[variable] else if(istype(O.type, /obj)) for(var/obj/A in world) - if (A.type == O.type) + if(A.type == O.type) A.vars[variable] = O.vars[variable] else if(istype(O.type, /turf)) for(var/turf/A in world) - if (A.type == O.type) + if(A.type == O.type) A.vars[variable] = O.vars[variable] if("icon") @@ -342,33 +342,33 @@ if(method) if(istype(O, /mob)) for(var/mob/M in mob_list) - if ( istype(M , O.type) ) + if( istype(M , O.type) ) M.vars[variable] = O.vars[variable] else if(istype(O, /obj)) for(var/obj/A in world) - if ( istype(A , O.type) ) + if( istype(A , O.type) ) A.vars[variable] = O.vars[variable] else if(istype(O, /turf)) for(var/turf/A in world) - if ( istype(A , O.type) ) + if( istype(A , O.type) ) A.vars[variable] = O.vars[variable] else if(istype(O, /mob)) for(var/mob/M in mob_list) - if (M.type == O.type) + if(M.type == O.type) M.vars[variable] = O.vars[variable] else if(istype(O, /obj)) for(var/obj/A in world) - if (A.type == O.type) + if(A.type == O.type) A.vars[variable] = O.vars[variable] else if(istype(O, /turf)) for(var/turf/A in world) - if (A.type == O.type) + if(A.type == O.type) A.vars[variable] = O.vars[variable] log_admin("[key_name(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]") diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 966e584f15e..0be55889bc2 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -17,7 +17,7 @@ var/list/forbidden_varedit_object_types = list( set category = "Debug" set name = "Edit Ticker Variables" - if (ticker == null) + if(ticker == null) to_chat(src, "Game hasn't started yet.") else src.modify_variables(ticker) @@ -308,7 +308,7 @@ var/list/forbidden_varedit_object_types = list( else var/list/names = list() - for (var/V in O.vars) + for(var/V in O.vars) names += V names = sortList(names) @@ -328,7 +328,7 @@ var/list/forbidden_varedit_object_types = list( if(default == "num") dir = 1 else if(default == "icon") - var_value = "\icon[var_value]" + var_value = "[bicon(var_value)]" to_chat(usr, "Variable contains: [var_value]") if(dir) @@ -347,7 +347,7 @@ var/list/forbidden_varedit_object_types = list( var/original_name - if (!istype(O, /atom)) + if(!istype(O, /atom)) original_name = "\ref[O] ([O])" else original_name = O:name @@ -465,7 +465,7 @@ var/list/forbidden_varedit_object_types = list( else if(isicon(variable)) to_chat(usr, "Variable appears to be ICON.") - variable = "\icon[variable]" + variable = "[bicon(variable)]" class = "icon" else if(istype(variable,/matrix)) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index c4c09197d4e..997f33fd137 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -62,7 +62,7 @@ client/proc/one_click_antag() if(player_old_enough_antag(applicant.client,ROLE_TRAITOR)) if(!applicant.stat) if(applicant.mind) - if (!applicant.mind.special_role) + if(!applicant.mind.special_role) if(!jobban_isbanned(applicant, "traitor") && !jobban_isbanned(applicant, "Syndicate")) if(!(applicant.mind.assigned_role in temp.restricted_jobs)) if(!(applicant.client.prefs.species in temp.protected_species)) @@ -96,7 +96,7 @@ client/proc/one_click_antag() if(player_old_enough_antag(applicant.client,ROLE_CHANGELING)) if(!applicant.stat) if(applicant.mind) - if (!applicant.mind.special_role) + if(!applicant.mind.special_role) if(!jobban_isbanned(applicant, "changeling") && !jobban_isbanned(applicant, "Syndicate")) if(!(applicant.mind.assigned_role in temp.restricted_jobs)) if(!(applicant.client.prefs.species in temp.protected_species)) @@ -276,13 +276,13 @@ client/proc/one_click_antag() if(closet_spawn) new /obj/structure/closet/syndicate/nuclear(closet_spawn.loc) - for (var/obj/effect/landmark/A in /area/syndicate_station/start)//Because that's the only place it can BE -Sieve - if (A.name == "Syndicate-Gear-Closet") + for(var/obj/effect/landmark/A in /area/syndicate_station/start)//Because that's the only place it can BE -Sieve + if(A.name == "Syndicate-Gear-Closet") new /obj/structure/closet/syndicate/personal(A.loc) qdel(A) continue - if (A.name == "Syndicate-Bomb") + if(A.name == "Syndicate-Bomb") new /obj/effect/spawner/newbomb/timer/syndicate(A.loc) qdel(A) continue @@ -302,7 +302,7 @@ client/proc/one_click_antag() var/I = image('icons/mob/mob.dmi', loc = synd_mind_1.current, icon_state = "synd") synd_mind.current.client.images += I - for (var/obj/machinery/nuclearbomb/bomb in world) + for(var/obj/machinery/nuclearbomb/bomb in world) bomb.r_code = nuke_code // All the nukes are set to this code. return 1 @@ -355,10 +355,10 @@ client/proc/one_click_antag() if(candidates.len) var/numagents = 6 //Spawns commandos and equips them. - for (var/obj/effect/landmark/L in /area/syndicate_mothership/elite_squad) + for(var/obj/effect/landmark/L in /area/syndicate_mothership/elite_squad) if(numagents<=0) break - if (L.name == "Syndicate-Commando") + if(L.name == "Syndicate-Commando") syndicate_leader_selected = numagents == 1?1:0 var/mob/living/carbon/human/new_syndicate_commando = create_syndicate_death_commando(L, syndicate_leader_selected) @@ -374,7 +374,7 @@ client/proc/one_click_antag() new_syndicate_commando.key = theghost.key new_syndicate_commando.internal = new_syndicate_commando.s_store - new_syndicate_commando.internals.icon_state = "internal1" + new_syndicate_commando.update_internals_hud_icon(1) //So they don't forget their code or mission. @@ -385,8 +385,8 @@ client/proc/one_click_antag() if(numagents >= 6) return 0 - for (var/obj/effect/landmark/L in /area/shuttle/syndicate_elite) - if (L.name == "Syndicate-Commando-Bomb") + for(var/obj/effect/landmark/L in /area/shuttle/syndicate_elite) + if(L.name == "Syndicate-Commando-Bomb") new /obj/effect/spawner/newbomb/timer/syndicate(L.loc) return 1 @@ -468,7 +468,7 @@ client/proc/one_click_antag() var/max_raiders = 1 var/raiders = max_raiders //Spawns vox raiders and equips them. - for (var/obj/effect/landmark/L in world) + for(var/obj/effect/landmark/L in world) if(L.name == "voxstart") if(raiders<=0) break @@ -550,7 +550,7 @@ client/proc/one_click_antag() if(player_old_enough_antag(applicant.client,ROLE_VAMPIRE)) if(!applicant.stat) if(applicant.mind) - if (!applicant.mind.special_role) + if(!applicant.mind.special_role) if(!jobban_isbanned(applicant, "vampire") && !jobban_isbanned(applicant, "Syndicate")) if(!(applicant.job in temp.restricted_jobs)) if(!(applicant.client.prefs.species in temp.protected_species)) @@ -599,7 +599,7 @@ client/proc/one_click_antag() var/teamOneMembers = 5 var/teamTwoMembers = 5 var/datum/preferences/A = new() - for (var/obj/effect/landmark/L in world) + for(var/obj/effect/landmark/L in world) if(L.name == "tdome1") if(teamOneMembers<=0) break diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 4eeab674a88..6723299c5a8 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -27,8 +27,8 @@ to_chat(H, "Objective #[obj_count]: [OBJ.explanation_text]") obj_count++ - for (var/obj/item/I in H) - if (istype(I, /obj/item/weapon/implant)) + for(var/obj/item/I in H) + if(istype(I, /obj/item/weapon/implant)) continue if(istype(I, /obj/item/organ)) continue @@ -55,7 +55,7 @@ message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ONE! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1) log_admin("[key_name(usr)] used there can be only one.") nologevent = 1 - to_chat(world, sound('sound/music/THUNDERDOME.ogg')) + world << sound('sound/music/THUNDERDOME.ogg') /client/proc/only_me() if(!ticker) @@ -101,4 +101,4 @@ message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ME! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1) log_admin("[key_name(usr)] used there can be only me.") nologevent = 1 - to_chat(world, sound('sound/music/THUNDERDOME.ogg')) + world << sound('sound/music/THUNDERDOME.ogg') diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm index 5072b43383e..a88270077d6 100644 --- a/code/modules/admin/verbs/onlyoneteam.dm +++ b/code/modules/admin/verbs/onlyoneteam.dm @@ -15,8 +15,8 @@ var/datum/preferences/A = new() // Randomize appearance A.copy_to(H) - for (var/obj/item/I in H) - if (istype(I, /obj/item/weapon/implant)) + for(var/obj/item/I in H) + if(istype(I, /obj/item/weapon/implant)) continue if(istype (I, /obj/item/organ)) continue diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 170d96754ea..c35b4d7596e 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -13,7 +13,7 @@ return var/image/cross = image('icons/obj/storage.dmi',"bible") - msg = "\blue \icon[cross] PRAY: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src, "holder")]) (CA) (SC): [msg]" + msg = "\blue [bicon(cross)] PRAY: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src, "holder")]) (CA) (SC): [msg]" for(var/client/X in admins) if(check_rights(R_EVENT,0,X.mob)) @@ -50,9 +50,11 @@ if(X.prefs.sound & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' -/proc/ERT_Announce(var/text , var/mob/Sender) +/proc/ERT_Announce(var/text , var/mob/Sender, var/repeat_warning) var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) - msg = "\blue ERT REQUEST: [key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, "holder")]) (CA) (BSA) (REPLY): [msg]" + msg = "ERT REQUEST: [key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, "holder")]) (CA) (BSA) (RESPOND): [msg]" + if(repeat_warning) + msg += "
        WARNING: ERT request has gone 5 minutes with no reply!" for(var/client/X in admins) if(check_rights(R_EVENT,0,X.mob)) to_chat(X, msg) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index c236432e9d2..c44ff5c1af6 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -23,7 +23,7 @@ if(!check_rights(R_ADMIN)) return - if (ismob(M)) + if(ismob(M)) if(istype(M, /mob/living/silicon/ai)) alert("The AI can't be sent to prison you jerk!", null, null, null, null, null) return @@ -56,10 +56,10 @@ var/msg = input("Message:", text("Subtle PM to [M.key]")) as text - if (!msg) + if(!msg) return if(usr) - if (usr.client) + if(usr.client) if(usr.client.holder) to_chat(M, "\bold You hear a voice in your head... \italic [msg]") @@ -108,7 +108,7 @@ var/msg = input("Message:", text("Enter the text you wish to appear to everyone:")) as text - if (!msg) + if(!msg) return to_chat(world, "[msg]") log_admin("GlobalNarrate: [key_name(usr)] : [msg]") @@ -407,7 +407,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if("Death Commando")//Leaves them at late-join spawn. new_character.equip_death_commando() new_character.internal = new_character.s_store - new_character.internals.icon_state = "internal1" + new_character.update_internals_hud_icon(1) else//They may also be a cyborg or AI. switch(new_character.mind.assigned_role) if("Cyborg")//More rigging to make em' work and check if they're traitor. @@ -561,7 +561,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if("No") to_chat(world, "\red [from] available at all communications consoles.") - for (var/obj/machinery/computer/communications/C in machines) + for(var/obj/machinery/computer/communications/C in machines) if(! (C.stat & (BROKEN|NOPOWER) ) ) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc ) P.name = "[from]" @@ -581,7 +581,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if("No") to_chat(world, "\red New Nanotrasen Update available at all communication consoles.") - for (var/obj/machinery/computer/communications/C in machines) + for(var/obj/machinery/computer/communications/C in machines) if(! (C.stat & (BROKEN|NOPOWER) ) ) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc ) P.name = "'[command_name()] Update.'" @@ -590,7 +590,7 @@ Traitors and the like can also be revived with the previous role mostly intact. C.messagetitle.Add("[command_name()] Update") C.messagetext.Add(P.info) -// to_chat(world, sound('sound/AI/commandreport.ogg')) +// world << sound('sound/AI/commandreport.ogg') log_admin("[key_name(src)] has created a communications report: [input]") message_admins("[key_name_admin(src)] has created a communications report", 1) feedback_add_details("admin_verb","CCR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -603,7 +603,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!check_rights(R_ADMIN)) return - if (alert(src, "Are you sure you want to delete:\n[O]\nat ([O.x], [O.y], [O.z])?", "Confirmation", "Yes", "No") == "Yes") + if(alert(src, "Are you sure you want to delete:\n[O]\nat ([O.x], [O.y], [O.z])?", "Confirmation", "Yes", "No") == "Yes") log_admin("[key_name(usr)] deleted [O] at ([O.x],[O.y],[O.z])") message_admins("[key_name_admin(usr)] deleted [O] at ([O.x],[O.y],[O.z])", 1) feedback_add_details("admin_verb","DEL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -643,9 +643,9 @@ Traitors and the like can also be revived with the previous role mostly intact. var/flames = input("Range of flames. -1 to none", text("Input")) as num|null if(flames == null) return - if ((devastation != -1) || (heavy != -1) || (light != -1) || (flash != -1) || (flames != -1)) - if ((devastation > 20) || (heavy > 20) || (light > 20) || (flames > 20)) - if (alert(src, "Are you sure you want to do this? It will laaag.", "Confirmation", "Yes", "No") == "No") + if((devastation != -1) || (heavy != -1) || (light != -1) || (flash != -1) || (flames != -1)) + if((devastation > 20) || (heavy > 20) || (light > 20) || (flames > 20)) + if(alert(src, "Are you sure you want to do this? It will laaag.", "Confirmation", "Yes", "No") == "No") return explosion(O, devastation, heavy, light, flash, null, null,flames) @@ -668,7 +668,7 @@ Traitors and the like can also be revived with the previous role mostly intact. var/light = input("Range of light pulse.", text("Input")) as num|null if(light == null) return - if (heavy || light) + if(heavy || light) empulse(O, heavy, light) log_admin("[key_name(usr)] created an EM pulse ([heavy], [light]) at ([O.x],[O.y],[O.z])") @@ -710,7 +710,7 @@ Traitors and the like can also be revived with the previous role mostly intact. var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") if(confirm == "Yes") - if (istype(mob, /mob/dead/observer)) // so they don't spam gibs everywhere + if(istype(mob, /mob/dead/observer)) // so they don't spam gibs everywhere return else mob.gib() @@ -791,7 +791,7 @@ Traitors and the like can also be revived with the previous role mostly intact. set category = "Admin" set name = "Toggle Deny Shuttle" - if (!ticker) + if(!ticker) return if(!check_rights(R_ADMIN)) @@ -824,7 +824,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!check_rights(R_SERVER|R_EVENT)) return - if (ticker && ticker.mode) + if(ticker && ticker.mode) to_chat(usr, "Nope you can't do this, the game's already started. This only works before rounds!") return @@ -868,6 +868,30 @@ Traitors and the like can also be revived with the previous role mostly intact. message_admins("Admin [key_name_admin(usr)] has disabled random events.", 1) feedback_add_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/client/proc/reset_all_tcs() + set category = "Admin" + set name = "Reset Telecomms Scripts" + set desc = "Blanks all telecomms scripts from all telecomms servers" + + if(!holder || !holder.rights || !holder.rights & R_ADMIN) + to_chat(usr, "Admin only.") + return + + var/confirm = alert(src, "You sure you want to blank all NTSL scripts?", "Confirm", "Yes", "No") + if(confirm != "Yes") + return + + for(var/obj/machinery/telecomms/server/S in telecomms_list) + var/datum/TCS_Compiler/C = S.Compiler + S.rawcode = "" + C.Compile("") + for(var/obj/machinery/computer/telecomms/traffic/T in machines) + T.storedcode = "" + log_admin("[key_name(usr)] blanked all telecomms scripts.") + message_admins("[key_name_admin(usr)] blanked all telecomms scripts.") + feedback_add_details("admin_verb","RAT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + /client/proc/toggle_ert_calling() set category = "Event" set name = "Toggle ERT" @@ -886,4 +910,3 @@ Traitors and the like can also be revived with the previous role mostly intact. to_chat(usr, "\red ERT has been Disabled.") log_admin("Admin [key_name(src)] has disabled ERT calling.") message_admins("Admin [key_name_admin(usr)] has disabled ERT calling.", 1) - diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index 142bb8203cd..e76545f4748 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -55,7 +55,7 @@ var/global/sent_strike_team = 0 //Spawns commandos and equips them. for(var/obj/effect/landmark/L in landmarks_list) if(commando_number<=0) break - if (L.name == "Commando") + if(L.name == "Commando") leader_selected = commando_number == 1?1:0 var/mob/living/carbon/human/new_commando = create_death_commando(L, leader_selected) @@ -64,7 +64,7 @@ var/global/sent_strike_team = 0 new_commando.key = pick(commandos) commandos -= new_commando.key new_commando.internal = new_commando.s_store - new_commando.internals.icon_state = "internal1" + new_commando.update_internals_hud_icon(1) //So they don't forget their code or mission. if(nuke_code) @@ -76,8 +76,8 @@ var/global/sent_strike_team = 0 commando_number-- //Spawns the rest of the commando gear. - for (var/obj/effect/landmark/L in landmarks_list) - if (L.name == "Commando_Manual") + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "Commando_Manual") //new /obj/item/weapon/gun/energy/pulse_rifle(L.loc) var/obj/item/weapon/paper/P = new(L.loc) P.info = "

        Good morning soldier!. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:
        #1 Work as a team.
        #2 Accomplish your objective at all costs.
        #3 Leave no witnesses.
        You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.
        If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.

        In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations LEADER is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.

        Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.
        First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.
        To make the device functional:
        #1 Place bomb in designated detonation zone
        #2 Extend and anchor bomb (attack with hand).
        #3 Insert Nuclear Auth. Disk into slot.
        #4 Type numeric code into keypad ([nuke_code]).
        Note: If you make a mistake press R to reset the device.
        #5 Press the E button to log onto the device.
        You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.
        Note: Toggle off the SAFETY.
        Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
        Note: THE BOMB IS STILL SET AND WILL DETONATE
        Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.

        The nuclear authorization code is: [nuke_code ? nuke_code : "None provided"]

        Good luck, soldier!

        " @@ -87,8 +87,8 @@ var/global/sent_strike_team = 0 P.stamp(stamp) qdel(stamp) - for (var/obj/effect/landmark/L in landmarks_list) - if (L.name == "Commando-Bomb") + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "Commando-Bomb") new /obj/effect/spawner/newbomb/timer/syndicate(L.loc) qdel(L) @@ -125,7 +125,7 @@ var/global/sent_strike_team = 0 var/obj/item/device/radio/R = new /obj/item/device/radio/headset/alt(src) R.set_frequency(DTH_FREQ) equip_to_slot_or_del(R, slot_l_ear) - if (leader_selected == 0) + if(leader_selected == 0) equip_to_slot_or_del(new /obj/item/clothing/under/color/green(src), slot_w_uniform) else equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(src), slot_w_uniform) @@ -143,8 +143,8 @@ var/global/sent_strike_team = 0 equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack) - if (!leader_selected) - equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack) + if(!leader_selected) + equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(src), slot_in_backpack) else equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack) diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm index 054b5469d9b..3669ba2ba13 100644 --- a/code/modules/admin/verbs/striketeam_syndicate.dm +++ b/code/modules/admin/verbs/striketeam_syndicate.dm @@ -32,7 +32,7 @@ var/global/sent_syndicate_strike_team = 0 sent_syndicate_strike_team = 1 - //if (emergency_shuttle.can_recall()) + //if(emergency_shuttle.can_recall()) // emergency_shuttle.recall() //why, exactly? Admins can do this themselves. var/syndicate_commando_number = syndicate_commandos_possible //for selecting a leader @@ -62,7 +62,7 @@ var/global/sent_syndicate_strike_team = 0 //Spawns commandos and equips them. for(var/obj/effect/landmark/L in landmarks_list) if(syndicate_commando_number<=0) break - if (L.name == "Syndicate-Commando") + if(L.name == "Syndicate-Commando") syndicate_leader_selected = syndicate_commando_number == 1?1:0 var/mob/living/carbon/human/new_syndicate_commando = create_syndicate_death_commando(L, syndicate_leader_selected) @@ -71,7 +71,7 @@ var/global/sent_syndicate_strike_team = 0 new_syndicate_commando.key = pick(commandos) commandos -= new_syndicate_commando.key new_syndicate_commando.internal = new_syndicate_commando.s_store - new_syndicate_commando.internals.icon_state = "internal1" + new_syndicate_commando.update_internals_hud_icon(1) //So they don't forget their code or mission. if(nuke_code) @@ -83,15 +83,15 @@ var/global/sent_syndicate_strike_team = 0 syndicate_commando_number-- //Spawns the rest of the commando gear. -// for (var/obj/effect/landmark/L) - // if (L.name == "Commando_Manual") +// for(var/obj/effect/landmark/L) + // if(L.name == "Commando_Manual") //new /obj/item/weapon/gun/energy/pulse_rifle(L.loc) // var/obj/item/weapon/paper/P = new(L.loc) // P.info = "

        Good morning soldier!. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:
        #1 Work as a team.
        #2 Accomplish your objective at all costs.
        #3 Leave no witnesses.
        You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.
        If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.

        In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations LEADER is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.

        Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.
        First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.
        To make the device functional:
        #1 Place bomb in designated detonation zone
        #2 Extend and anchor bomb (attack with hand).
        #3 Insert Nuclear Auth. Disk into slot.
        #4 Type numeric code into keypad ([nuke_code]).
        Note: If you make a mistake press R to reset the device.
        #5 Press the E button to log onto the device.
        You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.
        Note: Toggle off the SAFETY.
        Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
        Note: THE BOMB IS STILL SET AND WILL DETONATE
        Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.

        The nuclear authorization code is: [nuke_code ? nuke_code : "None provided"]

        Good luck, soldier!

        " // P.name = "Spec. Ops. Manual" - for (var/obj/effect/landmark/L in landmarks_list) - if (L.name == "Syndicate-Commando-Bomb") + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "Syndicate-Commando-Bomb") new /obj/effect/spawner/newbomb/timer/syndicate(L.loc) qdel(L) @@ -131,12 +131,12 @@ var/global/sent_syndicate_strike_team = 0 equip_to_slot_or_del(R, slot_l_ear) equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(src), slot_w_uniform) equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/syndie/advance(src), slot_shoes) - if (!syndicate_leader_selected) + if(!syndicate_leader_selected) equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/strike(src), slot_wear_suit) else equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/red/strike(src), slot_wear_suit) equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(src), slot_gloves) - if (!syndicate_leader_selected) + if(!syndicate_leader_selected) equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/strike(src), slot_head) else equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/red/strike(src), slot_head) @@ -148,10 +148,10 @@ var/global/sent_syndicate_strike_team = 0 equip_to_slot_or_del(new /obj/item/ammo_box/magazine/m45(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(src), slot_in_backpack) - equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack) + equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack) - if (!syndicate_leader_selected) - equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack) + if(!syndicate_leader_selected) + equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/weapon/card/emag(src), slot_in_backpack) else equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack) diff --git a/code/modules/admin/verbs/vox_raiders.dm b/code/modules/admin/verbs/vox_raiders.dm index b2cc9336bf5..251ec478381 100644 --- a/code/modules/admin/verbs/vox_raiders.dm +++ b/code/modules/admin/verbs/vox_raiders.dm @@ -48,7 +48,7 @@ var/global/vox_tick = 1 equip_to_slot_or_del(new /obj/item/weapon/circular_saw(src), slot_l_store) equip_to_slot_or_del(new /obj/item/weapon/gun/dartgun/vox/medical, slot_r_hand) - equip_to_slot_or_del(new /obj/item/clothing/mask/breath(src), slot_wear_mask) + equip_to_slot_or_del(new /obj/item/clothing/mask/breath/vox(src), slot_wear_mask) equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(src), slot_back) equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_r_store) @@ -75,6 +75,6 @@ var/global/vox_tick = 1 */ vox_tick++ - if (vox_tick > 4) vox_tick = 1 + if(vox_tick > 4) vox_tick = 1 return 1 diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm index bfa2b5f44ed..9878a4b5e5e 100644 --- a/code/modules/alarm/alarm_handler.dm +++ b/code/modules/alarm/alarm_handler.dm @@ -54,7 +54,7 @@ return alarms /datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm) - if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len) + if((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len) alarms -= alarm alarms_assoc -= alarm.origin on_alarm_change(alarm, ALARM_CLEARED) diff --git a/code/modules/arcade/arcade_base.dm b/code/modules/arcade/arcade_base.dm index 2835d2451e3..d886fa3f4be 100644 --- a/code/modules/arcade/arcade_base.dm +++ b/code/modules/arcade/arcade_base.dm @@ -84,7 +84,7 @@ /obj/machinery/arcade/proc/pay_with_cash(var/obj/item/weapon/spacecash/cashmoney, var/mob/user) if(cashmoney.get_total() < token_price) - to_chat(user, "\icon[cashmoney] That is not enough money.") + to_chat(user, "[bicon(cashmoney)] That is not enough money.") return 0 visible_message("[usr] inserts a credit chip into [src].") var/left = cashmoney.get_total() - token_price @@ -97,7 +97,7 @@ /obj/machinery/arcade/proc/pay_with_card(var/obj/item/weapon/card/id/I, var/mob/user) visible_message("[usr] swipes a card through [src].") var/datum/money_account/customer_account = attempt_account_access_nosec(I.associated_account_number) - if (!customer_account) + if(!customer_account) to_chat(user, "Error: Unable to access account. Please contact technical support if problem persists.") return 0 diff --git a/code/modules/arcade/arcade_prize.dm b/code/modules/arcade/arcade_prize.dm index f57a64de03c..d3457696268 100644 --- a/code/modules/arcade/arcade_prize.dm +++ b/code/modules/arcade/arcade_prize.dm @@ -67,7 +67,7 @@ throwforce = 0 throw_speed = 1 throw_range = 1 - w_class = 1.0 + w_class = 1 max_amount = 9999 //Dang that's a lot of tickets /obj/item/stack/tickets/New(var/loc, var/amount=null) diff --git a/code/modules/arcade/prize_counter.dm b/code/modules/arcade/prize_counter.dm index 5f66881cea6..e45d3d1bfe0 100644 --- a/code/modules/arcade/prize_counter.dm +++ b/code/modules/arcade/prize_counter.dm @@ -171,7 +171,7 @@ td.cost.toomuch { if(href_list["eject"]) print_tickets() - if (href_list["buy"]) + if(href_list["buy"]) var/itemID = text2num(href_list["buy"]) var/datum/prize_item/item = global_prizes.prizes[itemID] var/sure = alert(usr,"Are you sure you wish to purchase [item.name] for [item.cost] tickets?","You sure?","Yes","No") in list("Yes","No") diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 9a61921764d..84e10835215 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/assemblies/new_assemblies.dmi' icon_state = "" flags = CONDUCT - w_class = 2.0 + w_class = 2 materials = list(MAT_METAL=100) throwforce = 2 throw_speed = 3 diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index 3171755b34c..f6019ace266 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/tank.dmi' item_state = "assembly" throwforce = 5 - w_class = 3.0 + w_class = 3 throw_speed = 2 throw_range = 4 flags = CONDUCT //Copied this from old code, so this may or may not be necessary @@ -61,7 +61,7 @@ return /obj/item/device/onetankbomb/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here. - visible_message("\icon[src] *beep* *beep*", "*beep* *beep*") + visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") sleep(10) if(!src) return @@ -141,7 +141,7 @@ if(strength >=1) explosion(ground_zero, 0, round(strength,1), round(strength*2,1), round(strength*3,1)) - else if (strength >=0.5) + else if(strength >=0.5) explosion(ground_zero, -1, 0, 1, 2) else ground_zero.assume_air(air_contents) @@ -150,7 +150,7 @@ else if(air_contents.temperature > (T0C + 100)) strength = (fuel_moles/25) - if (strength >=1) + if(strength >=1) explosion(ground_zero, -1, 0, round(strength,1), round(strength*3,1)) else ground_zero.assume_air(air_contents) diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index f1a3f402336..5c67f780a5f 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -55,7 +55,7 @@ health_scan = M.health if(health_scan <= alarm_health) pulse() - audible_message("\icon[src] *beep* *beep*", "*beep* *beep*") + audible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") toggle_scan() return return @@ -76,7 +76,9 @@ var/dat = text("Health Sensor [scanning?"On":"Off"]") if(scanning && health_scan) dat += "
        Health: [health_scan]" - user << browse(dat, "window=hscan") + var/datum/browser/popup = new(user, "hscan", name, 400, 400) + popup.set_content(dat) + popup.open(0) onclose(user, "hscan") return diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 6333fbca635..f4cafef9c97 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -5,7 +5,7 @@ item_state = "assembly" flags = CONDUCT throwforce = 5 - w_class = 2.0 + w_class = 2 throw_speed = 3 throw_range = 10 @@ -68,8 +68,8 @@ examine(mob/user) ..(user) - if ((in_range(src, user) || src.loc == user)) - if (src.secured) + if((in_range(src, user) || src.loc == user)) + if(src.secured) to_chat(user, "\The [src] is ready!") else to_chat(user, "\The [src] can be attached!") @@ -202,11 +202,11 @@ qdel(src) return if(2.0) - if (prob(50)) + if(prob(50)) qdel(src) return if(3.0) - if (prob(25)) + if(prob(25)) qdel(src) return return diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index a5485a59078..e6505e385ad 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -25,12 +25,12 @@ if(!..()) return 0//Cooldown check var/turf/location = get_turf(loc) if(location) location.hotspot_expose(1000,1000) - if (istype(src.loc,/obj/item/device/assembly_holder)) - if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/)) + if(istype(src.loc,/obj/item/device/assembly_holder)) + if(istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/)) var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc - if (tank) + if(tank) tank.boom() - if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/)) + if(istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/)) var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc if(beakerbomb) beakerbomb.heat_beaker() diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index a2810d04e98..2a23732a90b 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -124,7 +124,7 @@ if(!secured || !on || cooldown > 0) return 0 pulse(0) - audible_message("\icon[src] *beep* *beep*", null, 3) + audible_message("[bicon(src)] *beep* *beep*", null, 3) cooldown = 2 spawn(10) process_cooldown() @@ -139,7 +139,9 @@


        Refresh

        Close"} - user << browse(dat, "window=infra") + var/datum/browser/popup = new(user, "infra", name, 400, 400) + popup.set_content(dat) + popup.open(0) onclose(user, "infra") /obj/item/device/assembly/infra/Topic(href, href_list) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 880dc2d2218..267d1600523 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -42,15 +42,15 @@ HasProximity(atom/movable/AM as mob|obj) - if (istype(AM, /obj/effect/beam)) return - if (AM.move_speed < 12) sense() + if(istype(AM, /obj/effect/beam)) return + if(AM.move_speed < 12) sense() return sense() if((!secured)||(!scanning)||(cooldown > 0)) return 0 pulse(0) - visible_message("\icon[src] *beep* *beep*", "*beep* *beep*") + visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") cooldown = 2 spawn(10) process_cooldown() @@ -68,6 +68,7 @@ dropped() + ..() spawn(0) sense() return @@ -114,7 +115,9 @@ dat += "
        [scanning?"Armed":"Unarmed"] (Movement sensor active when armed!)" dat += "

        Refresh" dat += "

        Close" - user << browse(dat, "window=prox") + var/datum/browser/popup = new(user, "prox", name, 400, 400) + popup.set_content(dat) + popup.open(0) onclose(user, "prox") return diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index 6c5c9e4e5bb..3aa24a2d014 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -6,7 +6,7 @@ var/obj/item/clothing/head/helmet/part1 = null var/obj/item/device/radio/electropack/part2 = null var/status = 0 - w_class = 5.0 + w_class = 5 flags = CONDUCT /obj/item/assembly/shock_kit/Destroy() diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 7a5835a3f9d..c021fec7ef9 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -51,7 +51,7 @@ /obj/item/device/assembly/signaler/interact(mob/user as mob, flag1) var/t1 = "-------" -// if ((src.b_stat && !( flag1 ))) +// if((src.b_stat && !( flag1 ))) // t1 = text("-------
        \nGreen Wire: []
        \nRed Wire: []
        \nBlue Wire: []
        \n", (src.wires & 4 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 2 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 1 ? text("Cut Wire", src) : text("Mend Wire", src))) // else // t1 = "-------" Speaker: [src.listening ? "Engaged" : "Disengaged"]
        @@ -81,7 +81,9 @@ [t1] "} - user << browse(dat, "window=radio") + var/datum/browser/popup = new(user, "radio", name, 400, 400) + popup.set_content(dat) + popup.open(0) onclose(user, "radio") return @@ -94,7 +96,7 @@ onclose(usr, "radio") return - if (href_list["freq"]) + if(href_list["freq"]) var/new_frequency = (frequency + text2num(href_list["freq"])) if(new_frequency < RADIO_LOW_FREQ || new_frequency > RADIO_HIGH_FREQ) new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) @@ -150,7 +152,7 @@ pulse(1) for(var/mob/O in hearers(1, src.loc)) - O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) + O.show_message("[bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) return /obj/item/device/assembly/signaler/proc/set_frequency(new_frequency) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 6797ba8f340..b5a197d6dd4 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -44,7 +44,7 @@ if((!secured)||(cooldown > 0)) return 0 pulse(0) if(loc) - loc.visible_message("\icon[src] *beep* *beep*", "*beep* *beep*") + loc.visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") cooldown = 2 spawn(10) process_cooldown() @@ -96,7 +96,9 @@ Refresh

        Close"} - user << browse(dat, "window=timer") + var/datum/browser/popup = new(user, "timer", name, 400, 400) + popup.set_content(dat) + popup.open(0) onclose(user, "timer") return diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 4c15b5f860e..af9138724e6 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -30,12 +30,12 @@ recorded_type = type listening = 0 var/turf/T = get_turf(src) //otherwise it won't work in hand - T.visible_message("\icon[src] beeps, \"Activation message is [type ? "the sound when one [recorded]" : "'[recorded]'."]\"") + T.visible_message("[bicon(src)] beeps, \"Activation message is [type ? "the sound when one [recorded]" : "'[recorded]'."]\"") else if(findtext(msg, recorded) && type == recorded_type) pulse(0) var/turf/T = get_turf(src) //otherwise it won't work in hand - T.visible_message("\icon[src] \red beeps!") + T.visible_message("[bicon(src)] \red beeps!") activate() return // previously this toggled listning when not in a holder, that's a little silly. It was only called in attack_self that way. @@ -46,7 +46,7 @@ listening = !listening var/turf/T = get_turf(src) - T.visible_message("\icon[src] beeps, \"[listening ? "Now" : "No longer"] recording input.\"") + T.visible_message("[bicon(src)] beeps, \"[listening ? "Now" : "No longer"] recording input.\"") return 1 diff --git a/code/modules/atmos_automation/console.dm b/code/modules/atmos_automation/console.dm index c567a45e108..201a6f63e4d 100644 --- a/code/modules/atmos_automation/console.dm +++ b/code/modules/atmos_automation/console.dm @@ -61,7 +61,7 @@ if(!(A.returntype in valid_returntypes)) continue choices[A.name]=A - if (choices.len==0) + if(choices.len==0) testing("Unable to find automations with returntype in [english_list(valid_returntypes)]!") return 0 var/label=input(user, "Select new automation:", "Automations", "Cancel") as null|anything in choices diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm index 670d8143390..00263352325 100644 --- a/code/modules/awaymissions/bluespaceartillery.dm +++ b/code/modules/awaymissions/bluespaceartillery.dm @@ -32,7 +32,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "bluespace_artillery.tmpl", "Bluespace Control", 400, 260) ui.set_initial_data(data) ui.open() diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 4612979c125..b2864d1c7cc 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -7,6 +7,7 @@ /obj/effect/landmark/corpse name = "Unknown" var/mobname = "Unknown" //Unused now but it'd fuck up maps to remove it now + var/mob_species = null //Set to make a mob of another race, currently used only in ruins var/corpseuniform = null //Set this to an object path to have the slot filled with said object on the corpse. var/corpsesuit = null var/corpseshoes = null @@ -37,6 +38,8 @@ M.real_name = src.name M.death(1) //Kills the new mob M.timeofdeath = timeofdeath + if(src.mob_species) + M.set_species(src.mob_species) if(src.corpseuniform) M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform) if(src.corpsesuit) @@ -159,7 +162,7 @@ corpseradio = /obj/item/device/radio/headset/headset_eng corpseuniform = /obj/item/clothing/under/rank/engineer corpseback = /obj/item/weapon/storage/backpack/industrial - corpseshoes = /obj/item/clothing/shoes/orange + corpseshoes = /obj/item/clothing/shoes/workboots corpsebelt = /obj/item/weapon/storage/belt/utility/full corpsegloves = /obj/item/clothing/gloves/color/yellow corpsehelmet = /obj/item/clothing/head/hardhat @@ -285,3 +288,10 @@ corpseid = 1 corpseidjob = "Commander" corpseidaccess = "Captain" + +/obj/effect/landmark/corpse/abductor //Connected to ruins, for some reason? + name = "abductor" + mobname = "???" + mob_species = "abductor" + corpseuniform = /obj/item/clothing/under/color/grey + corpseshoes = /obj/item/clothing/shoes/combat diff --git a/code/modules/awaymissions/exile.dm b/code/modules/awaymissions/exile.dm index 4e6a69d591b..8e2592b010b 100644 --- a/code/modules/awaymissions/exile.dm +++ b/code/modules/awaymissions/exile.dm @@ -32,7 +32,7 @@ /obj/structure/closet/secure_closet/exile name = "exile implants" - req_access = list(access_hos) + req_access = list(access_armory) /obj/structure/closet/secure_closet/exile/New() ..() diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 39ac1f49676..5045b5369a1 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -149,7 +149,7 @@ obj/machinery/gateway/centerstation/process() /obj/machinery/gateway/centerstation/attackby(obj/item/device/W as obj, mob/user as mob, params) if(istype(W,/obj/item/device/multitool)) - to_chat(user, "\black The gate is already calibrated, there is no work for you to do here.") + to_chat(user, "The gate is already calibrated, there is no work for you to do here.") return /////////////////////////////////////Away//////////////////////// @@ -236,10 +236,10 @@ obj/machinery/gateway/centerstation/process() if(!ready) return if(!active) return if(istype(M, /mob/living/carbon)) - if (exilecheck(M)) return + if(exilecheck(M)) return if(istype(M, /obj)) for(var/mob/living/carbon/F in M) - if (exilecheck(F)) return + if(exilecheck(F)) return M.forceMove(get_step(stationgate.loc, SOUTH)) M.dir = SOUTH diff --git a/code/modules/awaymissions/map_rng.dm b/code/modules/awaymissions/map_rng.dm new file mode 100644 index 00000000000..147d41171c4 --- /dev/null +++ b/code/modules/awaymissions/map_rng.dm @@ -0,0 +1,51 @@ +/obj/effect/landmark/map_loader + name = "map loader" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + invisibility = 101 + anchored = 1 + density = 0 + opacity = 0 + var/template_name = null + var/datum/map_template/template = null + var/centered = 1 + var/loaded = 0 + +/obj/effect/landmark/map_loader/New(turf/loc, tname) + ..() + + if(tname) + template_name = tname + if(template_name) + template = map_templates[template_name] + +/obj/effect/landmark/map_loader/initialize() + ..() + if(template) + load(template) + +/obj/effect/landmark/map_loader/set_tag() + return + +/obj/effect/landmark/map_loader/proc/load(datum/map_template/t) + if(!t) + return + if(loaded) // I wanna be super sure this loads only once + return + loaded = 1 + var/turf/pos = get_turf(src) + // Hop to nullspace so we don't get re-initialized by the map we're loading + loc = null + t.load(pos, centered = centered) + t.loaded++ + qdel(src) + +/obj/effect/landmark/map_loader/random + var/template_list = "" + +/obj/effect/landmark/map_loader/random/initialize() + ..() + if(template_list) + template_name = safepick(splittext(template_list, ";")) + template = map_templates[template_name] + load(template) diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index e58714de9f3..fcfd8d2e600 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -2,10 +2,22 @@ //SS13 Optimized Map loader ////////////////////////////////////////////////////////////// +//As of 3.6.2016 //global datum that will preload variables on atoms instanciation var/global/use_preloader = FALSE var/global/dmm_suite/preloader/_preloader = new +/dmm_suite + // These regexes are global - meaning that starting the maploader again mid-load will + // reset progress - which means we need to track our index per-map, or we'll + // eternally recurse + // /"([a-zA-Z]+)" = \(((?:.|\n)*?)\)\n(?!\t)|\((\d+),(\d+),(\d+)\) = \{"([a-zA-Z\n]*)"\}/g + var/static/regex/dmmRegex = new/regex({""(\[a-zA-Z]+)" = \\(((?:.|\n)*?)\\)\n(?!\t)|\\((\\d+),(\\d+),(\\d+)\\) = \\{"(\[a-zA-Z\n]*)"\\}"}, "g") + // /^[\s\n]+"?|"?[\s\n]+$|^"|"$/g + var/static/regex/trimQuotesRegex = new/regex({"^\[\\s\n]+"?|"?\[\\s\n]+$|^"|"$"}, "g") + // /^[\s\n]+|[\s\n]+$/ + var/static/regex/trimRegex = new/regex("^\[\\s\n]+|\[\\s\n]+$", "g") + var/static/list/modelCache = list() /** * Construct the model map and control the loading process @@ -16,87 +28,156 @@ var/global/dmm_suite/preloader/_preloader = new * e.g aa = /turf/unsimulated/wall{icon_state = "rock"} * 2) Read the map line by line, parsing the result (using parse_grid) * + * If `measureOnly` is set, then no atoms will be created, and all this will do + * is return the bounds after parsing the file + * + * If you need to freeze init while you're working, you can use the spacial allocator's + * "add_dirt" and "remove_dirt" which will put initializations on hold until you say + * the word. This is important for loading large maps such as the cyberiad, where + * atmos will attempt to start before it's ready, causing runtimes galore if init is + * allowed to romp unchecked. */ -/dmm_suite/load_map(dmm_file as file, x_offset = 0 as num, y_offset = 0 as num, z_offset as num, do_sleep = 1 as num) - if(!z_offset)//what z_level we are creating the map on +/dmm_suite/load_map(dmm_file as file, x_offset as num, y_offset as num, z_offset as num, cropMap as num, measureOnly as num) + var/tfile = dmm_file//the map file we're creating + var/fname = "Lambda" + if(isfile(tfile)) + fname = "[tfile]" + tfile = file2text(tfile) + + if(!x_offset) + x_offset = 1 + if(!y_offset) + y_offset = 1 + if(!z_offset) z_offset = world.maxz + 1 - var/quote = ascii2text(34) - var/tfile = file2text(dmm_file)//the map file we're creating - var/tfile_len = length(tfile) - var/lpos = 1 // the models definition index - - /////////////////////////////////////////////////////////////////////////////////////// - //first let's map model keys (e.g "aa") to their contents (e.g /turf/space{variables}) - /////////////////////////////////////////////////////////////////////////////////////// + var/list/bounds = list(1.#INF, 1.#INF, 1.#INF, -1.#INF, -1.#INF, -1.#INF) var/list/grid_models = list() - var/key_len = length(copytext(tfile,2,findtext(tfile,quote,2,0)))//the length of the model key (e.g "aa" or "aba") + var/key_len = 0 - //proceed line by line - for(lpos=1; lpos world.maxz) + if(cropMap) + continue + else + zlevels.increase_max_zlevel_to(zcrd) //create a new z_level if needed - var/y_depth = z_depth / (x_depth+1)//x_depth + 1 because we're counting the '\n' characters in z_depth - if(world.maxy 1) + gridLines.Cut(1, leadingBlanks) // Remove all leading blank lines. - //fill the current square using the model map - xcrd=0 + if(!gridLines.len) // Skip it if only blank lines exist. + continue - for(var/mpos in 1 to x_depth step key_len) - xcrd++ - var/model_key = copytext(grid_line,mpos,mpos+key_len) - parse_grid(grid_models[model_key], xcrd + x_offset, ycrd + y_offset, zcrd + z_offset, do_sleep) + if(gridLines.len && gridLines[gridLines.len] == "") + gridLines.Cut(gridLines.len) // Remove only one blank line at the end. - //reached end of current map - if(gpos+x_depth+1>z_depth) - break + bounds[MAP_MINY] = min(bounds[MAP_MINY], ycrd) + ycrd += gridLines.len - 1 // Start at the top and work down - ycrd-- - if(do_sleep) - sleep(-1) + if(!cropMap && ycrd > world.maxy) + if(!measureOnly) + world.maxy = ycrd // Expand Y here. X is expanded in the loop below + bounds[MAP_MAXY] = max(bounds[MAP_MAXY], ycrd) + else + bounds[MAP_MAXY] = max(bounds[MAP_MAXY], min(ycrd, world.maxy)) - //reached End Of File - if(findtext(tfile,quote+"}",zpos,0)+2==tfile_len) - break - if(do_sleep) - sleep(-1) + var/maxx = xcrdStart + if(measureOnly) + for(var/line in gridLines) + maxx = max(maxx, xcrdStart + length(line) / key_len - 1) + else + for(var/line in gridLines) + if(ycrd <= world.maxy && ycrd >= 1) + xcrd = xcrdStart + for(var/tpos = 1 to length(line) - key_len + 1 step key_len) + if(xcrd > world.maxx) + if(cropMap) + break + else + world.maxx = xcrd + + if(xcrd >= 1) + var/model_key = copytext(line, tpos, tpos + key_len) + if(!grid_models[model_key]) + throw EXCEPTION("Undefined model key in DMM: [model_key]. Map file: [fname].") + parse_grid(grid_models[model_key], xcrd, ycrd, zcrd, LM) + // After this call, it is NOT safe to reference `dmmRegex` without another call to + // "Find" - we might've hit a map loader here and changed its state + CHECK_TICK + + maxx = max(maxx, xcrd) + ++xcrd + --ycrd + + bounds[MAP_MAXX] = max(bounds[MAP_MAXX], cropMap ? min(maxx, world.maxx) : maxx) + + CHECK_TICK + catch(var/exception/e) + _preloader.reset() + throw e + + _preloader.reset() + log_debug("Loaded map in [stop_watch(watch)]s.") + qdel(LM) + if(bounds[MAP_MINX] == 1.#INF) // Shouldn't need to check every item + log_debug("Min x: bounds[MAP_MINX]") + log_debug("Min y: bounds[MAP_MINY]") + log_debug("Min z: bounds[MAP_MINZ]") + log_debug("Max x: bounds[MAP_MAXX]") + log_debug("Max y: bounds[MAP_MAXY]") + log_debug("Max z: bounds[MAP_MAXZ]") + return null + else + if(!measureOnly) + for(var/t in block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ]))) + var/turf/T = t + //we do this after we load everything in. if we don't; we'll have weird atmos bugs regarding atmos adjacent turfs + T.AfterChange(1,keep_cabling = TRUE) + return bounds /** * Fill a given tile with its area/turf/objects/mobs @@ -115,48 +196,60 @@ var/global/dmm_suite/preloader/_preloader = new * 4) Instanciates the atom with its variables * */ -/dmm_suite/proc/parse_grid(model as text, xcrd as num, ycrd as num, zcrd as num, do_sleep = 1) +/dmm_suite/proc/parse_grid(model as text,xcrd as num,ycrd as num,zcrd as num, dmm_suite/loaded_map/LM) /*Method parse_grid() - Accepts a text string containing a comma separated list of type paths of the same construction as those contained in a .dmm file, and instantiates them. */ - var/list/members = list()//will contain all members (paths) in model (in our example : /turf/unsimulated/wall and /area/mine/explored) - var/list/members_attributes = list()//will contain lists filled with corresponding variables, if any (in our example : list(icon_state = "rock") and list()) + var/list/members //will contain all members (paths) in model (in our example : /turf/unsimulated/wall and /area/mine/explored) + var/list/members_attributes //will contain lists filled with corresponding variables, if any (in our example : list(icon_state = "rock") and list()) + var/list/cached = modelCache[model] + var/index + if(cached) + members = cached[1] + members_attributes = cached[2] + else + ///////////////////////////////////////////////////////// + //Constructing members and corresponding variables lists + //////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////// - //Constructing members and corresponding variables lists - //////////////////////////////////////////////////////// + members = list() + members_attributes = list() + index = 1 - var/index=1 - var/old_position = 1 - var/dpos + var/old_position = 1 + var/dpos - do - //finding next member (e.g /turf/unsimulated/wall{icon_state = "rock"} or /area/mine/explored) - dpos= find_next_delimiter_position(model,old_position,",","{","}")//find next delimiter (comma here) that's not within {...} + do + //finding next member (e.g /turf/unsimulated/wall{icon_state = "rock"} or /area/mine/explored) + dpos = find_next_delimiter_position(model, old_position, ",", "{", "}") //find next delimiter (comma here) that's not within {...} - var/full_def = copytext(model,old_position,dpos)//full definition, e.g : /obj/foo/bar{variables=derp} - var/atom_def = text2path(copytext(full_def,1,findtext(full_def,"{")))//path definition, e.g /obj/foo/bar - members.Add(atom_def) - old_position = dpos + 1 + var/full_def = trim_text(copytext(model, old_position, dpos)) //full definition, e.g : /obj/foo/bar{variables=derp} + var/variables_start = findtext(full_def, "{") + var/atom_def = text2path(trim_text(copytext(full_def, 1, variables_start))) //path definition, e.g /obj/foo/bar + old_position = dpos + 1 - //transform the variables in text format into a list (e.g {var1="derp"; var2; var3=7} => list(var1="derp", var2, var3=7)) - var/list/fields = list() + if(!atom_def) // Skip the item if the path does not exist. Fix your crap, mappers! + continue + members.Add(atom_def) - var/variables_start = findtext(full_def,"{") - if(variables_start)//if there's any variable - full_def = copytext(full_def,variables_start+1,length(full_def))//removing the last '}' - fields = readlist(full_def, ";") + //transform the variables in text format into a list (e.g {var1="derp"; var2; var3=7} => list(var1="derp", var2, var3=7)) + var/list/fields = list() - //then fill the members_attributes list with the corresponding variables - members_attributes.len++ - members_attributes[index++] = fields + if(variables_start)//if there's any variable + full_def = copytext(full_def,variables_start+1,length(full_def))//removing the last '}' + fields = readlist(full_def, ";") - if(do_sleep) - sleep(-1) - while(dpos != 0) + //then fill the members_attributes list with the corresponding variables + members_attributes.len++ + members_attributes[index++] = fields + + CHECK_TICK + while(dpos != 0) + + modelCache[model] = list(members, members_attributes) //////////////// @@ -165,24 +258,25 @@ var/global/dmm_suite/preloader/_preloader = new //The next part of the code assumes there's ALWAYS an /area AND a /turf on a given tile - //in case of multiples turfs on one tile, - //will contains the images of all underlying turfs, to simulate the DMM multiple tiles piling - var/list/turfs_underlays = list() - //first instance the /area and remove it from the members list index = members.len + + var/turf/crds = locate(xcrd,ycrd,zcrd) if(members[index] != /area/template_noop) + // We assume `members[index]` is an area path, as above, yes? I will operate + // on that assumption. + if(!ispath(members[index], /area)) + throw EXCEPTION("Oh no, I thought this was an area!") + var/atom/instance _preloader.setup(members_attributes[index])//preloader for assigning set variables on atom creation + instance = LM.area_path_to_real_area(members[index]) - instance = locate(members[index]) - var/turf/crds = locate(xcrd,ycrd,zcrd) if(crds) instance.contents.Add(crds) if(use_preloader && instance) _preloader.load(instance) - members.Remove(members[index]) //then instance the /turf and, if multiple tiles are presents, simulates the DMM underlays piling effect @@ -198,18 +292,20 @@ var/global/dmm_suite/preloader/_preloader = new if(T) //if others /turf are presents, simulates the underlays piling effect index = first_turf_index + 1 - while(index <= members.len) - turfs_underlays.Insert(1,image(T.icon,null,T.icon_state,T.layer,T.dir))//add the current turf image to the underlays list - var/turf/UT = instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd)//instance new turf - add_underlying_turf(UT,T,turfs_underlays)//simulates the DMM piling effect - T = UT + while(index <= members.len - 1) // Last item is an /area + var/underlay + if(istype(T, /turf)) // I blame this on the stupid clown who coded the BYOND map editor + underlay = T.appearance + T = instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd)//instance new turf + if(ispath(members[index],/turf)) + T.underlays += underlay + index++ //finally instance all remainings objects/mobs - for(index in 1 to first_turf_index - 1) + for(index in 1 to first_turf_index-1) instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd) - if(do_sleep) - sleep(-1) + CHECK_TICK //////////////// //Helpers procs @@ -222,7 +318,13 @@ var/global/dmm_suite/preloader/_preloader = new var/turf/T = locate(x,y,z) if(T) - instance = new path (T)//first preloader pass + if(ispath(path, /turf)) + T.ChangeTurf(path, 1, 0) + instance = T + else if(ispath(path, /area)) + + else + instance = new path (T)//first preloader pass if(use_preloader && instance)//second preloader pass, for those atoms that don't ..() in New() _preloader.load(instance) @@ -232,16 +334,11 @@ var/global/dmm_suite/preloader/_preloader = new //text trimming (both directions) helper proc //optionally removes quotes before and after the text (for variable name) /dmm_suite/proc/trim_text(what as text,trim_quotes=0) - while(length(what) && (findtext(what," ",1,2))) - what=copytext(what,2,0) - while(length(what) && (findtext(what," ",length(what),0))) - what=copytext(what,1,length(what)) if(trim_quotes) - while(length(what) && (findtext(what,quote,1,2))) - what=copytext(what,2,0) - while(length(what) && (findtext(what,quote,length(what),0))) - what=copytext(what,1,length(what)) - return what + return trimQuotesRegex.Replace(what, "") + else + return trimRegex.Replace(what, "") + //find the position of the next delimiter,skipping whatever is comprised between opening_escape and closing_escape //returns 0 if reached the last delimiter @@ -313,14 +410,6 @@ var/global/dmm_suite/preloader/_preloader = new return to_return -//simulates the DM multiple turfs on one tile underlaying -/dmm_suite/proc/add_underlying_turf(turf/placed,turf/underturf, list/turfs_underlays) - if(underturf.density) - placed.density = 1 - if(underturf.opacity) - placed.opacity = 1 - placed.underlays += turfs_underlays - //atom creation method that preloads variables at creation /atom/New() if(use_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New() @@ -336,6 +425,7 @@ var/global/dmm_suite/preloader/_preloader = new //Preloader datum ////////////////// +// This ain't re-entrant, but we had this before the maploader update /dmm_suite/preloader parent_type = /datum var/list/attributes @@ -349,11 +439,41 @@ var/global/dmm_suite/preloader/_preloader = new /dmm_suite/preloader/proc/load(atom/what) for(var/attribute in attributes) - what.vars[attribute] = attributes[attribute] + var/value = attributes[attribute] + if(islist(value)) + value = deepCopyList(value) + what.vars[attribute] = value use_preloader = FALSE +// If the map loader fails, make this safe +/dmm_suite/preloader/proc/reset() + use_preloader = FALSE + attributes = list() + target_path = null + +// A datum for use within the context of loading a single map, +// so that one can have separate "unpowered" areas for ruins or whatever, +// yet have a single area type for use of mapping, instead of creating +// a new area type for each new ruin +/dmm_suite/loaded_map + parent_type = /datum + var/list/area_list = list() + var/index = 1 // To store the state of the regex + +/dmm_suite/loaded_map/proc/area_path_to_real_area(area/A) + if(!ispath(A, /area)) + throw EXCEPTION("Wrong argument to `area_path_to_real_area`") + + if(!(A in area_list)) + if(initial(A.there_can_be_many)) + area_list[A] = new A + else + area_list[A] = locate(A) + + return area_list[A] + /area/template_noop name = "Area Passthrough" /turf/template_noop - name = "Turf Passthrough" \ No newline at end of file + name = "Turf Passthrough" diff --git a/code/modules/awaymissions/maploader/swapmaps.dm b/code/modules/awaymissions/maploader/swapmaps.dm index 8dc9f9f6c99..7115cfcbf13 100644 --- a/code/modules/awaymissions/maploader/swapmaps.dm +++ b/code/modules/awaymissions/maploader/swapmaps.dm @@ -326,7 +326,7 @@ swapmap x2+=x1-1 y2+=y1-1 z2+=z1-1 - world.maxz=max(z2,world.maxz) // stretch z if necessary + zlevels.increase_max_zlevel_to(z2) // stretch z if necessary if(!ischunk) swapmaps_loaded[src]=null swapmaps_byname[id]=src @@ -373,7 +373,7 @@ swapmap mz=max(mz,M.z2) world.maxx=mx world.maxy=my - world.maxz=mz + zlevels.cut_levels_downto(mz) // save and delete proc/Unload() diff --git a/code/modules/awaymissions/mission_code/spacehotel.dm b/code/modules/awaymissions/mission_code/spacehotel.dm new file mode 100644 index 00000000000..b7670737193 --- /dev/null +++ b/code/modules/awaymissions/mission_code/spacehotel.dm @@ -0,0 +1,308 @@ +#define PAY_INTERVAL 6000 // amount of ticks between payment + +/area/awaymission/spacehotel + name = "Deep Space Hotel 419" + requires_power = 0 + +/area/awaymission/spacehotel/kitchen + name = "Hotel Kitchen" + icon_state = "kitchen" + +/area/awaymission/spacehotel/reception + name = "Hotel Reception" + icon_state = "entry" + +// "Directional" map template loader for N or S hotel room +/obj/effect/landmark/map_loader/hotel_room + icon = 'icons/testing/turf_analysis.dmi' + icon_state = "arrow" + +/obj/item/weapon/paper/crumpled/hotel_scrap_1 + name = "paper scrap" + info = "I can't believe this shitty hotel assigned me a purple-themed room. Why does the shower dump grape drink everywhere??" + +/obj/item/weapon/paper/hotel_scrap_2 + name = "Journal Entry #2" + info = "

        Day 7:

        Today, I stepped into my bathroom, only to discover that it had become a mountainside wilderness. I tried to wash my hands with snow, but it didn't particularly pan out.
        I contacting the front desk regarding the issue, but the receptionist just stared at me with dead eyes and spouted unrepeatable curses at me. However, I convinced them to reassign me to an upgraded suite." + +/obj/item/weapon/paper/hotel_scrap_3 + name = "Journal Entry #3" + info = "

        Day 26:

        Well, that sucked royally. The queen-sized bed was nice, but the hottub in my room was, well, my wife described it as \"a portal to hell\". I don't know, I guess the lava and weird blood gave it that impression, but it was pretty nicely warm.
        However, \"we\" decided to get assigned to a new room. Whatever." + +/obj/item/weapon/paper/hotel_scrap_4 + name = "Diary Page" + info = "Day 7 of Bad Vacation
        Thanks Qzxor this shit vacation is ending today. The novelty of the trashy pool wore off 2 days in and I'm not allowed in the bar. The tiny box they called a room that, we had to cram into, just had a poster and a couple of beds. Only one bedsheet to spare. Shower had brown water and sink just dumped its water back out the ceiling, somehow.

        PS: The receptionist isn't paying attention to us when we try to check out. Apparently, we're staying another day." + +/obj/item/weapon/paper/hotel_scrap_5 + name = "Journal Entry #5" + info = "

        Day 185:

        I feel like the restaurant's chef is just making random dishes to mess with me. I request something from the menu, and he throws out something nobody asked for on the counter. The bartender isn't much better. At least both of them can make some nice food and drinks. I would complain to the management... but they never seem to care." + +/obj/item/weapon/paper/crumpled/hotel_scrap_6 + name = "Journal Entry #6" + info = "

        Day 386:

        AMBGAT MEZLBNU. Something wrong. Can't stop hugging plushies." + +/obj/item/weapon/paper/crumpled/hotel_scrap_7 + name = "Journal Entry #8" + info = "ASGATDHU NAMSPA KER OKS O OKDOFLI OSDSFKO OASKDAFO AOSDKF OINAIS ISJDDEF OSKFEREAODIK OSI ODIFOSA OEKRRO ASODFKAO PSSDOF SDFK OSDKF OSDKFSASPODFIOSASD UHGU DFYG FPO ASDFOS DFOASSD FAPSO FSPDFOIER OPWASDSA PS DODIOF OSDI pizza OKSDFO AL OKEWORK CVBUASO SDFO AOE RAOWEIK SODDFI" + +/obj/item/weapon/paper/hotel_scrap_8 + name = "Mysterious Note" + icon_state = "paper_talisman" + info = "
        There is only one way to leave.
        " + +/obj/item/weapon/paper/pamphlet/hotel + name = "space hotel pamphlet" + info = "

        Welcome to Deep Space Hotel 419!

        Thank you for choosing our hotel. Simply hand your credit or debit card to the concierge and get your room key! To check out, hand your credit card back.

        Conditions:

        • The hotel is not responsible for any losses due to time or space anomalies.
        • The hotel is not responsible for events that occur outside of the hotel station, including, but not limited to, events that occur inside of dimensional pockets.
        • The hotel is not responsible for overcharging your account.
        • The hotel is not responsible for missing persons.
        • The hotel is not responsible for mind-altering effects due to drugs, magic, demons, or space worms.
        " + +/obj/effect/landmark/map_loader/hotel_room/initialize() + ..() + // load and randomly assign rooms + var/global/list/south_room_templates = list() + var/global/list/north_room_templates = list() + var/static/path = "_maps/map_files/templates/spacehotel/" + var/global/loaded = 0 + if(!loaded) + loaded = 1 + for(var/map in flist(path)) + if(cmptext(copytext(map, length(map) - 3), ".dmm")) + var/datum/map_template/T = new(path = "[path][map]", rename = "[map]") + if(copytext(map, 1, 3) == "n_") + north_room_templates += T + else if(copytext(map, 1, 3) == "s_") + south_room_templates += T + else + // omnidirectional rooms are randomly assigned + if(prob(50)) + north_room_templates += T + else + south_room_templates += T + + var/datum/map_template/M = safepick(dir == NORTH ? north_room_templates : south_room_templates) + if(M) + template = M + if(dir == NORTH) + north_room_templates -= M + else + south_room_templates -= M + load(M) + +// The door to a hotel room, but also metadata for the room itself +/obj/machinery/door/unpowered/hotel_door + name = "Room Door" + icon = 'icons/obj/doors/Doorsand.dmi' + icon_state = "door_closed" + autoclose = 1 + atom_say_verb = "beeps" + var/doorOpen = 'sound/machines/airlock.ogg' + var/doorClose = 'sound/machines/airlock.ogg' + var/doorDeni = 'sound/machines/DeniedBeep.ogg' + var/id // the room number, eg 101 + var/obj/item/weapon/card/hotel_card/card// room's key card + var/mob/living/occupant = null // the current room occupant + var/datum/money_account/account // Account we're pulling from + var/roomtimer // timer PS handle for updating room + +/obj/machinery/door/unpowered/hotel_door/New() + ..() + if(id) + name = "Room [id]" + + // in case we spawned after hotel + var/obj/effect/hotel_controller/H + H = H.controller + if(H) + H.add_room(src) + +/obj/machinery/door/unpowered/hotel_door/Destroy() + if(roomtimer) + deltimer(roomtimer) + roomtimer = null + qdel(card) + card = null + return ..() + +/obj/machinery/door/unpowered/hotel_door/examine(mob/user) + ..() + to_chat(user, "This room is currently [occupant ? "" : "un"]occupied.") + +/obj/machinery/door/unpowered/hotel_door/allowed(mob/living/carbon/user) + for(var/obj/item/weapon/card/hotel_card/C in user.get_all_slots()) + if(C == card && occupant) + atom_say("Welcome, [occupant.real_name]!") + return 1 + return 0 + +/obj/machinery/door/unpowered/hotel_door/update_icon() + overlays.Cut() + if(density) + icon_state = "door_closed" + else + icon_state = "door_open" + +/obj/machinery/door/unpowered/hotel_door/do_animate(animation) + switch(animation) + if("opening") + playsound(loc, doorOpen, 30, 1) + flick("door_opening", src) + if("closing") + playsound(loc, doorClose, 30, 1) + flick("door_closing", src) + if("deny") + playsound(src.loc, doorDeni, 50, 0, 3) + flick("door_deny", src) + +/obj/machinery/door/unpowered/hotel_door/autoclose() + if(!density && !operating && autoclose) + close() + +/obj/machinery/door/unpowered/hotel_door/emag_act(mob/user) + if(isliving(user) && density) + var/obj/effect/hotel_controller/H + if(H.controller) + H.controller.deploy_sec(user) + ..() + +/obj/item/weapon/card/hotel_card + name = "Key Card" + icon_state = "guest" + color = "#0CF" + var/id + +/obj/item/weapon/card/hotel_card/New(loc, ID) + ..() + if(ID) + id = ID + if(id) + name = "Key Card - [id]" + desc = "A key card to room [id]. Use it to open the door." + +/obj/item/weapon/card/hotel_card/Destroy() + var/mob/user = get(loc, /mob) + if(user) + to_chat(user, "\The [src] suddenly disappears in a flash!") + return ..() + +/obj/effect/hotel_controller + var/global/obj/effect/hotel_controller/controller + + name = "Deep Space Hotel 419" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x" + invisibility = 101 + anchored = 1 + density = 0 + opacity = 0 + var/list/room_doors[0] // assoc list of [room id]=hotel_door + var/list/vacant_rooms[0] // list of vacant room doors + var/list/guests[0] // assoc list of [guest mob]=room id + + var/obj/item/device/radio/radio // for shouting at deadbeats + +/obj/effect/hotel_controller/New() + ..() + if(controller) + qdel(src) + controller = src + + radio = new() + radio.broadcasting = 0 + radio.listening = 0 + + // get room doors + for(var/obj/machinery/door/unpowered/hotel_door/D in get_area(src)) + add_room(D) + +/obj/effect/hotel_controller/proc/add_room(obj/machinery/door/unpowered/hotel_door/D) + room_doors["[D.id]"] = D + vacant_rooms += D + +/obj/effect/hotel_controller/Destroy() + room_doors.Cut() + vacant_rooms.Cut() + guests.Cut() + + if(radio) + qdel(radio) + radio = null + + return ..() + +// to check a person into a room; no financial stuff; returns the keycard +/obj/effect/hotel_controller/proc/checkin(roomid, mob/living/carbon/occupant, obj/item/weapon/card/id/id) + if(!istype(occupant)) + return null + var/obj/machinery/door/unpowered/hotel_door/D = room_doors["[roomid]"] + if(!D || D.occupant || (occupant in guests)) + return null + + D.account = get_card_account(id, occupant) + if(!D.account) + return null + if(!D.account.charge(100, transaction_purpose = "10 minutes", dest_name = name)) + return null + + D.occupant = occupant + D.roomtimer = addtimer(src, "process_room", PAY_INTERVAL, 0, roomid) + vacant_rooms -= D + guests[occupant] = roomid + + var/obj/item/weapon/card/hotel_card/C = new(ID = roomid) + D.card = C + return C + +/obj/effect/hotel_controller/proc/process_room(roomid) + var/obj/machinery/door/unpowered/hotel_door/D = room_doors["[roomid]"] + if(!D || !D.occupant) + return + + if(D.account.charge(100, transaction_purpose = "10 minutes", dest_name = name)) + D.roomtimer = addtimer(src, "process_room", PAY_INTERVAL, 0, roomid) + else + force_checkout(roomid) + +// Checks a person out of a room; no financial stuff +/obj/effect/hotel_controller/proc/checkout(roomid) + var/obj/machinery/door/unpowered/hotel_door/D = room_doors["[roomid]"] + if(!D || !D.occupant) + return 0 + + guests -= D.occupant + D.occupant = null + D.account = null + deltimer(D.roomtimer) + D.roomtimer = null + qdel(D.card) + vacant_rooms += D + return 1 + +// The person's card bounced mid-stay +/obj/effect/hotel_controller/proc/force_checkout(roomid) + var/obj/machinery/door/unpowered/hotel_door/D = room_doors["[roomid]"] + if(!D || !D.occupant) + return 0 + + var/mob/deadbeat = D.occupant + + radio.autosay("[deadbeat], your card has been rejected. You have 30 seconds to check out.", name, zlevel = list(z)) + spawn(300) + if(D.occupant == deadbeat) + // they still haven't checked out... + deploy_sec(deadbeat) + checkout(roomid) + +/obj/effect/hotel_controller/proc/deploy_sec(mob/living/target) + if(!istype(target) || !istype(get_area(target), /area/awaymission/spacehotel)) + return + + var/list/secs[0] + for(var/mob/living/carbon/human/interactive/away/hotel/guard/M in get_area(src)) + if(!M.retal) + secs += M + var/mob/living/carbon/human/interactive/away/hotel/guard/S = safepick(secs) + if(!S) + return + + S.retal_target = target + S.retal = 1 + +#undef CHECKOUT_TIME diff --git a/code/modules/awaymissions/mission_code/spacehotel_npcs.dm b/code/modules/awaymissions/mission_code/spacehotel_npcs.dm new file mode 100644 index 00000000000..d113731837d --- /dev/null +++ b/code/modules/awaymissions/mission_code/spacehotel_npcs.dm @@ -0,0 +1,118 @@ +/mob/living/carbon/human/interactive/away/hotel + away_area = /area/awaymission/spacehotel + override_under = /obj/item/clothing/under/mafia + chattyness = SNPC_CHANCE_TALK / 4 + +/mob/living/carbon/human/interactive/away/hotel/New(loc) + ..(loc, "Skrell") + +/mob/living/carbon/human/interactive/away/hotel/doSetup() + ..() + MYID.access += access_syndicate + RPID.access += access_syndicate + +/mob/living/carbon/human/interactive/away/hotel/guard + default_job = /datum/job/officer + +/mob/living/carbon/human/interactive/away/hotel/guard/doSetup() + ..("Guard") + +/mob/living/carbon/human/interactive/away/hotel/chef + default_job = /datum/job/chef + away_area = /area/awaymission/spacehotel/kitchen + override_under = /obj/item/clothing/under/mafia/vest + +/mob/living/carbon/human/interactive/away/hotel/bartender + default_job = /datum/job/bartender + override_under = /obj/item/clothing/under/mafia/vest + +/mob/living/carbon/human/interactive/away/hotel/concierge + override_under = /obj/item/clothing/under/mafia/white + away_area = /area/awaymission/spacehotel/reception + var/list/known_guests[0] + var/obj/effect/hotel_controller/hotel + var/obj/item/weapon/card/id/last_seen_id = null + +/mob/living/carbon/human/interactive/away/hotel/concierge/random() + ..() + equip_or_collect(new /obj/item/weapon/clipboard(src), slot_l_hand) + +/mob/living/carbon/human/interactive/away/hotel/concierge/doSetup() + ..("Concierge") + +/mob/living/carbon/human/interactive/away/hotel/concierge/setup_job() + favoured_types = list(/obj/item/weapon/paper, /obj/item/weapon/clipboard) + functions += list("stamping", "concierge") + restrictedJob = 1 + +/mob/living/carbon/human/interactive/away/hotel/concierge/proc/concierge() + if(!hotel) + hotel = hotel.controller + if(!hotel) + return + + var/verbs_use = pick_list(speak_file, "verbs_use") + var/verbs_touch = pick_list(speak_file, "verbs_touch") + var/verbs_move = pick_list(speak_file, "verbs_move") + var/nouns_generic = pick_list(speak_file, "nouns_generic") + var/adjective_insult = pick_list(speak_file, "adjective_insult") + var/adjective_objects = pick_list(speak_file, "adjective_objects") + var/adjective_generic = pick_list(speak_file, "adjective_generic") + var/curse_words = pick_list(speak_file, "curse_words") + + var/found = 0 + for(var/mob/living/carbon/human/H in nearby - known_guests) + pointed(H) + known_guests += H + found = 1 + if(found) + say("Welcome to [hotel], [nouns_generic]! Please check in by [ing_verb(verbs_move)] and [ing_verb(verbs_use)] your [adjective_objects] ID onto the table.") + return + + var/obj/item/weapon/card/id + var/id_seen = 0 + for(var/obj/item/weapon/card/id/I in get_area(src)) + id_seen = 1 + if(I != last_seen_id) + id = I + if(!id_seen) + last_seen_id = null + return + if(!id) + return + var/turf/idloc = get_turf(id) + if(!Adjacent(idloc)) + tryWalk(idloc) + else + // is the last jerk that touched it over here? + var/mob/id_owner + for(var/mob/living/carbon/human/H in nearby) + if(H.ckey == id.fingerprintslast) + id_owner = H + break + + if(!id_owner) + say("Whose card is this?") + pointed(id) + return + + last_seen_id = id + // Checking in or out? + if(id_owner in hotel.guests) + // Check out + say ("Hope you enjoyed your [adjective_objects] stay at our [adjective_generic] hotel!") + hotel.checkout(hotel.guests[id_owner]) + else + // pick a room + var/obj/machinery/door/unpowered/hotel_door/D = safepick(hotel.vacant_rooms) + if(!D) + say("Sorry, all the [adjective_objects] are occupied currently.") + else + // Check in + say("$100 per 10 minutes. The cost will be automatically [past_verb(verbs_touch)] while you're checked in.") + + var/obj/item/weapon/card/hotel_card/K = hotel.checkin(D.id, id_owner, id) + if(K) + K.forceMove(idloc) + else + say("Your [adjective_insult] [curse_words] card was rejected.") \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index 5f644146c5e..dcb10c651c0 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -175,7 +175,7 @@ var/sc_safecode5 = "[rand(0,9)]" /obj/singularity/narsie/sc_Narsie/consume(var/atom/A) if(is_type_in_list(A, uneatable)) return 0 - if (istype(A,/mob/living)) + if(istype(A,/mob/living)) var/mob/living/L = A L.gib() else if(istype(A,/obj/)) diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index d28d67f1f35..3db7ff86668 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -65,7 +65,7 @@ else if(is_special_character(user)) to_chat(user, "Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away.") - else if (!insistinga) + else if(!insistinga) to_chat(user, "Your first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?") insistinga++ @@ -172,7 +172,7 @@ if(istype(M, /mob/living/carbon/human)) for(var/mob/O in viewers(world.view, src.loc)) - to_chat(O, "[M] triggered the \icon[src] [src]") + to_chat(O, "[M] triggered the [bicon(src)] [src]") triggered = 1 call(src,triggerproc)(M) diff --git a/code/modules/awaymissions/snpc.dm b/code/modules/awaymissions/snpc.dm new file mode 100644 index 00000000000..bd7046e3b2c --- /dev/null +++ b/code/modules/awaymissions/snpc.dm @@ -0,0 +1,83 @@ +/mob/living/carbon/human/interactive/away + var/away_area = /area/awaymission // their overriden job area + var/override_under = null // optional type for uniform, else default for job + var/squad_member = 0 // was spawned by squad + var/home_z + +/mob/living/carbon/human/interactive/away/New() + ..() + TRAITS |= TRAIT_ROBUST + faction += "away" + +/mob/living/carbon/human/interactive/away/random() + if(ispath(override_under, /obj/item/clothing/under)) + equip_to_slot(new override_under(src), slot_w_uniform) + ..() + +/mob/living/carbon/human/interactive/away/doSetup() + ..() + var/datum/data/pda/app/messenger/M = MYPDA.find_program(/datum/data/pda/app/messenger) + M.toff = 1 + var/datum/data/pda/app/chatroom/C = MYPDA.find_program(/datum/data/pda/app/chatroom) + C.toff = 1 + +/mob/living/carbon/human/interactive/away/job2area() + return away_area + +/mob/living/carbon/human/interactive/away/doProcess() + if(!home_z) + home_z = get_turf(z) + if(home_z != get_turf(z)) + gib() + ..() + +/obj/effect/spawner/snpc_squad + name = "squad spawner" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x" + density = 0 + opacity = 0 + invisibility = 101 + var/squad_type = /mob/living/carbon/human/interactive/away + var/squad_size = 3 + + var/global/list/squads[0] + var/list/squad + +/obj/effect/spawner/snpc_squad/New() + processing_objects += src + + squad = squads[squad_type] + if(!squad) + squad = list() + squads[squad_type] = squad + squad += src + +/obj/effect/spawner/snpc_squad/Destroy() + squad = null + processing_objects -= src + return ..() + +/obj/effect/spawner/snpc_squad/process() + // check squad memebers + var/living = 0 + for(var/mob/living/carbon/human/interactive/away/A in squad) + if(!A.stat) + living++ + else + // see if anyone's looking, if not, despawn + var/can_despawn = 1 + for(var/mob/living/M in viewers(A, world.view + 1)) + if(M.client) + living++ // dead guy that can be seen still takes up a slot + can_despawn = 0 + break + if(can_despawn) + squad -= A + qdel(A) + + // spawn new ones + if(living < squad_size && !length(viewers(src, world.view))) + var/mob/living/carbon/human/interactive/away/A = new squad_type(loc) + squad += A + A.squad_member = 1 \ No newline at end of file diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 321e4033f0e..7fff68cf031 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -1,14 +1,27 @@ +var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away_mission_config.txt") + +// Call this before you remove the last dirt on a z level - that way, all objects +// will have proper atmos and other important enviro things /proc/late_setup_level(turfs, smoothTurfs) + var/total_timer = start_watch() + var/subtimer = start_watch() if(!smoothTurfs) smoothTurfs = turfs + log_debug("Setting up atmos") if(air_master) air_master.setup_allturfs(turfs) + log_debug("\tTook [stop_watch(subtimer)]s") + + subtimer = start_watch() + log_debug("Initializing lighting") for(var/turf/T in turfs) if(T.dynamic_lighting) T.lighting_build_overlays() - for(var/obj/structure/cable/PC in T) - makepowernet_for(PC) + log_debug("\tTook [stop_watch(subtimer)]s") + + subtimer = start_watch() + log_debug("Smoothing tiles") for(var/turf/T in smoothTurfs) if(T.smooth) smooth_icon(T) @@ -16,59 +29,47 @@ var/atom/A = R if(A.smooth) smooth_icon(A) + if(istype(T, /turf/simulated/mineral)) // For the listening post, among other maps + var/turf/simulated/mineral/MT = T + MT.add_edges() + log_debug("\tTook [stop_watch(subtimer)]s") + log_debug("Late setup finished - took [stop_watch(total_timer)]s") + +/proc/empty_rect(low_x,low_y, hi_x,hi_y, z) + var/timer = start_watch() + log_debug("Emptying region: ([low_x], [low_y]) to ([hi_x], [hi_y]) on z '[z]'") + empty_region(block(locate(low_x, low_y, z), locate(hi_x, hi_y, z))) + log_debug("Took [stop_watch(timer)]s") + +/proc/empty_region(list/turfs) + for(var/thing in turfs) + var/turf/T = thing + for(var/otherthing in T) + qdel(otherthing) + T.ChangeTurf(/turf/space) /proc/createRandomZlevel() if(awaydestinations.len) //crude, but it saves another var! return - var/list/potentialRandomZlevels = list() - log_startup_progress("Searching for away missions...") - var/list/Lines - if(fexists("config/away_mission_config.txt")) - Lines = file2list("config/away_mission_config.txt") - else - Lines = file2list("config/example/away_mission_config.txt") - - if(!Lines.len) return - for (var/t in Lines) - if (!t) - continue - - t = trim(t) - if (length(t) == 0) - continue - else if (copytext(t, 1, 2) == "#") - continue - - var/pos = findtext(t, " ") - var/name = null - // var/value = null - - if (pos) - name = lowertext(copytext(t, 1, pos)) - // value = copytext(t, pos + 1) - else - name = lowertext(t) - - if (!name) - continue - - potentialRandomZlevels.Add(t) - - - if(potentialRandomZlevels.len) + if(potentialRandomZlevels && potentialRandomZlevels.len) var/watch = start_watch() log_startup_progress("Loading away mission...") var/map = pick(potentialRandomZlevels) var/file = file(map) if(isfile(file)) - maploader.load_map(file, do_sleep = 0) - late_setup_level(block(locate(1, 1, world.maxz), locate(world.maxx, world.maxy, world.maxz))) + var/zlev = zlevels.add_new_zlevel() + zlevels.add_dirt(zlev) + maploader.load_map(file, z_offset = zlev) + late_setup_level(block(locate(1, 1, zlev), locate(world.maxx, world.maxy, zlev))) + zlevels.remove_dirt(zlev) log_to_dd(" Away mission loaded: [map]") + //map_transition_config.Add(AWAY_MISSION_LIST) + for(var/obj/effect/landmark/L in landmarks_list) - if (L.name != "awaystart") + if(L.name != "awaystart") continue awaydestinations.Add(L) @@ -76,4 +77,140 @@ else log_startup_progress(" No away missions found.") - return \ No newline at end of file + return + +/proc/createALLZlevels() + if(awaydestinations.len) //crude, but it saves another var! + return + + if(potentialRandomZlevels && potentialRandomZlevels.len) + var/watch = start_watch() + log_startup_progress("Loading away missions...") + + for(var/map in potentialRandomZlevels) + var/file = file(map) + if(isfile(file)) + log_startup_progress("Loading away mission: [map]") + var/zlev = zlevels.add_new_zlevel() + zlevels.add_dirt(zlev) + maploader.load_map(file, z_offset = zlev) + late_setup_level(block(locate(1, 1, zlev), locate(world.maxx, world.maxy, zlev))) + zlevels.remove_dirt(zlev) + log_to_dd(" Away mission loaded: [map]") + + //map_transition_config.Add(AWAY_MISSION_LIST) + + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name != "awaystart") + continue + awaydestinations.Add(L) + + log_startup_progress(" Away mission loaded in [stop_watch(watch)]s.") + watch = start_watch() + + else + log_startup_progress(" No away missions found.") + return + +/proc/generateMapList(filename) + var/list/potentialMaps = list() + var/list/Lines = file2list(filename) + + if(!Lines.len) + return + for(var/t in Lines) + if(!t) + continue + + t = trim(t) + if(length(t) == 0) + continue + else if(copytext(t, 1, 2) == "#") + continue + + var/pos = findtext(t, " ") + var/name = null + + if(pos) + name = lowertext(copytext(t, 1, pos)) + + else + name = lowertext(t) + + if(!name) + continue + + potentialMaps.Add(t) + + return potentialMaps + + +/proc/seedRuins(z_level = 1, budget = 0, whitelist = /area/space, list/potentialRuins = space_ruins_templates) + var/overall_sanity = 100 + var/ruins = potentialRuins.Copy() + var/initialbudget = budget + var/watch = start_watch() + + log_startup_progress("Loading ruins...") + + while(budget > 0 && overall_sanity > 0) + // Pick a ruin + var/datum/map_template/ruin/ruin = ruins[pick(ruins)] + // Can we afford it + if(ruin.cost > budget) + overall_sanity-- + continue + // If so, try to place it + var/sanity = 100 + // And if we can't fit it anywhere, give up, try again + + while(sanity > 0) + sanity-- + var/turf/T = locate(rand(25, world.maxx - 25), rand(25, world.maxy - 25), z_level) + var/valid = 1 + + for(var/turf/check in ruin.get_affected_turfs(T,1)) + var/area/new_area = get_area(check) + if(!(istype(new_area, whitelist))) + valid = 0 + break + + if(!valid) + continue + + log_to_dd(" Ruin \"[ruin.name]\" loaded in [stop_watch(watch)]s at ([T.x], [T.y], [T.z]).") + + var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T) + R.Load(ruins,ruin) + budget -= ruin.cost + if(!ruin.allow_duplicates) + ruins -= ruin.name + break + + to_chat(world, " Loaded ruins. Or not.") //So the players don't know if we loaded ruins, but we do have a message + + if(initialbudget == budget) //Kill me + log_to_dd(" No ruins loaded.") + + +/obj/effect/ruin_loader + name = "random ruin" + desc = "If you got lucky enough to see this..." + icon = 'icons/obj/weapons.dmi' + icon_state = "syndballoon" + invisibility = 0 + +/obj/effect/ruin_loader/proc/Load(list/potentialRuins = space_ruins_templates, datum/map_template/template = null) + var/list/possible_ruins = list() + for(var/A in potentialRuins) + var/datum/map_template/T = potentialRuins[A] + if(!T.loaded) + possible_ruins += T + if(!template && possible_ruins.len) + template = safepick(possible_ruins) + if(!template) + return 0 + template.load(get_turf(src),centered = 1) + template.loaded++ + qdel(src) + return 1 diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm new file mode 100644 index 00000000000..06d60f3389f --- /dev/null +++ b/code/modules/awaymissions/zvis.dm @@ -0,0 +1,369 @@ +/area/awaymission/upperlevel + name = "Open Space" + color = "#888" + lighting_use_dynamic = 0 + requires_power = 0 + +// Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is +/obj/effect/levelref + name = "level reference" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + invisibility = 101 + + var/id = null + var/obj/effect/levelref/other = null + var/offset_x + var/offset_y + var/offset_z + var/global/list/levels[0] + +/obj/effect/levelref/New() + ..() + levels += src + +/obj/effect/levelref/initialize() + ..() + for(var/obj/effect/levelref/O in levels) + if(id == O.id && O != src) + other = O + update_offset() + O.other = src + O.update_offset() + for(var/turf/unsimulated/floor/upperlevel/U in get_area(loc)) + U.init(src) + return + +/obj/effect/levelref/Destroy() + levels -= src + return ..() + +/obj/effect/levelref/proc/update_offset() + offset_x = other.x - x + offset_y = other.y - y + offset_z = other.z - z + +// Used by /turf/unsimulated/floor/upperlevel and /obj/effect/view_portal/visual +// to know if the world changed on the remote side +/obj/effect/portal_sensor + invisibility = 101 + var/light_hash = -1 + var/triggered_this_tick = 0 + var/datum/owner // owner that receive signals + var/list/params[0] // what to send to the main object to indicate which sensor + var/trigger_limit = 5 // number of time we're allowed to trigger per ptick + +/obj/effect/portal_sensor/New(loc, o, ...) + ..() + owner = o + if(args.len >= 3) + params = args.Copy(3) + processing_objects += src + trigger() + +/obj/effect/portal_sensor/Destroy() + processing_objects -= src + return ..() + +/obj/effect/portal_sensor/Crossed(A) + trigger() + +/obj/effect/portal_sensor/Uncrossed(A) + trigger() + +/obj/effect/portal_sensor/process() + check_light() + if(triggered_this_tick >= trigger_limit) + call(owner, "trigger")(arglist(params)) + triggered_this_tick = 0 + +/obj/effect/portal_sensor/proc/trigger() + triggered_this_tick++ + if(triggered_this_tick < trigger_limit) + call(owner, "trigger")(arglist(params)) + +/obj/effect/portal_sensor/proc/check_light() + var/turf/T = loc + if(istype(T) && T.lighting_overlay && !T.lighting_overlay.needs_update) + var/atom/movable/lighting_overlay/O = T.lighting_overlay + var/hash = O.lum_r + O.lum_g + O.lum_b + if(hash != light_hash) + light_hash = hash + trigger() + else + if(light_hash != -1) + light_hash = -1 + trigger() + +// for second floor showing floor below +/turf/unsimulated/floor/upperlevel + icon = 'icons/turf/areas.dmi' + icon_state = "dark128" + layer = AREA_LAYER + 0.5 + appearance_flags = TILE_BOUND | KEEP_TOGETHER + var/turf/lower_turf + var/obj/effect/portal_sensor/sensor + +/turf/unsimulated/floor/upperlevel/New() + ..() + var/obj/effect/levelref/R = locate() in get_area(src) + if(R && R.other) + init(R) + +/turf/unsimulated/floor/upperlevel/Destroy() + qdel(sensor) + sensor = null + return ..() + +/turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R) + lower_turf = locate(x + R.offset_x, y + R.offset_y, z + R.offset_z) + if(lower_turf) + sensor = new(lower_turf, src) + +/turf/unsimulated/floor/upperlevel/Entered(atom/movable/AM, atom/OL, ignoreRest = 0) + if(isliving(AM) || istype(AM, /obj)) + if(isliving(AM)) + var/mob/living/M = AM + M.emote("scream") + M.SpinAnimation(5, 1) + AM.forceMove(lower_turf) + +/turf/unsimulated/floor/upperlevel/attack_ghost(mob/user) + user.forceMove(lower_turf) + +/turf/unsimulated/floor/upperlevel/proc/trigger() + name = lower_turf.name + desc = lower_turf.desc + + // render each atom + underlays.Cut() + for(var/X in list(lower_turf) + lower_turf.contents) + var/atom/A = X + if(A && A.invisibility <= SEE_INVISIBLE_LIVING) + var/image/I = image(A, layer = AREA_LAYER + A.layer * 0.01, dir = A.dir) + I.pixel_x = A.pixel_x + I.pixel_y = A.pixel_y + underlays += I + +// remote end of narnia portal +/obj/effect/view_portal + name = "portal target" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + invisibility = 101 + anchored = 1 + + var/id = null // id of other portal turf we connect to + + var/obj/effect/view_portal/other = null + var/global/list/portals[0] + +/obj/effect/view_portal/New() + ..() + portals += src + +/obj/effect/view_portal/initialize() + ..() + if(id) + for(var/obj/effect/view_portal/O in portals) + if(id == O.id && O != src && can_link(O)) + other = O + O.other = src + linkup() + O.linkup() + if(other) + return + +/obj/effect/view_portal/Destroy() + portals -= src + return ..() + +/obj/effect/view_portal/proc/can_link(obj/effect/view_portal/P) + return P.type == /obj/effect/view_portal/visual && !P.other + +/obj/effect/view_portal/proc/linkup() + // allow it to link to multiple visual nodes + other = null + +// near end of nania portal +/obj/effect/view_portal/visual + name = "???" + desc = "You'll have to get closer to clearly see what this is." + + icon = 'icons/turf/floors.dmi' + icon_state = "loadingarea" + opacity = 1 + density = 1 + invisibility = 0 + appearance_flags = TILE_BOUND | KEEP_TOGETHER + var/dist = 6 // dist that we render out + var/radius = 3 // dist we render on other axis, in each direction + var/frustrum = 0 // if 1, get wider and wider at each step outward + var/teleport = 1 // should teleport? + + var/list/render_block + var/list/sensors[0] + var/list/tiles[0] + + var/list/near_render_block + var/turf/near_viewpoint + +/obj/effect/view_portal/visual/Destroy() + for(var/T in sensors) + qdel(sensors[T]) + sensors.Cut() + sensors = null + for(var/T in tiles) + qdel(tiles[T]) + tiles.Cut() + tiles = null + render_block = null + near_render_block = null + near_viewpoint = null + return ..() + +/obj/effect/view_portal/visual/can_link(obj/effect/view_portal/P) + return P.type == /obj/effect/view_portal + +/obj/effect/view_portal/visual/linkup() + icon = null + icon_state = null + var/turf/Tloc = get_turf(loc) + if(Tloc) + Tloc.icon = null + Tloc.icon_state = null + Tloc.dynamic_lighting = 0 + layer = AREA_LAYER + 0.5 + + // setup references + var/crossdir = angle2dir((dir2angle(dir) + 90) % 360) + near_viewpoint = get_step(get_turf(src), GetOppositeDir(dir)) + + // setup far turfs + var/turf/T1 = get_turf(other) + var/turf/T2 = T1 + + for(var/i in 1 to radius) + T1 = get_step(T1, crossdir) + T2 = get_step(T2, GetOppositeDir(crossdir)) + if(frustrum) + // make a trapazoid, with length dist, short end radius*2 long, + // and 45 degree angles + render_block = block(T1, T2) + for(var/i in 1 to dist) + T1 = get_step(get_step(T1, dir), crossdir) + T2 = get_step(get_step(T2, dir), GetOppositeDir(crossdir)) + render_block += block(T1, T2) + else + // else make a box dist x radius*2 + for(var/i in 1 to dist) + T2 = get_step(T2, dir) + render_block = block(T1, T2) + for(var/turf/T in render_block) + sensors[T] = new /obj/effect/portal_sensor(T, src, 0, T) + +// setup turfs on this side of the portal to cover the map streaming +// has to be done later for view() to be correct (so it happens when the walls exist) +/obj/effect/view_portal/visual/proc/setup_near() + var/nvs = dir & (EAST|WEST) ? near_viewpoint.x - x : near_viewpoint.y - y + if(nvs) + nvs = SIGN(nvs) + // need a mob for view() to work correctly + var/mob/M = new(near_viewpoint) + M.see_invisible = SEE_INVISIBLE_LIVING + near_render_block = view(M, world.view) + qdel(M) + for(var/A in near_render_block) + var/turf/T = A + if(istype(T)) + var/ts = dir & (EAST|WEST) ? T.x - x : T.y - y + if(ts) + ts = SIGN(ts) + if(nvs == ts) + sensors[T] = new /obj/effect/portal_sensor(T, src, 1, T) + else + near_render_block -= T + else + near_render_block -= T + +/obj/effect/view_portal/visual/Bumped(atom/movable/thing) + if((istype(thing, /obj) || isliving(thing)) && other && teleport) + if(!near_render_block) + setup_near() + + var/mob/living/M = thing + // make the person glide onto the dest, giving a smooth transition + var/ox = thing.x - x + var/oy = thing.y - y + if(istype(M) && M.client) + M.notransform = 1 + // cover up client-side map loading + M.screen_loc = "CENTER" + M.client.screen += M + for(var/T in tiles) + M.client.screen += tiles[T] + + // wait a tick for the screen to replicate across network + // or this whole exercise of covering the transition is pointless + spawn(1) + thing.forceMove(locate(other.x + ox, other.y + oy, other.z)) + sleep(1) + if(istype(M) && M.client) + for(var/T in tiles) + M.client.screen -= tiles[T] + M.client.screen -= M + M.screen_loc = initial(M.screen_loc) + thing.forceMove(get_turf(other.loc)) + if(istype(M) && M.client) + M.notransform = 0 + +/obj/effect/view_portal/visual/attack_ghost(mob/user) + user.forceMove(get_turf(other.loc)) + +/obj/effect/view_portal/visual/proc/trigger(near, turf/T) + var/obj/effect/view_portal_dummy/D = tiles[T] + if(D) + D.overlays.Cut() + else + D = new(src, near, T) + tiles[T] = D + + // render atoms to overlays of a dummy object + if(D.name != T.name) + D.name = T.name + D.desc = T.desc + for(var/AX in list(T) + T.contents) + var/atom/A = AX + if(A && A.invisibility <= SEE_INVISIBLE_LIVING) + var/image/I = image(A, layer = D.layer + A.layer * 0.01, dir = A.dir) + I.pixel_x = A.pixel_x + I.pixel_y = A.pixel_y + D.overlays += I + +// tile of rendered other side for narnia portal +/obj/effect/view_portal_dummy + var/obj/effect/view_portal/visual/owner + +/obj/effect/view_portal_dummy/New(obj/effect/view_portal/visual/V, near, turf/T) + ..() + if(!near) + loc = V.loc + owner = V + + var/ox + var/oy + if(near) + ox = (T.x - V.near_viewpoint.x) + oy = (T.y - V.near_viewpoint.y) + layer = AREA_LAYER + 0.4 + else + ox = T.x - V.other.x + V.x - V.near_viewpoint.x + oy = T.y - V.other.y + V.y - V.near_viewpoint.y + pixel_x = 32 * (T.x - V.other.x) + pixel_y = 32 * (T.y - V.other.y) + layer = AREA_LAYER + 0.5 + if(abs(ox) <= world.view && abs(oy) <= world.view) + screen_loc = "CENTER[ox >= 0 ? "+" : ""][ox],CENTER[oy >= 0 ? "+" : ""][oy]" + +/obj/effect/view_portal_dummy/attack_ghost(mob/user) + owner.attack_ghost(user) diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index ac4a426fe08..f51f83cafb2 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -46,10 +46,10 @@ You can set verify to TRUE if you want send() to sleep until the client has the client << browse_rsc(asset_cache[asset_name], asset_name) if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip. - if (client) + if(client) client.cache += asset_name return 1 - if (!client) + if(!client) return 0 client.sending |= asset_name @@ -91,17 +91,17 @@ You can set verify to TRUE if you want send() to sleep until the client has the var/list/unreceived = asset_list - (client.cache + client.sending) if(!unreceived || !unreceived.len) return 0 - if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) + if(unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) to_chat(client, "Sending Resources...") for(var/asset in unreceived) - if (asset in asset_cache) + if(asset in asset_cache) client << browse_rsc(asset_cache[asset], asset) if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip. - if (client) + if(client) client.cache += unreceived return 1 - if (!client) + if(!client) return 0 client.sending |= unreceived var/job = ++client.last_asset_job @@ -129,9 +129,9 @@ You can set verify to TRUE if you want send() to sleep until the client has the //The proc calls procs that sleep for long times. proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) for(var/file in files) - if (!client) + if(!client) break - if (register_asset) + if(register_asset) register_asset(file,files[file]) send_asset(client,file) sleep(-1) //queuing calls like this too quickly can cause issues in some client versions @@ -159,7 +159,7 @@ proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) //get a assetdatum or make a new one /proc/get_asset_datum(var/type) - if (!(type in asset_datums)) + if(!(type in asset_datums)) return new type() return asset_datums[type] @@ -240,14 +240,14 @@ proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) /datum/asset/nanoui/register() // Crawl the directories to find files. - for (var/path in common_dirs) + for(var/path in common_dirs) var/list/filenames = flist(path) for(var/filename in filenames) if(copytext(filename, length(filename)) != "/") // Ignore directories. if(fexists(path + filename)) common[filename] = fcopy_rsc(path + filename) register_asset(filename, common[filename]) - for (var/path in uncommon_dirs) + for(var/path in uncommon_dirs) var/list/filenames = flist(path) for(var/filename in filenames) if(copytext(filename, length(filename)) != "/") // Ignore directories. @@ -260,3 +260,18 @@ proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) send_asset_list(client, uncommon) send_asset_list(client, common) + +/datum/asset/chem_master + var/assets = list() + var/verify = FALSE + +/datum/asset/chem_master/register() + for(var/i = 1 to 20) + assets["pill[i].png"] = icon('icons/obj/chemical.dmi', "pill[i]") + for(var/i = 1 to 20) + assets["bottle[i].png"] = icon('icons/obj/chemical.dmi', "bottle[i]") + for(var/asset_name in assets) + register_asset(asset_name, assets[asset_name]) + +/datum/asset/chem_master/send(client) + send_asset_list(client,assets,verify) \ No newline at end of file diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 30e4793c747..c1cbd07daee 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -84,4 +84,8 @@ var/datum/click_intercept/click_intercept = null //datum that controls the displaying and hiding of tooltips - var/datum/tooltip/tooltips \ No newline at end of file + var/datum/tooltip/tooltips + + // Their chat window, sort of important. + // See /goon/code/datums/browserOutput.dm + var/datum/chatOutput/chatOutput \ No newline at end of file diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 756e5c6b156..0d56f0d1122 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -8,6 +8,8 @@ #define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen? #define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing. //I would just like the code ready should it ever need to be used. +#define SUGGESTED_CLIENT_VERSION 510 // only integers (e.g: 510, 511) useful here. Does not properly handle minor versions (e.g: 510.58, 511.848) + /* When somebody clicks a link in game, this Topic is called first. It does the stuff in this proc and then is redirected to the Topic() proc for the src=[0xWhatever] @@ -43,6 +45,9 @@ completed_asset_jobs += job return + if(href_list["_src_"] == "chat") + return chatOutput.Topic(href, href_list) + //Reduces spamming of links by dropping calls that happen during the delay period if(next_allowed_topic_time > world.time) return @@ -203,6 +208,11 @@ if("prefs") return prefs.process_link(usr,href_list) if("vars") return view_var_Topic(href,href_list,hsrc) + + switch(href_list["action"]) + if("openLink") + src << link(href_list["link"]) + ..() //redirect to hsrc.Topic() /client/proc/is_content_unlocked() @@ -245,12 +255,15 @@ //CONNECT// /////////// /client/New(TopicData) + chatOutput = new /datum/chatOutput(src) // Right off the bat. TopicData = null //Prevent calls to client.Topic from connect if(connection != "seeker") //Invalid connection type. return null - if(byond_version < MIN_CLIENT_VERSION) //Out of date client. + if(byond_version < MIN_CLIENT_VERSION) // Too out of date to play at all. Unfortunately, we can't send them a message here. return null + if(byond_version < SUGGESTED_CLIENT_VERSION) // Update is suggested, but not required. + to_chat(src,"Your BYOND client (v: [byond_version]) is out of date. This can cause glitches. We highly suggest you download the latest client from http://www.byond.com/ before playing. ") if(IsGuestKey(key)) alert(src,"This server doesn't allow guest accounts to play. Please go to http://www.byond.com/ and register for a key.","Guest","OK") @@ -283,6 +296,7 @@ prefs.last_id = computer_id //these are gonna be used for banning . = ..() //calls mob.Login() + chatOutput.start() if(custom_event_msg && custom_event_msg != "") to_chat(src, "

        Custom Event

        ") @@ -307,8 +321,8 @@ log_client_to_db() - if (ckey in clientmessages) - for (var/message in clientmessages[ckey]) + if(ckey in clientmessages) + for(var/message in clientmessages[ckey]) to_chat(src, message) clientmessages.Remove(ckey) @@ -348,7 +362,7 @@ /client/proc/log_client_to_db() - if ( IsGuestKey(src.key) ) + if( IsGuestKey(src.key) ) return establish_db_connection() diff --git a/code/modules/client/message.dm b/code/modules/client/message.dm index 6406a7d051a..a5c78008b4f 100644 --- a/code/modules/client/message.dm +++ b/code/modules/client/message.dm @@ -2,8 +2,8 @@ var/list/clientmessages = list() proc/addclientmessage(var/ckey, var/message) ckey = ckey(ckey) - if (!ckey || !message) + if(!ckey || !message) return - if (!(ckey in clientmessages)) + if(!(ckey in clientmessages)) clientmessages[ckey] = list() clientmessages[ckey] += message diff --git a/code/modules/client/preference/loadout/gear_tweaks.dm b/code/modules/client/preference/loadout/gear_tweaks.dm new file mode 100644 index 00000000000..6458a51b9a3 --- /dev/null +++ b/code/modules/client/preference/loadout/gear_tweaks.dm @@ -0,0 +1,113 @@ +/datum/gear_tweak/proc/get_contents(var/metadata) + return + +/datum/gear_tweak/proc/get_metadata(var/user, var/metadata) + return + +/datum/gear_tweak/proc/get_default() + return + +/datum/gear_tweak/proc/tweak_gear_data(var/metadata, var/datum/gear_data) + return + +/datum/gear_tweak/proc/tweak_item(var/obj/item/I, var/metadata) + return + +/* +* Color adjustment +*/ + +var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() + +/datum/gear_tweak/color + var/list/valid_colors + +/datum/gear_tweak/color/New(var/list/colors) + valid_colors = colors + ..() + +/datum/gear_tweak/color/get_contents(var/metadata) + return "Color: " + +/datum/gear_tweak/color/get_default() + return valid_colors ? valid_colors[1] : COLOR_GRAY + +/datum/gear_tweak/color/get_metadata(var/user, var/metadata) + if(valid_colors) + return input(user, "Choose an item color.", "Character Preference", metadata) as null|anything in valid_colors + return input(user, "Choose an item color.", "Global Preference", metadata) as color|null + +/datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata) + if(valid_colors && !(metadata in valid_colors)) + return + I.color = metadata + +/* +* Path adjustment +*/ + +/datum/gear_tweak/path + var/list/valid_paths + +/datum/gear_tweak/path/New(var/list/paths) + valid_paths = paths + ..() + +/datum/gear_tweak/path/get_contents(var/metadata) + return "Type: [metadata]" + +/datum/gear_tweak/path/get_default() + return valid_paths[1] + +/datum/gear_tweak/path/get_metadata(var/user, var/metadata) + return input(user, "Choose a type.", "Character Preference", metadata) as null|anything in valid_paths + +/datum/gear_tweak/path/tweak_gear_data(var/metadata, var/datum/gear_data/gear_data) + if(!(metadata in valid_paths)) + return + gear_data.path = valid_paths[metadata] + +/* +* Content adjustment +*/ + +/datum/gear_tweak/contents + var/list/valid_contents + +/datum/gear_tweak/contents/New() + valid_contents = args.Copy() + ..() + +/datum/gear_tweak/contents/get_contents(var/metadata) + return "Contents: [english_list(metadata, and_text = ", ")]" + +/datum/gear_tweak/contents/get_default() + . = list() + for(var/i = 1 to valid_contents.len) + . += "Random" + +/datum/gear_tweak/contents/get_metadata(var/user, var/list/metadata) + . = list() + for(var/i = metadata.len to valid_contents.len) + metadata += "Random" + for(var/i = 1 to valid_contents.len) + var/entry = input(user, "Choose an entry.", "Character Preference", metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None")) + if(entry) + . += entry + else + return metadata + +/datum/gear_tweak/contents/tweak_item(var/obj/item/I, var/list/metadata) + if(metadata.len != valid_contents.len) + return + for(var/i = 1 to valid_contents.len) + var/path + var/list/contents = valid_contents[i] + if(metadata[i] == "Random") + path = pick(contents) + path = contents[path] + else if(metadata[i] == "None") + continue + else + path = contents[metadata[i]] + new path(I) diff --git a/code/modules/client/preference/loadout/loadout.dm b/code/modules/client/preference/loadout/loadout.dm new file mode 100644 index 00000000000..010fc54564c --- /dev/null +++ b/code/modules/client/preference/loadout/loadout.dm @@ -0,0 +1,79 @@ +var/list/loadout_categories = list() +var/list/gear_datums = list() + +/datum/loadout_category + var/category = "" + var/list/gear = list() + +/datum/loadout_category/New(cat) + category = cat + ..() + +/hook/startup/proc/populate_gear_list() + //create a list of gear datums to sort + for(var/geartype in subtypesof(/datum/gear)) + var/datum/gear/G = geartype + + var/use_name = initial(G.display_name) + var/use_category = initial(G.sort_category) + + if(G == initial(G.subtype_path)) + continue + + if(!use_name) + error("Loadout - Missing display name: [G]") + continue + if(!initial(G.cost)) + error("Loadout - Missing cost: [G]") + continue + if(!initial(G.path)) + error("Loadout - Missing path definition: [G]") + continue + + if(!loadout_categories[use_category]) + loadout_categories[use_category] = new /datum/loadout_category(use_category) + var/datum/loadout_category/LC = loadout_categories[use_category] + gear_datums[use_name] = new geartype + LC.gear[use_name] = gear_datums[use_name] + + loadout_categories = sortAssoc(loadout_categories) + for(var/loadout_category in loadout_categories) + var/datum/loadout_category/LC = loadout_categories[loadout_category] + LC.gear = sortAssoc(LC.gear) + return 1 + +/datum/gear + var/display_name //Name/index. Must be unique. + var/description //Description of this gear. If left blank will default to the description of the pathed item. + var/path //Path to item. + var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points. + var/slot //Slot to equip to. + var/list/allowed_roles //Roles that can spawn with this item. + var/whitelisted //Term to check the whitelist for.. + var/sort_category = "General" + var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. + var/subtype_path = /datum/gear //for skipping organizational subtypes (optional) + var/subtype_cost_overlap = TRUE //if subtypes can take points at the same time + +/datum/gear/New() + ..() + if(!description) + var/obj/O = path + description = initial(O.desc) + +/datum/gear_data + var/path + var/location + +/datum/gear_data/New(npath, nlocation) + path = npath + location = nlocation + +/datum/gear/proc/spawn_item(location, metadata) + var/datum/gear_data/gd = new(path, location) + for(var/datum/gear_tweak/gt in gear_tweaks) + gt.tweak_gear_data(metadata["[gt]"], gd) + var/item = new gd.path(gd.location) + for(var/datum/gear_tweak/gt in gear_tweaks) + gt.tweak_item(item, metadata["[gt]"]) + return item \ No newline at end of file diff --git a/code/modules/client/preference/loadout/loadout_accessories.dm b/code/modules/client/preference/loadout/loadout_accessories.dm new file mode 100644 index 00000000000..b86d5c44ed1 --- /dev/null +++ b/code/modules/client/preference/loadout/loadout_accessories.dm @@ -0,0 +1,95 @@ +/datum/gear/accessory + subtype_path = /datum/gear/accessory + slot = slot_tie + sort_category = "Accessories" + +/datum/gear/accessory/scarf + display_name = "scarf" + path = /obj/item/clothing/accessory/scarf + +/datum/gear/accessory/scarf/red + display_name = "scarf, red" + path = /obj/item/clothing/accessory/scarf/red + +/datum/gear/accessory/scarf/green + display_name = "scarf, green" + path = /obj/item/clothing/accessory/scarf/green + +/datum/gear/accessory/scarf/darkblue + display_name = "scarf, dark blue" + path = /obj/item/clothing/accessory/scarf/darkblue + +/datum/gear/accessory/scarf/purple + display_name = "scarf, purple" + path = /obj/item/clothing/accessory/scarf/purple + +/datum/gear/accessory/scarf/yellow + display_name = "scarf, yellow" + path = /obj/item/clothing/accessory/scarf/yellow + +/datum/gear/accessory/scarf/orange + display_name = "scarf, orange" + path = /obj/item/clothing/accessory/scarf/orange + +/datum/gear/accessory/scarf/lightblue + display_name = "scarf, light blue" + path = /obj/item/clothing/accessory/scarf/lightblue + +/datum/gear/accessory/scarf/white + display_name = "scarf, white" + path = /obj/item/clothing/accessory/scarf/white + +/datum/gear/accessory/scarf/black + display_name = "scarf, black" + path = /obj/item/clothing/accessory/scarf/black + +/datum/gear/accessory/scarf/zebra + display_name = "scarf, zebra" + path = /obj/item/clothing/accessory/scarf/zebra + +/datum/gear/accessory/scarf/christmas + display_name = "scarf, christmas" + path = /obj/item/clothing/accessory/scarf/christmas + +/datum/gear/accessory/scarf/stripedred + display_name = "scarf, striped red" + path = /obj/item/clothing/accessory/stripedredscarf + +/datum/gear/accessory/scarf/stripedgreen + display_name = "scarf, striped green" + path = /obj/item/clothing/accessory/stripedgreenscarf + +/datum/gear/accessory/scarf/stripedblue + display_name = "scarf, striped blue" + path = /obj/item/clothing/accessory/stripedbluescarf + +/datum/gear/accessory/holobadge + display_name = "holobadge, pin" + path = /obj/item/clothing/accessory/holobadge + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") + +/datum/gear/accessory/holobadge_n + display_name = "holobadge, cord" + path = /obj/item/clothing/accessory/holobadge/cord + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") + +/datum/gear/accessory/tieblue + display_name = "tie, blue" + path = /obj/item/clothing/accessory/blue + +/datum/gear/accessory/tiered + display_name = "tie, red" + path = /obj/item/clothing/accessory/red + +/datum/gear/accessory/tieblack + display_name = "tie, black" + path = /obj/item/clothing/accessory/black + +/datum/gear/accessory/tiehorrible + display_name = "tie, vomit green" + path = /obj/item/clothing/accessory/horrible + +/datum/gear/accessory/stethoscope + display_name = "stethoscope" + path = /obj/item/clothing/accessory/stethoscope + allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Paramedic", "Brig Physician") diff --git a/code/modules/client/preference/loadout/loadout_cosmetics.dm b/code/modules/client/preference/loadout/loadout_cosmetics.dm new file mode 100644 index 00000000000..0b47a299ce6 --- /dev/null +++ b/code/modules/client/preference/loadout/loadout_cosmetics.dm @@ -0,0 +1,20 @@ +/datum/gear/lipstick + display_name = "lipstick, black" + path = /obj/item/weapon/lipstick/black + sort_category = "Cosmetics" + +/datum/gear/lipstick/jade + display_name = "lipstick, jade" + path = /obj/item/weapon/lipstick/jade + +/datum/gear/lipstick/purple + display_name = "lipstick, purple" + path = /obj/item/weapon/lipstick/purple + +/datum/gear/lipstick/red + display_name = "lipstick, red" + path = /obj/item/weapon/lipstick + +/datum/gear/monocle + display_name = "monocle" + path = /obj/item/clothing/glasses/monocle \ No newline at end of file diff --git a/code/modules/client/preference/loadout/loadout_general.dm b/code/modules/client/preference/loadout/loadout_general.dm new file mode 100644 index 00000000000..40d581d030e --- /dev/null +++ b/code/modules/client/preference/loadout/loadout_general.dm @@ -0,0 +1,40 @@ +/datum/gear/dice + display_name = "a d20" + path = /obj/item/weapon/dice/d20 + +/datum/gear/uplift + display_name = "a pack of Uplifts" + path = /obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift + +/datum/gear/robust + display_name = "a pack of Robusts" + path = /obj/item/weapon/storage/fancy/cigarettes/cigpack_robust + +/datum/gear/carp + display_name = "a pack of Carps" + path = /obj/item/weapon/storage/fancy/cigarettes/cigpack_carp + +/datum/gear/midori + display_name = "a pack of Midoris" + path = /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori + +/datum/gear/lighter + display_name = "a cheap lighter" + path = /obj/item/weapon/lighter + +/datum/gear/rock + display_name = "a pet rock" + path = /obj/item/toy/pet_rock + +/datum/gear/sechud + display_name = "a classic security HUD" + path = /obj/item/clothing/glasses/hud/security + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") + +/datum/gear/matches + display_name = "a box of matches" + path = /obj/item/weapon/storage/box/matches + +/datum/gear/cards + display_name = "a deck of cards" + path = /obj/item/toy/cards/deck diff --git a/code/modules/client/preference/loadout/loadout_hat.dm b/code/modules/client/preference/loadout/loadout_hat.dm new file mode 100644 index 00000000000..5580d76f1e5 --- /dev/null +++ b/code/modules/client/preference/loadout/loadout_hat.dm @@ -0,0 +1,114 @@ +/datum/gear/hat + subtype_path = /datum/gear/hat + slot = slot_head + sort_category = "Headwear" + +/datum/gear/hat/hhat_yellow + display_name = "hardhat, yellow" + path = /obj/item/clothing/head/hardhat + allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist") + +/datum/gear/hat/hhat_orange + display_name = "hardhat, orange" + path = /obj/item/clothing/head/hardhat/orange + allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist") + +/datum/gear/hat/hhat_blue + display_name = "hardhat, blue" + path = /obj/item/clothing/head/hardhat/dblue + allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist") + +/datum/gear/hat/that + display_name = "top hat" + path = /obj/item/clothing/head/that + +/datum/gear/hat/flatcap + display_name = "flat cap" + path = /obj/item/clothing/head/flatcap + +/datum/gear/hat/fez + display_name = "fez" + path = /obj/item/clothing/head/fez + +/datum/gear/hat/bfedora + display_name = "fedora, black" + path = /obj/item/clothing/head/fedora + +/datum/gear/hat/wfedora + display_name = "fedora, white" + path = /obj/item/clothing/head/fedora/whitefedora + +/datum/gear/hat/brfedora + display_name = "fedora, brown" + path = /obj/item/clothing/head/fedora/brownfedora + +/datum/gear/hat/beretsec + display_name = "security beret" + path = /obj/item/clothing/head/beret/sec + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") + +/datum/gear/hat/capcsec + display_name = "security corporate cap" + path = /obj/item/clothing/head/soft/sec/corp + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") + +/datum/gear/hat/capsec + display_name = "security cap" + path = /obj/item/clothing/head/soft/sec + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") + +/datum/gear/hat/capred + display_name = "cap, red" + path = /obj/item/clothing/head/soft/red + +/datum/gear/hat/capblue + display_name = "cap, blue" + path = /obj/item/clothing/head/soft/blue + +/datum/gear/hat/capgreen + display_name = "cap, green" + path = /obj/item/clothing/head/soft/green + +/datum/gear/hat/capblack + display_name = "cap, black" + path = /obj/item/clothing/head/soft/black + +/datum/gear/hat/cappurple + display_name = "cap, purple" + path = /obj/item/clothing/head/soft/purple + +/datum/gear/hat/capwhite + display_name = "cap, white" + path = /obj/item/clothing/head/soft/mime + +/datum/gear/hat/caporange + display_name = "cap, orange" + path = /obj/item/clothing/head/soft/orange + +/datum/gear/hat/capgrey + display_name = "cap, grey" + path = /obj/item/clothing/head/soft/grey + +/datum/gear/hat/capyellow + display_name = "cap, yellow" + path = /obj/item/clothing/head/soft/yellow + +/datum/gear/hat/cowboyhat + display_name = "cowboy hat" + path = /obj/item/clothing/head/cowboyhat + +/datum/gear/hat/pr_beret + display_name = "beret, purple" + path = /obj/item/clothing/head/beret/purple_normal + +/datum/gear/hat/bl_beret + display_name = "beret, black" + path = /obj/item/clothing/head/beret/black + +/datum/gear/hat/blu_beret + display_name = "beret, blue" + path = /obj/item/clothing/head/beret/blue + +/datum/gear/hat/red_beret + display_name = "beret, red" + path = /obj/item/clothing/head/beret diff --git a/code/modules/client/preference/loadout/loadout_shoes.dm b/code/modules/client/preference/loadout/loadout_shoes.dm new file mode 100644 index 00000000000..97e64e74f83 --- /dev/null +++ b/code/modules/client/preference/loadout/loadout_shoes.dm @@ -0,0 +1,8 @@ +/datum/gear/shoes + subtype_path = /datum/gear/shoes + slot = slot_shoes + sort_category = "Shoes" + +/datum/gear/shoes/sandals + display_name = "sandals" + path = /obj/item/clothing/shoes/sandal \ No newline at end of file diff --git a/code/modules/client/preference/loadout/loadout_suit.dm b/code/modules/client/preference/loadout/loadout_suit.dm new file mode 100644 index 00000000000..29f0c15c71c --- /dev/null +++ b/code/modules/client/preference/loadout/loadout_suit.dm @@ -0,0 +1,146 @@ +/datum/gear/suit + subtype_path = /datum/gear/suit + slot = slot_wear_suit + cost = 2 + sort_category = "External Wear" + +//WINTER COATS +/datum/gear/suit/coat + subtype_path = /datum/gear/suit/coat + +/datum/gear/suit/coat/grey + display_name = "winter coat" + path = /obj/item/clothing/suit/hooded/wintercoat + +/datum/gear/suit/coat/job + subtype_path = /datum/gear/suit/coat/job + subtype_cost_overlap = FALSE + +/datum/gear/suit/coat/job/sec + display_name = "winter coat, security" + path = /obj/item/clothing/suit/hooded/wintercoat/security + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot") + +/datum/gear/suit/coat/job/captain + display_name = "winter coat, captain" + path = /obj/item/clothing/suit/hooded/wintercoat/captain + allowed_roles = list("Captain") + +/datum/gear/suit/coat/job/med + display_name = "winter coat, medical" + path = /obj/item/clothing/suit/hooded/wintercoat/medical + allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Brig Physician") + +/datum/gear/suit/coat/job/sci + display_name = "winter coat, science" + path = /obj/item/clothing/suit/hooded/wintercoat/science + allowed_roles = list("Scientist", "Research Director") + +/datum/gear/suit/coat/job/engi + display_name = "winter coat, engineering" + path = /obj/item/clothing/suit/hooded/wintercoat/engineering + allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic") + +/datum/gear/suit/coat/job/atmos + display_name = "winter coat, atmospherics" + path = /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos + allowed_roles = list("Chief Engineer", "Life Support Specialist") + +/datum/gear/suit/coat/job/hydro + display_name = "winter coat, hydroponics" + path = /obj/item/clothing/suit/hooded/wintercoat/hydro + allowed_roles = list("Botanist") + +/datum/gear/suit/coat/job/cargo + display_name = "winter coat, cargo" + path = /obj/item/clothing/suit/hooded/wintercoat/cargo + allowed_roles = list("Quartermaster", "Cargo Technician") + +/datum/gear/suit/coat/job/miner + display_name = "winter coat, miner" + path = /obj/item/clothing/suit/hooded/wintercoat/miner + allowed_roles = list("Miner") + +//LABCOATS +/datum/gear/suit/labcoat_emt + display_name = "labcoat, paramedic" + path = /obj/item/clothing/suit/storage/labcoat/emt + allowed_roles = list("Chief Medical Officer", "Paramedic") + +//JACKETS +/datum/gear/suit/leather_jacket + display_name = "leather jacket" + path = /obj/item/clothing/suit/jacket/leather + +/datum/gear/suit/br_tcoat + display_name = "trenchcoat, brown" + path = /obj/item/clothing/suit/browntrenchcoat + +/datum/gear/suit/bl_tcoat + display_name = "trenchcoat, black" + path = /obj/item/clothing/suit/blacktrenchcoat + +/datum/gear/suit/bomber_jacket + display_name = "bomber jacket" + path = /obj/item/clothing/suit/jacket + +/datum/gear/suit/ol_miljacket + display_name = "military jacket, olive" + path = /obj/item/clothing/suit/jacket/miljacket + +/datum/gear/suit/nv_miljacket + display_name = "military jacket, navy" + path = /obj/item/clothing/suit/jacket/miljacket/navy + +/datum/gear/suit/ds_miljacket + display_name = "military jacket, desert" + path = /obj/item/clothing/suit/jacket/miljacket/desert + +/datum/gear/suit/wh_miljacket + display_name = "military jacket, white" + path = /obj/item/clothing/suit/jacket/miljacket/white + +/datum/gear/suit/secjacket + display_name = "security jacket" + path = /obj/item/clothing/suit/armor/secjacket + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot") + +/datum/gear/suit/poncho + display_name = "poncho, classic" + path = /obj/item/clothing/suit/poncho + +/datum/gear/suit/grponcho + display_name = "poncho, green" + path = /obj/item/clothing/suit/poncho/green + +/datum/gear/suit/rdponcho + display_name = "poncho, red" + path = /obj/item/clothing/suit/poncho/red + +/datum/gear/suit/tphoodie + display_name = "hoodie, Tharsis Polytech" + path = /obj/item/clothing/suit/hooded/hoodie/tp + +/datum/gear/suit/nthoodie + display_name = "hoodie, Nanotrasen" + path = /obj/item/clothing/suit/hooded/hoodie/nt + +/datum/gear/suit/lamhoodie + display_name = "hoodie, Lunar Academy of Medicine" + path = /obj/item/clothing/suit/hooded/hoodie/lam + +/datum/gear/suit/cuthoodie + display_name = "hoodie, Canaan University of Technology" + path = /obj/item/clothing/suit/hooded/hoodie/cut + +/datum/gear/suit/mithoodie + display_name = "hoodie, Martian Institute of Technology" + path = /obj/item/clothing/suit/hooded/hoodie/mit + +/datum/gear/suit/bluehoodie + display_name = "hoodie, blue" + path = /obj/item/clothing/suit/hooded/hoodie/blue + +/datum/gear/suit/blackhoodie + display_name = "hoodie, black" + path = /obj/item/clothing/suit/hooded/hoodie diff --git a/code/modules/client/preference/loadout/loadout_uniform.dm b/code/modules/client/preference/loadout/loadout_uniform.dm new file mode 100644 index 00000000000..5bef51bdc1d --- /dev/null +++ b/code/modules/client/preference/loadout/loadout_uniform.dm @@ -0,0 +1,196 @@ +// Uniform slot +/datum/gear/uniform + subtype_path = /datum/gear/uniform + slot = slot_w_uniform + cost = 2 + sort_category = "Uniforms and Casual Dress" + +/datum/gear/uniform/skirt + subtype_path = /datum/gear/uniform/skirt + +/datum/gear/uniform/skirt/blue + display_name = "plaid skirt, blue" + path = /obj/item/clothing/under/dress/plaid_blue + +/datum/gear/uniform/skirt/purple + display_name = "plaid skirt, purple" + path = /obj/item/clothing/under/dress/plaid_purple + +/datum/gear/uniform/skirt/red + display_name = "plaid skirt, red" + path = /obj/item/clothing/under/dress/plaid_red + +/datum/gear/uniform/skirt/black + display_name = "skirt, black" + path = /obj/item/clothing/under/blackskirt + +/datum/gear/uniform/skirt/job + subtype_path = /datum/gear/uniform/skirt/job + subtype_cost_overlap = FALSE + +/datum/gear/uniform/skirt/job/ce + display_name = "skirt, ce" + path = /obj/item/clothing/under/rank/chief_engineer/skirt + allowed_roles = list("Chief Engineer") + +/datum/gear/uniform/skirt/job/atmos + display_name = "skirt, atmos" + path = /obj/item/clothing/under/rank/atmospheric_technician/skirt + allowed_roles = list("Chief Engineer","Atmospheric Technician") + +/datum/gear/uniform/skirt/job/eng + display_name = "skirt, engineer" + path = /obj/item/clothing/under/rank/engineer/skirt + allowed_roles = list("Chief Engineer","Station Engineer") + +/datum/gear/uniform/skirt/job/roboticist + display_name = "skirt, roboticist" + path = /obj/item/clothing/under/rank/roboticist/skirt + allowed_roles = list("Research Director","Roboticist") + +/datum/gear/uniform/skirt/job/cmo + display_name = "skirt, cmo" + path = /obj/item/clothing/under/rank/chief_medical_officer + allowed_roles = list("Chief Medical Officer") + +/datum/gear/uniform/skirt/job/chem + display_name = "skirt, chemist" + path = /obj/item/clothing/under/rank/chemist/skirt + allowed_roles = list("Chief Medical Officer","Chemist") + +/datum/gear/uniform/skirt/job/viro + display_name = "skirt, virologist" + path = /obj/item/clothing/under/rank/virologist/skirt + allowed_roles = list("Chief Medical Officer","Medical Doctor") + +/datum/gear/uniform/skirt/job/med + display_name = "skirt, medical" + path = /obj/item/clothing/under/rank/medical/skirt + allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic") + +/datum/gear/uniform/skirt/job/sci + display_name = "skirt, scientist" + path = /obj/item/clothing/under/rank/scientist/skirt + allowed_roles = list("Research Director","Scientist") + +/datum/gear/uniform/skirt/job/cargo + display_name = "skirt, cargo" + path = /obj/item/clothing/under/rank/cargotech/skirt + allowed_roles = list("Quartermaster","Cargo Technician") + +/datum/gear/uniform/skirt/job/qm + display_name = "skirt, QM" + path = /obj/item/clothing/under/rank/cargo/skirt + allowed_roles = list("Quartermaster") + +/datum/gear/uniform/skirt/job/warden + display_name = "skirt, warden" + path = /obj/item/clothing/under/rank/warden/skirt + allowed_roles = list("Head of Security", "Warden") + +/datum/gear/uniform/skirt/job/security + display_name = "skirt, security" + path = /obj/item/clothing/under/rank/security/skirt + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") + +/datum/gear/uniform/skirt/job/head_of_security + display_name = "skirt, hos" + path = /obj/item/clothing/under/rank/head_of_security/skirt + allowed_roles = list("Head of Security") + +/datum/gear/uniform/sec + subtype_path = /datum/gear/uniform/sec + +/datum/gear/uniform/sec/formal + display_name = "security uniform, formal" + path = /obj/item/clothing/under/rank/security/formal + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot") + +datum/gear/uniform/secorporate + display_name = "security uniform, corporate " + path = /obj/item/clothing/under/rank/security/corp + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") + +/datum/gear/uniform/sec/dispatch + display_name = "security uniform, dispatch" + path = /obj/item/clothing/under/rank/dispatch + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") + +/datum/gear/uniform/sec/casual + display_name = "security uniform, casual" + path = /obj/item/clothing/under/rank/security2 + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Detective", "Security Pod Pilot") + +/datum/gear/uniform/shorts + subtype_path = /datum/gear/uniform/shorts + +/datum/gear/uniform/shorts/red + display_name = "shorts, red" + path = /obj/item/clothing/under/shorts/red + +/datum/gear/uniform/shorts/green + display_name = "shorts, green" + path = /obj/item/clothing/under/shorts/green + +/datum/gear/uniform/shorts/blue + display_name = "shorts, blue" + path = /obj/item/clothing/under/shorts/blue + +/datum/gear/uniform/shorts/black + display_name = "shorts, black" + path = /obj/item/clothing/under/shorts/black + +/datum/gear/uniform/shorts/grey + display_name = "shorts, grey" + path = /obj/item/clothing/under/shorts/grey + +/datum/gear/uniform/pants + subtype_path = /datum/gear/uniform/pants + +/datum/gear/uniform/pants/jeans + display_name = "jeans, classic" + path = /obj/item/clothing/under/pants/classicjeans + +/datum/gear/uniform/pants/mjeans + display_name = "jeans, mustang" + path = /obj/item/clothing/under/pants/mustangjeans + +/datum/gear/uniform/pants/bljeans + display_name = "jeans, black" + path = /obj/item/clothing/under/pants/blackjeans + +/datum/gear/uniform/pants/yfjeans + display_name = "jeans, Young Folks" + path = /obj/item/clothing/under/pants/youngfolksjeans + +/datum/gear/uniform/pants/whitepants + display_name = "pants, white" + path = /obj/item/clothing/under/pants/white + +/datum/gear/uniform/pants/redpants + display_name = "pants, red" + path = /obj/item/clothing/under/pants/red + +/datum/gear/uniform/pants/blackpants + display_name = "pants, black" + path = /obj/item/clothing/under/pants/black + +/datum/gear/uniform/pants/tanpants + display_name = "pants, tan" + path = /obj/item/clothing/under/pants/tan + +/datum/gear/uniform/pants/bluepants + display_name = "pants, blue" + path = /obj/item/clothing/under/pants/blue + +/datum/gear/uniform/pants/trackpants + display_name = "trackpants" + path = /obj/item/clothing/under/pants/track + +/datum/gear/uniform/pants/khakipants + display_name = "pants, khaki" + path = /obj/item/clothing/under/pants/khaki + +/datum/gear/uniform/pants/caopants + display_name = "pants, camo" + path = /obj/item/clothing/under/pants/camo diff --git a/code/modules/client/preferences.dm b/code/modules/client/preference/preferences.dm similarity index 92% rename from code/modules/client/preferences.dm rename to code/modules/client/preference/preferences.dm index eafc7b59bd6..c28f472020d 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -1,1899 +1,2020 @@ -//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 TAB_CHAR 0 -#define TAB_GAME 1 - -/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 changelog 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 - - - //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 - -/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 += "
        " - 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 += "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 += "
        " - - 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/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) - - 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 "
      • [species] cannot be fat.
      • " - return "
      • [label]: [disabilities & flag ? "Yes" : "No"]
      • " - -/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) - - 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("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 + + + //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 += "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 "
      • [species] cannot be fat.
      • " + return "
      • [label]: [disabilities & flag ? "Yes" : "No"]
      • " + +/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("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 + 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.disabilities|=DEAF + + if(disabilities & DISABILITY_FLAG_BLIND) + character.dna.SetSEState(BLINDBLOCK,1,1) + character.disabilities|=BLIND + + if(disabilities & DISABILITY_FLAG_MUTE) + character.dna.SetSEState(MUTEBLOCK,1,1) + character.disabilities |= 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") \ No newline at end of file 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 15abdab0360..f72ac076dff 100644 --- a/code/modules/client/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -59,7 +59,7 @@ /datum/preferences/proc/save_preferences(client/C) // Might as well scrub out any malformed be_special list entries while we're here - for (var/role in be_special) + for(var/role in be_special) if(!(role in special_roles)) log_to_dd("[C.key] had a malformed role entry: '[role]'. Removing!") be_special -= role @@ -158,7 +158,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() @@ -236,6 +237,7 @@ //socks socks = query.item[58] body_accessory = query.item[59] + gear = params2list(query.item[60]) //Sanitize metadata = sanitize_text(metadata, initial(metadata)) @@ -298,6 +300,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 @@ -305,12 +308,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() @@ -374,7 +380,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]'"} ) @@ -405,7 +412,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]', @@ -426,7 +433,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 afb70577dd0..541dee07242 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preference/preferences_toggles.dm @@ -1,216 +1,216 @@ -//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 +//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) \ No newline at end of file diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 8d6595b73ff..afc11b0acf8 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -31,7 +31,7 @@ /obj/item/clothing/mob_can_equip(M as mob, slot) //if we can equip the item anyway, don't bother with species_restricted (aslo cuts down on spam) - if (!..()) + if(!..()) return 0 if(species_restricted && istype(M,/mob/living/carbon/human)) @@ -66,12 +66,12 @@ species_restricted = list(target_species) //Set icon - if (sprite_sheets && (target_species in sprite_sheets)) + if(sprite_sheets && (target_species in sprite_sheets)) icon_override = sprite_sheets[target_species] else icon_override = initial(icon_override) - if (sprite_sheets_obj && (target_species in sprite_sheets_obj)) + if(sprite_sheets_obj && (target_species in sprite_sheets_obj)) icon = sprite_sheets_obj[target_species] else icon = initial(icon) @@ -79,14 +79,14 @@ //Ears: currently only used for headsets and earmuffs /obj/item/clothing/ears name = "ears" - w_class = 1.0 + w_class = 1 throwforce = 2 slot_flags = SLOT_EARS /obj/item/clothing/ears/attack_hand(mob/user as mob) - if (!user) return + if(!user) return - if (src.loc != user || !istype(user,/mob/living/carbon/human)) + if(src.loc != user || !istype(user,/mob/living/carbon/human)) ..() return @@ -95,7 +95,7 @@ ..() return - if(flags & NODROP) + if(!usr.canUnEquip(src)) return var/obj/item/clothing/ears/O @@ -110,7 +110,7 @@ user.unEquip(src) - if (O) + if(O) user.put_in_hands(O) O.add_fingerprint(user) @@ -119,7 +119,7 @@ /obj/item/clothing/ears/offear name = "Other ear" - w_class = 5.0 + w_class = 5 icon = 'icons/mob/screen_gen.dmi' icon_state = "block" slot_flags = SLOT_EARS | SLOT_TWOEARS @@ -144,7 +144,7 @@ /obj/item/clothing/glasses name = "glasses" icon = 'icons/obj/clothing/glasses.dmi' - w_class = 2.0 + w_class = 2 flags = GLASSESCOVERSEYES slot_flags = SLOT_EYES materials = list(MAT_GLASS = 250) @@ -171,7 +171,7 @@ BLIND // can't see anything /obj/item/clothing/gloves name = "gloves" gender = PLURAL //Carn: for grammarically correct text-parsing - w_class = 2.0 + w_class = 2 icon = 'icons/obj/clothing/gloves.dmi' siemens_coefficient = 0.50 body_parts_covered = HANDS @@ -179,41 +179,21 @@ BLIND // can't see anything attack_verb = list("challenged") var/transfer_prints = FALSE var/pickpocket = 0 //Master pickpocket? - var/clipped = 0 strip_delay = 20 put_on_delay = 40 - species_restricted = list("exclude","Unathi","Tajaran","Wryn") species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/gloves.dmi', "Drask" = 'icons/mob/species/drask/gloves.dmi' ) -/obj/item/clothing/gloves/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/weapon/wirecutters)) - if(!clipped) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - user.visible_message("[user] snips the fingertips off [src].","You snip the fingertips off [src].") - clipped = 1 - name = "mangled [name]" - desc = "[desc] They have had the fingertips cut off of them." - if("exclude" in species_restricted) - species_restricted -= "Unathi" - species_restricted -= "Tajaran" - update_icon() - else - to_chat(user, "[src] have already been clipped!") - return - else - ..() - /obj/item/clothing/gloves/proc/Touch() return /obj/item/clothing/under/proc/set_sensors(mob/user as mob) var/mob/M = user - if (istype(M, /mob/dead/)) return - if (user.stat || user.restrained()) return + if(istype(M, /mob/dead/)) return + if(user.stat || user.restrained()) return if(has_sensor >= 2) to_chat(user, "The controls are locked.") return 0 @@ -228,7 +208,7 @@ BLIND // can't see anything return sensor_mode = modes.Find(switchMode) - 1 - if (src.loc == user) + if(src.loc == user) switch(sensor_mode) if(0) to_chat(user, "You disable your suit's remote sensing equipment.") @@ -243,7 +223,7 @@ BLIND // can't see anything if(H.w_uniform == src) H.update_suit_sensors() - else if (istype(src.loc, /mob)) + else if(istype(src.loc, /mob)) switch(sensor_mode) if(0) for(var/mob/V in viewers(user, 1)) @@ -289,7 +269,6 @@ BLIND // can't see anything body_parts_covered = HEAD slot_flags = SLOT_MASK var/mask_adjusted = 0 - var/ignore_maskadjust = 1 var/adjusted_flags = null strip_delay = 40 put_on_delay = 40 @@ -297,65 +276,61 @@ BLIND // can't see anything //Proc that moves gas/breath masks out of the way /obj/item/clothing/mask/proc/adjustmask(var/mob/user) var/mob/living/carbon/human/H = usr //Used to check if the mask is on the head, to check if the hands are full, and to turn off internals if they were on when the mask was pushed out of the way. - if(!ignore_maskadjust) - if(user.incapacitated()) //This check allows you to adjust your masks while you're buckled into chairs or beds. - return - if(mask_adjusted) - icon_state = copytext(icon_state, 1, findtext(icon_state, "_up")) /*Trims the '_up' off the end of the icon state, thus reverting to the most recent previous state. - Had to use this instead of initial() because initial reverted to the wrong state.*/ - gas_transfer_coefficient = initial(gas_transfer_coefficient) - permeability_coefficient = initial(permeability_coefficient) - to_chat(user, "You push \the [src] back into place.") - mask_adjusted = 0 - slot_flags = initial(slot_flags) - if(flags_inv != initial(flags_inv)) - if(initial(flags_inv) & HIDEFACE) //If the mask is one that hides the face and can be adjusted yet lost that trait when it was adjusted, make it hide the face again. - flags_inv |= HIDEFACE - if(flags != initial(flags)) - if(initial(flags) & MASKCOVERSMOUTH) //If the mask covers the mouth when it's down and can be adjusted yet lost that trait when it was adjusted, make it cover the mouth again. - 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) - else - icon_state += "_up" - to_chat(user, "You push \the [src] out of the way.") - gas_transfer_coefficient = null - permeability_coefficient = null - 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(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.*/ - if(flags & MASKCOVERSMOUTH) //Mask won't cover the mouth any more since it's been pushed out of the way. Allows for CPRing with adjusted masks. - 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) - usr.update_inv_wear_mask() - usr.update_inv_head() + if(user.incapacitated()) //This check allows you to adjust your masks while you're buckled into chairs or beds. + return + if(mask_adjusted) + icon_state = initial(icon_state) + gas_transfer_coefficient = initial(gas_transfer_coefficient) + permeability_coefficient = initial(permeability_coefficient) + to_chat(user, "You push \the [src] back into place.") + mask_adjusted = 0 + slot_flags = initial(slot_flags) + if(flags_inv != initial(flags_inv)) + if(initial(flags_inv) & HIDEFACE) //If the mask is one that hides the face and can be adjusted yet lost that trait when it was adjusted, make it hide the face again. + flags_inv |= HIDEFACE + if(flags != initial(flags)) + if(initial(flags) & MASKCOVERSMOUTH) //If the mask covers the mouth when it's down and can be adjusted yet lost that trait when it was adjusted, make it cover the mouth again. + 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 && 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.") + gas_transfer_coefficient = null + permeability_coefficient = null + mask_adjusted = 1 + if(adjusted_flags) + slot_flags = adjusted_flags + if(ishuman(user) && H.internal && 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.*/ + H.update_internals_hud_icon(0) + 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.*/ + if(flags & MASKCOVERSMOUTH) //Mask won't cover the mouth any more since it's been pushed out of the way. Allows for CPRing with adjusted masks. + 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 && 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() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() //Shoes /obj/item/clothing/shoes @@ -375,7 +350,6 @@ BLIND // can't see anything permeability_coefficient = 0.50 slowdown = SHOES_SLOWDOWN - species_restricted = list("exclude","Unathi","Tajaran","Wryn") species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/shoes.dmi' @@ -408,9 +382,6 @@ BLIND // can't see anything item_state = "[item_state]_opentoe" name = "mangled [name]" desc = "[desc] They have had their toes opened up." - if("exclude" in species_restricted) - species_restricted -= "Unathi" - species_restricted -= "Tajaran" update_icon() else to_chat(user, "[src] have already had their toes cut open!") @@ -452,6 +423,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) @@ -467,6 +439,9 @@ BLIND // can't see anything flavour = "[copytext(adjust_flavour, 3, lentext(adjust_flavour) + 1)] up" //Trims off the 'un' at the beginning of the word. unzip -> zip, unbutton->button. to_chat(user, "You [flavour] \the [src].") suit_adjusted = 0 //Suit is no longer adjusted. + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() else var/flavour = "open" icon_state += "_open" @@ -475,6 +450,9 @@ BLIND // can't see anything flavour = "[adjust_flavour]" to_chat(user, "You [flavour] \the [src].") suit_adjusted = 1 //Suit's adjusted. + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() else if(user.canUnEquip(src)) //Checks to see if the item can be unequipped. If so, lets shred. Otherwise, struggle and fail. if(contents) //If the suit's got any storage capability... @@ -496,20 +474,21 @@ 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/verb/openjacket(var/mob/user) //The verb you can use to adjust jackets. - set name = "Open/Close Jacket" - set category = "Object" - set src in usr - if(!isliving(usr)) - return - if(usr.stat) - return - adjustsuit(user) +/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/ui_action_click() //This is what happens when you click the HUD action button to adjust your suit. +/obj/item/clothing/suit/ui_action_click(mob/user) //This is what happens when you click the HUD action button to adjust your suit. if(!ignore_suitadjust) - adjustsuit(usr) - else ..() //This is required in order to ensure that the UI buttons for items that have alternate functions tied to UI buttons still work. + adjustsuit(user) + else + ..() //This is required in order to ensure that the UI buttons for items that have alternate functions tied to UI buttons still work. //Spacesuit //Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together. @@ -521,7 +500,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 +522,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 +540,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', @@ -586,7 +565,7 @@ BLIND // can't see anything return 0 if(accessories.len && (A.slot in list("utility","armband"))) for(var/obj/item/clothing/accessory/AC in accessories) - if (AC.slot == A.slot) + if(AC.slot == A.slot) return 0 /obj/item/clothing/under/attackby(obj/item/I, mob/user, params) @@ -619,18 +598,20 @@ BLIND // can't see anything A.attack_hand(user) return - if (ishuman(usr) && src.loc == user) //make it harder to accidentally undress yourself + if(ishuman(usr) && src.loc == user) //make it harder to accidentally undress yourself return ..() /obj/item/clothing/under/MouseDrop(obj/over_object as obj) - if (ishuman(usr)) + if(ishuman(usr)) //makes sure that the clothing is equipped so that we can't drag it into our hand from miles away. - if (!(src.loc == usr)) + if(!(src.loc == usr)) return - - if (!( usr.restrained() ) && !( usr.stat ) && ( over_object )) + if(!( usr.restrained() ) && !( usr.stat ) && ( over_object )) + if(!usr.canUnEquip(src)) + to_chat(usr, "[src] appears stuck on you!") + return switch(over_object.name) if("r_hand") usr.unEquip(src) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index bad4a3dabc5..6a51086c7b3 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -1,7 +1,7 @@ /obj/item/clothing/glasses name = "glasses" icon = 'icons/obj/clothing/glasses.dmi' - //w_class = 2.0 + //w_class = 2 //flags = GLASSESCOVERSEYES //slot_flags = SLOT_EYES //var/vision_flags = 0 @@ -18,7 +18,7 @@ name = "prescription [name]" /obj/item/clothing/glasses/attackby(var/obj/item/O as obj, var/mob/user as mob) - if (user.stat || user.restrained() || !ishuman(user)) + if(user.stat || user.restrained() || !ishuman(user)) return ..() var/mob/living/carbon/human/H = user if(prescription_upgradable) @@ -101,15 +101,11 @@ sprite_sheets = list( "Vox" = 'icons/mob/species/vox/eyes.dmi' ) + actions_types = list(/datum/action/item_action/toggle_research_scanner) -/obj/item/clothing/glasses/science/equipped(mob/user, slot) +/obj/item/clothing/glasses/science/item_action_slot_check(slot) if(slot == slot_glasses) - user.scanner.Grant(user) - ..(user, slot) - -/obj/item/clothing/glasses/science/dropped(mob/user) - user.scanner.devices -= 1 - ..(user) + return 1 /obj/item/clothing/glasses/science/night name = "Night Vision Science Goggle" @@ -158,6 +154,7 @@ desc = "Such a dapper eyepiece!" icon_state = "monocle" item_state = "headset" // lol + prescription_upgradable = 1 species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/eyes.dmi', @@ -220,6 +217,7 @@ sprite_sheets = list( "Vox" = 'icons/mob/species/vox/eyes.dmi' ) + prescription_upgradable = 1 /obj/item/clothing/glasses/sunglasses desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." @@ -240,13 +238,16 @@ /obj/item/clothing/glasses/sunglasses/noir name = "noir sunglasses" desc = "Somehow these seem even more out-of-date than normal sunglasses." - action_button_name = "Noir Mode" + actions_types = list(/datum/action/item_action/noir) var/noir_mode = 0 color_view = MATRIX_GREYSCALE /obj/item/clothing/glasses/sunglasses/noir/attack_self() - if(is_equipped()) - toggle_noir() + toggle_noir() + +/obj/item/clothing/glasses/sunglasses/noir/item_action_slot_check(slot) + if(slot == slot_glasses) + return 1 /obj/item/clothing/glasses/sunglasses/noir/proc/toggle_noir() if(!noir_mode) @@ -275,16 +276,12 @@ name = "agreeable glasses" desc = "H.C Limited edition." var/punused = null - action_button_name = "YEAH!" + actions_types = list(/datum/action/item_action/YEEEAAAAAHHHHHHHHHHHHH) /obj/item/clothing/glasses/sunglasses/yeah/attack_self() pun() - -/obj/item/clothing/glasses/sunglasses/yeah/verb/pun() - set category = "Object" - set name = "YEAH!" - set src in usr +/obj/item/clothing/glasses/sunglasses/yeah/proc/pun() if(!punused)//one per round punused = 1 playsound(src.loc, 'sound/misc/yeah.ogg', 100, 0) @@ -328,7 +325,7 @@ desc = "Protects the eyes from welders, approved by the mad scientist association." icon_state = "welding-g" item_state = "welding-g" - action_button_name = "Flip welding goggles" + actions_types = list(/datum/action/item_action/toggle) flash_protect = 2 tint = 2 species_fit = list("Vox") @@ -340,31 +337,28 @@ /obj/item/clothing/glasses/welding/attack_self() toggle() +/obj/item/clothing/glasses/welding/proc/toggle() + if(up) + up = !up + flags |= GLASSESCOVERSEYES + flags_inv |= HIDEEYES + icon_state = initial(icon_state) + to_chat(usr, "You flip the [src] down to protect your eyes.") + flash_protect = 2 + tint = initial(tint) //better than istype + else + up = !up + flags &= ~GLASSESCOVERSEYES + flags_inv &= ~HIDEEYES + icon_state = "[initial(icon_state)]up" + to_chat(usr, "You push the [src] up out of your face.") + flash_protect = 0 + tint = 0 + usr.update_inv_glasses() -/obj/item/clothing/glasses/welding/verb/toggle() - set category = "Object" - set name = "Adjust welding goggles" - set src in usr - - if(usr.canmove && !usr.stat && !usr.restrained()) - if(src.up) - src.up = !src.up - src.flags |= GLASSESCOVERSEYES - flags_inv |= HIDEEYES - icon_state = initial(icon_state) - to_chat(usr, "You flip the [src] down to protect your eyes.") - flash_protect = 2 - tint = initial(tint) //better than istype - else - src.up = !src.up - src.flags &= ~HEADCOVERSEYES - flags_inv &= ~HIDEEYES - icon_state = "[initial(icon_state)]up" - to_chat(usr, "You push the [src] up out of your face.") - flash_protect = 0 - tint = 0 - - usr.update_inv_glasses() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() /obj/item/clothing/glasses/welding/superior name = "superior welding goggles" @@ -373,7 +367,6 @@ item_state = "rwelding-g" flash_protect = 2 tint = 0 - action_button_name = "Flip welding goggles" /obj/item/clothing/glasses/sunglasses/blindfold name = "blindfold" @@ -424,6 +417,7 @@ desc = "Used for seeing walls, floors, and stuff through anything." icon_state = "meson" origin_tech = "magnets=3;syndicate=4" + prescription_upgradable = 1 /obj/item/clothing/glasses/thermal/monocle name = "Thermoncle" @@ -499,4 +493,4 @@ desc = "Just who the hell do you think I am?!" name = "gar glasses" icon_state = "gar" - item_state = "gar" \ No newline at end of file + item_state = "gar" diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 8756290ad20..e290ba5308d 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -14,6 +14,7 @@ H.add_hud_to(user) /obj/item/clothing/glasses/hud/dropped(mob/living/carbon/human/user) + ..() if(HUDType && istype(user) && user.glasses == src) var/datum/atom_hud/H = huds[HUDType] H.remove_hud_from(user) @@ -73,7 +74,6 @@ desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records." icon_state = "securityhud" var/global/list/jobs[0] - flash_protect = 1 HUDType = DATA_HUD_SECURITY_ADVANCED species_fit = list("Vox") sprite_sheets = list( @@ -82,13 +82,14 @@ ) /obj/item/clothing/glasses/hud/security/chameleon - name = "Chamleon Security HUD" + name = "Chameleon Security HUD" desc = "A stolen security HUD integrated with Syndicate chameleon technology. Toggle to disguise the HUD. Provides flash protection." + flash_protect = 1 /obj/item/clothing/glasses/hud/security/chameleon/attack_self(mob/user) chameleon(user) -/obj/item/clothing/glasses/hud/security/jensenshades +/obj/item/clothing/glasses/hud/security/sunglasses/jensenshades name = "augmented shades" desc = "Polarized bioneural eyewear, designed to augment your vision." icon_state = "jensenshades" @@ -109,8 +110,28 @@ desc = "Sunglasses with a HUD." icon_state = "sunhud" darkness_view = 1 + flash_protect = 1 tint = 1 prescription_upgradable = 1 /obj/item/clothing/glasses/hud/security/sunglasses/prescription - prescription = 1 \ No newline at end of file + prescription = 1 + +/obj/item/clothing/glasses/hud/hydroponic + name = "Hydroponic HUD" + desc = "A heads-up display capable of analyzing the health and status of plants growing in hydro trays and soil." + icon_state = "hydroponichud" + HUDType = DATA_HUD_HYDROPONIC + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/eyes.dmi' + ) + +/obj/item/clothing/glasses/hud/hydroponic/night + name = "Night Vision Hydroponic HUD" + desc = "A hydroponic HUD fitted with a light amplifier." + icon_state = "hydroponichudnight" + item_state = "glasses" + darkness_view = 8 + see_darkness = 0 + prescription_upgradable = 0 \ No newline at end of file diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm index fd54295c477..77a4076347d 100644 --- a/code/modules/clothing/gloves/boxing.dm +++ b/code/modules/clothing/gloves/boxing.dm @@ -4,7 +4,6 @@ icon_state = "boxing" item_state = "boxing" put_on_delay = 60 - species_restricted = null /obj/item/clothing/gloves/boxing/green icon_state = "boxinggreen" diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index a50e56382a1..76bfbdfd394 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -59,16 +59,28 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + var/can_be_cut = 1 - hos - item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way. +/obj/item/clothing/gloves/color/black/hos + item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way. - ce - item_color = "chief" //Exists for washing machines. Is not different from black gloves in any way. +/obj/item/clothing/gloves/color/black/ce + item_color = "chief" //Exists for washing machines. Is not different from black gloves in any way. - thief - pickpocket = 1 +/obj/item/clothing/gloves/color/black/thief + pickpocket = 1 + +/obj/item/clothing/gloves/color/black/attackby(obj/item/weapon/W as obj, mob/user as mob, params) + if(istype(W, /obj/item/weapon/wirecutters)) + if(can_be_cut && icon_state == initial(icon_state))//only if not dyed + to_chat(user, "You snip the fingertips off of [src].") + playsound(user.loc,'sound/items/Wirecutter.ogg', rand(10,50), 1) + var/obj/item/clothing/gloves/fingerless/F = new/obj/item/clothing/gloves/fingerless(user.loc) + if(pickpocket) + F.pickpocket = 1 + qdel(src) + ..() /obj/item/clothing/gloves/color/orange name = "orange gloves" diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 060dd1ca47c..feae32b9085 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -7,10 +7,8 @@ transfer_prints = TRUE cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - species_restricted = null strip_delay = 40 put_on_delay = 20 - clipped = 1 /obj/item/clothing/gloves/cyborg desc = "beep boop borp" @@ -47,4 +45,11 @@ name = "batgloves" icon_state = "bmgloves" item_state = "bmgloves" - item_color="bmgloves" \ No newline at end of file + item_color="bmgloves" + +/obj/item/clothing/gloves/cursedclown + name = "cursed white gloves" + desc = "These things smell terrible, and they're all lumpy. Gross." + icon_state = "latex" + item_state = "lgloves" + flags = NODROP diff --git a/code/modules/clothing/gloves/rings.dm b/code/modules/clothing/gloves/rings.dm index 4a0af4392fa..590efa7cd91 100644 --- a/code/modules/clothing/gloves/rings.dm +++ b/code/modules/clothing/gloves/rings.dm @@ -8,22 +8,22 @@ icon = 'icons/obj/clothing/rings.dmi' var/material = "iron" var/stud = 0 - species_restricted = null - - New() - ..() - update_icon() +/obj/item/clothing/gloves/ring/New() + ..() update_icon() - if(stud) - icon_state = "d_[initial(icon_state)]" - else - icon_state = initial(icon_state) - examine(mob/user) - ..(user) - to_chat(user, "This one is made of [material].") - if(stud) - to_chat(user, "It is adorned with a single gem.") + +/obj/item/clothing/gloves/ring/update_icon() + if(stud) + icon_state = "d_[initial(icon_state)]" + else + icon_state = initial(icon_state) + +/obj/item/clothing/gloves/ring/examine(mob/user) + ..(user) + to_chat(user, "This one is made of [material].") + if(stud) + to_chat(user, "It is adorned with a single gem.") /obj/item/clothing/gloves/ring/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I, /obj/item/stack/sheet/mineral/diamond)) @@ -69,10 +69,11 @@ icon_state = "redring" /obj/item/clothing/gloves/ring/plastic/random - New() - var/c = pick("white","blue","red") - name = "[c] plastic ring" - icon_state = "[c]ring" + +/obj/item/clothing/gloves/ring/plastic/random/New() + var/c = pick("white","blue","red") + name = "[c] plastic ring" + icon_state = "[c]ring" // weird /obj/item/clothing/gloves/ring/glass diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 5dc555a10d7..5cc5af80abb 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -7,21 +7,23 @@ 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" + actions_types = list(/datum/action/item_action/toggle_helmet_light) - attack_self(mob/user) - if(!isturf(user.loc)) - to_chat(user, "You cannot turn the light on while in this [user.loc]")//To prevent some lighting anomalities. +/obj/item/clothing/head/hardhat/attack_self(mob/user) + on = !on + icon_state = "hardhat[on]_[item_color]" + item_state = "hardhat[on]_[item_color]" - return - on = !on - icon_state = "hardhat[on]_[item_color]" - item_state = "hardhat[on]_[item_color]" + if(on) + set_light(brightness_on) + else + set_light(0) - if(on) set_light(brightness_on) - else set_light(0) + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() /obj/item/clothing/head/hardhat/orange diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index a9e8bbdb7e2..b7b0cc71b81 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" @@ -101,7 +100,7 @@ icon_state = "justice" toggle_message = "You turn off the lights on" alt_toggle_message = "You turn on the lights on" - action_button_name = "Toggle JUSTICE" + actions_types = list(/datum/action/item_action/toggle_helmet_light) can_toggle = 1 toggle_cooldown = 20 active_sound = 'sound/items/WEEOO1.ogg' @@ -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..7100d459a51 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" @@ -115,6 +116,11 @@ desc = "A beret for those who have shown immaculate proficienty in piping. Or plumbing." icon_state = "beret_atmospherics" +/obj/item/clothing/head/beret/ce + name = "chief engineer beret" + desc = "A white beret with the engineering insignia emblazoned on it. Its owner knows what they're doing. Probably." + icon_state = "beret_ce" + //Medical /obj/item/clothing/head/surgery name = "surgical cap" @@ -136,4 +142,4 @@ /obj/item/clothing/head/surgery/black desc = "A cap coroners wear during autopsies. Keeps their hair from falling into the cadavers. It is as dark than the coroner's humor." - icon_state = "surgcap_black" \ No newline at end of file + icon_state = "surgcap_black" diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 88af8bf4dd3..f7253a82cdf 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 @@ -25,6 +25,15 @@ icon_state = "pwig" item_state = "pwig" +/obj/item/clothing/head/beret/blue + icon_state = "beret_blue" + +/obj/item/clothing/head/beret/black + icon_state = "beret_black" + +/obj/item/clothing/head/beret/purple_normal + icon_state = "beret_purple_normal" + /obj/item/clothing/head/that name = "top-hat" desc = "It's an amish looking hat." @@ -161,6 +170,12 @@ item_state = "boater_hat" desc = "Goes well with celery." +/obj/item/clothing/head/cowboyhat + name = "cowboy hat" + icon_state = "cowboyhat" + item_state = "fedora" + desc = "There's a new sheriff in town. Pass the whiskey." + /obj/item/clothing/head/fedora name = "\improper fedora" icon_state = "fedora" @@ -325,7 +340,7 @@ throwforce = 3.0 throw_speed = 2 throw_range = 5 - w_class = 2.0 + w_class = 2 attack_verb = list("warned", "cautioned", "smashed") /obj/item/clothing/head/griffin @@ -335,19 +350,12 @@ item_state = "griffinhat" flags = BLOCKHAIR|NODROP flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE - action_button_name = "Caw" + actions_types = list(/datum/action/item_action/caw) /obj/item/clothing/head/griffin/attack_self() caw() -/obj/item/clothing/head/griffin/verb/caw() - - set category = "Object" - set name = "Caw" - set src in usr - if(!istype(usr, /mob/living)) return - if(usr.stat) return - +/obj/item/clothing/head/griffin/proc/caw() if(cooldown < world.time - 20) // A cooldown, to stop people being jerks playsound(src.loc, "sound/misc/caw.ogg", 50, 1) cooldown = world.time @@ -363,4 +371,4 @@ name = "bloated human head" desc = "A horribly bloated and mismatched human head." icon_state = "lingspacehelmet" - item_state = "lingspacehelmet" \ No newline at end of file + item_state = "lingspacehelmet" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 0fbb39e6f1b..703f36cf1fd 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -20,9 +20,9 @@ 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" + actions_types = list(/datum/action/item_action/toggle) species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/head.dmi', @@ -50,26 +50,28 @@ toggle() /obj/item/clothing/head/welding/proc/toggle() - set src in usr + if(up) + up = !up + flags |= (HEADCOVERSEYES | HEADCOVERSMOUTH) + flags_inv |= (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) + icon_state = initial(icon_state) + to_chat(usr, "You flip the [src] down to protect your eyes.") + flash_protect = 2 + tint = 2 + else + up = !up + flags &= ~(HEADCOVERSEYES | HEADCOVERSMOUTH) + flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) + icon_state = "[initial(icon_state)]up" + to_chat(usr, "You push the [src] up out of your face.") + flash_protect = 0 + tint = 0 + usr.update_inv_head() //so our mob-overlays update + + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() - if(usr.canmove && !usr.stat && !usr.restrained()) - if(src.up) - src.up = !src.up - src.flags |= (HEADCOVERSEYES | HEADCOVERSMOUTH) - flags_inv |= (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) - icon_state = initial(icon_state) - to_chat(usr, "You flip the [src] down to protect your eyes.") - flash_protect = 2 - tint = 2 - else - src.up = !src.up - src.flags &= ~(HEADCOVERSEYES | HEADCOVERSMOUTH) - flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) - icon_state = "[initial(icon_state)]up" - to_chat(usr, "You push the [src] up out of your face.") - flash_protect = 0 - tint = 0 - usr.update_inv_head() //so our mob-overlays update /* @@ -96,13 +98,13 @@ if(M.l_hand == src || M.r_hand == src || M.head == src) location = M.loc - if (istype(location, /turf)) + if(istype(location, /turf)) location.hotspot_expose(700, 1) /obj/item/clothing/head/cakehat/attack_self(mob/user as mob) if(status > 1) return src.onfire = !( src.onfire ) - if (src.onfire) + if(src.onfire) src.force = 3 src.damtype = "fire" src.icon_state = "cake1" @@ -148,8 +150,7 @@ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR 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 @@ -160,8 +161,7 @@ item_state = "hardhat0_reindeer" 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/boxing.dm b/code/modules/clothing/masks/boxing.dm index 66e97d714d8..25cdc259f92 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -6,8 +6,7 @@ flags = BLOCKHAIR flags_inv = HIDEFACE w_class = 2 - action_button_name = "Adjust Balaclava" - ignore_maskadjust = 0 + actions_types = list(/datum/action/item_action/adjust) adjusted_flags = SLOT_HEAD species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin") sprite_sheets = list( diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 40811397187..5b3ab335cbe 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -7,8 +7,7 @@ w_class = 2 gas_transfer_coefficient = 0.10 permeability_coefficient = 0.50 - action_button_name = "Adjust Breath Mask" - ignore_maskadjust = 0 + actions_types = list(/datum/action/item_action/adjust) species_fit = list("Vox", "Vox Armalis", "Unathi", "Tajaran", "Vulpkanin") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/mask.dmi', @@ -38,5 +37,4 @@ item_state = "voxmask" permeability_coefficient = 0.01 species_restricted = list("Vox") - action_button_name = null - ignore_maskadjust = 1 + actions_types = list() diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 6f6d0f03446..72b4b6febb7 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -4,7 +4,7 @@ icon_state = "gas_alt" flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT flags_inv = HIDEEARS|HIDEEYES|HIDEFACE - w_class = 3.0 + w_class = 3 item_state = "gas_alt" gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 @@ -27,37 +27,35 @@ 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" + actions_types = list(/datum/action/item_action/toggle) /obj/item/clothing/mask/gas/welding/attack_self() toggle() +/obj/item/clothing/mask/gas/welding/proc/toggle() + if(up) + up = !src.up + flags |= (MASKCOVERSEYES) + flags_inv |= (HIDEEYES) + icon_state = initial(icon_state) + to_chat(usr, "You flip the [src] down to protect your eyes.") + flash_protect = 2 + tint = 2 + else + up = !up + flags &= ~(MASKCOVERSEYES) + flags_inv &= ~(HIDEEYES) + icon_state = "[initial(icon_state)]up" + to_chat(usr, "You push the [src] up out of your face.") + flash_protect = 0 + tint = 0 + usr.update_inv_wear_mask() //so our mob-overlays update -/obj/item/clothing/mask/gas/welding/verb/toggle() - set category = "Object" - set name = "Adjust welding mask" - set src in usr - - if(usr.canmove && !usr.stat && !usr.restrained()) - if(src.up) - src.up = !src.up - src.flags |= (MASKCOVERSEYES) - flags_inv |= (HIDEEYES) - icon_state = initial(icon_state) - to_chat(usr, "You flip the [src] down to protect your eyes.") - flash_protect = 2 - tint = 2 - else - src.up = !src.up - src.flags &= ~(MASKCOVERSEYES) - flags_inv &= ~(HIDEEYES) - icon_state = "[initial(icon_state)]up" - to_chat(usr, "You push the [src] up out of your face.") - flash_protect = 0 - tint = 0 - usr.update_inv_wear_mask() //so our mob-overlays update + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() //Bane gas mask /obj/item/clothing/mask/banemask @@ -66,7 +64,7 @@ icon_state = "bane_mask" flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT flags_inv = HIDEEARS|HIDEEYES|HIDEFACE - w_class = 3.0 + w_class = 3 item_state = "bane_mask" gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 @@ -78,7 +76,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" @@ -166,19 +164,12 @@ desc = "Twoooo!" icon_state = "owl" flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | NODROP - action_button_name = "Hoot" + actions_types = list(/datum/action/item_action/hoot) /obj/item/clothing/mask/gas/owl_mask/attack_self() hoot() -/obj/item/clothing/mask/gas/owl_mask/verb/hoot() - - set category = "Object" - set name = "Hoot" - set src in usr - if(!istype(usr, /mob/living)) return - if(usr.stat) return - +/obj/item/clothing/mask/gas/owl_mask/proc/hoot() if(cooldown < world.time - 35) // A cooldown, to stop people being jerks playsound(src.loc, "sound/misc/hoot.ogg", 50, 1) cooldown = world.time @@ -190,26 +181,24 @@ /obj/item/clothing/mask/gas/sechailer name = "security gas mask" desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device, plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you taze them. Do not tamper with the device." - action_button_name = "HALT!" icon_state = "sechailer" var/aggressiveness = 2 var/safety = 1 - ignore_maskadjust = 0 - action_button_name = "HALT!" + actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/adjust) /obj/item/clothing/mask/gas/sechailer/hos name = "\improper HOS SWAT mask" desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000. It has a tan stripe." icon_state = "hosmask" aggressiveness = 3 - ignore_maskadjust = 1 + actions_types = list(/datum/action/item_action/halt) /obj/item/clothing/mask/gas/sechailer/warden name = "\improper Warden SWAT mask" desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000. It has a blue stripe." icon_state = "wardenmask" aggressiveness = 3 - ignore_maskadjust = 1 + actions_types = list(/datum/action/item_action/halt) /obj/item/clothing/mask/gas/sechailer/swat @@ -217,7 +206,7 @@ desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000." icon_state = "officermask" aggressiveness = 3 - ignore_maskadjust = 1 + actions_types = list(/datum/action/item_action/halt) /obj/item/clothing/mask/gas/sechailer/blue name = "\improper blue SWAT mask" @@ -225,7 +214,7 @@ icon_state = "blue_sechailer" item_state = "blue_sechailer" aggressiveness = 3 - ignore_maskadjust = 1 + actions_types = list(/datum/action/item_action/halt) /obj/item/clothing/mask/gas/sechailer/cyborg name = "security hailer" @@ -233,16 +222,13 @@ icon = 'icons/obj/device.dmi' icon_state = "taperecorder_idle" aggressiveness = 1 //Borgs are nicecurity! - ignore_maskadjust = 1 + actions_types = list(/datum/action/item_action/halt) -/obj/item/clothing/mask/gas/sechailer/cyborg/New() - ..() - verbs -= /obj/item/clothing/mask/gas/sechailer/verb/adjust - -/obj/item/clothing/mask/gas/sechailer/verb/adjust() - set category = "Object" - set name = "Adjust Mask" - adjustmask(usr) +/obj/item/clothing/mask/gas/sechailer/ui_action_click(mob/user, actiontype) + if(actiontype == /datum/action/item_action/halt) + halt() + else + adjustmask(user) /obj/item/clothing/mask/gas/sechailer/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/screwdriver)) @@ -275,13 +261,7 @@ else return -/obj/item/clothing/mask/gas/sechailer/verb/halt() - set category = "Object" - set name = "HALT" - set src in usr - if(!istype(usr, /mob/living)) return - if(usr.stat) return - +/obj/item/clothing/mask/gas/sechailer/proc/halt() var/phrase = 0 //selects which phrase to use var/phrase_text = null var/phrase_sound = null diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index d9817add99f..184d4c14c40 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -63,9 +63,8 @@ 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) - action_button_name = "Adjust Sterile Mask" - ignore_maskadjust = 0 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 25, rad = 0) + actions_types = list(/datum/action/item_action/adjust) species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/mask.dmi', @@ -209,7 +208,6 @@ flags_inv = HIDEFACE w_class = 1 slot_flags = SLOT_MASK - ignore_maskadjust = 0 adjusted_flags = SLOT_HEAD icon_state = "bandbotany" species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin") @@ -219,7 +217,7 @@ "Tajaran" = 'icons/mob/species/tajaran/mask.dmi', "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi' ) - action_button_name = "Adjust Bandana" + actions_types = list(/datum/action/item_action/adjust) /obj/item/clothing/mask/bandana/attack_self(var/mob/user) adjustmask(user) @@ -275,3 +273,28 @@ obj/item/clothing/mask/bandana/purple icon_state = "bandblack" item_color = "black" desc = "It's a black bandana." + +/obj/item/clothing/mask/cursedclown + name = "cursed clown mask" + desc = "This is a very, very odd looking mask." + icon = 'icons/goonstation/objects/clothing/mask.dmi' + icon_state = "cursedclown" + item_state = "cclown_hat" + icon_override = 'icons/goonstation/mob/clothing/mask.dmi' + lefthand_file = 'icons/goonstation/mob/inhands/clothing_lefthand.dmi' + righthand_file = 'icons/goonstation/mob/inhands/clothing_righthand.dmi' + flags = NODROP + +/obj/item/clothing/mask/cursedclown/equipped(mob/user, slot) + ..() + var/mob/living/carbon/human/H = user + if(istype(H) && slot == slot_wear_mask) + to_chat(H, "[src] grips your face!") + if(H.mind && H.mind.assigned_role != "Cluwne") + H.makeCluwne() + +/obj/item/clothing/mask/cursedclown/suicide_act(mob/user) + user.visible_message("[user] gazes into the eyes of [src]. [src] gazes back!") + spawn(10) + user.gib() + return BRUTELOSS diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index 1b7ea8fc4c9..22437ec451e 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -88,7 +88,7 @@ item_color = "orange" /obj/item/clothing/shoes/orange/attack_self(mob/user as mob) - if (src.chained) + if(src.chained) src.chained = null src.slowdown = SHOES_SLOWDOWN new /obj/item/weapon/restraints/handcuffs( user.loc ) @@ -97,8 +97,8 @@ /obj/item/clothing/shoes/orange/attackby(obj/H, loc, params) ..() - if (istype(H, /obj/item/weapon/restraints/handcuffs) && !chained && !(H.flags & NODROP)) - if (src.icon_state != "orange") return + if(istype(H, /obj/item/weapon/restraints/handcuffs) && !chained && !(H.flags & NODROP)) + if(src.icon_state != "orange") return qdel(H) src.chained = 1 src.slowdown = 15 diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 48b9ffa7589..2c6bdeddf87 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -5,23 +5,25 @@ var/magboot_state = "magboots" var/magpulse = 0 var/slowdown_active = 2 - action_button_name = "Toggle Magboots" + actions_types = list(/datum/action/item_action/toggle) strip_delay = 70 put_on_delay = 70 - species_restricted = null /obj/item/clothing/shoes/magboots/attack_self(mob/user) - if(src.magpulse) - src.flags &= ~NOSLIP - src.slowdown = SHOES_SLOWDOWN + if(magpulse) + flags &= ~NOSLIP + slowdown = SHOES_SLOWDOWN else - src.flags |= NOSLIP - src.slowdown = slowdown_active + flags |= NOSLIP + slowdown = slowdown_active magpulse = !magpulse icon_state = "[magboot_state][magpulse]" to_chat(user, "You [magpulse ? "enable" : "disable"] the mag-pulse traction system.") user.update_inv_shoes() //so our mob-overlays update user.update_gravity(user.mob_has_gravity()) + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() /obj/item/clothing/shoes/magboots/negates_gravity() return flags & NOSLIP diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index babeb811a37..229daee5c93 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -7,7 +7,6 @@ flags = NOSLIP origin_tech = "syndicate=3" var/list/clothing_choices = list() - species_restricted = null silence_steps = 1 /obj/item/clothing/shoes/mime @@ -21,15 +20,14 @@ 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) - species_restricted = null //Syndicate tech means even Tajarans can kick ass with these + armor = list(melee = 25, bullet = 25, laser = 25, energy = 25, bomb = 50, bio = 10, rad = 0) strip_delay = 70 /obj/item/clothing/shoes/combat/swat //overpowered boots for death squads 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 @@ -38,7 +36,6 @@ icon_state = "wizard" strip_delay = 50 put_on_delay = 50 - species_restricted = null /obj/item/clothing/shoes/sandal/marisa desc = "A pair of magic, black shoes." @@ -54,7 +51,6 @@ slowdown = SHOES_SLOWDOWN+1 strip_delay = 50 put_on_delay = 50 - species_restricted = null /obj/item/clothing/shoes/galoshes/dry name = "absorbent galoshes" @@ -74,7 +70,6 @@ slowdown = SHOES_SLOWDOWN+1 item_color = "clown" var/footstep = 1 //used for squeeks whilst walking - species_restricted = null silence_steps = 1 shoe_sound = "clownstep" @@ -97,7 +92,12 @@ can_cut_open = 0 icon_state = "jacksandal" item_color = "jacksandal" - species_restricted = null + +/obj/item/clothing/shoes/workboots + name = "work boots" + desc = "Thick-soled boots for industrial work environments." + can_cut_open = 1 + icon_state = "workboots" /obj/item/clothing/shoes/cult name = "boots" @@ -110,7 +110,6 @@ min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT heat_protection = FEET max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT - species_restricted = null /obj/item/clothing/shoes/cyborg name = "cyborg boots" @@ -122,7 +121,6 @@ desc = "Fluffy!" icon_state = "slippers" item_state = "slippers" - species_restricted = null /obj/item/clothing/shoes/slippers_worn name = "worn bunny slippers" @@ -143,7 +141,6 @@ item_state = "roman" strip_delay = 100 put_on_delay = 100 - species_restricted = null /obj/item/clothing/shoes/centcom name = "dress shoes" @@ -178,7 +175,7 @@ desc = "Looks sneaky." icon_state = "sheet-cloth" -/datum/table_recipe/shoe_rags +/datum/crafting_recipe/shoe_rags name = "Shoe Rags" result = /obj/item/shoe_silencer @@ -192,12 +189,21 @@ desc = "Medical sandals that nerds wear." icon_state = "medsandal" item_color = "medsandal" - species_restricted = null /obj/item/clothing/shoes/sandal/fancy name = "Fancy Sandals" desc = "FANCY!!." icon_state = "fancysandal" item_color = "fancysandal" - species_restricted = null +/obj/item/clothing/shoes/cursedclown + name = "cursed clown shoes" + desc = "Moldering clown flip flops. They're neon green for some reason." + icon = 'icons/goonstation/objects/clothing/feet.dmi' + icon_state = "cursedclown" + item_state = "cclown_shoes" + icon_override = 'icons/goonstation/mob/clothing/feet.dmi' + lefthand_file = 'icons/goonstation/mob/inhands/clothing_lefthand.dmi' + righthand_file = 'icons/goonstation/mob/inhands/clothing_righthand.dmi' + flags = NODROP + shoe_sound = "clownstep" diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index d5fcbdf3251..f8a18749644 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( @@ -198,10 +182,8 @@ "Vox Armalis" = 'icons/mob/species/armalis/feet.dmi' ) - action_button_name = "Toggle the magclaws" - /obj/item/clothing/shoes/magboots/vox/attack_self(mob/user) - if(src.magpulse) + if(magpulse) flags &= ~NOSLIP magpulse = 0 flags |= NODROP @@ -211,7 +193,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/H = user - if (H.shoes != src) + if(H.shoes != src) to_chat(user, "You will have to put on the [src] before you can do that.") return @@ -233,7 +215,7 @@ /obj/item/clothing/shoes/magboots/vox/examine(mob/user) ..(user) - if (magpulse) + if(magpulse) to_chat(user, "It would be hard to take these off without relaxing your grip first.")//theoretically this message should only be seen by the wearer when the claws are equipped. diff --git a/code/modules/clothing/spacesuits/breaches.dm b/code/modules/clothing/spacesuits/breaches.dm index a7f8baf7a7a..9d2b2a06198 100644 --- a/code/modules/clothing/spacesuits/breaches.dm +++ b/code/modules/clothing/spacesuits/breaches.dm @@ -106,7 +106,7 @@ var/global/list/breach_burn_descriptors = list( if(existing.damtype != damtype) continue - if (existing.class < 5) + if(existing.class < 5) var/needs = 5 - existing.class if(amount < needs) existing.class += amount @@ -120,7 +120,7 @@ var/global/list/breach_burn_descriptors = list( else if(existing.damtype == BURN) T.visible_message("\The [existing.descriptor] on [src] widens!") - if (amount) + if(amount) //Spawn a new breach. var/datum/breach/B = new() breaches += B @@ -200,7 +200,7 @@ var/global/list/breach_burn_descriptors = list( to_chat(user, "\red How do you intend to patch a hardsuit while someone is wearing it?") return - if (!damage || ! brute_damage) + if(!damage || ! brute_damage) to_chat(user, "There is no structural damage on \the [src] to repair.") return diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 334e659302b..6348f32aa11 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -22,8 +22,7 @@ desc = "An advanced spacesuit equipped with teleportation and anti-compression technology" icon_state = "chronosuit" item_state = "chronosuit" - action_button_name = "Toggle Chronosuit" - slowdown = 2 + actions_types = list(/datum/action/item_action/toggle) 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..de2cfc0eda5 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" @@ -46,13 +46,9 @@ var/base_state = "plasmaman_helmet" var/brightness_on = 4 //luminosity when on var/on = 0 - action_button_name = "Toggle Helmet Light" + actions_types = list(/datum/action/item_action/toggle_helmet_light) /obj/item/clothing/head/helmet/space/eva/plasmaman/attack_self(mob/user) - if(!isturf(user.loc)) - to_chat(user, "You cannot turn the light on while in this [user.loc].")//To prevent some lighting anomalities. - - return toggle_light(user) /obj/item/clothing/head/helmet/space/eva/plasmaman/proc/toggle_light(mob/user) @@ -68,6 +64,10 @@ var/mob/living/carbon/human/H = user H.update_inv_head() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + // ENGINEERING /obj/item/clothing/suit/space/eva/plasmaman/assistant name = "plasmaman assistant suit" @@ -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..355b511c391 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -10,7 +10,7 @@ var/brightness_on = 4 //luminosity when on var/on = 0 item_color = "engineering" //Determines used sprites: rig[on]-[color] and rig[on]-[color]2 (lying down sprite) - action_button_name = "Toggle Helmet Light" + actions_types = list(/datum/action/item_action/toggle_helmet_light) //Species-specific stuff. species_restricted = list("exclude","Diona","Wryn") @@ -31,10 +31,6 @@ ) /obj/item/clothing/head/helmet/space/rig/attack_self(mob/user) - if(!isturf(user.loc)) - to_chat(user, "You cannot turn the light on while in this [user.loc].")//To prevent some lighting anomalities. - - return toggle_light(user) /obj/item/clothing/head/helmet/space/rig/proc/toggle_light(mob/user) @@ -50,12 +46,19 @@ var/mob/living/carbon/human/H = user H.update_inv_head() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + +/obj/item/clothing/head/helmet/space/rig/item_action_slot_check(slot) + if(slot == slot_head) + return 1 + /obj/item/clothing/suit/space/rig name = "hardsuit" 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 +250,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 +281,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) @@ -294,23 +296,18 @@ /obj/item/clothing/head/helmet/space/rig/syndi name = "blood-red hardsuit helmet" desc = "A dual-mode advanced helmet designed for work in special operations. It is in travel mode. Property of Gorlex Marauders." - icon_state = "hardsuit1-syndi" + icon_state = "rig1-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" + actions_types = list(/datum/action/item_action/toggle_helmet_mode) /obj/item/clothing/head/helmet/space/rig/syndi/update_icon() - icon_state = "hardsuit[on]-[item_color]" + icon_state = "rig[on]-[item_color]" /obj/item/clothing/head/helmet/space/rig/syndi/attack_self(mob/user) - if(!isturf(user.loc)) - to_chat(user, "You cannot toggle your helmet while in this [user.loc].")//To prevent some lighting anomalities. - - return - on = !on if(on) to_chat(user, "You switch your helmet to travel mode. It will allow you to stand in zero pressure environments, at the cost of speed and armor.") @@ -333,21 +330,24 @@ playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) user.update_inv_head() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + /obj/item/clothing/suit/space/rig/syndi name = "blood-red hardsuit" desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in travel mode. Property of Gorlex Marauders." - icon_state = "hardsuit1-syndi" + icon_state = "rig1-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) + actions_types = list(/datum/action/item_action/toggle_hardsuit_mode) + 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() - icon_state = "hardsuit[on]-[item_color]" + icon_state = "rig[on]-[item_color]" /obj/item/clothing/suit/space/rig/syndi/attack_self(mob/user) on = !on @@ -373,13 +373,17 @@ user.update_inv_wear_suit() user.update_inv_w_uniform() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + //Elite Syndie suit /obj/item/clothing/head/helmet/space/rig/syndi/elite name = "elite syndicate hardsuit helmet" 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" + icon_state = "rig0-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 @@ -396,9 +400,9 @@ /obj/item/clothing/suit/space/rig/syndi/elite name = "elite syndicate hardsuit" desc = "An elite version of the syndicate hardsuit, with improved armour and fire shielding. It is in travel mode." - icon_state = "hardsuit0-syndielite" + icon_state = "rig0-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 +424,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 +435,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 +461,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 +471,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 +509,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 +517,100 @@ 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) + + +/obj/item/clothing/head/helmet/space/rig/security/hos + name = "head of security's hardsuit helmet" + desc = "a special bulky helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor." + icon_state = "rig0-hos" + item_color = "hos" + armor = list(melee = 45, bullet = 25, laser = 30,energy = 10, bomb = 25, bio = 100, rad = 50) + sprite_sheets = null + + +/obj/item/clothing/suit/space/rig/security/hos + icon_state = "rig-hos" + name = "head of security's hardsuit" + desc = "A special bulky suit that protects against hazardous, low pressure environments. Has an additional layer of armor." + armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50) + sprite_sheets = null + + +/////////////SHIELDED////////////////////////////////// + +/obj/item/clothing/suit/space/rig/shielded + name = "shielded hardsuit" + desc = "A hardsuit with built in energy shielding. Will rapidly recharge when not under fire." + icon_state = "rig-hos" + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank, /obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs) + armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50) + var/current_charges = 3 + var/max_charges = 3 //How many charges total the shielding has + var/recharge_delay = 200 //How long after we've been shot before we can start recharging. 20 seconds here + var/recharge_cooldown = 0 //Time since we've last been shot + var/recharge_rate = 1 //How quickly the shield recharges once it starts charging + var/shield_state = "shield-old" + var/shield_on = "shield-old" + sprite_sheets = null + +/obj/item/clothing/suit/space/rig/shielded/hit_reaction(mob/living/carbon/human/owner, attack_text) + if(current_charges > 0) + var/datum/effect/system/spark_spread/s = new + s.set_up(2, 1, src) + s.start() + owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks!") + current_charges-- + recharge_cooldown = world.time + recharge_delay + processing_objects |= src + if(current_charges <= 0) + owner.visible_message("[owner]'s shield overloads!") + shield_state = "broken" + owner.update_inv_wear_suit() + return 1 + return 0 + + +/obj/item/clothing/suit/space/rig/shielded/Destroy() + processing_objects.Remove(src) + return ..() + +/obj/item/clothing/suit/space/rig/shielded/process() + if(world.time > recharge_cooldown && current_charges < max_charges) + current_charges = Clamp((current_charges + recharge_rate), 0, max_charges) + playsound(loc, 'sound/magic/Charge.ogg', 50, 1) + if(current_charges == max_charges) + playsound(loc, 'sound/machines/ding.ogg', 50, 1) + processing_objects.Remove(src) + shield_state = "[shield_on]" + if(istype(loc, /mob/living/carbon/human)) + var/mob/living/carbon/human/C = loc + C.update_inv_wear_suit() + +//////Syndicate Version + +/obj/item/clothing/suit/space/rig/shielded/syndi + name = "blood-red hardsuit" + desc = "An advanced hardsuit with built in energy shielding." + icon_state = "rig1-syndi" + item_state = "syndie_hardsuit" + item_color = "syndi" + 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) + slowdown = 0 + sprite_sheets = list( + "Unathi" = 'icons/mob/species/unathi/suit.dmi', + "Tajaran" = 'icons/mob/species/tajaran/suit.dmi', + "Skrell" = 'icons/mob/species/skrell/suit.dmi', + "Vox" = 'icons/mob/species/vox/suit.dmi', + "Vulpkanin" = 'icons/mob/species/vulpkanin/suit.dmi', + "Drask" = 'icons/mob/species/drask/suit.dmi' + ) + +/obj/item/clothing/head/helmet/space/rig/shielded/syndi + name = "blood-red hardsuit helmet" + desc = "An advanced hardsuit helmet with built in energy shielding." + icon_state = "rig1-syndi" + item_state = "syndie_helm" + item_color = "syndi" + armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50) \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index 087b34dd756..46471966aa7 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -337,7 +337,7 @@ /obj/item/rig_module/maneuvering_jets/engage() if(!..()) return 0 - jets.toggle_rockets() + jets.toggle_stabilization(usr) return 1 /obj/item/rig_module/maneuvering_jets/activate() @@ -354,15 +354,13 @@ suit_overlay = null holder.update_icon() - if(!jets.on) - jets.toggle() + jets.turn_on() return 1 /obj/item/rig_module/maneuvering_jets/deactivate() if(!..()) return 0 - if(jets.on) - jets.toggle() + jets.turn_off() return 1 /obj/item/rig_module/maneuvering_jets/New() diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 6e3fcffa7cf..fccf464607b 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 @@ -82,13 +82,13 @@ var/datum/effect/system/spark_spread/spark_system /obj/item/weapon/rig/examine() - to_chat(usr, "This is \icon[src][src.name].") + to_chat(usr, "This is [bicon(src)][src.name].") to_chat(usr, "[src.desc]") if(wearer) for(var/obj/item/piece in list(helmet,gloves,chest,boots)) if(!piece || piece.loc != wearer) continue - to_chat(usr, "\icon[piece] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed.") + to_chat(usr, "[bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed.") if(src.loc == usr) to_chat(usr, "The maintenance panel is [open ? "open" : "closed"].") @@ -431,7 +431,7 @@ if(!offline) if(istype(wearer)) if(flags & NODROP) - if (offline_slowdown < 3) + if(offline_slowdown < 3) to_chat(wearer, "Your suit beeps stridently, and suddenly goes dead.") else to_chat(wearer, "Your suit beeps stridently, and suddenly you're wearing a leaden mass of metal and plastic composites instead of a powered suit.") @@ -576,7 +576,7 @@ data["modules"] = module_list ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, state = nano_state) ui.set_initial_data(data) ui.open() @@ -819,7 +819,7 @@ take_hit((100/severity_class), "electrical pulse", 1) /obj/item/weapon/rig/proc/shock(mob/user) - if (electrocute_mob(user, cell, src)) //electrocute_mob() handles removing charge from the cell, no need to do that here. + if(electrocute_mob(user, cell, src)) //electrocute_mob() handles removing charge from the cell, no need to do that here. spark_system.start() if(user.stunned) return 1 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..8b5ea0d9af5 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -1,4 +1,3 @@ - /obj/item/clothing/suit/armor 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,/obj/item/weapon/kitchen/knife/combat) body_parts_covered = UPPER_TORSO|LOWER_TORSO @@ -8,6 +7,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 +18,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 +34,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" @@ -48,7 +50,8 @@ W.forceMove(src) attached_badge = W - action_button_name = "Remove Holobadge" + var/datum/action/A = new /datum/action/item_action/remove_badge(src) + A.Grant(user) icon_state = "armorsec" user.update_inv_wear_suit() desc = "An armored vest that protects against some damage. This one has [attached_badge] attached to it." @@ -61,8 +64,10 @@ add_fingerprint(user) user.put_in_hands(attached_badge) - action_button_name = null - action.Remove(user) + for(var/X in actions) + var/datum/action/A = X + A.Remove(user) + icon_state = "armor" user.update_inv_wear_suit() desc = "An armored vest that protects against some damage. This one has a clip for a holobadge." @@ -85,6 +90,22 @@ 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/secjacket + name = "security jacket" + desc = "A sturdy black jacket with reinforced fabric. Bears insignia of NT corporate security." + icon_state = "secjacket_open" + item_state = "hos" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + armor = list(melee = 15, bullet = 10, laser = 15, energy = 5, bomb = 15, bio = 0, rad = 0) + cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS + heat_protection = UPPER_TORSO|LOWER_TORSO|ARMS + ignore_suitadjust = 0 + suit_adjusted = 1 + actions_types = list(/datum/action/item_action/openclose) + adjust_flavour = "unzip" /obj/item/clothing/suit/armor/hos name = "armored coat" @@ -92,7 +113,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 @@ -106,7 +127,7 @@ flags_inv = 0 ignore_suitadjust = 0 suit_adjusted = 1 - action_button_name = "Open/Close Trenchcoat" + actions_types = list(/datum/action/item_action/openclose) adjust_flavour = "unbutton" /obj/item/clothing/suit/armor/hos/jensen @@ -115,6 +136,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 +160,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 +170,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 +208,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 +218,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,46 +233,131 @@ 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) //Reactive armor -//When the wearer gets hit, this armor will teleport the user a short distance away (to safety or to more danger, no one knows. That's the fun of it!) /obj/item/clothing/suit/armor/reactive - name = "Reactive Teleport Armor" - desc = "Someone seperated our Research Director from his own head!" - var/active = 0.0 + name = "reactive armor" + desc = "Doesn't seem to do much for some reason." + var/active = 0 icon_state = "reactiveoff" item_state = "reactiveoff" blood_overlay_type = "armor" - action_button_name = "Toggle Reactive Armor" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + actions_types = list(/datum/action/item_action/toggle) + unacidable = 1 + hit_reaction_chance = 50 -/obj/item/clothing/suit/armor/reactive/IsShield() +/obj/item/clothing/suit/armor/reactive/attack_self(mob/user) + active = !(active) if(active) - return 1 - 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" + to_chat(user, "[src] 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, "[src] is now inactive.") + icon_state = "reactiveoff" + item_state = "reactiveoff" + add_fingerprint(user) + user.update_inv_wear_suit() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() /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" + if(istype(loc, /mob/living/carbon/human)) + var/mob/living/carbon/human/C = loc + C.update_inv_wear_suit() ..() +//When the wearer gets hit, this armor will teleport the user a short distance away (to safety or to more danger, no one knows. That's the fun of it!) +/obj/item/clothing/suit/armor/reactive/teleport + name = "reactive teleport armor" + desc = "Someone seperated our Research Director from his own head!" + var/tele_range = 6 + +/obj/item/clothing/suit/armor/reactive/teleport/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance) + if(!active) + return 0 + if(prob(hit_reaction_chance)) + var/mob/living/carbon/human/H = owner + owner.visible_message("The reactive teleport system flings [H] clear of [attack_text], shutting itself off in the process!") + var/list/turfs = new/list() + for(var/turf/T in orange(tele_range, H)) + if(istype(T, /turf/space)) + continue + if(T.density) + continue + if(T.x>world.maxx-tele_range || T.xworld.maxy-tele_range || T.yThe [src] blocks the [attack_text], sending out jets of flame!") + for(var/mob/living/carbon/C in range(6, owner)) + if(C != owner) + C.fire_stacks += 8 + C.IgniteMob() + owner.fire_stacks = -20 + return 1 + return 0 + + +/obj/item/clothing/suit/armor/reactive/stealth + name = "reactive stealth armor" + +/obj/item/clothing/suit/armor/reactive/stealth/hit_reaction(mob/living/carbon/human/owner, attack_text) + if(!active) + return 0 + if(prob(hit_reaction_chance)) + var/mob/living/simple_animal/hostile/illusion/escape/E = new(owner.loc) + E.Copy_Parent(owner, 50) + E.GiveTarget(owner) //so it starts running right away + E.Goto(owner, E.move_to_delay, E.minimum_distance) + owner.alpha = 0 + owner.visible_message("[owner] is hit by [attack_text] in the chest!") //We pretend to be hit, since blocking it would stop the message otherwise + spawn(40) + owner.alpha = initial(owner.alpha) + return 1 + +/obj/item/clothing/suit/armor/reactive/tesla + name = "reactive tesla armor" + +/obj/item/clothing/suit/armor/reactive/tesla/hit_reaction(mob/living/carbon/human/owner, attack_text) + if(!active) + return 0 + if(prob(hit_reaction_chance)) + owner.visible_message("The [src] blocks the [attack_text], sending out arcs of lightning!") + for(var/mob/living/M in view(6, owner)) + if(M == owner) + continue + owner.Beam(M,icon_state="lightning[rand(1, 12)]",icon='icons/effects/effects.dmi',time=5) + M.adjustFireLoss(25) + playsound(M, 'sound/machines/defib_zap.ogg', 50, 1, -1) + return 1 //All of the armor below is mostly unused @@ -266,27 +374,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 +419,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/hood.dm b/code/modules/clothing/suits/hood.dm new file mode 100644 index 00000000000..0683394ce9f --- /dev/null +++ b/code/modules/clothing/suits/hood.dm @@ -0,0 +1,67 @@ +//Hoods for winter coats and chaplain hoodie etc + +/obj/item/clothing/suit/hooded + actions_types = list(/datum/action/item_action/toggle) + var/obj/item/clothing/head/hood + var/hoodtype = /obj/item/clothing/head/winterhood //so the chaplain hoodie or other hoodies can override this + +/obj/item/clothing/suit/hooded/New() + MakeHood() + ..() + +/obj/item/clothing/suit/hooded/Destroy() + qdel(hood) + return ..() + +/obj/item/clothing/suit/hooded/proc/MakeHood() + if(!hood) + var/obj/item/clothing/head/W = new hoodtype(src) + hood = W + +/obj/item/clothing/suit/hooded/ui_action_click() + ToggleHood() + +/obj/item/clothing/suit/hooded/item_action_slot_check(slot, mob/user) + if(slot == slot_wear_suit) + return 1 + +/obj/item/clothing/suit/hooded/equipped(mob/user, slot) + if(slot != slot_wear_suit) + RemoveHood() + ..() + +/obj/item/clothing/suit/hooded/proc/RemoveHood() + icon_state = "[initial(icon_state)]" + suit_adjusted = 0 + if(ishuman(hood.loc)) + var/mob/living/carbon/H = hood.loc + H.unEquip(hood, 1) + H.update_inv_wear_suit() + hood.loc = src + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + +/obj/item/clothing/suit/hooded/dropped() + ..() + RemoveHood() + +/obj/item/clothing/suit/hooded/proc/ToggleHood() + if(!suit_adjusted) + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + if(H.wear_suit != src) + to_chat(H,"You must be wearing [src] to put up the hood!") + return + if(H.head) + to_chat(H,"You're already wearing something on your head!") + return + else if(H.equip_to_slot_if_possible(hood,slot_head,0,0,1)) + suit_adjusted = 1 + icon_state = "[initial(icon_state)]_hood" + H.update_inv_wear_suit() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + else + RemoveHood() diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index f9ce0cd4593..a8fd6ea4c49 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( @@ -69,12 +73,13 @@ ) //Chaplain -/obj/item/clothing/suit/chaplain_hoodie +/obj/item/clothing/suit/hooded/chaplain_hoodie name = "chaplain hoodie" desc = "This suit says to you 'hush'!" icon_state = "chaplain_hoodie" item_state = "chaplain_hoodie" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + hoodtype = /obj/item/clothing/head/chaplain_hood allowed = list(/obj/item/weapon/storage/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/emergency_oxygen) species_fit = list("Vox") sprite_sheets = list( @@ -82,13 +87,14 @@ ) //Chaplain -/obj/item/clothing/suit/nun +/obj/item/clothing/suit/hooded/nun name = "nun robe" desc = "Maximum piety in this star system." icon_state = "nun" item_state = "nun" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS flags_inv = HIDESHOES|HIDEJUMPSUIT + hoodtype = /obj/item/clothing/head/nun_hood allowed = list(/obj/item/weapon/storage/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/emergency_oxygen) species_fit = list("Vox") sprite_sheets = list( @@ -119,10 +125,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 +135,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 +172,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 +195,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." @@ -198,7 +210,7 @@ body_parts_covered = UPPER_TORSO|ARMS ignore_suitadjust = 0 suit_adjusted = 1 - action_button_name = "Button/Unbutton Jacket" + actions_types = list(/datum/action/item_action/button) adjust_flavour = "unbutton" /obj/item/clothing/suit/storage/lawyer/bluejacket @@ -210,7 +222,7 @@ body_parts_covered = UPPER_TORSO|ARMS ignore_suitadjust = 0 suit_adjusted = 1 - action_button_name = "Button/Unbutton Jacket" + actions_types = list(/datum/action/item_action/button) adjust_flavour = "unbutton" /obj/item/clothing/suit/storage/lawyer/purpjacket @@ -231,8 +243,12 @@ body_parts_covered = UPPER_TORSO|ARMS ignore_suitadjust = 0 suit_adjusted = 1 - action_button_name = "Button/Unbutton Jacket" + actions_types = list(/datum/action/item_action/button) 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" @@ -242,8 +258,12 @@ blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|ARMS ignore_suitadjust = 0 - action_button_name = "Button/Unbutton Jacket" + actions_types = list(/datum/action/item_action/button) 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 @@ -256,8 +276,12 @@ /obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen,/obj/item/device/rad_laser) ignore_suitadjust = 0 suit_adjusted = 1 - action_button_name = "Button/Unbutton Jacket" + actions_types = list(/datum/action/item_action/button) 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 +290,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..8097162ba28 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -13,7 +13,7 @@ sprite_sheets = list( "Vox" = 'icons/mob/species/vox/suit.dmi' ) - action_button_name = "Button/Unbutton Labcoat" + actions_types = list(/datum/action/item_action/button) adjust_flavour = "unbutton" /obj/item/clothing/suit/storage/labcoat/cmo @@ -21,66 +21,44 @@ 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' - ) + +/obj/item/clothing/suit/storage/labcoat/emt + name = "EMT labcoat" + desc = "A comfortable suit for paramedics. Has dark colours." + icon_state = "labcoat_emt_open" + item_state = "labcoat_emt_open" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 7985eb06b57..676800f8f48 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -2,6 +2,7 @@ * Contains: * Lasertag * Costume + * Winter Coats * Misc */ @@ -16,6 +17,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 +30,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 +43,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 +115,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 +252,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" @@ -260,11 +283,192 @@ item_state = "lingspacesuit" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS +/* + * Winter Coats + */ + +/obj/item/clothing/suit/hooded/wintercoat + name = "winter coat" + desc = "A heavy jacket made from 'synthetic' animal furs." + icon_state = "wintercoat" + item_state = "labcoat" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/toy, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/lighter) + species_fit = list("Vox") + sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') + +/obj/item/clothing/head/winterhood + name = "winter hood" + desc = "A hood attached to a heavy winter jacket." + icon_state = "winterhood" + body_parts_covered = HEAD + cold_protection = HEAD + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + flags = NODROP|BLOCKHAIR + flags_inv = HIDEEARS + species_fit = list("Vox") + sprite_sheets = list("Vox" = 'icons/mob/species/vox/head.dmi') + +/obj/item/clothing/suit/hooded/wintercoat/captain + name = "captain's winter coat" + icon_state = "wintercoat_captain" + armor = list(melee = 25, bullet = 30, laser = 30, energy = 10, bomb = 25, 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, /obj/item/weapon/melee/classic_baton/telescopic) + hoodtype = /obj/item/clothing/head/winterhood/captain + +/obj/item/clothing/head/winterhood/captain + icon_state = "winterhood_captain" + +/obj/item/clothing/suit/hooded/wintercoat/security + name = "security winter coat" + icon_state = "wintercoat_sec" + armor = list(melee = 10, bullet = 10, laser = 10, energy = 5, bomb = 15, 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, /obj/item/weapon/melee/classic_baton/telescopic) + hoodtype = /obj/item/clothing/head/winterhood/security + +/obj/item/clothing/head/winterhood/security + icon_state = "winterhood_sec" + +/obj/item/clothing/suit/hooded/wintercoat/medical + name = "medical winter coat" + icon_state = "wintercoat_med" + allowed = list(/obj/item/device/analyzer, /obj/item/weapon/dnainjector, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/hypospray, /obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/storage/pill_bottle, /obj/item/weapon/paper, /obj/item/weapon/melee/classic_baton/telescopic) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 50, rad = 0) + hoodtype = /obj/item/clothing/head/winterhood/medical + +/obj/item/clothing/head/winterhood/medical + icon_state = "winterhood_med" + +/obj/item/clothing/suit/hooded/wintercoat/science + name = "science winter coat" + icon_state = "wintercoat_sci" + allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/weapon/dnainjector, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/hypospray, /obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/storage/pill_bottle, /obj/item/weapon/paper, /obj/item/weapon/melee/classic_baton/telescopic) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0) + hoodtype = /obj/item/clothing/head/winterhood/science + +/obj/item/clothing/head/winterhood/science + icon_state = "winterhood_sci" + +/obj/item/clothing/suit/hooded/wintercoat/engineering + name = "engineering winter coat" + icon_state = "wintercoat_engi" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20) + allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/device/t_scanner, /obj/item/weapon/rcd) + hoodtype = /obj/item/clothing/head/winterhood/engineering + +/obj/item/clothing/head/winterhood/engineering + icon_state = "winterhood_engi" + +/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos + name = "atmospherics winter coat" + icon_state = "wintercoat_atmos" + hoodtype = /obj/item/clothing/head/winterhood/engineering/atmos + +/obj/item/clothing/head/winterhood/engineering/atmos + icon_state = "winterhood_atmos" + +/obj/item/clothing/suit/hooded/wintercoat/hydro + name = "hydroponics winter coat" + icon_state = "wintercoat_hydro" + allowed = list(/obj/item/weapon/reagent_containers/spray, /obj/item/device/analyzer/plant_analyzer, /obj/item/seeds, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/hatchet, /obj/item/weapon/storage/bag/plants) + hoodtype = /obj/item/clothing/head/winterhood/hydro + +/obj/item/clothing/head/winterhood/hydro + icon_state = "winterhood_hydro" + +/obj/item/clothing/suit/hooded/wintercoat/cargo + name = "cargo winter coat" + icon_state = "wintercoat_cargo" + hoodtype = /obj/item/clothing/head/winterhood/cargo + +/obj/item/clothing/head/winterhood/cargo + icon_state = "winterhood_cargo" + +/obj/item/clothing/suit/hooded/wintercoat/miner + name = "mining winter coat" + icon_state = "wintercoat_miner" + allowed = list(/obj/item/weapon/pickaxe, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/toy, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/lighter) + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + hoodtype = /obj/item/clothing/head/winterhood/miner + +/obj/item/clothing/head/winterhood/miner + icon_state = "winterhood_miner" + /* * Misc */ +//hoodies +/obj/item/clothing/suit/hooded/hoodie + name = "black hoodie" + desc = "It's a hoodie. It has a hood. Most hoodies do." + icon_state = "black_hoodie" + item_state = "labcoat" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + hoodtype = /obj/item/clothing/head/hood + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) + +/obj/item/clothing/head/hood + name = "black hood" + desc = "A hood attached to a hoodie." + icon_state = "blackhood" + body_parts_covered = HEAD + cold_protection = HEAD + flags = NODROP|BLOCKHAIR + flags_inv = HIDEEARS + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/head.dmi' + ) + +/obj/item/clothing/head/hood/blue + icon_state = "bluehood" + +/obj/item/clothing/head/hood/white + icon_state = "whitehood" + +/obj/item/clothing/suit/hooded/hoodie/blue + name = "blue hoodie" + icon_state = "blue_hoodie" + hoodtype = /obj/item/clothing/head/hood/blue + +/obj/item/clothing/suit/hooded/hoodie/mit + name = "Martian Institute of Technology hoodie" + desc = "A hoodie proudly worn by students and graduates alike, has the letters 'MIT' on the back." + icon_state = "mit_hoodie" + hoodtype = /obj/item/clothing/head/hood + +/obj/item/clothing/suit/hooded/hoodie/cut + name = "Canaan University of Technology hoodie" + desc = "A bright hoodie with the Canaan University of Technology logo on the front." + icon_state = "cut_hoodie" + hoodtype = /obj/item/clothing/head/hood/white + +/obj/item/clothing/suit/hooded/hoodie/lam + name = "Lunar Academy of Medicine hoodie" + desc = "A bright hoodie with the Lunar Academy of Medicine logo on the back." + icon_state = "lam_hoodie" + hoodtype = /obj/item/clothing/head/hood/white + +/obj/item/clothing/suit/hooded/hoodie/nt + name = "Nanotrasen hoodie" + desc = "A blue hoodie with the Nanotrasen logo on the back." + icon_state = "nt_hoodie" + hoodtype = /obj/item/clothing/head/hood/blue + +/obj/item/clothing/suit/hooded/hoodie/tp + name = "Tharsis Polytech hoodie" + desc = "A dark hoodie with the Tharsis Polytech logo on the back." + icon_state = "tp_hoodie" + hoodtype = /obj/item/clothing/head/hood + /obj/item/clothing/suit/straight_jacket name = "straight jacket" desc = "A suit that completely restrains the wearer." @@ -272,7 +476,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 +484,12 @@ 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,13 +533,49 @@ 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' + ) +//trackjackets + +/obj/item/clothing/suit/tracksuit + name = "black tracksuit" + desc = "Lightweight and stylish. What else could a man ask of his tracksuit?" + icon_state = "trackjacket_open" + item_state = "bltrenchcoat" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + ignore_suitadjust = 0 + suit_adjusted = 1 + actions_types = list(/datum/action/item_action/openclose) + adjust_flavour = "unzip" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) + +/obj/item/clothing/suit/tracksuit/green + name = "green tracksuit" + icon_state = "trackjacketgreen_open" + +/obj/item/clothing/suit/tracksuit/red + name = "red tracksuit" + icon_state = "trackjacketred_open" + +/obj/item/clothing/suit/tracksuit/white + name = "white tracksuit" + icon_state = "trackjacketwhite_open" //actual suits @@ -377,7 +623,7 @@ icon_state = "militaryjacket" item_state = "militaryjacket" ignore_suitadjust = 1 - action_button_name = null + actions_types = list() adjust_flavour = null allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/weapon/gun/projectile/automatic/pistol,/obj/item/weapon/gun/projectile/revolver,/obj/item/weapon/gun/projectile/revolver/detective) @@ -403,7 +649,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 +692,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 +705,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 @@ -471,8 +717,12 @@ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter) body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS - action_button_name = "Zip/Unzip Jacket" + actions_types = list(/datum/action/item_action/zipper) 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 +737,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 @@ -496,7 +746,7 @@ desc = "Pompadour not included." icon_state = "leatherjacket" ignore_suitadjust = 1 - action_button_name = null + actions_types = list() adjust_flavour = null /obj/item/clothing/suit/officercoat @@ -504,12 +754,26 @@ desc = "A classy clown officer's overcoat, also designed by Hugo Boss." icon_state = "officersuit" item_state = "officersuit" + ignore_suitadjust = 0 + actions_types = list(/datum/action/item_action/button) + 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 + actions_types = list(/datum/action/item_action/button) + 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,9 +781,9 @@ 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" + actions_types = list(/datum/action/item_action/toggle_wings) flags = NODROP /obj/item/clothing/suit/toggle/owlwings/griffinwings @@ -536,6 +800,9 @@ icon_state = initial(icon_state) item_state = initial(item_state) usr.update_inv_wear_suit() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() /obj/item/clothing/suit/lordadmiral name = "Lord Admiral's Coat" @@ -559,12 +826,12 @@ desc = "An incredibly advanced and complex suit; it has so many buttons and dials as to be incomprehensible." icon_state = "bomb" item_state = "bomb" - action_button_name = "Toggle Advanced Protective Suit" + actions_types = list(/datum/action/item_action/toggle) gas_transfer_coefficient = 0.01 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 @@ -605,4 +872,4 @@ if(user.reagents.get_reagent_amount("syndicate_nanites") < 15) user.reagents.add_reagent("syndicate_nanites", 15) else - processing_objects.Remove(src) \ No newline at end of file + processing_objects.Remove(src) diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index 87520f38856..360c9b2915f 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -14,11 +14,11 @@ return ..() /obj/item/clothing/suit/storage/attack_hand(mob/user as mob) - if (pockets.handle_attack_hand(user)) + if(pockets.handle_attack_hand(user)) ..(user) /obj/item/clothing/suit/storage/MouseDrop(obj/over_object as obj) - if (pockets.handle_mousedrop(usr, over_object)) + if(pockets.handle_mousedrop(usr, over_object)) ..(over_object) /obj/item/clothing/suit/storage/attackby(obj/item/W as obj, mob/user as mob, params) @@ -47,6 +47,6 @@ L += S.return_inv() for(var/obj/item/weapon/gift/G in src) L += G.gift - if (istype(G.gift, /obj/item/weapon/storage)) + if(istype(G.gift, /obj/item/weapon/storage)) L += G.gift:return_inv() return L 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 8b1d33d6ddb..e417c899f7f 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -6,11 +6,10 @@ item_state = "" //no inhands item_color = "bluetie" slot_flags = SLOT_TIE - w_class = 2.0 + w_class = 2 var/slot = "decor" var/obj/item/clothing/under/has_suit = null //the suit the tie may be attached to var/image/inv_overlay = null //overlay used when attached to clothing. - action_button_custom_type = /datum/action/item_action/accessory /obj/item/clothing/accessory/New() ..() @@ -23,14 +22,30 @@ has_suit = S loc = has_suit has_suit.overlays += inv_overlay + has_suit.actions += actions - to_chat(user, "You attach [src] to [has_suit].") + for(var/X in actions) + var/datum/action/A = X + if(has_suit.is_equipped()) + var/mob/M = has_suit.loc + A.Grant(M) + + 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) if(!has_suit) return has_suit.overlays -= inv_overlay + has_suit.actions -= actions + + for(var/X in actions) + var/datum/action/A = X + if(ismob(has_suit.loc)) + var/mob/M = has_suit.loc + A.Remove(M) + has_suit = null usr.put_in_hands(src) src.add_fingerprint(user) @@ -89,6 +104,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" @@ -98,35 +117,45 @@ /obj/item/clothing/accessory/stethoscope/attack(mob/living/carbon/human/M, mob/living/user) if(ishuman(M) && isliving(user)) - if(user.a_intent == I_HELP) - var/body_part = parse_zone(user.zone_sel.selecting) - if(body_part) - var/their = "their" - switch(M.gender) - if(MALE) their = "his" - if(FEMALE) their = "her" - - var/sound = "pulse" - var/sound_strength - - if(M.stat == DEAD || (M.status_flags&FAKEDEATH)) - sound_strength = "cannot hear" - sound = "anything" - else - sound_strength = "hear a weak" - switch(body_part) - if("chest") - if(M.oxyloss < 50) - sound_strength = "hear a healthy" - sound = "pulse and respiration" - if("eyes","mouth") - sound_strength = "cannot hear" - sound = "anything" - else - sound_strength = "hear a weak" - - user.visible_message("[user] places [src] against [M]'s [body_part] and listens attentively.", "You place [src] against [their] [body_part]. You [sound_strength] [sound].") - return + if(user == M) + user.visible_message("[user] places \the [src] against \his chest and listens attentively.", "You place \the [src] against your chest...") + else + user.visible_message("[user] places \the [src] against [M]'s chest and listens attentively.", "You place \the [src] against [M]'s chest...") + var/obj/item/organ/internal/H = M.get_int_organ(/obj/item/organ/internal/heart) + var/obj/item/organ/internal/L = M.get_int_organ(/obj/item/organ/internal/lungs) + if((H && M.pulse) || (L && !(NO_BREATH in M.mutations) && !(M.species.flags & NO_BREATH))) + var/color = "notice" + if(H) + var/heart_sound + switch(H.damage) + if(0 to 1) + heart_sound = "healthy" + if(1 to 25) + heart_sound = "offbeat" + if(25 to 50) + heart_sound = "uneven" + color = "warning" + if(50 to INFINITY) + heart_sound = "weak, unhealthy" + color = "warning" + to_chat(user, "You hear \an [heart_sound] pulse.") + if(L) + var/lung_sound + switch(L.damage) + if(0 to 1) + lung_sound = "healthy respiration" + if(1 to 25) + lung_sound = "labored respiration" + if(25 to 50) + lung_sound = "pained respiration" + color = "warning" + if(50 to INFINITY) + lung_sound = "gurgling" + color = "warning" + to_chat(user, "You hear [lung_sound].") + else + to_chat(user, "You don't hear anything.") + return return ..(M,user) @@ -231,7 +260,7 @@ ..() /obj/item/clothing/accessory/holobadge/emag_act(user as mob) - if (emagged) + if(emagged) to_chat(user, "\red [src] is already cracked.") return else @@ -389,7 +418,7 @@ /obj/item/clothing/accessory/petcollar/examine(mob/user) ..() if(access_id) - to_chat(user, "There is \icon[access_id] \a [access_id] clipped onto it.") + to_chat(user, "There is [bicon(access_id)] \a [access_id] clipped onto it.") /obj/item/clothing/accessory/petcollar/equipped(mob/living/simple_animal/user) if(istype(user)) @@ -419,15 +448,15 @@ return var/list/A = U.accessories var/total = A.len - if (total == 1) + if(total == 1) return "\a [A[1]]" - else if (total == 2) + else if(total == 2) return "\a [A[1]] and \a [A[2]]" else var/output = "" var/index = 1 var/comma_text = ", " - while (index < total) + while(index < total) output += "\a [A[index]][comma_text]" index++ diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm index cc0e47a9563..a30522768ed 100644 --- a/code/modules/clothing/under/accessories/holster.dm +++ b/code/modules/clothing/under/accessories/holster.dm @@ -6,8 +6,8 @@ slot = "utility" var/holster_allow = /obj/item/weapon/gun var/obj/item/weapon/gun/holstered = null - action_button_name = "Holster" - w_class = 3.0 // so it doesn't fit in pockets + actions_types = list(/datum/action/item_action/accessory/holster) + w_class = 3 // so it doesn't fit in pockets //subtypes can override this to specify what can be holstered /obj/item/clothing/accessory/holster/proc/can_holster(obj/item/weapon/gun/W) @@ -67,8 +67,8 @@ holstered = null /obj/item/clothing/accessory/holster/attack_hand(mob/user as mob) - if (has_suit) //if we are part of a suit - if (holstered) + if(has_suit) //if we are part of a suit + if(holstered) unholster(user) return @@ -78,13 +78,13 @@ holster(W, user) /obj/item/clothing/accessory/holster/emp_act(severity) - if (holstered) + if(holstered) holstered.emp_act(severity) ..() /obj/item/clothing/accessory/holster/examine(mob/user) ..(user) - if (holstered) + if(holstered) to_chat(user, "A [holstered] is holstered here.") else to_chat(user, "It is empty.") @@ -106,14 +106,14 @@ if(usr.stat) return var/obj/item/clothing/accessory/holster/H = null - if (istype(src, /obj/item/clothing/accessory/holster)) + if(istype(src, /obj/item/clothing/accessory/holster)) H = src - else if (istype(src, /obj/item/clothing/under)) + else if(istype(src, /obj/item/clothing/under)) var/obj/item/clothing/under/S = src - if (S.accessories.len) + if(S.accessories.len) H = locate() in S.accessories - if (!H) + if(!H) to_chat(usr, "Something is very wrong.") if(!H.holstered) diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index 4c5997d3330..aea6cf139f3 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -6,8 +6,8 @@ slot = "utility" var/slots = 3 var/obj/item/weapon/storage/internal/hold - action_button_name = "View Storage" - w_class = 3.0 // so it doesn't fit in pockets + actions_types = list(/datum/action/item_action/accessory/storage) + w_class = 3 // so it doesn't fit in pockets /obj/item/clothing/accessory/storage/New() ..() @@ -15,18 +15,18 @@ hold.storage_slots = slots /obj/item/clothing/accessory/storage/attack_hand(mob/user as mob) - if (has_suit) //if we are part of a suit + if(has_suit) //if we are part of a suit hold.open(user) return - if (hold.handle_attack_hand(user)) //otherwise interact as a regular storage item + if(hold.handle_attack_hand(user)) //otherwise interact as a regular storage item ..(user) /obj/item/clothing/accessory/storage/MouseDrop(obj/over_object as obj) - if (has_suit) + if(has_suit) return - if (hold.handle_mousedrop(usr, over_object)) + if(hold.handle_mousedrop(usr, over_object)) ..(over_object) /obj/item/clothing/accessory/storage/attackby(obj/item/W as obj, mob/user as mob, params) @@ -54,12 +54,12 @@ L += S.return_inv() for(var/obj/item/weapon/gift/G in src) L += G.gift - if (istype(G.gift, /obj/item/weapon/storage)) + if(istype(G.gift, /obj/item/weapon/storage)) L += G.gift:return_inv() return L /obj/item/clothing/accessory/storage/attack_self(mob/user as mob) - if (has_suit) //if we are part of a suit + if(has_suit) //if we are part of a suit hold.open(user) else to_chat(user, "You empty [src].") @@ -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..8f5a540f3c3 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() ..() @@ -38,11 +39,13 @@ desc = "Groovy!" icon_state = "psyche" item_color = "psyche" + usr.update_inv_w_uniform() spawn(200) - name = "Black Jumpsuit" - icon_state = "bl_suit" - item_color = "black" - desc = null + name = initial(name) + icon_state = initial(icon_state) + item_color = initial(item_color) + desc = initial(desc) + usr.update_inv_w_uniform() ..() diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index e0386585f26..886d48932aa 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,19 @@ 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/grey/glorf + name = "ancient jumpsuit" + desc = "A terribly ragged and frayed grey jumpsuit. It looks like it hasn't been washed in over a decade." + +/obj/item/clothing/under/color/grey/glorf/hit_reaction(mob/living/carbon/human/owner) + owner.forcesay(hit_appends) + return 0 /obj/item/clothing/under/color/orange name = "orange jumpsuit" @@ -59,7 +69,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 +79,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 +87,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 +133,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 +160,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 +176,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 +187,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 +195,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 +203,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..68307875b1b 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,8 +68,11 @@ icon_state = "clown" item_state = "clown" item_color = "clown" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL +/obj/item/clothing/under/rank/clown/hit_reaction() + playsound(loc, 'sound/items/bikehorn.ogg', 50, 1, -1) + return 0 /obj/item/clothing/under/rank/head_of_personnel desc = "It's a jumpsuit worn by someone who works in the position of \"Head of Personnel\"." @@ -64,7 +80,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 +97,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 +105,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 +113,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 +176,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 +184,7 @@ icon_state = "mime" item_state = "mime" item_color = "mime" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/miner @@ -177,7 +193,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..d912a2e289d 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" @@ -709,3 +709,15 @@ to_chat(user,"You can't fit inside while wearing that \the [user.get_item_by_slot(slot_id)].") return 0 return 1 + +/obj/item/clothing/under/cursedclown + name = "cursed clown suit" + desc = "It wasn't already?" + icon = 'icons/goonstation/objects/clothing/uniform.dmi' + icon_state = "cursedclown" + item_state = "cclown_uniform" + item_color = "cursedclown" + icon_override = 'icons/goonstation/mob/clothing/uniform.dmi' + lefthand_file = 'icons/goonstation/mob/inhands/clothing_lefthand.dmi' + righthand_file = 'icons/goonstation/mob/inhands/clothing_righthand.dmi' + flags = NODROP 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..198a3e46de9 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -1,18 +1,19 @@ /obj/item/clothing/under/syndicate name = "tactical turtleneck" - desc = "It's some non-descript, slightly suspicious looking, support clothing." + desc = "A non-descript and slightly suspicious looking turtleneck with digital camouflage cargo pants." icon_state = "syndicate" 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" /obj/item/clothing/under/syndicate/tacticool - name = "\improper Tacticool turtleneck" + name = "tacticool turtleneck" desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-." icon_state = "tactifool" item_state = "bl_suit" - item_color = "tactifool" \ No newline at end of file + item_color = "tactifool" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) \ No newline at end of file diff --git a/code/modules/computer3/NTOS.dm b/code/modules/computer3/NTOS.dm index 5119084f0e6..bc70c49cbac 100644 --- a/code/modules/computer3/NTOS.dm +++ b/code/modules/computer3/NTOS.dm @@ -61,7 +61,7 @@ dat += {"
        - \icon[C]
        + [bicon(C)]
        [C.name]
        Name: [active1.fields["name"]] \ ID: [active1.fields["id"]]
        \n \ Sex: [active1.fields["sex"]]
        \n \ @@ -99,10 +95,11 @@ Fingerprint: [active1.fields["fingerprint"]]
        \n \ Physical Status: [active1.fields["p_stat"]]
        \n \ Mental Status: [active1.fields["m_stat"]]
        \ - Photo:
        " + Photo:
        \ + " else dat += "General Record Lost!
        " - if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) + if((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) dat += text("
        \n
        Medical Data

        \nBlood Type: []
        \nDNA: []
        \n
        \nMinor Disabilities: []
        \nDetails: []
        \n
        \nMajor Disabilities: []
        \nDetails: []
        \n
        \nAllergies: []
        \nDetails: []
        \n
        \nCurrent Diseases: [] (per disease info placed in log/comment section)
        \nDetails: []
        \n
        \nImportant Notes:
        \n\t[]
        \n
        \n
        Comments/Log

        ", src, src.active2.fields["b_type"], src, src.active2.fields["b_dna"], src, src.active2.fields["mi_dis"], src, src.active2.fields["mi_dis_d"], src, src.active2.fields["ma_dis"], src, src.active2.fields["ma_dis_d"], src, src.active2.fields["alg"], src, src.active2.fields["alg_d"], src, src.active2.fields["cdi"], src, src.active2.fields["cdi_d"], src, decode(src.active2.fields["notes"])) var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) @@ -157,16 +154,16 @@ Topic(href, href_list) if(!interactable() || !computer.cardslot || ..(href,href_list)) return - if (!( data_core.general.Find(src.active1) )) + if(!( data_core.general.Find(src.active1) )) src.active1 = null - if (!( data_core.medical.Find(src.active2) )) + if(!( data_core.medical.Find(src.active2) )) src.active2 = null - if (href_list["temp"]) + if(href_list["temp"]) src.temp = null - if (href_list["cardr"]) - if (scan) + if(href_list["cardr"]) + if(scan) if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand()) computer.cardslot.remove(1) else @@ -174,12 +171,12 @@ scan = null else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) computer.cardslot.insert(I, 1) scan = I - if (href_list["cardw"]) - if (scan2) + if(href_list["cardw"]) + if(scan2) if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand()) computer.cardslot.remove(2) else @@ -187,26 +184,26 @@ scan2 = null else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) computer.cardslot.insert(I, 2) scan2 = I - else if (href_list["logout"]) + else if(href_list["logout"]) src.authenticated = null src.screen = null src.active1 = null src.active2 = null - else if (href_list["login"]) + else if(href_list["login"]) - if (istype(usr, /mob/living/silicon/ai)) + if(istype(usr, /mob/living/silicon/ai)) src.active1 = null src.active2 = null src.authenticated = usr.name src.rank = "AI" src.screen = 1 - else if (istype(usr, /mob/living/silicon/robot)) + else if(istype(usr, /mob/living/silicon/robot)) src.active1 = null src.active2 = null src.authenticated = usr.name @@ -214,16 +211,16 @@ src.rank = "[R.modtype] [R.braintype]" src.screen = 1 - else if (istype(src.scan, /obj/item/weapon/card/id)) + else if(istype(src.scan, /obj/item/weapon/card/id)) src.active1 = null src.active2 = null - if (src.check_access(src.scan)) + if(src.check_access(src.scan)) src.authenticated = src.scan.registered_name src.rank = src.scan.assignment src.screen = 1 - if (src.authenticated) + if(src.authenticated) if(href_list["screen"]) src.screen = text2num(href_list["screen"]) @@ -241,125 +238,125 @@ src.temp += "
        Spread: [v.fields["spread type"]] " src.temp += "
        Details:
        [v.fields["description"]]" - if (href_list["del_all"]) + if(href_list["del_all"]) src.temp = text("Are you sure you wish to delete all records?
        \n\tYes
        \n\tNo
        ", src, src) - if (href_list["del_all2"]) + if(href_list["del_all2"]) for(var/datum/data/record/R in data_core.medical) //R = null qdel(R) //Foreach goto(494) src.temp = "All records deleted." - if (href_list["field"]) + if(href_list["field"]) var/a1 = src.active1 var/a2 = src.active2 switch(href_list["field"]) if("fingerprint") - if (istype(src.active1, /datum/data/record)) + if(istype(src.active1, /datum/data/record)) var/t1 = trim(sanitize(copytext(input("Please input fingerprint hash:", "Med. records", src.active1.fields["fingerprint"], null) as text,1,MAX_MESSAGE_LEN))) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) return src.active1.fields["fingerprint"] = t1 if("sex") - if (istype(src.active1, /datum/data/record)) - if (src.active1.fields["sex"] == "Male") + if(istype(src.active1, /datum/data/record)) + if(src.active1.fields["sex"] == "Male") src.active1.fields["sex"] = "Female" else src.active1.fields["sex"] = "Male" if("age") - if (istype(src.active1, /datum/data/record)) + if(istype(src.active1, /datum/data/record)) var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as num - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) return src.active1.fields["age"] = t1 if("mi_dis") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = sanitize(copytext(input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null) as text,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["mi_dis"] = t1 if("mi_dis_d") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = sanitize(copytext(input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null) as message,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["mi_dis_d"] = t1 if("ma_dis") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = sanitize(copytext(input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null) as text,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["ma_dis"] = t1 if("ma_dis_d") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = sanitize(copytext(input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null) as message,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["ma_dis_d"] = t1 if("alg") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = sanitize(copytext(input("Please state allergies:", "Med. records", src.active2.fields["alg"], null) as text,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["alg"] = t1 if("alg_d") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = sanitize(copytext(input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null) as message,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["alg_d"] = t1 if("cdi") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = sanitize(copytext(input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null) as text,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["cdi"] = t1 if("cdi_d") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = sanitize(copytext(input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null) as message,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["cdi_d"] = t1 if("notes") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) var/t1 = html_encode(trim(copytext(input("Please summarize notes:", "Med. records", html_decode(src.active2.fields["notes"]), null) as message,1,MAX_MESSAGE_LEN))) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return src.active2.fields["notes"] = t1 if("p_stat") - if (istype(src.active1, /datum/data/record)) + if(istype(src.active1, /datum/data/record)) src.temp = text("Physical Condition:
        \n\t*Deceased*
        \n\t*SSD*
        \n\tActive
        \n\tPhysically Unfit
        \n\tDisabled
        ", src, src, src, src, src) if("m_stat") - if (istype(src.active1, /datum/data/record)) + if(istype(src.active1, /datum/data/record)) src.temp = text("Mental Condition:
        \n\t*Insane*
        \n\t*Unstable*
        \n\t*Watch*
        \n\tStable
        ", src, src, src, src) if("b_type") - if (istype(src.active2, /datum/data/record)) + if(istype(src.active2, /datum/data/record)) src.temp = text("Blood Type:
        \n\tA- A+
        \n\tB- B+
        \n\tAB- AB+
        \n\tO- O+
        ", src, src, src, src, src, src, src, src) if("b_dna") - if (istype(src.active1, /datum/data/record)) + if(istype(src.active1, /datum/data/record)) var/t1 = sanitize(copytext(input("Please input DNA hash:", "Med. records", src.active1.fields["dna"], null) as text,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) return src.active1.fields["dna"] = t1 if("vir_name") var/datum/data/record/v = locate(href_list["edit_vir"]) - if (v) + if(v) var/t1 = sanitize(copytext(input("Please input pathogen name:", "VirusDB", v.fields["name"], null) as text,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) return v.fields["name"] = t1 if("vir_desc") var/datum/data/record/v = locate(href_list["edit_vir"]) - if (v) + if(v) var/t1 = sanitize(copytext(input("Please input information about pathogen:", "VirusDB", v.fields["description"], null) as message,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) return v.fields["description"] = t1 else - if (href_list["p_stat"]) - if (src.active1) + if(href_list["p_stat"]) + if(src.active1) switch(href_list["p_stat"]) if("deceased") src.active1.fields["p_stat"] = "*Deceased*" @@ -372,8 +369,8 @@ if("disabled") src.active1.fields["p_stat"] = "Disabled" - if (href_list["m_stat"]) - if (src.active1) + if(href_list["m_stat"]) + if(src.active1) switch(href_list["m_stat"]) if("insane") src.active1.fields["m_stat"] = "*Insane*" @@ -385,8 +382,8 @@ src.active1.fields["m_stat"] = "Stable" - if (href_list["b_type"]) - if (src.active2) + if(href_list["b_type"]) + if(src.active2) switch(href_list["b_type"]) if("an") src.active2.fields["b_type"] = "A-" @@ -406,23 +403,23 @@ src.active2.fields["b_type"] = "O+" - if (href_list["del_r"]) - if (src.active2) + if(href_list["del_r"]) + if(src.active2) src.temp = text("Are you sure you wish to delete the record (Medical Portion Only)?
        \n\tYes
        \n\tNo
        ", src, src) - if (href_list["del_r2"]) - if (src.active2) + if(href_list["del_r2"]) + if(src.active2) //src.active2 = null qdel(src.active2) - if (href_list["d_rec"]) + if(href_list["d_rec"]) var/datum/data/record/R = locate(href_list["d_rec"]) var/datum/data/record/M = locate(href_list["d_rec"]) - if (!( data_core.general.Find(R) )) + if(!( data_core.general.Find(R) )) src.temp = "Record Not Found!" return for(var/datum/data/record/E in data_core.medical) - if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) M = E else //Foreach continue //goto(2540) @@ -430,8 +427,8 @@ src.active2 = M src.screen = 4 - if (href_list["new"]) - if ((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) ))) + if(href_list["new"]) + if((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) ))) var/datum/data/record/R = new /datum/data/record( ) R.fields["name"] = src.active1.fields["name"] R.fields["id"] = src.active1.fields["id"] @@ -451,63 +448,63 @@ src.active2 = R src.screen = 4 - if (href_list["add_c"]) - if (!( istype(src.active2, /datum/data/record) )) + if(href_list["add_c"]) + if(!( istype(src.active2, /datum/data/record) )) return var/a2 = src.active2 var/t1 = sanitize(copytext(input("Add Comment:", "Med. records", null, null) as message,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) + if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) return var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) counter++ src.active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
        [t1]") - if (href_list["del_c"]) - if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) + if(href_list["del_c"]) + if((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" - if (href_list["search"]) + if(href_list["search"]) var/t1 = input("Search String: (Name, DNA, or ID)", "Med. records", null, null) as text - if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || ((!interactable()) && (!istype(usr, /mob/living/silicon))))) + if((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || ((!interactable()) && (!istype(usr, /mob/living/silicon))))) return src.active1 = null src.active2 = null t1 = lowertext(t1) for(var/datum/data/record/R in data_core.medical) - if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"]))) + if((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"]))) src.active2 = R else //Foreach continue //goto(3229) - if (!( src.active2 )) + if(!( src.active2 )) src.temp = text("Could not locate record [].", t1) else for(var/datum/data/record/E in data_core.general) - if ((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"])) + if((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"])) src.active1 = E else //Foreach continue //goto(3334) src.screen = 4 - if (href_list["print_p"]) - if (!( src.printing )) + if(href_list["print_p"]) + if(!( src.printing )) src.printing = 1 var/datum/data/record/record1 = null var/datum/data/record/record2 = null - if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) + if((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) record1 = active1 - if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) + if((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) record2 = active2 sleep(50) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( computer.loc ) P.info = "
        Medical Record

        " - if (record1) + if(record1) P.info += text("Name: [] ID: []
        \nSex: []
        \nAge: []
        \nFingerprint: []
        \nPhysical Status: []
        \nMental Status: []
        ", record1.fields["name"], record1.fields["id"], record1.fields["sex"], record1.fields["age"], record1.fields["fingerprint"], record1.fields["p_stat"], record1.fields["m_stat"]) P.name = text("Medical Record ([])", record1.fields["name"]) else P.info += "General Record Lost!
        " P.name = "Medical Record" - if (record2) + if(record2) P.info += text("
        \n
        Medical Data

        \nBlood Type: []
        \nDNA: []
        \n
        \nMinor Disabilities: []
        \nDetails: []
        \n
        \nMajor Disabilities: []
        \nDetails: []
        \n
        \nAllergies: []
        \nDetails: []
        \n
        \nCurrent Diseases: [] (per disease info placed in log/comment section)
        \nDetails: []
        \n
        \nImportant Notes:
        \n\t[]
        \n
        \n
        Comments/Log

        ", record2.fields["b_type"], record2.fields["b_dna"], record2.fields["mi_dis"], record2.fields["mi_dis_d"], record2.fields["ma_dis"], record2.fields["ma_dis_d"], record2.fields["alg"], record2.fields["alg_d"], record2.fields["cdi"], record2.fields["cdi_d"], decode(record2.fields["notes"])) var/counter = 1 while(record2.fields[text("com_[]", counter)]) diff --git a/code/modules/computer3/computers/message.dm b/code/modules/computer3/computers/message.dm index 31aa4f3a501..cf40e7f3a0c 100644 --- a/code/modules/computer3/computers/message.dm +++ b/code/modules/computer3/computers/message.dm @@ -242,7 +242,7 @@ if(!interactable() || ..(href,href_list)) return - if ("auth" in href_list) + if("auth" in href_list) if(auth) auth = 0 screen = 0 @@ -255,10 +255,10 @@ message = incorrectkey //Turn the server on/off. - if ("active" in href_list) + if("active" in href_list) if(auth) linkedServer.active = !linkedServer.active //Find a server - if ("find" in href_list) + if("find" in href_list) if(message_servers && message_servers.len > 1) src.linkedServer = input(usr,"Please select a server.", "Select a server.", null) as null|anything in message_servers message = "NOTICE: Server selected." @@ -269,7 +269,7 @@ message = noserver //View the logs - KEY REQUIRED - if ("view" in href_list) + if("view" in href_list) if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) message = noserver else @@ -277,7 +277,7 @@ src.screen = 1 //Clears the logs - KEY REQUIRED - if ("clear" in href_list) + if("clear" in href_list) if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) message = noserver else @@ -285,7 +285,7 @@ src.linkedServer.pda_msgs = list() message = "NOTICE: Logs cleared." //Clears the request console logs - KEY REQUIRED - if ("clearr" in href_list) + if("clearr" in href_list) if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) message = noserver else @@ -293,7 +293,7 @@ src.linkedServer.rc_msgs = list() message = "NOTICE: Logs cleared." //Change the password - KEY REQUIRED - if ("pass" in href_list) + if("pass" in href_list) if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) message = noserver else @@ -313,7 +313,7 @@ message = incorrectkey //Hack the Console to get the password - if ("hack" in href_list) + if("hack" in href_list) if((istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) && (usr.mind.special_role && usr.mind.original == usr)) src.hacking = 1 src.screen = 2 @@ -323,7 +323,7 @@ if(src && src.linkedServer && usr) BruteForce(usr) //Delete the log. - if ("delete" in href_list) + if("delete" in href_list) //Are they on the view logs screen? if(screen == 1) if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) @@ -332,7 +332,7 @@ src.linkedServer.pda_msgs -= locate(href_list["delete"]) message = "NOTICE: Log Deleted!" //Delete the request console log. - if ("deleter" in href_list) + if("deleter" in href_list) //Are they on the view logs screen? if(screen == 4) if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) @@ -341,14 +341,14 @@ src.linkedServer.rc_msgs -= locate(href_list["deleter"]) message = "NOTICE: Log Deleted!" //Create a custom message - if ("msg" in href_list) + if("msg" in href_list) if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) message = noserver else if(auth) src.screen = 3 //Fake messaging selection - KEY REQUIRED - if ("select" in href_list) + if("select" in href_list) if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) message = noserver screen = 0 @@ -400,21 +400,21 @@ return src.attack_hand(usr) var/obj/item/device/pda/PDARec = null - for (var/obj/item/device/pda/P in PDAs) - if (!P.owner || P.toff || P.hidden) continue + for(var/obj/item/device/pda/P in PDAs) + if(!P.owner || P.toff || P.hidden) continue if(P.owner == customsender) PDARec = P //Sender isn't faking as someone who exists if(isnull(PDARec)) src.linkedServer.send_pda_message("[customrecepient.owner]", "[customsender]","[custommessage]") customrecepient.tnote += "← From [customsender] ([customjob]):
        [custommessage]
        " - if (!customrecepient.silent) + if(!customrecepient.silent) playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1) - for (var/mob/O in hearers(3, customrecepient.loc)) - O.show_message(text("\icon[customrecepient] *[customrecepient.ttone]*")) + for(var/mob/O in hearers(3, customrecepient.loc)) + O.show_message(text("[bicon(customrecepient)] *[customrecepient.ttone]*")) if( customrecepient.loc && ishuman(customrecepient.loc) ) var/mob/living/carbon/human/H = customrecepient.loc - to_chat(H, "\icon[customrecepient] Message from [customsender] ([customjob]), \"[custommessage]\" (Reply)" + to_chat(H, "[bicon(customrecepient)] Message from [customsender] ([customjob]), \"[custommessage]\" (Reply)" log_pda("[usr] (PDA: [customsender]) sent \"[custommessage]\" to [customrecepient.owner]") customrecepient.overlays.Cut() @@ -423,13 +423,13 @@ else src.linkedServer.send_pda_message("[customrecepient.owner]", "[PDARec.owner]","[custommessage]") customrecepient.tnote += "← From [PDARec.owner] ([customjob]):
        [custommessage]
        " - if (!customrecepient.silent) + if(!customrecepient.silent) playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1) - for (var/mob/O in hearers(3, customrecepient.loc)) - O.show_message(text("\icon[customrecepient] *[customrecepient.ttone]*")) + for(var/mob/O in hearers(3, customrecepient.loc)) + O.show_message(text("[bicon(customrecepient)] *[customrecepient.ttone]*")) if( customrecepient.loc && ishuman(customrecepient.loc) ) var/mob/living/carbon/human/H = customrecepient.loc - to_chat(H, "\icon[customrecepient] Message from [PDARec.owner] ([customjob]), \"[custommessage]\" (Reply)" + to_chat(H, "[bicon(customrecepient)] Message from [PDARec.owner] ([customjob]), \"[custommessage]\" (Reply)" log_pda("[usr] (PDA: [PDARec.owner]) sent \"[custommessage]\" to [customrecepient.owner]") customrecepient.overlays.Cut() @@ -447,6 +447,6 @@ // to_chat(usr, href_list["select"]) - if ("back" in href_list) + if("back" in href_list) src.screen = 0 interact() \ No newline at end of file diff --git a/code/modules/computer3/computers/prisonshuttle.dm b/code/modules/computer3/computers/prisonshuttle.dm index 119dbc350a4..e7dd5c650ac 100644 --- a/code/modules/computer3/computers/prisonshuttle.dm +++ b/code/modules/computer3/computers/prisonshuttle.dm @@ -40,12 +40,12 @@ var/prison_shuttle_timeleft = 0 if(do_after(user, 20, target = src)) var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) var/obj/item/part/board/circuit/prison_shuttle/M = new /obj/item/part/board/circuit/prison_shuttle( A ) - for (var/obj/C in src) + for(var/obj/C in src) C.loc = src.loc A.circuit = M A.anchored = 1 - if (src.stat & BROKEN) + if(src.stat & BROKEN) to_chat(user, "\blue The broken glass falls out.") new /obj/item/trash/shard( src.loc ) A.state = 3 @@ -75,7 +75,7 @@ var/prison_shuttle_timeleft = 0 user.set_machine(src) post_signal("prison") var/dat - if (src.temp) + if(src.temp) dat = src.temp else dat += {"Location: [prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison ? "Moving to station ([prison_shuttle_timeleft] Secs.)":prison_shuttle_at_station ? "Station":"Dock"]
        @@ -95,11 +95,11 @@ var/prison_shuttle_timeleft = 0 if(..()) return - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) + if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) - if (href_list["sendtodock"]) - if (!prison_can_move()) + if(href_list["sendtodock"]) + if(!prison_can_move()) to_chat(usr, "\red The prison shuttle is unable to leave.") return if(!prison_shuttle_at_station|| prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return @@ -112,8 +112,8 @@ var/prison_shuttle_timeleft = 0 spawn(0) prison_process() - else if (href_list["sendtostation"]) - if (!prison_can_move()) + else if(href_list["sendtostation"]) + if(!prison_can_move()) to_chat(usr, "\red The prison shuttle is unable to leave.") return if(prison_shuttle_at_station || prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return @@ -126,7 +126,7 @@ var/prison_shuttle_timeleft = 0 spawn(0) prison_process() - else if (href_list["mainmenu"]) + else if(href_list["mainmenu"]) src.temp = null src.add_fingerprint(usr) @@ -141,13 +141,13 @@ var/prison_shuttle_timeleft = 0 /* proc/prison_break() switch(prison_break) - if (0) + if(0) if(!prison_shuttle_at_station || prison_shuttle_moving_to_prison) return prison_shuttle_moving_to_prison = 1 prison_shuttle_at_station = prison_shuttle_at_station - if (!prison_shuttle_moving_to_prison || !prison_shuttle_moving_to_station) + if(!prison_shuttle_moving_to_prison || !prison_shuttle_moving_to_station) prison_shuttle_time = world.timeofday + PRISON_MOVETIME spawn(0) prison_process() @@ -183,9 +183,9 @@ var/prison_shuttle_timeleft = 0 if(0) prison_shuttle_at_station = 1 - if (prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return + if(prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return - if (!prison_can_move()) + if(!prison_can_move()) to_chat(usr, "\red The prison shuttle is unable to leave.") return @@ -212,9 +212,9 @@ var/prison_shuttle_timeleft = 0 if(1) prison_shuttle_at_station = 0 - if (prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return + if(prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return - if (!prison_can_move()) + if(!prison_can_move()) to_chat(usr, "\red The prison shuttle is unable to leave.") return diff --git a/code/modules/computer3/computers/robot.dm b/code/modules/computer3/computers/robot.dm index 002750b49c1..9e9e4b29fac 100644 --- a/code/modules/computer3/computers/robot.dm +++ b/code/modules/computer3/computers/robot.dm @@ -34,7 +34,7 @@ if(!interactable() || computer.z > 6) return var/dat - if (src.temp) + if(src.temp) dat = "[src.temp]

        Clear Screen" else if(screen == 0) @@ -44,10 +44,10 @@ if(screen == 1) for(var/mob/living/silicon/robot/R in mob_list) if(istype(usr, /mob/living/silicon/ai)) - if (R.connected_ai != usr) + if(R.connected_ai != usr) continue if(istype(usr, /mob/living/silicon/robot)) - if (R != usr) + if(R != usr) continue if(R.scrambledcodes) continue @@ -55,11 +55,11 @@ dat += "[R.name] |" if(R.stat) dat += " Not Responding |" - else if (!R.canmove) + else if(!R.canmove) dat += " Locked Down |" else dat += " Operating Normally |" - if (!R.canmove) + if(!R.canmove) else if(R.cell) dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |" else @@ -72,7 +72,7 @@ dat += " Slaved to [R.connected_ai.name] |" else dat += " Independent from AI |" - if (istype(usr, /mob/living/silicon)) + if(istype(usr, /mob/living/silicon)) if(issilicon(usr) && is_special_character(usr) && !R.emagged) dat += "(Hack) " dat += "([R.canmove ? "Lockdown" : "Release"]) " @@ -105,19 +105,19 @@ if(!interactable() || ..(href,href_list)) return - if ("killall" in href_list) + if("killall" in href_list) src.temp = {"Destroy Robots?

        \[Swipe ID to initiate destruction sequence\]
        Cancel"} - if ("do_killall" in href_list) + if("do_killall" in href_list) var/obj/item/weapon/card/id/I = usr.get_active_hand() - if (istype(I, /obj/item/device/pda)) + if(istype(I, /obj/item/device/pda)) var/obj/item/device/pda/pda = I I = pda.id - if (istype(I)) + if(istype(I)) if(src.check_access(I)) - if (!status) + if(!status) message_admins("\blue [key_name_admin(usr)] has initiated the global cyborg killswitch!") log_game("\blue [key_name(usr)] has initiated the global cyborg killswitch!") src.status = 1 @@ -127,23 +127,23 @@ else to_chat(usr, "\red Access Denied.") - if ("stop" in href_list) + if("stop" in href_list) src.temp = {" Stop Robot Destruction Sequence?

        Yes
        No"} - if ("stop2" in href_list) + if("stop2" in href_list) src.stop = 1 src.temp = null src.status = 0 - if ("reset" in href_list) + if("reset" in href_list) src.timeleft = 60 - if ("temp" in href_list) + if("temp" in href_list) src.temp = null - if ("screen" in href_list) + if("screen" in href_list) switch(href_list["screen"]) if("0") screen = 0 @@ -151,7 +151,7 @@ screen = 1 if("2") screen = 2 - if ("killbot" in href_list) + if("killbot" in href_list) if(computer.allowed(usr)) var/mob/living/silicon/robot/R = locate(href_list["killbot"]) if(R) @@ -169,7 +169,7 @@ else to_chat(usr, "\red Access Denied.") - if ("stopbot" in href_list) + if("stopbot" in href_list) if(computer.allowed(usr)) var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) if(R && istype(R)) // Extra sancheck because of input var references @@ -179,7 +179,7 @@ message_admins("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") R.canmove = !R.canmove - if (R.lockcharge) + if(R.lockcharge) // R.cell.charge = R.lockcharge R.lockcharge = !R.lockcharge to_chat(R, "Your lockdown has been lifted!") @@ -191,7 +191,7 @@ else to_chat(usr, "\red Access Denied.") - if ("magbot" in href_list) + if("magbot" in href_list) if(computer.allowed(usr)) var/mob/living/silicon/robot/R = locate(href_list["magbot"]) if(R) diff --git a/code/modules/computer3/computers/scanconsole.dm b/code/modules/computer3/computers/scanconsole.dm index fa88ae24b36..1ccc06bde90 100644 --- a/code/modules/computer3/computers/scanconsole.dm +++ b/code/modules/computer3/computers/scanconsole.dm @@ -279,7 +279,7 @@ var/rejuvenators = round(occupant.reagents.get_reagent_amount("inaprovaline") / REJUVENATORS_MAX * 100) status_html += "
        Rejuvenators:
        [occupant.reagents.get_reagent_amount("inaprovaline")] units
        " - if (dna_summary) + if(dna_summary) status_html += "
        Unique Enzymes :
        [uppertext(occupant.dna.unique_enzymes)]
        " status_html += "
        Unique Identifier:
        [occupant.dna.uni_identity]
        " status_html += "
        Structural Enzymes:
        [occupant.dna.struc_enzymes]
        " @@ -384,7 +384,7 @@ proc/emitter_menu() to_chat(var/dat = topic_link(src,"mode=0",", Main Menu") + "
        ") dat += "

        Radiation Emitter Settings

        " - if (viable) + if(viable) dat += topic_link(src,"pulse","Pulse Radiation") else dat += fake_link("Pulse Radiation") @@ -454,7 +454,7 @@ updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE) if("ui-f") - if (prob(20+radstrength)) + if(prob(20+radstrength)) randmutb(scanner.occupant) domutcheck(scanner.occupant,scanner) else @@ -466,8 +466,8 @@ var/se = scanner.occupant.dna.struc_enzymes var/targetblock = se_block - if (!(se_block in list(2,8,10,12)) && prob (20)) // shifts the target slightly - if (se_block <= 5) + if(!(se_block in list(2,8,10,12)) && prob (20)) // shifts the target slightly + if(se_block <= 5) targetblock++ else targetblock-- @@ -484,7 +484,7 @@ domutcheck(scanner.occupant,scanner) scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE) if("se-f") - if (prob(80-radduration)) + if(prob(80-radduration)) randmutb(scanner.occupant) domutcheck(scanner.occupant,scanner) else @@ -493,7 +493,7 @@ scanner.occupant.apply_effect((radstrength*2)+radduration, IRRADIATE) if(null) - if (prob(95)) + if(prob(95)) if(prob(75)) randmutb(scanner.occupant) else @@ -517,7 +517,7 @@ if(istype(H)) var/inap = H.reagents.get_reagent_amount("inaprovaline") // oh my *god* this section was ugly before I shortened it - if (inap < (REJUVENATORS_MAX - REJUVENATORS_INJECT)) + if(inap < (REJUVENATORS_MAX - REJUVENATORS_INJECT)) H.reagents.add_reagent("inaprovaline", REJUVENATORS_INJECT) else H.reagents.add_reagent("inaprovaline", max(REJUVENATORS_MAX - inap,0)) @@ -534,32 +534,32 @@ var/viable_occupant = (occupant && occupant.dna && !(NOCLONE in occupant.mutations)) var/mob/living/carbon/human/human_occupant = scanner.occupant - if (href_list["screen"]) // Passing a screen is only a request, we set current_screen here but it can be overridden below if necessary + if(href_list["screen"]) // Passing a screen is only a request, we set current_screen here but it can be overridden below if necessary current_screen = href_list["screen"] - if (!viable_occupant) // If there is no viable occupant only allow certain screens + if(!viable_occupant) // If there is no viable occupant only allow certain screens var/allowed_no_occupant_screens = list("mainmenu", "radsetmenu", "buffermenu") //These are the screens which will be allowed if there's no occupant - if (!(current_screen in allowed_no_occupant_screens)) + if(!(current_screen in allowed_no_occupant_screens)) href_list = new /list(0) // clear list of options current_screen = "mainmenu" - if (!current_screen) // If no screen is set default to mainmenu + if(!current_screen) // If no screen is set default to mainmenu current_screen = "mainmenu" - if (!scanner) //Is the scanner not connected? + if(!scanner) //Is the scanner not connected? scanner_status_html = "ERROR: No DNA Scanner connected." current_screen = null // blank does not exist in the switch below, so no screen will be outputted updateUsrDialog() return usr.set_machine(src) - if (href_list["locked"]) - if (scanner.occupant) + if(href_list["locked"]) + if(scanner.occupant) scanner.locked = !( scanner.locked ) //////////////////////////////////////////////////////// - if (href_list["genpulse"]) + if(href_list["genpulse"]) if(!viable_occupant)//Makes sure someone is in there (And valid) before trying anything temp_html = text("No viable occupant detected.")//More than anything, this just acts as a sanity check in case the option DOES appear for whatever reason //usr << browse(temp_html, "window=scannernew;size=550x650") @@ -574,10 +574,10 @@ var/lock_state = scanner.locked scanner.locked = 1//lock it sleep(10*radduration) - if (!scanner.occupant) + if(!scanner.occupant) temp_html = null return null - if (prob(95)) + if(prob(95)) if(prob(75)) randmutb(scanner.occupant) else @@ -591,59 +591,59 @@ scanner.locked = lock_state temp_html = null dopage(src,"screen=radsetmenu") - if (href_list["radleplus"]) + if(href_list["radleplus"]) if(!viable_occupant) temp_html = text("No viable occupant detected.") popup.set_content(temp_html) popup.open() - if (radduration < 20) + if(radduration < 20) radduration++ radduration++ dopage(src,"screen=radsetmenu") - if (href_list["radleminus"]) + if(href_list["radleminus"]) if(!viable_occupant) temp_html = text("No viable occupant detected.") popup.set_content(temp_html) popup.open() - if (radduration > 2) + if(radduration > 2) radduration-- radduration-- dopage(src,"screen=radsetmenu") - if (href_list["radinplus"]) - if (radstrength < 10) + if(href_list["radinplus"]) + if(radstrength < 10) radstrength++ dopage(src,"screen=radsetmenu") - if (href_list["radinminus"]) - if (radstrength > 1) + if(href_list["radinminus"]) + if(radstrength > 1) radstrength-- dopage(src,"screen=radsetmenu") //////////////////////////////////////////////////////// - if (href_list["unimenuplus"]) - if (ui_block < 13) + if(href_list["unimenuplus"]) + if(ui_block < 13) ui_block++ else ui_block = 1 dopage(src,"screen=unimenu") - if (href_list["unimenuminus"]) - if (ui_block > 1) + if(href_list["unimenuminus"]) + if(ui_block > 1) ui_block-- else ui_block = 13 dopage(src,"screen=unimenu") - if (href_list["unimenusubplus"]) - if (subblock < 3) + if(href_list["unimenusubplus"]) + if(subblock < 3) subblock++ else subblock = 1 dopage(src,"screen=unimenu") - if (href_list["unimenusubminus"]) - if (subblock > 1) + if(href_list["unimenusubminus"]) + if(subblock > 1) subblock-- else subblock = 3 dopage(src,"screen=unimenu") - if (href_list["unimenutargetplus"]) - if (unitarget < 15) + if(href_list["unimenutargetplus"]) + if(unitarget < 15) unitarget++ unitargethex = unitarget switch(unitarget) @@ -663,8 +663,8 @@ unitarget = 0 unitargethex = 0 dopage(src,"screen=unimenu") - if (href_list["unimenutargetminus"]) - if (unitarget > 0) + if(href_list["unimenutargetminus"]) + if(unitarget > 0) unitarget-- unitargethex = unitarget switch(unitarget) @@ -682,15 +682,15 @@ unitarget = 15 unitargethex = "F" dopage(src,"screen=unimenu") - if (href_list["uimenuset"] && href_list["uimenusubset"]) // This chunk of code updates selected block / sub-block based on click + if(href_list["uimenuset"] && href_list["uimenusubset"]) // This chunk of code updates selected block / sub-block based on click var/menuset = text2num(href_list["uimenuset"]) var/menusubset = text2num(href_list["uimenusubset"]) - if ((menuset <= 13) && (menuset >= 1)) + if((menuset <= 13) && (menuset >= 1)) ui_block = menuset - if ((menusubset <= 3) && (menusubset >= 1)) + if((menusubset <= 3) && (menusubset >= 1)) subblock = menusubset dopage(src, "unimenu") - if (href_list["unipulse"]) + if(href_list["unipulse"]) if(scanner.occupant) var/block var/newblock @@ -703,22 +703,22 @@ var/lock_state = scanner.locked scanner.locked = 1//lock it sleep(10*radduration) - if (!scanner.occupant) + if(!scanner.occupant) temp_html = null return null /// - if (prob((80 + (radduration / 2)))) + if(prob((80 + (radduration / 2)))) block = miniscrambletarget(num2text(unitarget), radstrength, radduration) newblock = null - if (subblock == 1) newblock = block + getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),2,1) + getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),3,1) - if (subblock == 2) newblock = getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),1,1) + block + getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),3,1) - if (subblock == 3) newblock = getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),1,1) + getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),2,1) + block + if(subblock == 1) newblock = block + getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),2,1) + getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),3,1) + if(subblock == 2) newblock = getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),1,1) + block + getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),3,1) + if(subblock == 3) newblock = getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),1,1) + getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),2,1) + block tstructure2 = setblock(scanner.occupant.dna.uni_identity, ui_block, newblock,3) scanner.occupant.dna.uni_identity = tstructure2 updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE) else - if (prob(20+radstrength)) + if(prob(20+radstrength)) randmutb(scanner.occupant) domutcheck(scanner.occupant,scanner) else @@ -729,61 +729,61 @@ dopage(src,"screen=unimenu") //////////////////////////////////////////////////////// - if (href_list["rejuv"]) + if(href_list["rejuv"]) if(!viable_occupant) temp_html = text("No viable occupant detected.") popup.set_content(temp_html) popup.open() else if(human_occupant) - if (human_occupant.reagents.get_reagent_amount("inaprovaline") < REJUVENATORS_MAX) - if (human_occupant.reagents.get_reagent_amount("inaprovaline") < (REJUVENATORS_MAX - REJUVENATORS_INJECT)) + if(human_occupant.reagents.get_reagent_amount("inaprovaline") < REJUVENATORS_MAX) + if(human_occupant.reagents.get_reagent_amount("inaprovaline") < (REJUVENATORS_MAX - REJUVENATORS_INJECT)) human_occupant.reagents.add_reagent("inaprovaline", REJUVENATORS_INJECT) else human_occupant.reagents.add_reagent("inaprovaline", round(REJUVENATORS_MAX - human_occupant.reagents.get_reagent_amount("inaprovaline"))) // to_chat(usr, text("Occupant now has [] units of rejuvenation in his/her bloodstream.", human_occupant.reagents.get_reagent_amount("inaprovaline"))) //////////////////////////////////////////////////////// - if (href_list["strucmenuplus"]) - if (se_block < 14) + if(href_list["strucmenuplus"]) + if(se_block < 14) se_block++ else se_block = 1 dopage(src,"screen=strucmenu") - if (href_list["strucmenuminus"]) - if (se_block > 1) + if(href_list["strucmenuminus"]) + if(se_block > 1) se_block-- else se_block = 14 dopage(src,"screen=strucmenu") - if (href_list["strucmenusubplus"]) - if (subblock < 3) + if(href_list["strucmenusubplus"]) + if(subblock < 3) subblock++ else subblock = 1 dopage(src,"screen=strucmenu") - if (href_list["strucmenusubminus"]) - if (subblock > 1) + if(href_list["strucmenusubminus"]) + if(subblock > 1) subblock-- else subblock = 3 dopage(src,"screen=strucmenu") - if (href_list["semenuset"] && href_list["semenusubset"]) // This chunk of code updates selected block / sub-block based on click (se stands for strutural enzymes) + if(href_list["semenuset"] && href_list["semenusubset"]) // This chunk of code updates selected block / sub-block based on click (se stands for strutural enzymes) var/menuset = text2num(href_list["semenuset"]) var/menusubset = text2num(href_list["semenusubset"]) - if ((menuset <= 14) && (menuset >= 1)) + if((menuset <= 14) && (menuset >= 1)) se_block = menuset - if ((menusubset <= 3) && (menusubset >= 1)) + if((menusubset <= 3) && (menusubset >= 1)) subblock = menusubset dopage(src, "strucmenu") - if (href_list["strucpulse"]) + if(href_list["strucpulse"]) var/block var/newblock var/tstructure2 var/oldblock var/lock_state = scanner.locked scanner.locked = 1//lock it - if (viable_occupant) + if(viable_occupant) block = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),subblock,1) temp_html = text("Working ... Please wait ([] Seconds)", radduration) @@ -795,18 +795,18 @@ return null /// if(viable_occupant) - if (prob((80 + (radduration / 2)))) - if ((se_block != 2 || se_block != 12 || se_block != 8 || se_block || 10) && prob (20)) + if(prob((80 + (radduration / 2)))) + if((se_block != 2 || se_block != 12 || se_block != 8 || se_block || 10) && prob (20)) oldblock = se_block block = miniscramble(block, radstrength, radduration) newblock = null - if (se_block > 1 && se_block < 5) + if(se_block > 1 && se_block < 5) se_block++ - else if (se_block > 5 && se_block < 14) + else if(se_block > 5 && se_block < 14) se_block-- - if (subblock == 1) newblock = block + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),2,1) + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),3,1) - if (subblock == 2) newblock = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),1,1) + block + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),3,1) - if (subblock == 3) newblock = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),1,1) + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),2,1) + block + if(subblock == 1) newblock = block + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),2,1) + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),3,1) + if(subblock == 2) newblock = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),1,1) + block + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),3,1) + if(subblock == 3) newblock = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),1,1) + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),2,1) + block tstructure2 = setblock(scanner.occupant.dna.struc_enzymes, se_block, newblock,3) scanner.occupant.dna.struc_enzymes = tstructure2 domutcheck(scanner.occupant,scanner) @@ -816,15 +816,15 @@ // block = miniscramble(block, radstrength, radduration) newblock = null - if (subblock == 1) newblock = block + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),2,1) + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),3,1) - if (subblock == 2) newblock = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),1,1) + block + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),3,1) - if (subblock == 3) newblock = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),1,1) + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),2,1) + block + if(subblock == 1) newblock = block + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),2,1) + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),3,1) + if(subblock == 2) newblock = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),1,1) + block + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),3,1) + if(subblock == 3) newblock = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),1,1) + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),2,1) + block tstructure2 = setblock(scanner.occupant.dna.struc_enzymes, se_block, newblock,3) scanner.occupant.dna.struc_enzymes = tstructure2 domutcheck(scanner.occupant,scanner) scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE) else - if (prob(80-radduration)) + if(prob(80-radduration)) randmutb(scanner.occupant) domutcheck(scanner.occupant,scanner) else @@ -836,21 +836,21 @@ dopage(src,"screen=strucmenu") //////////////////////////////////////////////////////// - if (href_list["b1addui"]) + if(href_list["b1addui"]) if(scanner.occupant && scanner.occupant.dna) buffer1iue = 0 buffer1 = scanner.occupant.dna.uni_identity - if (!istype(scanner.occupant,/mob/living/carbon/human)) + if(!istype(scanner.occupant,/mob/living/carbon/human)) buffer1owner = scanner.occupant.name else buffer1owner = scanner.occupant.real_name buffer1label = "Unique Identifier" buffer1type = "ui" dopage(src,"screen=buffermenu") - if (href_list["b1adduiue"]) + if(href_list["b1adduiue"]) if(scanner.occupant && scanner.occupant.dna) buffer1 = scanner.occupant.dna.uni_identity - if (!istype(scanner.occupant,/mob/living/carbon/human)) + if(!istype(scanner.occupant,/mob/living/carbon/human)) buffer1owner = scanner.occupant.name else buffer1owner = scanner.occupant.real_name @@ -858,10 +858,10 @@ buffer1type = "ui" buffer1iue = 1 dopage(src,"screen=buffermenu") - if (href_list["b2adduiue"]) + if(href_list["b2adduiue"]) if(scanner.occupant && scanner.occupant.dna) buffer2 = scanner.occupant.dna.uni_identity - if (!istype(scanner.occupant,/mob/living/carbon/human)) + if(!istype(scanner.occupant,/mob/living/carbon/human)) buffer2owner = scanner.occupant.name else buffer2owner = scanner.occupant.real_name @@ -869,10 +869,10 @@ buffer2type = "ui" buffer2iue = 1 dopage(src,"screen=buffermenu") - if (href_list["b3adduiue"]) + if(href_list["b3adduiue"]) if(scanner.occupant && scanner.occupant.dna) buffer3 = scanner.occupant.dna.uni_identity - if (!istype(scanner.occupant,/mob/living/carbon/human)) + if(!istype(scanner.occupant,/mob/living/carbon/human)) buffer3owner = scanner.occupant.name else buffer3owner = scanner.occupant.real_name @@ -880,141 +880,141 @@ buffer3type = "ui" buffer3iue = 1 dopage(src,"screen=buffermenu") - if (href_list["b2addui"]) + if(href_list["b2addui"]) if(scanner.occupant && scanner.occupant.dna) buffer2iue = 0 buffer2 = scanner.occupant.dna.uni_identity - if (!istype(scanner.occupant,/mob/living/carbon/human)) + if(!istype(scanner.occupant,/mob/living/carbon/human)) buffer2owner = scanner.occupant.name else buffer2owner = scanner.occupant.real_name buffer2label = "Unique Identifier" buffer2type = "ui" dopage(src,"screen=buffermenu") - if (href_list["b3addui"]) + if(href_list["b3addui"]) if(scanner.occupant && scanner.occupant.dna) buffer3iue = 0 buffer3 = scanner.occupant.dna.uni_identity - if (!istype(scanner.occupant,/mob/living/carbon/human)) + if(!istype(scanner.occupant,/mob/living/carbon/human)) buffer3owner = scanner.occupant.name else buffer3owner = scanner.occupant.real_name buffer3label = "Unique Identifier" buffer3type = "ui" dopage(src,"screen=buffermenu") - if (href_list["b1addse"]) + if(href_list["b1addse"]) if(scanner.occupant && scanner.occupant.dna) buffer1iue = 0 buffer1 = scanner.occupant.dna.struc_enzymes - if (!istype(scanner.occupant,/mob/living/carbon/human)) + if(!istype(scanner.occupant,/mob/living/carbon/human)) buffer1owner = scanner.occupant.name else buffer1owner = scanner.occupant.real_name buffer1label = "Structural Enzymes" buffer1type = "se" dopage(src,"screen=buffermenu") - if (href_list["b2addse"]) + if(href_list["b2addse"]) if(scanner.occupant && scanner.occupant.dna) buffer2iue = 0 buffer2 = scanner.occupant.dna.struc_enzymes - if (!istype(scanner.occupant,/mob/living/carbon/human)) + if(!istype(scanner.occupant,/mob/living/carbon/human)) buffer2owner = scanner.occupant.name else buffer2owner = scanner.occupant.real_name buffer2label = "Structural Enzymes" buffer2type = "se" dopage(src,"screen=buffermenu") - if (href_list["b3addse"]) + if(href_list["b3addse"]) if(scanner.occupant && scanner.occupant.dna) buffer3iue = 0 buffer3 = scanner.occupant.dna.struc_enzymes - if (!istype(scanner.occupant,/mob/living/carbon/human)) + if(!istype(scanner.occupant,/mob/living/carbon/human)) buffer3owner = scanner.occupant.name else buffer3owner = scanner.occupant.real_name buffer3label = "Structural Enzymes" buffer3type = "se" dopage(src,"screen=buffermenu") - if (href_list["b1clear"]) + if(href_list["b1clear"]) buffer1 = null buffer1owner = null buffer1label = null buffer1iue = null dopage(src,"screen=buffermenu") - if (href_list["b2clear"]) + if(href_list["b2clear"]) buffer2 = null buffer2owner = null buffer2label = null buffer2iue = null dopage(src,"screen=buffermenu") - if (href_list["b3clear"]) + if(href_list["b3clear"]) buffer3 = null buffer3owner = null buffer3label = null buffer3iue = null dopage(src,"screen=buffermenu") - if (href_list["b1label"]) + if(href_list["b1label"]) buffer1label = sanitize(input("New Label:","Edit Label","Infos here")) dopage(src,"screen=buffermenu") - if (href_list["b2label"]) + if(href_list["b2label"]) buffer2label = sanitize(input("New Label:","Edit Label","Infos here")) dopage(src,"screen=buffermenu") - if (href_list["b3label"]) + if(href_list["b3label"]) buffer3label = sanitize(input("New Label:","Edit Label","Infos here")) dopage(src,"screen=buffermenu") - if (href_list["b1transfer"]) - if (!scanner.occupant || (NOCLONE in scanner.occupant.mutations) || !scanner.occupant.dna) + if(href_list["b1transfer"]) + if(!scanner.occupant || (NOCLONE in scanner.occupant.mutations) || !scanner.occupant.dna) return - if (buffer1type == "ui") - if (buffer1iue) + if(buffer1type == "ui") + if(buffer1iue) scanner.occupant.real_name = buffer1owner scanner.occupant.name = buffer1owner scanner.occupant.dna.uni_identity = buffer1 updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) - else if (buffer1type == "se") + else if(buffer1type == "se") scanner.occupant.dna.struc_enzymes = buffer1 domutcheck(scanner.occupant,scanner) temp_html = "Transfered." scanner.occupant.apply_effect(rand(20,50), IRRADIATE) - if (href_list["b2transfer"]) - if (!scanner.occupant || (NOCLONE in scanner.occupant.mutations) || !scanner.occupant.dna) + if(href_list["b2transfer"]) + if(!scanner.occupant || (NOCLONE in scanner.occupant.mutations) || !scanner.occupant.dna) return - if (buffer2type == "ui") - if (buffer2iue) + if(buffer2type == "ui") + if(buffer2iue) scanner.occupant.real_name = buffer2owner scanner.occupant.name = buffer2owner scanner.occupant.dna.uni_identity = buffer2 updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) - else if (buffer2type == "se") + else if(buffer2type == "se") scanner.occupant.dna.struc_enzymes = buffer2 domutcheck(scanner.occupant,scanner) temp_html = "Transfered." scanner.occupant.apply_effect(rand(20,50), IRRADIATE) - if (href_list["b3transfer"]) - if (!scanner.occupant || (NOCLONE in scanner.occupant.mutations) || !scanner.occupant.dna) + if(href_list["b3transfer"]) + if(!scanner.occupant || (NOCLONE in scanner.occupant.mutations) || !scanner.occupant.dna) return - if (buffer3type == "ui") - if (buffer3iue) + if(buffer3type == "ui") + if(buffer3iue) scanner.occupant.real_name = buffer3owner scanner.occupant.name = buffer3owner scanner.occupant.dna.uni_identity = buffer3 updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) - else if (buffer3type == "se") + else if(buffer3type == "se") scanner.occupant.dna.struc_enzymes = buffer3 domutcheck(scanner.occupant,scanner) temp_html = "Transfered." scanner.occupant.apply_effect(rand(20,50), IRRADIATE) - if (href_list["b1injector"]) - if (injectorready) + if(href_list["b1injector"]) + if(injectorready) var/obj/item/tool/medical/dnainjector/I = new /obj/item/tool/medical/dnainjector I.dna = buffer1 I.dnatype = buffer1type I.loc = loc I.name += " ([buffer1label])" - if (buffer1iue) I.ue = buffer1owner //lazy haw haw + if(buffer1iue) I.ue = buffer1owner //lazy haw haw temp_html = "Injector created." injectorready = 0 @@ -1023,14 +1023,14 @@ else temp_html = "Replicator not ready yet." - if (href_list["b2injector"]) - if (injectorready) + if(href_list["b2injector"]) + if(injectorready) var/obj/item/tool/medical/dnainjector/I = new /obj/item/tool/medical/dnainjector I.dna = buffer2 I.dnatype = buffer2type I.loc = loc I.name += " ([buffer2label])" - if (buffer2iue) I.ue = buffer2owner //lazy haw haw + if(buffer2iue) I.ue = buffer2owner //lazy haw haw temp_html = "Injector created." injectorready = 0 @@ -1039,14 +1039,14 @@ else temp_html = "Replicator not ready yet." - if (href_list["b3injector"]) - if (injectorready) + if(href_list["b3injector"]) + if(injectorready) var/obj/item/tool/medical/dnainjector/I = new /obj/item/tool/medical/dnainjector I.dna = buffer3 I.dnatype = buffer3type I.loc = loc I.name += " ([buffer3label])" - if (buffer3iue) I.ue = buffer3owner //lazy haw haw + if(buffer3iue) I.ue = buffer3owner //lazy haw haw temp_html = "Injector created." injectorready = 0 @@ -1056,11 +1056,11 @@ temp_html = "Replicator not ready yet." //////////////////////////////////////////////////////// - if (href_list["load_disk"]) + if(href_list["load_disk"]) var/buffernum = text2num(href_list["load_disk"]) - if ((buffernum > 3) || (buffernum < 1)) + if((buffernum > 3) || (buffernum < 1)) return - if ((isnull(diskette)) || (!diskette.data) || (diskette.data == "")) + if((isnull(diskette)) || (!diskette.data) || (diskette.data == "")) return switch(buffernum) if(1) @@ -1080,11 +1080,11 @@ buffer3owner = diskette.owner temp_html = "Data loaded." - if (href_list["save_disk"]) + if(href_list["save_disk"]) var/buffernum = text2num(href_list["save_disk"]) - if ((buffernum > 3) || (buffernum < 1)) + if((buffernum > 3) || (buffernum < 1)) return - if ((isnull(diskette)) || (diskette.read_only)) + if((isnull(diskette)) || (diskette.read_only)) return switch(buffernum) if(1) @@ -1106,8 +1106,8 @@ diskette.owner = buffer3owner diskette.name = "data disk - '[buffer3owner]'" temp_html = "Data saved." - if (href_list["eject_disk"]) - if (!diskette) + if(href_list["eject_disk"]) + if(!diskette) return diskette.loc = get_turf(src) diskette = null @@ -1115,9 +1115,9 @@ temp_html = temp_header_html switch(current_screen) - if ("mainmenu") + if("mainmenu") temp_html += "

        Main Menu

        " - if (viable_occupant) //is there REALLY someone in there who can be modified? + if(viable_occupant) //is there REALLY someone in there who can be modified? temp_html += text("Modify Unique Identifier
        ", src) temp_html += text("Modify Structural Enzymes

        ", src) else @@ -1126,7 +1126,7 @@ temp_html += text("Radiation Emitter Settings

        ", src) temp_html += text("Transfer Buffer

        ", src) - if ("unimenu") + if("unimenu") if(!viable_occupant) temp_html = text("No viable occupant detected.") popup.set_content(temp_html) @@ -1141,7 +1141,7 @@ temp_html += "Modify Block
        " temp_html += "Irradiate
    " - if ("strucmenu") + if("strucmenu") if(!viable_occupant) temp_html = text("No viable occupant detected.") popup.set_content(temp_html) @@ -1155,61 +1155,61 @@ temp_html += "Modify Block
    " temp_html += "Irradiate" - if ("radsetmenu") + if("radsetmenu") temp_html = "<< Main Menu
    " temp_html += "

    Radiation Emitter Settings

    " - if (viable_occupant) + if(viable_occupant) temp_html += text("Pulse Radiation", src) else temp_html += "Pulse Radiation" temp_html += "

    Radiation Duration: - [radduration] +
    " temp_html += "Radiation Intensity: - [radstrength] +

    " - if ("buffermenu") + if("buffermenu") temp_html = "<< Main Menu
    " temp_html += "

    Transfer Buffer

    " temp_html += "

    Buffer 1:

    " - if (!(buffer1)) + if(!(buffer1)) temp_html += "Buffer Empty
    " else temp_html += text("Data: []
    ", buffer1) temp_html += text("By: []
    ", buffer1owner) temp_html += text("Label: []
    ", buffer1label) - if (viable_occupant) temp_html += text("Save : UI - UI+UE - SE
    ", src, src, src) - if (buffer1) temp_html += text("Transfer to: Occupant - Injector
    ", src, src) - //if (buffer1) temp_html += text("Isolate Block
    ", src) - if (buffer1) temp_html += "Disk: Save To | Load From
    " - if (buffer1) temp_html += text("Edit Label
    ", src) - if (buffer1) temp_html += text("Clear Buffer

    ", src) - if (!buffer1) temp_html += "
    " + if(viable_occupant) temp_html += text("Save : UI - UI+UE - SE
    ", src, src, src) + if(buffer1) temp_html += text("Transfer to: Occupant - Injector
    ", src, src) + //if(buffer1) temp_html += text("Isolate Block
    ", src) + if(buffer1) temp_html += "Disk: Save To | Load From
    " + if(buffer1) temp_html += text("Edit Label
    ", src) + if(buffer1) temp_html += text("Clear Buffer

    ", src) + if(!buffer1) temp_html += "
    " temp_html += "

    Buffer 2:

    " - if (!(buffer2)) + if(!(buffer2)) temp_html += "Buffer Empty
    " else temp_html += text("Data: []
    ", buffer2) temp_html += text("By: []
    ", buffer2owner) temp_html += text("Label: []
    ", buffer2label) - if (viable_occupant) temp_html += text("Save : UI - UI+UE - SE
    ", src, src, src) - if (buffer2) temp_html += text("Transfer to: Occupant - Injector
    ", src, src) - //if (buffer2) temp_html += text("Isolate Block
    ", src) - if (buffer2) temp_html += "Disk: Save To | Load From
    " - if (buffer2) temp_html += text("Edit Label
    ", src) - if (buffer2) temp_html += text("Clear Buffer

    ", src) - if (!buffer2) temp_html += "
    " + if(viable_occupant) temp_html += text("Save : UI - UI+UE - SE
    ", src, src, src) + if(buffer2) temp_html += text("Transfer to: Occupant - Injector
    ", src, src) + //if(buffer2) temp_html += text("Isolate Block
    ", src) + if(buffer2) temp_html += "Disk: Save To | Load From
    " + if(buffer2) temp_html += text("Edit Label
    ", src) + if(buffer2) temp_html += text("Clear Buffer

    ", src) + if(!buffer2) temp_html += "
    " temp_html += "

    Buffer 3:

    " - if (!(buffer3)) + if(!(buffer3)) temp_html += "Buffer Empty
    " else temp_html += text("Data: []
    ", buffer3) temp_html += text("By: []
    ", buffer3owner) temp_html += text("Label: []
    ", buffer3label) - if (viable_occupant) temp_html += text("Save : UI - UI+UE - SE
    ", src, src, src) - if (buffer3) temp_html += text("Transfer to: Occupant - Injector
    ", src, src) - //if (buffer3) temp_html += text("Isolate Block
    ", src) - if (buffer3) temp_html += "Disk: Save To | Load From
    " - if (buffer3) temp_html += text("Edit Label
    ", src) - if (buffer3) temp_html += text("Clear Buffer

    ", src) - if (!buffer3) temp_html += "
    " + if(viable_occupant) temp_html += text("Save : UI - UI+UE - SE
    ", src, src, src) + if(buffer3) temp_html += text("Transfer to: Occupant - Injector
    ", src, src) + //if(buffer3) temp_html += text("Isolate Block
    ", src) + if(buffer3) temp_html += "Disk: Save To | Load From
    " + if(buffer3) temp_html += text("Edit Label
    ", src) + if(buffer3) temp_html += text("Clear Buffer

    ", src) + if(!buffer3) temp_html += "
    " temp_html += temp_footer_html if(viable_occupant && !scanner_status_html && occupant) //is there REALLY someone in there? @@ -1219,7 +1219,7 @@ var/rejuvenators = round(human_occupant.reagents.get_reagent_amount("inaprovaline") / REJUVENATORS_MAX * 100) scanner_status_html += "
    Rejuvenators:
    [human_occupant.reagents.get_reagent_amount("inaprovaline")] units
    " - if (current_screen == "mainmenu") + if(current_screen == "mainmenu") scanner_status_html += "
    Unique Enzymes :
    [uppertext(occupant.dna.unique_enzymes)]
    " scanner_status_html += "
    Unique Identifier:
    [occupant.dna.uni_identity]
    " scanner_status_html += "
    Structural Enzymes:
    [occupant.dna.struc_enzymes]
    " @@ -1228,7 +1228,7 @@ var/occupant_status = "Scanner Unoccupied" if(occupant && occupant.dna) //is there REALLY someone in there? - if (!istype(occupant,/mob/living/carbon/human)) + if(!istype(occupant,/mob/living/carbon/human)) sleep(1) if(NOCLONE in occupant.mutations) occupant_status = "Invalid DNA structure" @@ -1246,14 +1246,14 @@ dat += "
    [occupant_status][scanner_status_html]
    " var/scanner_access_text = "Lock Scanner" - if (scanner.locked) + if(scanner.locked) scanner_access_text = "Unlock Scanner" dat += "Scan " - if (occupant && occupant.dna) + if(occupant && occupant.dna) dat += "[scanner_access_text] " - if (human_occupant) + if(human_occupant) dat += "Inject Rejuvenators
    " else dat += "Inject Rejuvenators
    " @@ -1261,12 +1261,12 @@ dat += "[scanner_access_text] " dat += "Inject Rejuvenators
    " - if (!isnull(diskette)) + if(!isnull(diskette)) dat += text("Eject Disk
    ", src) dat += "
    " - if (temp_html) + if(temp_html) dat += temp_html popup.set_content(dat) diff --git a/code/modules/computer3/computers/security.dm b/code/modules/computer3/computers/security.dm index c7eb0a8881b..ce6184178bf 100644 --- a/code/modules/computer3/computers/security.dm +++ b/code/modules/computer3/computers/security.dm @@ -51,26 +51,26 @@ usr.set_machine(src) scan = computer.cardslot.reader - if (computer.cardslot.dualslot) + if(computer.cardslot.dualslot) scan2 = computer.cardslot.writer if(!interactable()) return - if (computer.z > 6) - to_chat(usr, "\red Unable to establish a connection: \black You're too far away from the station!") + if(computer.z > 6) + to_chat(usr, "Unable to establish a connection: You're too far away from the station!") return var/dat - if (temp) + if(temp) dat = text("[]

    Clear Screen", temp, src) else dat = text("Confirm Identity (R): []
    ", src, (scan ? text("[]", scan.name) : "----------")) - if (computer.cardslot.dualslot) + if(computer.cardslot.dualslot) dat += text("Check Identity (W): []
    ", src, (scan2 ? text("[]", scan2.name) : "----------")) if(scan2 && !scan) dat += text("
    Insert card into reader slot to log in.

    ") - if (authenticated) + if(authenticated) switch(screen) if(1.0) dat += {" @@ -96,7 +96,7 @@ for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order)) var/crimstat = "" for(var/datum/data/record/E in data_core.security) - if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) + if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) crimstat = E.fields["criminal"] var/background switch(crimstat) @@ -126,11 +126,7 @@ dat += "
    Delete All Records

    Back" if(3.0) dat += "
    Security Record

    " - if ((istype(active1, /datum/data/record) && data_core.general.Find(active1))) - var/icon/front = new(active1.fields["photo"], dir = SOUTH) - var/icon/side = new(active1.fields["photo"], dir = WEST) - usr << browse_rsc(front, "front.png") - usr << browse_rsc(side, "side.png") + if((istype(active1, /datum/data/record) && data_core.general.Find(active1))) dat += text(" \ -
    \ Name: [active1.fields["name"]]
    \ ID: [active1.fields["id"]]
    \n \ @@ -140,11 +136,11 @@ Fingerprint: [active1.fields["fingerprint"]]
    \n \ Physical Status: [active1.fields["p_stat"]]
    \n \ Mental Status: [active1.fields["m_stat"]]
    Photo:
    \ -
    ") + Photo:
    \ + ") else dat += "General Record Lost!
    " - if ((istype(active2, /datum/data/record) && data_core.security.Find(active2))) + if((istype(active2, /datum/data/record) && data_core.security.Find(active2))) dat += text("
    \n
    Security Data

    \nCriminal Status: []
    \n
    \nMinor Crimes: []
    \nDetails: []
    \n
    \nMajor Crimes: []
    \nDetails: []
    \n
    \nImportant Notes:
    \n\t[]
    \n
    \n
    Comments/Log

    ", src, active2.fields["criminal"], src, active2.fields["mi_crim"], src, active2.fields["mi_crim_d"], src, active2.fields["ma_crim"], src, active2.fields["ma_crim_d"], src, decode(active2.fields["notes"])) var/counter = 1 while(active2.fields[text("com_[]", counter)]) @@ -219,9 +215,9 @@ What a mess.*/ Topic(href, href_list) if(!interactable() || !computer.cardslot || ..(href,href_list)) return - if (!( data_core.general.Find(active1) )) + if(!( data_core.general.Find(active1) )) active1 = null - if (!( data_core.security.Find(active2) )) + if(!( data_core.security.Find(active2) )) active2 = null switch(href_list["choice"]) // SORTING! @@ -240,13 +236,13 @@ What a mess.*/ if("Clear Screen") temp = null - if ("Return") + if("Return") screen = 1 active1 = null active2 = null if("Confirm Identity R") - if (scan) + if(scan) if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand()) computer.cardslot.remove(1) else @@ -254,12 +250,12 @@ What a mess.*/ scan = null else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) computer.cardslot.insert(I, 1) scan = I if("Confirm Identity W") - if (scan2) + if(scan2) if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand()) computer.cardslot.remove(2) else @@ -267,7 +263,7 @@ What a mess.*/ scan2 = null else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) computer.cardslot.insert(I, 2) scan2 = I @@ -278,20 +274,20 @@ What a mess.*/ active2 = null if("Log In") - if (istype(usr, /mob/living/silicon/ai)) + if(istype(usr, /mob/living/silicon/ai)) src.active1 = null src.active2 = null src.authenticated = usr.name src.rank = "AI" src.screen = 1 - else if (istype(usr, /mob/living/silicon/robot)) + else if(istype(usr, /mob/living/silicon/robot)) src.active1 = null src.active2 = null src.authenticated = usr.name var/mob/living/silicon/robot/R = usr src.rank = "[R.modtype] [R.braintype]" src.screen = 1 - else if (istype(scan, /obj/item/weapon/card/id)) + else if(istype(scan, /obj/item/weapon/card/id)) active1 = null active2 = null if(authenticate()) @@ -301,7 +297,7 @@ What a mess.*/ //RECORD FUNCTIONS if("Search Records") var/t1 = input("Search String: (Partial Name or ID or Fingerprints or Rank)", "Secure. records", null, null) as text - if ((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || !interactable())) + if((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || !interactable())) return Perp = new/list() t1 = lowertext(t1) @@ -318,7 +314,7 @@ What a mess.*/ for(var/i = 1, i<=Perp.len, i+=2) for(var/datum/data/record/E in data_core.security) var/datum/data/record/R = Perp[i] - if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) + if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) Perp[i+1] = E tempname = t1 screen = 4 @@ -328,56 +324,56 @@ What a mess.*/ active1 = null active2 = null - if ("Browse Record") + if("Browse Record") var/datum/data/record/R = locate(href_list["d_rec"]) var/S = locate(href_list["d_rec"]) - if (!( data_core.general.Find(R) )) + if(!( data_core.general.Find(R) )) temp = "Record Not Found!" else for(var/datum/data/record/E in data_core.security) - if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) S = E active1 = R active2 = S screen = 3 -/* if ("Search Fingerprints") +/* if("Search Fingerprints") var/t1 = input("Search String: (Fingerprint)", "Secure. records", null, null) as text - if ((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!interactable()) && (!istype(usr, /mob/living/silicon)))) + if((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!interactable()) && (!istype(usr, /mob/living/silicon)))) return active1 = null active2 = null t1 = lowertext(t1) for(var/datum/data/record/R in data_core.general) - if (lowertext(R.fields["fingerprint"]) == t1) + if(lowertext(R.fields["fingerprint"]) == t1) active1 = R - if (!( active1 )) + if(!( active1 )) temp = text("Could not locate record [].", t1) else for(var/datum/data/record/E in data_core.security) - if ((E.fields["name"] == active1.fields["name"] || E.fields["id"] == active1.fields["id"])) + if((E.fields["name"] == active1.fields["name"] || E.fields["id"] == active1.fields["id"])) active2 = E screen = 3 */ - if ("Print Record") - if (!( printing )) + if("Print Record") + if(!( printing )) printing = 1 var/datum/data/record/record1 = null var/datum/data/record/record2 = null - if ((istype(active1, /datum/data/record) && data_core.general.Find(active1))) + if((istype(active1, /datum/data/record) && data_core.general.Find(active1))) record1 = active1 - if ((istype(active2, /datum/data/record) && data_core.security.Find(active2))) + if((istype(active2, /datum/data/record) && data_core.security.Find(active2))) record2 = active2 sleep(50) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( computer.loc ) P.info = "
    Security Record

    " - if (record1) + if(record1) P.info += text("Name: [] ID: []
    \nSex: []
    \nAge: []
    \nFingerprint: []
    \nPhysical Status: []
    \nMental Status: []
    ", record1.fields["name"], record1.fields["id"], record1.fields["sex"], record1.fields["age"], record1.fields["fingerprint"], record1.fields["p_stat"], record1.fields["m_stat"]) P.name = text("Security Record ([])", record1.fields["name"]) else P.info += "General Record Lost!
    " P.name = "Security Record" - if (record2) + if(record2) P.info += text("
    \n
    Security Data

    \nCriminal Status: []
    \n
    \nMinor Crimes: []
    \nDetails: []
    \n
    \nMajor Crimes: []
    \nDetails: []
    \n
    \nImportant Notes:
    \n\t[]
    \n
    \n
    Comments/Log

    ", record2.fields["criminal"], record2.fields["mi_crim"], record2.fields["mi_crim_d"], record2.fields["ma_crim"], record2.fields["ma_crim_d"], decode(record2.fields["notes"])) var/counter = 1 while(record2.fields[text("com_[]", counter)]) @@ -389,47 +385,47 @@ What a mess.*/ printing = null computer.updateUsrDialog() //RECORD DELETE - if ("Delete All Records") + if("Delete All Records") temp = "" temp += "Are you sure you wish to delete all Security records?
    " temp += "Yes
    " temp += "No" - if ("Purge All Records") + if("Purge All Records") for(var/datum/data/record/R in data_core.security) qdel(R) temp = "All Security records deleted." - if ("Add Entry") - if (!( istype(active2, /datum/data/record) )) + if("Add Entry") + if(!( istype(active2, /datum/data/record) )) return var/a2 = active2 var/t1 = sanitize(copytext(input("Add Comment:", "Secure. records", null, null) as message,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return var/counter = 1 while(active2.fields[text("com_[]", counter)]) counter++ active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
    [t1]") - if ("Delete Record (ALL)") - if (active1) + if("Delete Record (ALL)") + if(active1) temp = "
    Are you sure you wish to delete the record (ALL)?
    " temp += "Yes
    " temp += "No" - if ("Delete Record (Security)") - if (active2) + if("Delete Record (Security)") + if(active2) temp = "
    Are you sure you wish to delete the record (Security Portion Only)?
    " temp += "Yes
    " temp += "No" - if ("Delete Entry") - if ((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])])) + if("Delete Entry") + if((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])])) active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" //RECORD CREATE - if ("New Record (Security)") - if ((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) ))) + if("New Record (Security)") + if((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) ))) var/datum/data/record/R = new /datum/data/record() R.fields["name"] = active1.fields["name"] R.fields["id"] = active1.fields["id"] @@ -444,7 +440,7 @@ What a mess.*/ active2 = R screen = 3 - if ("New Record (General)") + if("New Record (General)") var/datum/data/record/G = new /datum/data/record() G.fields["name"] = "New Record" G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) @@ -461,72 +457,72 @@ What a mess.*/ active2 = null //FIELD FUNCTIONS - if ("Edit Field") + if("Edit Field") var/a1 = active1 var/a2 = active2 switch(href_list["field"]) if("name") - if (istype(active1, /datum/data/record)) + if(istype(active1, /datum/data/record)) var/t1 = input("Please input name:", "Secure. records", active1.fields["name"], null) as text - if ((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon)))) || active1 != a1) + if((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon)))) || active1 != a1) return active1.fields["name"] = t1 if("id") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) var/t1 = sanitize(copytext(input("Please input id:", "Secure. records", active1.fields["id"], null) as text,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1)) return active1.fields["id"] = t1 if("fingerprint") - if (istype(active1, /datum/data/record)) + if(istype(active1, /datum/data/record)) var/t1 = sanitize(copytext(input("Please input fingerprint hash:", "Secure. records", active1.fields["fingerprint"], null) as text,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1)) return active1.fields["fingerprint"] = t1 if("sex") - if (istype(active1, /datum/data/record)) - if (active1.fields["sex"] == "Male") + if(istype(active1, /datum/data/record)) + if(active1.fields["sex"] == "Male") active1.fields["sex"] = "Female" else active1.fields["sex"] = "Male" if("age") - if (istype(active1, /datum/data/record)) + if(istype(active1, /datum/data/record)) var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1)) return active1.fields["age"] = t1 if("mi_crim") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) var/t1 = sanitize(copytext(input("Please input minor crimes list:", "Secure. records", active2.fields["mi_crim"], null) as text,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["mi_crim"] = t1 if("mi_crim_d") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) var/t1 = sanitize(copytext(input("Please summarize minor crimes:", "Secure. records", active2.fields["mi_crim_d"], null) as message,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["mi_crim_d"] = t1 if("ma_crim") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) var/t1 = sanitize(copytext(input("Please input major crimes list:", "Secure. records", active2.fields["ma_crim"], null) as text,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["ma_crim"] = t1 if("ma_crim_d") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) var/t1 = sanitize(copytext(input("Please summarize major crimes:", "Secure. records", active2.fields["ma_crim_d"], null) as message,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["ma_crim_d"] = t1 if("notes") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) var/t1 = trim(sanitize(copytext(input("Please summarize minor crimes:", "Secure. records", active2.fields["mi_crim_d"], null) as message,1,MAX_MESSAGE_LEN))) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["notes"] = t1 if("criminal") - if (istype(active2, /datum/data/record)) + if(istype(active2, /datum/data/record)) temp = "
    Criminal Status:
    " temp += "
      " temp += "
    • None
    • " @@ -538,7 +534,7 @@ What a mess.*/ if("rank") var/list/L = list( "Head of Personnel", "Captain", "AI" ) //This was so silly before the change. Now it actually works without beating your head against the keyboard. /N - if ((istype(active1, /datum/data/record) && L.Find(rank))) + if((istype(active1, /datum/data/record) && L.Find(rank))) temp = "
      Rank:
      " temp += "
        " for(var/rank in joblist) @@ -547,9 +543,9 @@ What a mess.*/ else alert(usr, "You do not have the required rank to do this!") if("species") - if (istype(active1, /datum/data/record)) + if(istype(active1, /datum/data/record)) var/t1 = sanitize(copytext(input("Please enter race:", "General records", active1.fields["species"], null) as message,1,MAX_MESSAGE_LEN)) - if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1)) + if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1)) return active1.fields["species"] = t1 @@ -557,14 +553,14 @@ What a mess.*/ else//To properly clear as per clear screen. temp=null switch(href_list["choice"]) - if ("Change Rank") - if (active1) + if("Change Rank") + if(active1) active1.fields["rank"] = href_list["rank"] if(href_list["rank"] in joblist) active1.fields["real_rank"] = href_list["real_rank"] - if ("Change Criminal Status") - if (active2) + if("Change Criminal Status") + if(active2) switch(href_list["criminal2"]) if("none") @@ -580,18 +576,18 @@ What a mess.*/ for(var/mob/living/carbon/human/H in mob_list) H.sec_hud_set_security_status() - if ("Delete Record (Security) Execute") - if (active2) + if("Delete Record (Security) Execute") + if(active2) qdel(active2) - if ("Delete Record (ALL) Execute") - if (active1) + if("Delete Record (ALL) Execute") + if(active1) for(var/datum/data/record/R in data_core.medical) - if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) + if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) qdel(R) else qdel(active1) - if (active2) + if(active2) qdel(active2) else temp = "This function does not appear to be working at the moment. Our apologies." diff --git a/code/modules/computer3/computers/shuttle.dm b/code/modules/computer3/computers/shuttle.dm index 236de564868..70bdb133137 100644 --- a/code/modules/computer3/computers/shuttle.dm +++ b/code/modules/computer3/computers/shuttle.dm @@ -13,12 +13,12 @@ attackby(var/obj/item/card/W as obj, var/mob/user as mob, params) if(stat & (BROKEN|NOPOWER)) return - if ((!( istype(W, /obj/item/card) ) || !( ticker ) || emergency_shuttle.location != 1 || !( user ))) return - if (istype(W, /obj/item/card/id)||istype(W, /obj/item/device/pda)) - if (istype(W, /obj/item/device/pda)) + if((!( istype(W, /obj/item/card) ) || !( ticker ) || emergency_shuttle.location != 1 || !( user ))) return + if(istype(W, /obj/item/card/id)||istype(W, /obj/item/device/pda)) + if(istype(W, /obj/item/device/pda)) var/obj/item/device/pda/pda = W W = pda.id - if (!W:access) //no access + if(!W:access) //no access to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") return @@ -38,7 +38,7 @@ if("Authorize") src.authorized -= W:registered_name src.authorized += W:registered_name - if (src.auth_need - src.authorized.len > 0) + if(src.auth_need - src.authorized.len > 0) message_admins("[key_name_admin(user)] has authorized early shuttle launch") log_game("[user.ckey] has authorized early shuttle launch") to_chat(world, text("\blue Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len)) @@ -63,7 +63,7 @@ return emag_act(user as mob) - if (!emagged) + if(!emagged) var/choice = alert(user, "Would you like to launch the shuttle?","Shuttle control", "Launch", "Cancel") if(!emagged && emergency_shuttle.location == 1) diff --git a/code/modules/computer3/computers/specops_shuttle.dm b/code/modules/computer3/computers/specops_shuttle.dm index 8281a30479f..fa64036857d 100644 --- a/code/modules/computer3/computers/specops_shuttle.dm +++ b/code/modules/computer3/computers/specops_shuttle.dm @@ -55,9 +55,9 @@ var/specops_shuttle_timeleft = 0 specops_shuttle_moving_to_centcom = 0 specops_shuttle_at_station = 1 - if (specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return + if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return - if (!specops_can_move()) + if(!specops_can_move()) to_chat(usr, "\red The Special Operations shuttle is unable to leave.") return @@ -179,7 +179,7 @@ var/specops_shuttle_timeleft = 0 to_chat(user, "\red Access Denied.") return - if (sent_strike_team == 0) + if(sent_strike_team == 0) to_chat(usr, "\red The strike team has not yet deployed.") return @@ -188,7 +188,7 @@ var/specops_shuttle_timeleft = 0 user.set_machine(src) var/dat - if (temp) + if(temp) dat = temp else dat += {" @@ -208,19 +208,19 @@ var/specops_shuttle_timeleft = 0 if(..()) return - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) + if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) - if (href_list["sendtodock"]) + if(href_list["sendtodock"]) if(!specops_shuttle_at_station|| specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return to_chat(usr, "\blue Central Command will not allow the Special Operations shuttle to return.") return - else if (href_list["sendtostation"]) + else if(href_list["sendtostation"]) if(specops_shuttle_at_station || specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return - if (!specops_can_move()) + if(!specops_can_move()) to_chat(usr, "\red The Special Operations shuttle is unable to leave.") return @@ -238,7 +238,7 @@ var/specops_shuttle_timeleft = 0 spawn(0) specops_process() - else if (href_list["mainmenu"]) + else if(href_list["mainmenu"]) temp = null add_fingerprint(usr) diff --git a/code/modules/computer3/computers/station_alert.dm b/code/modules/computer3/computers/station_alert.dm index 850bfc83c5b..f026f36a8bb 100644 --- a/code/modules/computer3/computers/station_alert.dm +++ b/code/modules/computer3/computers/station_alert.dm @@ -16,18 +16,18 @@ return var/dat = "Current Station Alerts\n" dat += "Close

        " - for (var/cat in src.alarms) + for(var/cat in src.alarms) dat += text("[]
        \n", cat) var/list/L = src.alarms[cat] - if (L.len) - for (var/alarm in L) + if(L.len) + for(var/alarm in L) var/list/alm = L[alarm] var/area/A = alm[1] var/list/sources = alm[3] dat += "" dat += "• " dat += "[A.name]" - if (sources.len > 1) + if(sources.len > 1) dat += text(" - [] sources", sources.len) dat += "
        \n" else @@ -49,20 +49,20 @@ proc/triggerAlarm(var/class, area/A, var/O, var/alarmsource) var/list/L = src.alarms[class] - for (var/I in L) - if (I == A.name) + for(var/I in L) + if(I == A.name) var/list/alarm = L[I] var/list/sources = alarm[3] - if (!(alarmsource in sources)) + if(!(alarmsource in sources)) sources += alarmsource return 1 var/obj/machinery/camera/C = null var/list/CL = null - if (O && istype(O, /list)) + if(O && istype(O, /list)) CL = O - if (CL.len == 1) + if(CL.len == 1) C = CL[1] - else if (O && istype(O, /obj/machinery/camera)) + else if(O && istype(O, /obj/machinery/camera)) C = O L[A.name] = list(A, (C) ? C : O, list(alarmsource)) return 1 @@ -71,13 +71,13 @@ proc/cancelAlarm(var/class, area/A as area, obj/origin) var/list/L = src.alarms[class] var/cleared = 0 - for (var/I in L) - if (I == A.name) + for(var/I in L) + if(I == A.name) var/list/alarm = L[I] var/list/srcs = alarm[3] - if (origin in srcs) + if(origin in srcs) srcs -= origin - if (srcs.len == 0) + if(srcs.len == 0) cleared = 1 L -= I return !cleared @@ -86,7 +86,7 @@ process() var/active_alarms = 0 - for (var/cat in src.alarms) + for(var/cat in src.alarms) var/list/L = src.alarms[cat] if(L.len) active_alarms = 1 if(active_alarms) diff --git a/code/modules/computer3/computers/syndicate_specops_shuttle.dm b/code/modules/computer3/computers/syndicate_specops_shuttle.dm index f490cd3c822..c9a61b2dfad 100644 --- a/code/modules/computer3/computers/syndicate_specops_shuttle.dm +++ b/code/modules/computer3/computers/syndicate_specops_shuttle.dm @@ -55,9 +55,9 @@ var/syndicate_elite_shuttle_timeleft = 0 syndicate_elite_shuttle_moving_to_mothership = 0 syndicate_elite_shuttle_at_station = 1 - if (syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return + if(syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return - if (!syndicate_elite_can_move()) + if(!syndicate_elite_can_move()) to_chat(usr, "\red The Syndicate Elite shuttle is unable to leave.") return @@ -192,7 +192,7 @@ var/syndicate_elite_shuttle_timeleft = 0 to_chat(user, "\red Access Denied.") return -// if (sent_syndicate_strike_team == 0) +// if(sent_syndicate_strike_team == 0) // to_chat(usr, "\red The strike team has not yet deployed.") // return @@ -201,7 +201,7 @@ var/syndicate_elite_shuttle_timeleft = 0 user.set_machine(src) var/dat - if (temp) + if(temp) dat = temp else dat = {"Location: [syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership ? "Departing for [station_name] in ([syndicate_elite_shuttle_timeleft] seconds.)":syndicate_elite_shuttle_at_station ? "Station":"Dock"]
        @@ -220,19 +220,19 @@ var/syndicate_elite_shuttle_timeleft = 0 if(..()) return - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) + if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) - if (href_list["sendtodock"]) + if(href_list["sendtodock"]) if(!syndicate_elite_shuttle_at_station|| syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return to_chat(usr, "\blue The Syndicate will not allow the Elite Squad shuttle to return.") return - else if (href_list["sendtostation"]) + else if(href_list["sendtostation"]) if(syndicate_elite_shuttle_at_station || syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return - if (!specops_can_move()) + if(!specops_can_move()) to_chat(usr, "\red The Syndicate Elite shuttle is unable to leave.") return @@ -251,7 +251,7 @@ var/syndicate_elite_shuttle_timeleft = 0 syndicate_elite_process() - else if (href_list["mainmenu"]) + else if(href_list["mainmenu"]) temp = null add_fingerprint(usr) 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/computer3/laptop.dm b/code/modules/computer3/laptop.dm index dd4f73914b6..e32375a457c 100644 --- a/code/modules/computer3/laptop.dm +++ b/code/modules/computer3/laptop.dm @@ -101,14 +101,15 @@ var/obj/item/weapon/card/id/card if(C.reader) card = C.reader + C.remove_reader(usr) else if(C.writer) card = C.writer + C.remove_writer(usr) else to_chat(usr, "There is nothing to remove from the laptop card port.") return to_chat(usr, "You remove [card] from the laptop.") - C.remove(card) /obj/machinery/computer3/laptop diff --git a/code/modules/computer3/lapvend.dm b/code/modules/computer3/lapvend.dm index 8383981046d..ee436ee3cc0 100644 --- a/code/modules/computer3/lapvend.dm +++ b/code/modules/computer3/lapvend.dm @@ -29,7 +29,7 @@ /obj/machinery/lapvend/blob_act() - if (prob(50)) + if(prob(50)) spawn(0) qdel(src) return @@ -82,7 +82,7 @@ dat += "Total: [total()]
        " if(cardreader == 1) dat += "Card Reader: (single) (50)
        " - else if (cardreader == 2) + else if(cardreader == 2) dat += "Card Reader: (double) (125)
        " else dat += "Card Reader: None
        " @@ -106,9 +106,9 @@ dat += "Network card: Powernet (25)
        " else dat += "Network card: None
        " - if (power == 0) + if(power == 0) dat += "Power source: Regular
        " - else if (power == 1) + else if(power == 1) dat += "Power source: Extended (175)
        " else dat += "Power source: Unreal (250)
        " @@ -133,41 +133,41 @@ /obj/machinery/lapvend/Topic(href, href_list) - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) + if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) usr.set_machine(src) switch(href_list["choice"]) if("single_add") cardreader = 1 - if ("dual_add") + if("dual_add") cardreader = 2 - if ("floppy_add") + if("floppy_add") floppy = 1 - if ("radio_add") + if("radio_add") radionet = 1 - if ("camnet_add") + if("camnet_add") camera = 1 - if ("area_add") + if("area_add") network = 1 - if ("prox_add") + if("prox_add") network = 2 - if ("cable_add") + if("cable_add") network = 3 - if ("high_add") + if("high_add") power = 1 - if ("super_add") + if("super_add") power = 2 - if ("single_rem" || "dual_rem") + if("single_rem" || "dual_rem") cardreader = 0 - if ("floppy_rem") + if("floppy_rem") floppy = 0 - if ("radio_rem") + if("radio_rem") radionet = 0 - if ("camnet_rem") + if("camnet_rem") camera = 0 - if ("area_rem" || "prox_rem" || "cable_rem") + if("area_rem" || "prox_rem" || "cable_rem") network = 0 - if ("high_rem" || "super_rem") + if("high_rem" || "super_rem") power = 0 if("vend") @@ -194,23 +194,23 @@ newlap.spawn_parts += (/obj/item/part/computer/networking/radio) if(camera == 1) newlap.spawn_parts += (/obj/item/part/computer/networking/cameras) - if (network == 1) + if(network == 1) newlap.spawn_parts += (/obj/item/part/computer/networking/area) - if (network == 2) + if(network == 2) newlap.spawn_parts += (/obj/item/part/computer/networking/prox) - if (network == 3) + if(network == 3) newlap.spawn_parts += (/obj/item/part/computer/networking/cable) - if (power == 1) + if(power == 1) qdel(newlap.battery) newlap.battery = new /obj/item/weapon/stock_parts/cell/high(newlap) - if (power == 2) + if(power == 2) qdel(newlap.battery) newlap.battery = new /obj/item/weapon/stock_parts/cell/super(newlap) newlap.spawn_parts() /obj/machinery/lapvend/proc/scan_card(var/obj/item/weapon/card/I) - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) var/obj/item/weapon/card/id/C = I visible_message("[usr] swipes a card through [src].") if(vendor_account) @@ -262,11 +262,11 @@ network = 0 power = 0 else - to_chat(usr, "\icon[src]You don't have that much money!") + to_chat(usr, "[bicon(src)]You don't have that much money!") else - to_chat(usr, "\icon[src]Unable to access account. Check security settings and try again.") + to_chat(usr, "[bicon(src)]Unable to access account. Check security settings and try again.") else - to_chat(usr, "\icon[src]Unable to access vendor account. Please record the machine ID and call CentComm Support.") + to_chat(usr, "[bicon(src)]Unable to access vendor account. Please record the machine ID and call CentComm Support.") /obj/machinery/lapvend/proc/total() var/total = 0 @@ -312,7 +312,7 @@ newlap.spawn_files += (/datum/file/program/communications) if((access_medical in C.access) || (access_forensics_lockers in C.access)) //Gives detective the medical records program, but not the crew monitoring one. newlap.spawn_files += (/datum/file/program/med_data) - if (access_medical in C.access) + if(access_medical in C.access) newlap.spawn_files += (/datum/file/program/crew) if(access_engine in C.access) newlap.spawn_files += (/datum/file/program/powermon) @@ -359,7 +359,7 @@ /obj/machinery/lapvend/proc/reimburse(var/obj/item/weapon/card/I) - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) var/obj/item/weapon/card/id/C = I visible_message("[usr] swipes a card through [src].") if(vendor_account) @@ -405,6 +405,6 @@ power = 0 else - to_chat(usr, "\icon[src]Unable to access account. Check security settings and try again.") + to_chat(usr, "[bicon(src)]Unable to access account. Check security settings and try again.") else - to_chat(usr, "\icon[src]Unable to access vendor account. Please record the machine ID and call CentComm Support.") + to_chat(usr, "[bicon(src)]Unable to access vendor account. Please record the machine ID and call CentComm Support.") diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm new file mode 100644 index 00000000000..901de314edc --- /dev/null +++ b/code/modules/crafting/craft.dm @@ -0,0 +1,340 @@ +/datum/personal_crafting + var/busy + var/viewing_category = 1 //typical powergamer starting on the Weapons tab + var/list/categories = list(CAT_WEAPON,CAT_AMMO,CAT_ROBOT,CAT_FOOD,CAT_MISC,CAT_PRIMAL) + + + + + +/* This is what procs do: + get_environment - gets a list of things accessable for crafting by user + get_surroundings - takes a list of things and makes a list of key-types to values-amounts of said type in the list + check_contents - takes a recipe and a key-type list and checks if said recipe can be done with available stuff + check_tools - takes recipe, a key-type list, and a user and checks if there are enough tools to do the stuff, checks bugs one level deep + construct_item - takes a recipe and a user, call all the checking procs, calls do_after, checks all the things again, calls del_reqs, creates result, calls CheckParts of said result with argument being list returned by deel_reqs + del_reqs - takes recipe and a user, loops over the recipes reqs var and tries to find everything in the list make by get_environment and delete it/add to parts list, then returns the said list +*/ + + + + +/datum/personal_crafting/proc/check_contents(datum/crafting_recipe/R, list/contents) + main_loop: + for(var/A in R.reqs) + var/needed_amount = R.reqs[A] + for(var/B in contents) + if(ispath(B, A)) + if(contents[B] >= R.reqs[A]) + continue main_loop + else + needed_amount -= contents[B] + if(needed_amount <= 0) + continue main_loop + else + continue + return 0 + for(var/A in R.chem_catalists) + if(contents[A] < R.chem_catalists[A]) + return 0 + return 1 + +/datum/personal_crafting/proc/get_environment(mob/user) + . = list() + . += user.r_hand + . += user.l_hand + if(!istype(user.loc, /turf)) + return + var/list/L = block(get_step(user, SOUTHWEST), get_step(user, NORTHEAST)) + for(var/A in L) + var/turf/T = A + if(T.Adjacent(user)) + . += T.contents + + +/datum/personal_crafting/proc/get_surroundings(mob/user) + . = list() + for(var/obj/item/I in get_environment(user)) + if(istype(I, /obj/item/stack)) + var/obj/item/stack/S = I + .[I.type] += S.amount + else + if(istype(I, /obj/item/weapon/reagent_containers)) + var/obj/item/weapon/reagent_containers/RC = I + if(RC.flags & OPENCONTAINER) + for(var/datum/reagent/A in RC.reagents.reagent_list) + .[A.type] += A.volume + .[I.type] += 1 + +/datum/personal_crafting/proc/check_tools(mob/user, datum/crafting_recipe/R, list/contents) + if(!R.tools.len) + return 1 + var/list/possible_tools = list() + for(var/obj/item/I in user.contents) + if(istype(I, /obj/item/weapon/storage)) + for(var/obj/item/SI in I.contents) + possible_tools += SI.type + possible_tools += I.type + possible_tools += contents + + main_loop: + for(var/A in R.tools) + for(var/I in possible_tools) + if(ispath(I,A)) + continue main_loop + return 0 + return 1 + +/datum/personal_crafting/proc/construct_item(mob/user, datum/crafting_recipe/R) + for(var/A in R.parts) + var/list/contents = get_surroundings(user) + var/send_feedback = 1 + if(check_contents(R, contents)) + if(check_tools(user, R, contents)) + if(do_after(user, R.time, target = user)) + contents = get_surroundings(user) + if(!check_contents(R, contents)) + return ", missing component." + if(!check_tools(user, R, contents)) + return ", missing tool." + var/list/parts = del_reqs(R, user) + var/atom/movable/I = new R.result (get_turf(user.loc)) + I.CheckParts(parts, R) + if(send_feedback) + feedback_add_details("object_crafted","[I.type]") + return 0 + return "." + return ", missing tool." + return ", missing component." + + +/*Del reqs works like this: + Loop over reqs var of the recipe + Set var amt to the value current cycle req is pointing to, its amount of type we need to delete + Get var/surroundings list of things accessable to crafting by get_environment() + Check the type of the current cycle req + If its reagent then do a while loop, inside it try to locate() reagent containers, inside such containers try to locate needed reagent, if there isnt remove thing from surroundings + If there is enough reagent in the search result then delete the needed amount, create the same type of reagent with the same data var and put it into deletion list + If there isnt enough take all of that reagent from the container, put into deletion list, substract the amt var by the volume of reagent, remove the container from surroundings list and keep searching + While doing above stuff check deletion list if it already has such reagnet, if yes merge instead of adding second one + If its stack check if it has enough amount + If yes create new stack with the needed amount and put in into deletion list, substract taken amount from the stack + If no put all of the stack in the deletion list, substract its amount from amt and keep searching + While doing above stuff check deletion list if it already has such stack type, if yes try to merge them instead of adding new one + If its anything else just locate() in in the list in a while loop, each find --s the amt var and puts the found stuff in deletion loop + Then do a loop over parts var of the recipe + Do similar stuff to what we have done above, but now in deletion list, until the parts conditions are satisfied keep taking from the deletion list and putting it into parts list for return + After its done loop over deletion list and delete all the shit that wasnt taken by parts loop + del_reqs return the list of parts resulting object will recieve as argument of CheckParts proc, on the atom level it will add them all to the contents, on all other levels it calls ..() and does whatever is needed afterwards but from contents list already +*/ + +/datum/personal_crafting/proc/del_reqs(datum/crafting_recipe/R, mob/user) + var/list/surroundings + var/list/Deletion = list() + . = list() + var/data + var/amt + main_loop: + for(var/A in R.reqs) + amt = R.reqs[A] + surroundings = get_environment(user) + surroundings -= Deletion + if(ispath(A, /datum/reagent)) + var/datum/reagent/RG = new A + var/datum/reagent/RGNT + while(amt > 0) + var/obj/item/weapon/reagent_containers/RC = locate() in surroundings + RG = RC.reagents.get_reagent(A) + if(RG) + if(!locate(RG.type) in Deletion) + Deletion += new RG.type() + if(RG.volume > amt) + RG.volume -= amt + data = RG.data + RC.reagents.conditional_update(RC) + RG = locate(RG.type) in Deletion + RG.volume = amt + RG.data += data + continue main_loop + else + surroundings -= RC + amt -= RG.volume + RC.reagents.reagent_list -= RG + RC.reagents.conditional_update(RC) + RGNT = locate(RG.type) in Deletion + RGNT.volume += RG.volume + RGNT.data += RG.data + qdel(RG) + else + surroundings -= RC + else if(ispath(A, /obj/item/stack)) + var/obj/item/stack/S + var/obj/item/stack/SD + while(amt > 0) + S = locate(A) in surroundings + if(S.amount >= amt) + if(!locate(S.type) in Deletion) + SD = new S.type() + Deletion += SD + S.use(amt) + SD = locate(S.type) in Deletion + SD.amount += amt + continue main_loop + else + amt -= S.amount + if(!locate(S.type) in Deletion) + Deletion += S + else + data = S.amount + S = locate(S.type) in Deletion + S.amount += data + surroundings -= S + else + var/atom/movable/I + while(amt > 0) + I = locate(A) in surroundings + Deletion += I + surroundings -= I + amt-- + var/list/partlist = list(R.parts.len) + for(var/M in R.parts) + partlist[M] = R.parts[M] + for(var/A in R.parts) + if(istype(A, /datum/reagent)) + var/datum/reagent/RG = locate(A) in Deletion + if(RG.volume > partlist[A]) + RG.volume = partlist[A] + . += RG + Deletion -= RG + continue + else if(istype(A, /obj/item/stack)) + var/obj/item/stack/ST = locate(A) in Deletion + if(ST.amount > partlist[A]) + ST.amount = partlist[A] + . += ST + Deletion -= ST + continue + else + while(partlist[A] > 0) + var/atom/movable/AM = locate(A) in Deletion + . += AM + Deletion -= AM + partlist[A] -= 1 + while(Deletion.len) + var/DL = Deletion[Deletion.len] + Deletion.Cut(Deletion.len) + qdel(DL) + +/datum/personal_crafting/proc/craft(mob/user) + if(user.incapacitated() || user.lying || istype(user.loc, /obj/mecha)) + return + var/list/surroundings = get_surroundings(user) + var/dat = "

        Crafting menu

        " + if(busy) + dat += "
        " + dat += "Crafting in progress...
        " + else + dat += "<--" + dat += " [categories[prev_cat()]] |" + dat += " [categories[viewing_category]] " + dat += "| [categories[next_cat()]] " + dat += "-->

        " + + dat += "
        " + + //Filter the recipes we can craft to the top + var/list/can_craft = list() + var/list/cant_craft = list() + for(var/datum/crafting_recipe/R in crafting_recipes) + if(R.category != categories[viewing_category]) + continue + if(check_contents(R, surroundings)) + can_craft += R + else + cant_craft += R + + for(var/datum/crafting_recipe/R in can_craft) + dat += build_recipe_text(R, surroundings) + for(var/datum/crafting_recipe/R in cant_craft) + dat += build_recipe_text(R, surroundings) + + + dat += "
        " + + var/datum/browser/popup = new(user, "crafting", "Crafting", 500, 500) + popup.set_content(dat) + popup.open() + return + +/datum/personal_crafting/Topic(href, href_list) + if(usr.stat || usr.lying) + return + if(href_list["make"]) + var/datum/crafting_recipe/TR = locate(href_list["make"]) + busy = 1 + craft(usr) + var/fail_msg = construct_item(usr, TR) + if(!fail_msg) + usr << "[TR.name] constructed." + else + usr << "Construction failed[fail_msg]" + busy = 0 + craft(usr) + if(href_list["forwardCat"]) + viewing_category = next_cat() + usr << "Category is now [categories[viewing_category]]." + craft(usr) + if(href_list["backwardCat"]) + viewing_category = prev_cat() + usr << "Category is now [categories[viewing_category]]." + craft(usr) + +//Next works nicely with modular arithmetic +/datum/personal_crafting/proc/next_cat() + . = viewing_category % categories.len + 1 + +//Previous can go fuck itself +/datum/personal_crafting/proc/prev_cat() + if(viewing_category == categories.len) + . = viewing_category-1 + else + . = viewing_category % categories.len - 1 + if(. <= 0) + . = categories.len + +/datum/personal_crafting/proc/build_recipe_text(datum/crafting_recipe/R, list/contents) + . = "" + var/name_text = "" + var/req_text = "" + var/tool_text = "" + var/catalist_text = "" + if(check_contents(R, contents)) + name_text ="[R.name]" + + else + name_text = "[R.name]" + + if(name_text) + for(var/A in R.reqs) + if(ispath(A, /obj)) + var/obj/O = A + req_text += " [R.reqs[A]] [initial(O.name)]" + else if(ispath(A, /datum/reagent)) + var/datum/reagent/RE = A + req_text += " [R.reqs[A]] [initial(RE.name)]" + + if(R.chem_catalists.len) + catalist_text += ", Catalysts:" + for(var/C in R.chem_catalists) + if(ispath(C, /datum/reagent)) + var/datum/reagent/RE = C + catalist_text += " [R.chem_catalists[C]] [initial(RE.name)]" + + if(R.tools.len) + tool_text += ", Tools:" + for(var/O in R.tools) + if(ispath(O, /obj)) + var/obj/T = O + tool_text += " [R.tools[O]] [initial(T.name)]" + + . = "[name_text][req_text][tool_text][catalist_text]
        " diff --git a/code/modules/crafting/guncrafting.dm b/code/modules/crafting/guncrafting.dm index 8a9d5803529..a7309803c1b 100644 --- a/code/modules/crafting/guncrafting.dm +++ b/code/modules/crafting/guncrafting.dm @@ -71,7 +71,7 @@ ..() if(istype(I, /obj/item/stack/packageWrap)) var/obj/item/stack/packageWrap/C = I - if (C.use(5)) + if(C.use(5)) var/obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/W = new /obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised user.unEquip(src) user.put_in_hands(W) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index d8586b6c0d8..60d830a1c89 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -1,4 +1,4 @@ -/datum/table_recipe +/datum/crafting_recipe var/name = "" //in-game display name var/reqs[] = list() //type paths of items consumed associated with how many are needed var/result //type path of item resulting from this craft @@ -7,14 +7,15 @@ var/parts[] = list() //type paths of items that will be placed in the result var/chem_catalists[] = list() //like tools but for reagents var/fruit[] = list() //grown products required by the recipe + var/category = CAT_MISC // Recipe category -/datum/table_recipe/proc/AdjustChems(var/obj/resultobj as obj) +/datum/crafting_recipe/proc/AdjustChems(var/obj/resultobj as obj) //This proc is to replace the make_food proc of recipes from microwaves and such that are being converted to table crafting recipes. //Use it to handle the removal of reagents after the food has been created (like removing toxins from a salad made with ambrosia) //If a recipe does not require it's chems adjusted, don't bother declaring this for the recipe, as it will call this placeholder return -/datum/table_recipe/IED +/datum/crafting_recipe/IED name = "IED" result = /obj/item/weapon/grenade/iedcasing/filled reqs = list(/datum/reagent/fuel = 50, @@ -23,8 +24,9 @@ /obj/item/weapon/reagent_containers/food/drinks/cans = 1) parts = list(/obj/item/weapon/reagent_containers/food/drinks/cans = 1) time = 80 + category = CAT_WEAPON -/datum/table_recipe/stunprod +/datum/crafting_recipe/stunprod name = "Stunprod" result = /obj/item/weapon/melee/baton/cattleprod reqs = list(/obj/item/weapon/restraints/handcuffs/cable = 1, @@ -33,8 +35,9 @@ /obj/item/weapon/stock_parts/cell = 1) time = 80 parts = list(/obj/item/weapon/stock_parts/cell = 1) + category = CAT_WEAPON -/datum/table_recipe/ed209 +/datum/crafting_recipe/ed209 name = "ED209" result = /mob/living/simple_animal/bot/ed209 reqs = list(/obj/item/robot_parts/robot_suit = 1, @@ -50,8 +53,9 @@ /obj/item/robot_parts/r_arm = 1) tools = list(/obj/item/weapon/weldingtool, /obj/item/weapon/screwdriver) time = 120 + category = CAT_ROBOT -/datum/table_recipe/secbot +/datum/crafting_recipe/secbot name = "Secbot" result = /mob/living/simple_animal/bot/secbot reqs = list(/obj/item/device/assembly/signaler = 1, @@ -61,16 +65,18 @@ /obj/item/robot_parts/r_arm = 1) tools = list(/obj/item/weapon/weldingtool) time = 120 + category = CAT_ROBOT -/datum/table_recipe/cleanbot +/datum/crafting_recipe/cleanbot name = "Cleanbot" result = /mob/living/simple_animal/bot/cleanbot reqs = list(/obj/item/weapon/reagent_containers/glass/bucket = 1, /obj/item/device/assembly/prox_sensor = 1, /obj/item/robot_parts/r_arm = 1) time = 80 + category = CAT_ROBOT -/datum/table_recipe/floorbot +/datum/crafting_recipe/floorbot name = "Floorbot" result = /mob/living/simple_animal/bot/floorbot reqs = list(/obj/item/weapon/storage/toolbox/mechanical = 1, @@ -78,8 +84,9 @@ /obj/item/device/assembly/prox_sensor = 1, /obj/item/robot_parts/r_arm = 1) time = 80 + category = CAT_ROBOT -/datum/table_recipe/medbot +/datum/crafting_recipe/medbot name = "Medbot" result = /mob/living/simple_animal/bot/medbot reqs = list(/obj/item/device/healthanalyzer = 1, @@ -87,8 +94,9 @@ /obj/item/device/assembly/prox_sensor = 1, /obj/item/robot_parts/r_arm = 1) time = 80 + category = CAT_ROBOT -/datum/table_recipe/flamethrower +/datum/crafting_recipe/flamethrower name = "Flamethrower" result = /obj/item/weapon/flamethrower reqs = list(/obj/item/weapon/weldingtool = 1, @@ -96,8 +104,9 @@ /obj/item/stack/rods = 2) tools = list(/obj/item/weapon/screwdriver) time = 20 + category = CAT_WEAPON -/datum/table_recipe/meteorshot +/datum/crafting_recipe/meteorshot name = "Meteorshot Shell" result = /obj/item/ammo_casing/shotgun/meteorshot reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, @@ -105,8 +114,9 @@ /obj/item/weapon/stock_parts/manipulator = 2) tools = list(/obj/item/weapon/screwdriver) time = 5 + category = CAT_AMMO -/datum/table_recipe/pulseslug +/datum/crafting_recipe/pulseslug name = "Pulse Slug Shell" result = /obj/item/ammo_casing/shotgun/pulseslug reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, @@ -114,16 +124,18 @@ /obj/item/weapon/stock_parts/micro_laser/ultra = 1) tools = list(/obj/item/weapon/screwdriver) time = 5 + category = CAT_AMMO -/datum/table_recipe/dragonsbreath +/datum/crafting_recipe/dragonsbreath name = "Dragonsbreath Shell" result = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, /datum/reagent/phosphorus = 5,) tools = list(/obj/item/weapon/screwdriver) time = 5 + category = CAT_AMMO -/datum/table_recipe/frag12 +/datum/crafting_recipe/frag12 name = "FRAG-12 Shell" result = /obj/item/ammo_casing/shotgun/frag12 reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, @@ -132,8 +144,9 @@ /datum/reagent/facid = 5,) tools = list(/obj/item/weapon/screwdriver) time = 5 + category = CAT_AMMO -/datum/table_recipe/ionslug +/datum/crafting_recipe/ionslug name = "Ion Scatter Shell" result = /obj/item/ammo_casing/shotgun/ion reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, @@ -141,8 +154,9 @@ /obj/item/weapon/stock_parts/subspace/crystal = 1) tools = list(/obj/item/weapon/screwdriver) time = 5 + category = CAT_AMMO -/datum/table_recipe/improvisedslug +/datum/crafting_recipe/improvisedslug name = "Improvised Shotgun Shell" result = /obj/item/ammo_casing/shotgun/improvised reqs = list(/obj/item/weapon/grenade/chem_grenade = 1, @@ -151,16 +165,18 @@ /datum/reagent/fuel = 10) tools = list(/obj/item/weapon/screwdriver) time = 5 + category = CAT_AMMO -/datum/table_recipe/improvisedslugoverload +/datum/crafting_recipe/improvisedslugoverload name = "Overload Improvised Shell" result = /obj/item/ammo_casing/shotgun/improvised/overload reqs = list(/obj/item/ammo_casing/shotgun/improvised = 1, /datum/reagent/blackpowder = 5) tools = list(/obj/item/weapon/screwdriver) time = 5 + category = CAT_AMMO -/datum/table_recipe/laserslug +/datum/crafting_recipe/laserslug name = "Laser Slug Shell" result = /obj/item/ammo_casing/shotgun/laserslug reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, @@ -168,8 +184,9 @@ /obj/item/weapon/stock_parts/micro_laser/high = 1) tools = list(/obj/item/weapon/screwdriver) time = 5 + category = CAT_AMMO -/datum/table_recipe/ishotgun +/datum/crafting_recipe/ishotgun name = "Improvised Shotgun" result = /obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised reqs = list(/obj/item/weaponcrafting/receiver = 1, @@ -178,8 +195,9 @@ /obj/item/stack/packageWrap = 5,) tools = list(/obj/item/weapon/screwdriver) time = 200 + category = CAT_WEAPON -/datum/table_recipe/spooky_camera +/datum/crafting_recipe/spooky_camera name = "Camera Obscura" result = /obj/item/device/camera/spooky time = 15 @@ -187,29 +205,31 @@ /datum/reagent/holywater = 10) parts = list(/obj/item/device/camera = 1) -/datum/table_recipe/notreallysoap +/datum/crafting_recipe/notreallysoap name = "Homemade Soap" result = /obj/item/weapon/soap/ducttape time = 100 reqs = list(/obj/item/stack/tape_roll = 1, /datum/reagent/liquidgibs = 10) -/datum/table_recipe/garrote +/datum/crafting_recipe/garrote name = "Makeshift Garrote" result = /obj/item/weapon/twohanded/garrote/improvised time = 15 reqs = list(/obj/item/stack/sheet/wood = 1, /obj/item/stack/cable_coil = 5) tools = list(/obj/item/weapon/kitchen/knife) // Gotta carve the wood into handles + category = CAT_WEAPON -/datum/table_recipe/makeshift_bolt +/datum/crafting_recipe/makeshift_bolt name = "Makeshift Bolt" result = /obj/item/weapon/arrow/rod time = 15 reqs = list(/obj/item/stack/rods = 1) tools = list(/obj/item/weapon/weldingtool) + category = CAT_AMMO -/datum/table_recipe/crossbow +/datum/crafting_recipe/crossbow name = "Powered Crossbow" result = /obj/item/weapon/gun/throw/crossbow time = 300 @@ -219,10 +239,11 @@ /obj/item/stack/sheet/wood = 5) tools = list(/obj/item/weapon/weldingtool, /obj/item/weapon/screwdriver) + category = CAT_WEAPON -/datum/table_recipe/glove_balloon +/datum/crafting_recipe/glove_balloon name = "Latex Glove Balloon" result = /obj/item/latexballon time = 15 reqs = list(/obj/item/clothing/gloves/color/latex = 1, - /obj/item/stack/cable_coil = 5) \ No newline at end of file + /obj/item/stack/cable_coil = 5) diff --git a/code/modules/crafting/table.dm b/code/modules/crafting/table.dm deleted file mode 100644 index 19ea37c3866..00000000000 --- a/code/modules/crafting/table.dm +++ /dev/null @@ -1,225 +0,0 @@ -#define TABLECRAFT_MAX_ITEMS 30 - -/obj/structure/table - var/list/table_contents = list() - -/obj/structure/table/MouseDrop(atom/over) - if(over != usr) - return - interact(usr) - -/obj/structure/table/proc/check_contents(datum/table_recipe/R) - check_table() - main_loop: - if(R.fruit) - for(var/A in R.fruit) - for(var/B in table_contents) - if(B == A) - if(table_contents[B] >= R.fruit[A]) - continue main_loop - return 0 - for(var/A in R.reqs) - for(var/B in table_contents) - if(ispath(B, A)) - if(table_contents[B] >= R.reqs[A]) - continue main_loop - return 0 - for(var/A in R.chem_catalists) - if(table_contents[A] < R.chem_catalists[A]) - return 0 - return 1 - -/obj/structure/table/proc/check_table() - table_contents = list() - for(var/obj/item/I in loc) - if(istype(I, /obj/item/stack)) - var/obj/item/stack/S = I - table_contents[I.type] += S.amount - else if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/grown)) - var/obj/item/weapon/reagent_containers/food/snacks/grown/G = I - if(G.seed && G.seed.kitchen_tag) - table_contents[G.seed.kitchen_tag] += 1 - else - if(istype(I, /obj/item/weapon/reagent_containers)) - var/obj/item/weapon/reagent_containers/RC = I - if(RC.flags & OPENCONTAINER) - for(var/datum/reagent/A in RC.reagents.reagent_list) - table_contents[A.type] += A.volume - table_contents[I.type] += 1 - -/obj/structure/table/proc/check_tools(mob/user, datum/table_recipe/R) - if(!R.tools.len) - return 1 - var/list/possible_tools = list() - for(var/obj/item/I in user.contents) - if(istype(I, /obj/item/weapon/storage)) - for(var/obj/item/SI in I.contents) - possible_tools += SI.type - else - possible_tools += I.type - possible_tools += table_contents - var/i = R.tools.len - var/I - for(var/A in R.tools) - I = possible_tools.Find(A) - if(I) - possible_tools.Cut(I, I+1) - i-- - else - break - return !i - -/obj/structure/table/proc/construct_item(mob/user, datum/table_recipe/R) - check_table() - if(check_contents(R) && check_tools(user, R)) - if(do_after(user, R.time, target = src)) - if(!check_contents(R) || !check_tools(user, R)) - return 0 - var/atom/movable/I = new R.result (loc) - var/list/parts = del_reqs(R, I) - for(var/A in parts) - if(istype(A, /obj/item)) - var/atom/movable/B = A - B.loc = I - else - if(!I.reagents) - I.reagents = new /datum/reagents() - I.reagents.reagent_list.Add(A) - I.CheckParts() - R.AdjustChems(I) - return 1 - return 0 - -/obj/structure/table/proc/del_reqs(datum/table_recipe/R, atom/movable/resultobject) - var/list/Deletion = list() - var/amt - var/reagenttransfer = 0 - if(istype(resultobject,/obj/item/weapon/reagent_containers)) - reagenttransfer = 1 - if(R.fruit) - for(var/A in R.fruit) - amt = R.fruit[A] - fruit_loop: //ha - for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in loc) - if(G.seed && G.seed.kitchen_tag && (G.seed.kitchen_tag == A)) - amt-- - G.loc = null //remove it from the table loc so that we don't locate the same fruit every time - if(reagenttransfer) - G.reagents.trans_to(resultobject, G.reagents.total_volume) - qdel(G) - if(amt <= 0) - break fruit_loop - for(var/A in R.reqs) - amt = R.reqs[A] - if(ispath(A, /obj/item/stack)) - var/obj/item/stack/S - stack_loop: - for(var/B in table_contents) - if(ispath(B, A)) - while(amt > 0) - S = locate(B) in loc - if(S.amount >= amt) - S.use(amt) - break stack_loop - else - amt -= S.amount - qdel(S) - else if(ispath(A, /obj/item)) - var/obj/item/I - item_loop: - for(var/B in table_contents) - if(ispath(B, A)) - while(amt > 0) - I = locate(B) in loc - Deletion.Add(I) - I.loc = null //remove it from the table loc so that we don't locate the same item every time (will be relocated inside the crafted item in construct_item()) - amt-- - if(reagenttransfer && istype(I,/obj/item/weapon/reagent_containers)) - var/obj/item/weapon/reagent_containers/RC = I - RC.reagents.trans_to(resultobject, RC.reagents.total_volume) - break item_loop - else - var/datum/reagent/RG = new A - reagent_loop: - for(var/B in table_contents) - if(ispath(B, /obj/item/weapon/reagent_containers)) - var/obj/item/RC = locate(B) in loc - if(RC.reagents.has_reagent(RG.id, amt)) - if(reagenttransfer) - RC.reagents.trans_id_to(resultobject,RG.id, amt) - else - RC.reagents.remove_reagent(RG.id, amt) - RG.volume = amt - Deletion.Add(RG) - break reagent_loop - else if(RC.reagents.has_reagent(RG.id)) - Deletion.Add(RG) - RG.volume += RC.reagents.get_reagent_amount(RG.id) - amt -= RC.reagents.get_reagent_amount(RG.id) - if(reagenttransfer) - RC.reagents.trans_id_to(resultobject,RG.id, RG.volume) - else - RC.reagents.del_reagent(RG.id) - - var/list/partlist = list(R.parts.len) - for(var/M in R.parts) - partlist[M] = R.parts[M] - deletion_loop: - for(var/B in Deletion) - for(var/A in R.parts) - if(istype(B, A)) - if(partlist[A] > 0) //do we still need a part like that? - partlist[A] -= 1 - continue deletion_loop - Deletion.Remove(B) - qdel(B) - - return Deletion - -/obj/structure/table/interact(mob/user) - if(user.stat || user.lying || !Adjacent(user)) - return - check_table() - if(!table_contents.len) - return - user.face_atom(src) - var/dat = "

        Crafting menu

        " - dat += "
        " - if(busy) - dat += "Crafting in progress...
        " - else - for(var/datum/table_recipe/R in table_recipes) - if(check_contents(R)) - dat += "[R.name]
        " - dat += "" - - var/datum/browser/popup = new(user, "table", "Table", 300, 300) - popup.set_content(dat) - popup.open() - return - -/obj/structure/table/Topic(href, href_list) - if(usr.stat || !Adjacent(usr) || usr.lying) - return - if(href_list["make"]) - if(!check_table_space()) - to_chat(usr, "The table is too crowded.") - return - var/datum/table_recipe/TR = locate(href_list["make"]) - busy = 1 - interact(usr) - if(construct_item(usr, TR)) - to_chat(usr, "[TR.name] constructed.") - else - to_chat(usr, "Construction failed.") - busy = 0 - interact(usr) - -/obj/structure/table/proc/check_table_space() - var/Item_amount = 0 - for(var/obj/item/I in loc) - Item_amount++ - if(Item_amount <= TABLECRAFT_MAX_ITEMS) //is the table crowded? - return 1 - - #undef TABLECRAFT_MAX_ITEMS \ No newline at end of file diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index ab8670b3b05..c7b9b3abdb6 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -10,6 +10,9 @@ ////////// Usable Items ////////// ////////////////////////////////// +/obj/item/device/fluff + var/used = 0 + /obj/item/device/fluff/tattoo_gun // Generic tattoo gun, make subtypes for different folks name = "dispoable tattoo pen" desc = "A cheap plastic tattoo application pen." @@ -17,8 +20,7 @@ icon_state = "tatgun" force = 0 throwforce = 0 - w_class = 1.0 - var/used = 0 + w_class = 1 var/tattoo_name = "tiger stripe tattoo" // Tat name for visible messages var/tattoo_icon = "Tiger Body" // body_accessory.dmi, new icons defined in sprite_accessories.dm var/tattoo_r = 1 // RGB values for the body markings @@ -84,6 +86,28 @@ ..() update_icon() +/obj/item/device/fluff/tattoo_gun/elliot_cybernetic_tat + desc = "A cheap plastic tattoo application pen.
        This one seems heavily used." + tattoo_name = "circuitry tattoo" + tattoo_icon = "Elliot Circuit Tattoo" + tattoo_r = 48 + tattoo_g = 138 + tattoo_b = 176 + +/obj/item/device/fluff/tattoo_gun/elliot_cybernetic_tat/attack_self(mob/user as mob) + if(!used) + var/ink_color = input("Please select an ink color.", "Tattoo Ink Color", rgb(tattoo_r, tattoo_g, tattoo_b)) as color|null + if(ink_color && !(user.incapacitated() || used) ) + tattoo_r = hex2num(copytext(ink_color, 2, 4)) + tattoo_g = hex2num(copytext(ink_color, 4, 6)) + tattoo_b = hex2num(copytext(ink_color, 6, 8)) + + to_chat(user, "You change the color setting on the [src].") + + update_icon() + + else + to_chat(user, "The [src] is out of ink!") /obj/item/weapon/claymore/fluff // MrBarrelrolll: Maximus Greenwood name = "Greenwood's Blade" @@ -92,7 +116,7 @@ sharp = 0 edge = 0 -/obj/item/weapon/claymore/fluff/IsShield() +/obj/item/weapon/claymore/fluff/hit_reaction() return 0 /obj/item/weapon/crowbar/fluff/zelda_creedy_1 // Zomgponies: Griffin Rowley @@ -171,6 +195,82 @@ icon_state = "jello_guitar" item_state = "jello_guitar" +/obj/item/fluff/wingler_comb + name = "blue comb" + desc = "A blue comb, it looks like it was made to groom a Tajaran's fur." + icon = 'icons/obj/custom_items.dmi' + icon_state = "wingler_comb" + attack_verb = list("combed") + hitsound = 'sound/weapons/tap.ogg' + force = 0 + throwforce = 0 + w_class = 2 + var/used = 0 + +/obj/item/fluff/wingler_comb/attack_self(mob/user) + if(used) + return + + var/mob/living/carbon/human/target = user + if(!istype(target) || target.get_species() != "Tajaran") // Only catbeasts, kthnx. + return + + if(target.change_body_accessory("Jay Wingler Tail")) + to_chat(target, "You comb your tail with the [src].") + used = 1 + +#define USED_MOD_HELM 1 +#define USED_MOD_SUIT 2 + +/obj/item/device/fluff/shadey_plasman_modkit + name = "plasmaman suit modkit" + desc = "A kit containing nanites that are able to modify the look of a plasmaman suit and helmet without exposing the wearer to hostile environments." + icon_state = "modkit" + w_class = 2 + force = 0 + throwforce = 0 + +/obj/item/device/fluff/shadey_plasman_modkit/afterattack(atom/target, mob/user, proximity) + if(!proximity || !ishuman(user) || user.lying) + return + var/mob/living/carbon/human/H = user + + if(istype(target, /obj/item/clothing/head/helmet/space/eva/plasmaman)) + if(used & USED_MOD_HELM) + to_chat(H, "The kit's helmet modifier has already been used.") + return + to_chat(H, "You modify the appearance of [target].") + used |= USED_MOD_HELM + + var/obj/item/clothing/head/helmet/space/eva/plasmaman/P = target + P.name = "plasma containment helmet" + P.desc = "A purpose-built containment helmet designed to keep plasma in, and everything else out." + P.icon_state = "plasmaman_halo_helmet[P.on]" + P.base_state = "plasmaman_halo_helmet" + + if(P == H.head) + H.update_inv_head() + return + if(istype(target, /obj/item/clothing/suit/space/eva/plasmaman)) + if(used & USED_MOD_SUIT) + to_chat(user, "The kit's suit modifier has already been used.") + return + to_chat(H, "You modify the appearance of [target].") + used |= USED_MOD_SUIT + + var/obj/item/clothing/suit/space/eva/plasmaman/P = target + P.name = "plasma containment suit" + P.desc = "A feminine containment suit designed to keep plasma in, and everything else out. It's even got an overskirt." + P.icon_state = "plasmaman_halo" + + if(P == H.wear_suit) + H.update_inv_wear_suit() + return + to_chat(user, "You can't modify [target]!") + +#undef USED_MOD_HELM +#undef USED_MOD_SUIT + ////////////////////////////////// //////////// Clothing //////////// ////////////////////////////////// @@ -212,6 +312,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" @@ -220,8 +322,10 @@ icon_state = "kidosvest" item_state = "kidosvest" ignore_suitadjust = 1 - action_button_name = null + actions_types = list() adjust_flavour = null + species_fit = null + sprite_sheets = null /obj/item/clothing/suit/fluff/kluys // Kluys: Cripty Pandaen name = "Nano Fibre Jacket" @@ -259,6 +363,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" @@ -331,8 +437,10 @@ icon_state = "fox_jacket" item_state = "fox_jacket" ignore_suitadjust = 1 - action_button_name = null + actions_types = list() adjust_flavour = null + species_fit = null + sprite_sheets = null /obj/item/clothing/under/fluff/fox name = "Aeronautics Jumpsuit" @@ -381,28 +489,27 @@ icon_state = "chronx_hood" item_state = "chronx_hood" flags = HEADCOVERSEYES | BLOCKHAIR - action_button_name = "Transform Hood" + actions_types = list(/datum/action/item_action/toggle) var/adjusted = 0 /obj/item/clothing/head/fluff/chronx/ui_action_click() adjust() -/obj/item/clothing/head/fluff/chronx/verb/adjust() - set name = "Transform Hood" - set category = "Object" - set src in usr - if(isliving(usr) && !usr.incapacitated()) - if(adjusted) - icon_state = initial(icon_state) - item_state = initial(item_state) - to_chat(usr, "You untransform \the [src].") - adjusted = 0 - else - icon_state += "_open" - item_state += "_open" - to_chat(usr, "You transform \the [src].") - adjusted = 1 - usr.update_inv_head() +/obj/item/clothing/head/fluff/chronx/proc/adjust() + if(adjusted) + icon_state = initial(icon_state) + item_state = initial(item_state) + to_chat(usr, "You untransform \the [src].") + adjusted = 0 + else + icon_state += "_open" + item_state += "_open" + to_chat(usr, "You transform \the [src].") + adjusted = 1 + usr.update_inv_head() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() /obj/item/clothing/suit/chaplain_hoodie/fluff/chronx //chronx100: Hughe O'Splash name = "Cthulhu's Robes" @@ -410,23 +517,11 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "chronx_robe" item_state = "chronx_robe" - flags = ONESIZEFITSALL - action_button_name = "Transform Robes" + flags_size = ONESIZEFITSALL + actions_types = list(/datum/action/item_action/toggle) adjust_flavour = "untransform" ignore_suitadjust = 0 -/obj/item/clothing/suit/chaplain_hoodie/fluff/chronx/New() - ..() - verbs -= /obj/item/clothing/suit/verb/openjacket - -/obj/item/clothing/suit/chaplain_hoodie/fluff/chronx/verb/adjust() - set name = "Transform Robes" - set category = "Object" - set src in usr - if(!istype(usr, /mob/living)) - return - adjustsuit(usr) - /obj/item/clothing/shoes/black/fluff/chronx //chronx100: Hughe O'Splash name = "Cthulhu's Boots" desc = "Boots worn by the worshipers of Cthulhu. You see a name inscribed in blood on the inside: Hughe O'Splash" @@ -440,6 +535,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,26 +552,5 @@ item_state = "elliot_windbreaker_open" adjust_flavour = "unzip" suit_adjusted = 1 - -/obj/item/device/fluff/tattoo_gun/elliot_cybernetic_tat - desc = "A cheap plastic tattoo application pen.
        This one seems heavily used." - tattoo_name = "circuitry tattoo" - tattoo_icon = "Elliot Circuit Tattoo" - tattoo_r = 48 - tattoo_g = 138 - tattoo_b = 176 - -/obj/item/device/fluff/tattoo_gun/elliot_cybernetic_tat/attack_self(mob/user as mob) - if(!used) - var/ink_color = input("Please select an ink color.", "Tattoo Ink Color", rgb(tattoo_r, tattoo_g, tattoo_b)) as color|null - if(ink_color && !(user.incapacitated() || used) ) - tattoo_r = hex2num(copytext(ink_color, 2, 4)) - tattoo_g = hex2num(copytext(ink_color, 4, 6)) - tattoo_b = hex2num(copytext(ink_color, 6, 8)) - - to_chat(user, "You change the color setting on the [src].") - - update_icon() - - else - to_chat(user, "The [src] is out of ink!") \ No newline at end of file + species_fit = null + sprite_sheets = null diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm index d0b350b9b1e..345bf6e164e 100644 --- a/code/modules/customitems/item_spawning.dm +++ b/code/modules/customitems/item_spawning.dm @@ -48,7 +48,7 @@ to_chat(M, "Your [Item.name] has been added to your [M.back.name].") if(ok == 0) for(var/obj/item/weapon/storage/S in M.contents) // Try to place it in any item that can store stuff, on the mob. - if (S.contents.len < S.storage_slots) + if(S.contents.len < S.storage_slots) Item.loc = S ok = 1 to_chat(M, "Your [Item.name] has been added to your [S.name].") @@ -58,7 +58,7 @@ if(newname) Item.name = newname - if (ok == 0) // Finally, since everything else failed, place it on the ground + if(ok == 0) // Finally, since everything else failed, place it on the ground Item.loc = get_turf(M.loc) HackProperties(Item,propadjust) diff --git a/code/modules/detective_work/evidence.dm b/code/modules/detective_work/evidence.dm index 4654e0ab665..6f62a7eecac 100644 --- a/code/modules/detective_work/evidence.dm +++ b/code/modules/detective_work/evidence.dm @@ -21,6 +21,10 @@ if(!istype(I) || I.anchored == 1) return + if(istype(I, /obj/item/weapon/storage/box)) + to_chat(user, "This box is too big to fit in the evidence bag.") + return + if(istype(I, /obj/item/weapon/evidencebag)) to_chat(user, "You find putting an evidence bag in another evidence bag to be slightly absurd.") return 1 //now this is podracing diff --git a/code/modules/detective_work/scanner.dm b/code/modules/detective_work/scanner.dm index e959df37989..58c1c31a3b8 100644 --- a/code/modules/detective_work/scanner.dm +++ b/code/modules/detective_work/scanner.dm @@ -7,7 +7,7 @@ desc = "Used to remotely scan objects and biomass for DNA and fingerprints. Can print a report of the findings." icon = 'icons/goonstation/objects/objects.dmi' icon_state = "detscanner" - w_class = 3.0 + w_class = 3 item_state = "electronic" flags = CONDUCT | NOBLUDGEON slot_flags = SLOT_BELT @@ -18,39 +18,39 @@ /obj/item/device/detective_scanner/attack_self(var/mob/user) var/search = input(user, "Enter name, fingerprint or blood DNA.", "Find record", "") - if (!search || user.stat || user.incapacitated()) + if(!search || user.stat || user.incapacitated()) return search = lowertext(search) var/name - var/fingerprint - var/dna + var/fingerprint = "FINGERPRINT NOT FOUND" + var/dna = "BLOOD DNA NOT FOUND" // I really, really wish I didn't have to split this into two seperate loops. But the datacore is awful. - for (var/record in data_core.general) + for(var/record in data_core.general) var/datum/data/record/S = record - if(search == lowertext(S.fields["fingerprint"]) || search == lowertext(S.fields["name"])) + if(S && (search == lowertext(S.fields["fingerprint"]) || search == lowertext(S.fields["name"]))) name = S.fields["name"] fingerprint = S.fields["fingerprint"] continue - for (var/record in data_core.medical) + for(var/record in data_core.medical) var/datum/data/record/M = record - if (search == lowertext(M.fields["b_dna"]) || name == M.fields["name"]) + if(M && ( search == lowertext(M.fields["b_dna"]) || name == M.fields["name"]) ) dna = M.fields["b_dna"] - if(!fingerprint) // We have searched by DNA, and do not have the relevant information from the security records. + if(fingerprint == "FINGERPRINT NOT FOUND") // We have searched by DNA, and do not have the relevant information from the fingerprint records. name = M.fields["name"] - for (var/gen_record in data_core.general) + for(var/gen_record in data_core.general) var/datum/data/record/S = gen_record - if(name == S.fields["name"]) + if(S && (name == S.fields["name"])) fingerprint = S.fields["fingerprint"] continue continue - if(name && fingerprint && dna) + if(name) to_chat(user, "Match found in station records: [name]
        \ Fingerprint: [fingerprint]
        \ Blood DNA: [dna]") @@ -132,7 +132,7 @@ if(ishuman(A)) var/mob/living/carbon/human/H = A - if (istype(H.dna, /datum/dna) && !H.gloves) + if(istype(H.dna, /datum/dna) && !H.gloves) fingerprints += md5(H.dna.uni_identity) else if(!ismob(A)) @@ -170,7 +170,7 @@ found_something = 1 // Blood - if (blood && blood.len) + if(blood && blood.len) sleep(30) add_log("Blood:") found_something = 1 @@ -220,4 +220,4 @@ CRASH("[src] \ref[src] is adding a log when it was never put in scanning mode!") /proc/get_timestamp() - return time2text(world.time + 432000, ":ss") \ No newline at end of file + return time2text(world.time + 432000, ":ss") diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index 7448d3da352..5ea69f25c55 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -49,7 +49,7 @@ log transactions if(linked_db && ( (linked_db.stat & NOPOWER) || !linked_db.activated ) ) linked_db = null authenticated_account = null - src.visible_message("\red \icon[src] [src] buzzes rudely, \"Connection to remote database lost.\"") + src.visible_message("\red [bicon(src)] [src] buzzes rudely, \"Connection to remote database lost.\"") updateDialog() if(ticks_left_timeout > 0) @@ -209,7 +209,9 @@ log transactions dat += "Unable to connect to accounts database, please retry and if the issue persists contact Nanotrasen IT support." reconnect_database() - user << browse(dat,"window=atm;size=550x650") + var/datum/browser/popup = new(user, "atm", name, 550, 650) + popup.set_content(dat) + popup.open(0) else user << browse(null,"window=atm") @@ -225,7 +227,7 @@ log transactions var/target_account_number = text2num(href_list["target_acc_number"]) var/transfer_purpose = href_list["purpose"] if(linked_db.charge_to_account(target_account_number, authenticated_account.owner_name, transfer_purpose, machine_id, transfer_amount)) - to_chat(usr, "\icon[src]Funds transfer successful.") + to_chat(usr, "[bicon(src)]Funds transfer successful.") authenticated_account.money -= transfer_amount //create an entry in the account transaction log @@ -238,10 +240,10 @@ log transactions T.amount = "([transfer_amount])" authenticated_account.transaction_log.Add(T) else - to_chat(usr, "\icon[src]Funds transfer failed.") + to_chat(usr, "[bicon(src)]Funds transfer failed.") else - to_chat(usr, "\icon[src]You don't have enough funds to do that!") + to_chat(usr, "[bicon(src)]You don't have enough funds to do that!") if("view_screen") view_screen = text2num(href_list["view_screen"]) if("change_security_level") @@ -275,11 +277,11 @@ log transactions T.time = worldtime2text() failed_account.transaction_log.Add(T) else - to_chat(usr, "\red \icon[src] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.") + to_chat(usr, "\red [bicon(src)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.") previous_account_number = tried_account_num playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1) else - to_chat(usr, "\red \icon[src] incorrect pin/account combination entered.") + to_chat(usr, "\red [bicon(src)] incorrect pin/account combination entered.") number_incorrect_tries = 0 else playsound(src, 'sound/machines/twobeep.ogg', 50, 1) @@ -295,7 +297,7 @@ log transactions T.time = worldtime2text() authenticated_account.transaction_log.Add(T) - to_chat(usr, "\blue \icon[src] Access granted. Welcome user '[authenticated_account.owner_name].'") + to_chat(usr, "\blue [bicon(src)] Access granted. Welcome user '[authenticated_account.owner_name].'") previous_account_number = tried_account_num if("withdrawal") @@ -323,7 +325,7 @@ log transactions T.time = worldtime2text() authenticated_account.transaction_log.Add(T) else - to_chat(usr, "\icon[src]You don't have enough funds to do that!") + to_chat(usr, "[bicon(src)]You don't have enough funds to do that!") if("balance_statement") if(authenticated_account) if(world.timeofday < lastprint + PRINT_DELAY) @@ -364,7 +366,7 @@ log transactions else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) usr.drop_item() I.loc = src held_card = I @@ -391,7 +393,7 @@ log transactions if(I) authenticated_account = attempt_account_access(I.associated_account_number) if(authenticated_account) - to_chat(human_user, "\blue \icon[src] Access granted. Welcome user '[authenticated_account.owner_name].'") + to_chat(human_user, "\blue [bicon(src)] Access granted. Welcome user '[authenticated_account.owner_name].'") //create a transaction log entry var/datum/transaction/T = new() diff --git a/code/modules/economy/Accounts.dm b/code/modules/economy/Accounts.dm index 844c5ca8bbf..9fac3da39d0 100644 --- a/code/modules/economy/Accounts.dm +++ b/code/modules/economy/Accounts.dm @@ -318,7 +318,7 @@ var/global/list/all_money_accounts = list() else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) var/obj/item/weapon/card/id/C = I usr.drop_item() C.loc = src diff --git a/code/modules/economy/Accounts_DB.dm b/code/modules/economy/Accounts_DB.dm index b5cb77880f6..1293d92b2b3 100644 --- a/code/modules/economy/Accounts_DB.dm +++ b/code/modules/economy/Accounts_DB.dm @@ -18,7 +18,7 @@ /obj/machinery/computer/account_database/proc/get_access_level(var/mob/user) if(user.can_admin_interact()) return 2 - if (!held_card) + if(!held_card) return 0 if(access_cent_commander in held_card.access) return 2 @@ -91,14 +91,14 @@ data["transactions"] = null data["accounts"] = null - if (detailed_account_view) + if(detailed_account_view) data["account_number"] = detailed_account_view.account_number data["owner_name"] = detailed_account_view.owner_name data["money"] = detailed_account_view.money data["suspended"] = detailed_account_view.suspended var/list/trx[0] - for (var/datum/transaction/T in detailed_account_view.transaction_log) + for(var/datum/transaction/T in detailed_account_view.transaction_log) trx.Add(list(list(\ "date" = T.date, \ "time" = T.time, \ @@ -107,7 +107,7 @@ "amount" = T.amount, \ "source_terminal" = T.source_terminal))) - if (trx.len > 0) + if(trx.len > 0) data["transactions"] = trx var/list/accounts[0] @@ -119,11 +119,11 @@ "suspended"=D.suspended ? "SUSPENDED" : "",\ "account_index"=i))) - if (accounts.len > 0) + if(accounts.len > 0) data["accounts"] = accounts ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640) ui.set_initial_data(data) ui.open() @@ -142,7 +142,7 @@ else var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) var/obj/item/weapon/card/id/C = I usr.drop_item() C.forceMove(src) @@ -220,7 +220,7 @@ var/text playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1) var/obj/item/weapon/paper/P = new(loc) - if (detailed_account_view) + if(detailed_account_view) P.name = "account #[detailed_account_view.account_number] details" var/title = "Account #[detailed_account_view.account_number] Details" text = {" @@ -242,7 +242,7 @@ "} - for (var/datum/transaction/T in detailed_account_view.transaction_log) + for(var/datum/transaction/T in detailed_account_view.transaction_log) text += {" [T.date] [T.time] diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm index a9fe34e1e46..275456e0d4f 100644 --- a/code/modules/economy/EFTPOS.dm +++ b/code/modules/economy/EFTPOS.dm @@ -111,9 +111,9 @@ var/obj/item/weapon/card/I = O scan_card(I) else - to_chat(usr, "\icon[src]Unable to connect to linked account.") + to_chat(usr, "[bicon(src)]Unable to connect to linked account.") else - to_chat(usr, "\icon[src]Unable to connect to accounts database.") + to_chat(usr, "[bicon(src)]Unable to connect to accounts database.") else ..() @@ -130,7 +130,7 @@ alert("That is not a valid code!") print_reference() else - to_chat(usr, "\icon[src]Incorrect code entered.") + to_chat(usr, "[bicon(src)]Incorrect code entered.") if("change_id") var/attempt_code = text2num(input("Re-enter the current EFTPOS access code", "Confirm EFTPOS code")) if(attempt_code == access_code) @@ -139,7 +139,7 @@ eftpos_name = name + " EFTPOS scanner" print_reference() else - to_chat(usr, "\icon[src]Incorrect code entered.") + to_chat(usr, "[bicon(src)]Incorrect code entered.") if("link_account") if(!linked_db) reconnect_database() @@ -148,7 +148,7 @@ var/attempt_pin = input("Enter pin code", "Account pin") as num linked_account = attempt_account_access(attempt_account_num, attempt_pin, 1) else - to_chat(usr, "\icon[src]Unable to connect to accounts database.") + to_chat(usr, "[bicon(src)]Unable to connect to accounts database.") if("trans_purpose") var/purpose = input("Enter reason for EFTPOS transaction", "Transaction purpose") as text|null if(purpose) @@ -168,33 +168,33 @@ else if(linked_account) transaction_locked = 1 else - to_chat(usr, "\icon[src] No account connected to send transactions to.") + to_chat(usr, "[bicon(src)] No account connected to send transactions to.") if("scan_card") //attempt to connect to a new db, and if that doesn't work then fail if(!linked_db) reconnect_database() if(linked_db && linked_account) var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card)) + if(istype(I, /obj/item/weapon/card)) scan_card(I) else - to_chat(usr, "\icon[src]Unable to link accounts.") + to_chat(usr, "[bicon(src)]Unable to link accounts.") if("reset") //reset the access code - requires HoP/captain access var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card)) + if(istype(I, /obj/item/weapon/card)) var/obj/item/weapon/card/id/C = I if(access_cent_commander in C.access || access_hop in C.access || access_captain in C.access) access_code = 0 - to_chat(usr, "\icon[src]Access code reset to 0.") - else if (istype(I, /obj/item/weapon/card/emag)) + to_chat(usr, "[bicon(src)]Access code reset to 0.") + else if(istype(I, /obj/item/weapon/card/emag)) access_code = 0 - to_chat(usr, "\icon[src]Access code reset to 0.") + to_chat(usr, "[bicon(src)]Access code reset to 0.") src.attack_self(usr) /obj/item/device/eftpos/proc/scan_card(var/obj/item/weapon/card/I) - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) var/obj/item/weapon/card/id/C = I visible_message("[usr] swipes a card through [src].") if(transaction_locked && !transaction_paid) @@ -204,7 +204,7 @@ if(D) if(transaction_amount <= D.money) playsound(src, 'sound/machines/chime.ogg', 50, 1) - src.visible_message("\icon[src] The [src] chimes.") + src.visible_message("[bicon(src)] The [src] chimes.") transaction_paid = 1 //transfer the money @@ -233,11 +233,11 @@ T.time = worldtime2text() linked_account.transaction_log.Add(T) else - to_chat(usr, "\icon[src]You don't have that much money!") + to_chat(usr, "[bicon(src)]You don't have that much money!") else - to_chat(usr, "\icon[src]Unable to access account. Check security settings and try again.") + to_chat(usr, "[bicon(src)]Unable to access account. Check security settings and try again.") else - to_chat(usr, "\icon[src]EFTPOS is not connected to an account.") + to_chat(usr, "[bicon(src)]EFTPOS is not connected to an account.") else ..() diff --git a/code/modules/economy/POS.dm b/code/modules/economy/POS.dm index 79e506ddee9..cbdcb0070fb 100644 --- a/code/modules/economy/POS.dm +++ b/code/modules/economy/POS.dm @@ -391,7 +391,7 @@ var/const/POS_HEADER = {" return /obj/machinery/pos/proc/say(var/text) - src.visible_message("\icon[src] [name] states, \"[text]\"") + src.visible_message("[bicon(src)] [name] states, \"[text]\"") /obj/machinery/pos/Topic(var/href, var/list/href_list) if(..(href,href_list)) return diff --git a/code/modules/economy/utils.dm b/code/modules/economy/utils.dm index 5ef9a033b6d..4fc67aa6c78 100644 --- a/code/modules/economy/utils.dm +++ b/code/modules/economy/utils.dm @@ -16,7 +16,7 @@ /obj/proc/get_card_account(var/obj/item/weapon/card/I, var/mob/user=null, var/terminal_name="", var/transaction_purpose="", var/require_pin=0) if(terminal_name=="") terminal_name=src.name - if (istype(I, /obj/item/weapon/card/id)) + if(istype(I, /obj/item/weapon/card/id)) var/obj/item/weapon/card/id/C = I var/attempt_pin=0 var/datum/money_account/D = get_money_account(C.associated_account_number) diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index 1ab10bc8e4f..430ac0fccb1 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -102,3 +102,17 @@ var/total_runtimes_skipped = 0 error_cache.logError(e, desclines, e_src = e_src) #endif + +/proc/log_runtime(exception/e, datum/e_src, extra_info) + if(!istype(e)) + world.Error(e, e_src) + return + + if(extra_info) + // Adding extra info adds two newlines, because parsing runtimes is funky + if(islist(extra_info)) + e.desc = " [jointext(extra_info, "\n ")]\n\n" + e.desc + else + e.desc = " [extra_info]\n\n" + e.desc + + world.Error(e, e_src) 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/events/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm index 82a4da4cc15..13d7478aab3 100644 --- a/code/modules/events/anomaly_bluespace.dm +++ b/code/modules/events/anomaly_bluespace.dm @@ -42,7 +42,7 @@ var/y_distance = TO.y - FROM.y var/x_distance = TO.x - FROM.x - for (var/atom/movable/A in range(12, FROM )) // iterate thru list of mobs in the area + for(var/atom/movable/A in range(12, FROM )) // iterate thru list of mobs in the area if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid if(A.anchored) continue diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index a4f620fccdf..13b5c884131 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -34,9 +34,9 @@ num_groups = min(num_groups, spawn_locations.len) var/i = 1 - while (i <= num_groups) + while(i <= num_groups) var/group_size = rand(group_size_min, group_size_max) - for (var/j = 1, j <= group_size, j++) + for(var/j = 1, j <= group_size, j++) var/carptype = /mob/living/simple_animal/hostile/carp if(prob(5)) carptype = /mob/living/simple_animal/hostile/carp/megacarp diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm index b7f1fb660c8..20f7f9955eb 100644 --- a/code/modules/events/dust.dm +++ b/code/modules/events/dust.dm @@ -73,7 +73,7 @@ for(var/mob/M in range(10, src)) if(!M.stat && !istype(M, /mob/living/silicon/ai)) shake_camera(M, 3, 1) - if (A) + if(A) playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) if(ismob(A)) diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm index 85ffa86f25f..00b7f76fc3e 100644 --- a/code/modules/events/event_manager.dm +++ b/code/modules/events/event_manager.dm @@ -337,18 +337,18 @@ var/list/event_areas = list() - for (var/areapath in the_station_areas) + for(var/areapath in the_station_areas) event_areas += typesof(areapath) - for (var/areapath in safe_areas) + for(var/areapath in safe_areas) event_areas -= typesof(areapath) - for (var/areapath in danger_areas) + for(var/areapath in danger_areas) event_areas += typesof(areapath) - while (event_areas.len > 0) + while(event_areas.len > 0) var/list/event_turfs = null candidate = locate(pick_n_take(event_areas)) event_turfs = get_area_turfs(candidate) - if (event_turfs.len > 0) + if(event_turfs.len > 0) break return candidate diff --git a/code/modules/events/holidays/Holidays.dm b/code/modules/events/holidays/Holidays.dm index e06c7764a39..8b219e77d8a 100644 --- a/code/modules/events/holidays/Holidays.dm +++ b/code/modules/events/holidays/Holidays.dm @@ -2,7 +2,7 @@ var/global/Holiday = null //Just thinking ahead! Here's the foundations to a more robust Holiday event system. -//It's easy as hell to add stuff. Just set Holiday to something using the switch (or something else) +//It's easy as hell to add stuff. Just set Holiday to something using the switch(or something else) //then use if(Holiday == "MyHoliday") to make stuff happen on that specific day only //Please, Don't spam stuff up with easter eggs, I'd rather somebody just delete this than people cause //the game to lag even more in the name of one-day content. diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index eb2007944dd..3012b0f9535 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -54,11 +54,11 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 x = clong.x y = clong.y - if (istype(clong, /turf) || istype(clong, /obj)) + if(istype(clong, /turf) || istype(clong, /obj)) if(clong.density) clong.ex_act(2) - else if (istype(clong, /mob)) + else if(istype(clong, /mob)) if(istype(clong, /mob/living/carbon/human)) var/mob/living/carbon/human/H = clong H.visible_message("[H.name] is penetrated by an immovable rod!" , "The rod penetrates you!" , "You hear a CLANG!") diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index bba7949a600..20a53a4413f 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -492,7 +492,7 @@ /proc/generate_static_ion_law() /var/list/players = list() - for (var/mob/living/carbon/human/player in player_list) + for(var/mob/living/carbon/human/player in player_list) if( !player.mind || player.mind.assigned_role == "MODE" || player.client.inactivity > MinutesToTicks(10)) continue players += player.real_name diff --git a/code/modules/events/meaty_ores.dm b/code/modules/events/meaty_ores.dm index d13a1b9ad34..df56749734e 100644 --- a/code/modules/events/meaty_ores.dm +++ b/code/modules/events/meaty_ores.dm @@ -26,7 +26,7 @@ for(var/mob/M in range(10, src)) if(!M.stat && !istype(M, /mob/living/silicon/ai)) shake_camera(M, 3, 1) - if (A) + if(A) playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) walk(src,0) invisibility = 101 diff --git a/code/modules/events/money_spam.dm b/code/modules/events/money_spam.dm index 94f27958b9b..061a1c9efa7 100644 --- a/code/modules/events/money_spam.dm +++ b/code/modules/events/money_spam.dm @@ -9,7 +9,7 @@ /datum/event/pda_spam/proc/pick_message_server() if(message_servers) - for (var/obj/machinery/message_server/MS in message_servers) + for(var/obj/machinery/message_server/MS in message_servers) if(MS.active) useMS = MS break @@ -31,7 +31,7 @@ for(var/obj/item/device/pda/check_pda in PDAs) var/datum/data/pda/app/messenger/check_m = check_pda.find_program(/datum/data/pda/app/messenger) - if (!check_m || !check_m.can_receive()) + if(!check_m || !check_m.can_receive()) continue viables.Add(check_pda) @@ -92,12 +92,12 @@ "You have won tickets to the newest romantic comedy 16 RULES OF LOVE!",\ "You have won tickets to the newest thriller THE CULT OF THE SLEEPING ONE!") - if (useMS.send_pda_message("[P.owner]", sender, message)) //Message been filtered by spam filter. + if(useMS.send_pda_message("[P.owner]", sender, message)) //Message been filtered by spam filter. return last_spam_time = world.time - if (prob(50)) //Give the AI an increased chance to intercept the message + if(prob(50)) //Give the AI an increased chance to intercept the message for(var/mob/living/silicon/ai/ai in mob_list) // Allows other AIs to intercept the message but the AI won't intercept their own message. if(ai.aiPDA != P && ai.aiPDA != src) diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index f798e9984d4..5afddd49d23 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -49,7 +49,7 @@ H.apply_effect((rand(15,35)),IRRADIATE,0) if(prob(5)) H.apply_effect((rand(40,70)),IRRADIATE,0) - if (prob(75)) + if(prob(75)) randmutb(H) // Applies bad mutation domutcheck(H,null,1) else diff --git a/code/modules/examine/examine.dm b/code/modules/examine/examine.dm index c4d54a44ab6..0956877d202 100644 --- a/code/modules/examine/examine.dm +++ b/code/modules/examine/examine.dm @@ -46,7 +46,7 @@ description_holders["antag"] = (update_antag_info)? A.get_description_antag() : "" description_holders["name"] = "[A.name]" - description_holders["icon"] = "\icon[A]" + description_holders["icon"] = "[bicon(A)]" description_holders["desc"] = A.desc /client/Stat() diff --git a/code/modules/fish/fish_eggs.dm b/code/modules/fish/fish_eggs.dm index e4283718a53..493f3dcf1db 100644 --- a/code/modules/fish/fish_eggs.dm +++ b/code/modules/fish/fish_eggs.dm @@ -4,7 +4,7 @@ desc = "Eggs laid by a fish. This cluster seems... empty?" icon = 'icons/obj/fish_items.dmi' icon_state = "eggs" - w_class = 2.0 + w_class = 2 var/fish_type = null //Holds the name of the fish that the egg is for /obj/item/fish_eggs/New() diff --git a/code/modules/fish/fish_items.dm b/code/modules/fish/fish_items.dm index 00659104480..0266f06df90 100644 --- a/code/modules/fish/fish_items.dm +++ b/code/modules/fish/fish_items.dm @@ -23,7 +23,7 @@ var/global/list/fish_items_list = list("goldfish" = /obj/item/weapon/fish/goldfi icon_state = "egg_scoop" slot_flags = SLOT_BELT throwforce = 0 - w_class = 2.0 + w_class = 2 throw_speed = 3 throw_range = 7 @@ -34,7 +34,7 @@ var/global/list/fish_items_list = list("goldfish" = /obj/item/weapon/fish/goldfi icon_state = "net" slot_flags = SLOT_BELT throwforce = 0 - w_class = 2.0 + w_class = 2 throw_speed = 3 throw_range = 7 @@ -48,7 +48,7 @@ var/global/list/fish_items_list = list("goldfish" = /obj/item/weapon/fish/goldfi icon = 'icons/obj/fish_items.dmi' icon_state = "fish_food" throwforce = 1 - w_class = 2.0 + w_class = 2 throw_speed = 3 throw_range = 7 @@ -59,7 +59,7 @@ var/global/list/fish_items_list = list("goldfish" = /obj/item/weapon/fish/goldfi icon_state = "brush" slot_flags = SLOT_BELT throwforce = 0 - w_class = 2.0 + w_class = 2 throw_speed = 3 throw_range = 7 attack_verb = list("scrubbed", "brushed", "scraped") @@ -103,7 +103,7 @@ var/global/list/fish_items_list = list("goldfish" = /obj/item/weapon/fish/goldfi icon = 'icons/obj/fish_items.dmi' icon_state = "fish" throwforce = 1 - w_class = 2.0 + w_class = 2 throw_speed = 3 throw_range = 7 force = 1 diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm index 6da71b3adb2..005fce56df0 100644 --- a/code/modules/fish/fishtank.dm +++ b/code/modules/fish/fishtank.dm @@ -415,7 +415,7 @@ examine_message += "\The [src] is about three-quarters filled. " else if(water_level < water_capacity) examine_message += "\The [src] is nearly full! " - else if (water_level == water_capacity) + else if(water_level == water_capacity) examine_message += "\The [src] is full! " examine_message += "
        Cleanliness level: " @@ -558,7 +558,7 @@ /obj/machinery/fishtank/attack_slime(mob/living/user as mob) var/mob/living/carbon/slime/S = user - if (!S.is_adult) + if(!S.is_adult) return attack_generic(user, rand(10, 15)) @@ -567,7 +567,7 @@ user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) user.visible_message("[user] smashes through [src]!") destroy() - else if (usr.a_intent == I_HARM) + else if(usr.a_intent == I_HARM) user.changeNext_move(CLICK_CD_MELEE) playsound(get_turf(src), 'sound/effects/glassknock.ogg', 80, 1) usr.visible_message("[usr.name] bangs against the [src.name]!", \ diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 6229105a8b3..81038eaf463 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 0,i--) //Pick a few words to stutter on. - if (!unstuttered_words.len) + if(!unstuttered_words.len) break var/word = pick(unstuttered_words) unstuttered_words -= word //Remove from unstuttered words so we don't stutter it again. diff --git a/code/modules/food/beverages/bottler.dm b/code/modules/food/beverages/bottler.dm new file mode 100644 index 00000000000..7e764595fd5 --- /dev/null +++ b/code/modules/food/beverages/bottler.dm @@ -0,0 +1,414 @@ + +//adjust these to change the maximum capacity of the bottler for each container type +#define MAX_GLASS 10 +#define MAX_PLAST 20 +#define MAX_METAL 25 + +//adjust these to change the number of containers the bottler will make per sheet +#define RATIO_GLASS 1 +#define RATIO_PLAST 2 +#define RATIO_METAL 5 + +/obj/machinery/bottler + name = "bottler unit" + desc = "A machine that combines ingredients and bottles the resulting beverages." + icon = 'icons/obj/kitchen.dmi' + icon_state = "bottler_off" + density = 1 + anchored = 1 + var/list/slots[3] + var/list/datum/bottler_recipe/available_recipes + var/list/acceptable_items + var/list/containers = list("glass bottle" = 10, "plastic bottle" = 20, "metal can" = 25) + var/bottling = 0 + +/obj/machinery/bottler/New() + if(!available_recipes) + available_recipes = list() + acceptable_items = list() + //These are going to be acceptable even if they aren't in a recipe + acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks + acceptable_items |= /obj/item/weapon/reagent_containers/food/drinks/cans + //the rest is based on what is used in recipes so we don't have people destroying the nuke disc + for(var/type in subtypesof(/datum/bottler_recipe)) + var/datum/bottler_recipe/recipe = new type + if(recipe.result) // Ignore recipe subtypes that lack a result + available_recipes += recipe + for(var/i = 1, i <= recipe.ingredients.len, i++) + acceptable_items |= recipe.ingredients[i] + else + qdel(recipe) + +/obj/machinery/bottler/attackby(obj/item/O, mob/user, params) + if(iswrench(O)) //This being before the canUnequip check allows borgs to (un)wrench bottlers in case they need move them to fix stuff + playsound(src, 'sound/items/Ratchet.ogg', 50, 1) + if(anchored) + anchored = 0 + to_chat(user, "[src] can now be moved.") + else + anchored = 1 + to_chat(user, "[src] is now secured.") + return 1 + if(!user.canUnEquip(O, 0)) + to_chat(user, "[O] is stuck to your hand, you can't seem to put it down!") + return 0 + if(is_type_in_list(O,acceptable_items)) + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks)) + var/obj/item/weapon/reagent_containers/food/snacks/S = O + user.unEquip(S) + if(S.reagents && !S.reagents.total_volume) //This prevents us from using empty foods, should one occur due to some sort of error + to_chat(user, "[S] is gone, oh no!") + qdel(S) //Delete the food object because it is useless even as food due to the lack of reagents + else + insert_item(S, user) + return 1 + else if(istype(O, /obj/item/weapon/reagent_containers/food/drinks/cans)) + var/obj/item/weapon/reagent_containers/food/drinks/cans/C = O + if(C.reagents) + if(C.canopened && C.reagents.total_volume) //This prevents us from using opened cans that still have something in them + to_chat(user, "Only unopened cans and bottles can be processed to ensure product integrity.") + return 0 + user.unEquip(C) + if(!C.reagents.total_volume) //Empty cans get recycled, even if they have somehow remained unopened due to some sort of error + recycle_container(C) + else //Full cans that are unopened get inserted for processing as ingredients + insert_item(C, user) + return 1 + else + user.unEquip(O) + insert_item(O, user) + return 1 + else if(istype(O, /obj/item/trash/can)) //Crushed cans (and bottles) are returnable still + var/obj/item/trash/can/C = O + user.unEquip(C) + recycle_container(C) + return 1 + else if(istype(O, /obj/item/stack/sheet)) //Sheets of materials can replenish the machine's supply of drink containers (when people inevitably don't return them) + var/obj/item/stack/sheet/S = O + user.unEquip(S) + process_sheets(S) + return 1 + else //If it doesn't qualify in the above checks, we don't want it. Inform the person so they (ideally) stop trying to put the nuke disc in. + to_chat(user, "You aren't sure this is able to be processed by the machine.") + return 0 + //..() + +/obj/machinery/bottler/proc/insert_item(obj/item/O, mob/user) + if(!O || !user) + return + if(slots[1] && slots[2] && slots[3]) + to_chat(user, "[src] is full, please remove or process the contents first.") + return + var/slot_inserted = 0 + for(var/i = 1, i <= slots.len, i++) + if(!slots[i]) + slots[i] = O + slot_inserted = i + break + if(!slot_inserted) + to_chat(user, "Something went wrong and the machine spits out [O].") + O.forceMove(loc) + else + to_chat(user, "You load [O] into the [slot_inserted]\th ingredient tray.") + O.forceMove(src) + updateUsrDialog() + +/obj/machinery/bottler/proc/eject_items(var/slot) + var/obj/item/O = null + if(!slot) + for(var/i = 1, i <= slots.len, i++) + if(slots[i]) + O = slots[i] + O.forceMove(loc) + slots[i] = null + visible_message("[src] beeps as it ejects the contents of all the ingredient trays.") + else + if(slots[slot]) //ensures the tray actually has something to eject so we don't runtime on trying to reference null + O = slots[slot] + O.forceMove(loc) + slots[slot] = null + visible_message("[src] beeps as it ejects [O.name] from the [slot]\th ingredient tray.") + updateUsrDialog() + +/obj/machinery/bottler/proc/recycle_container(obj/item/O) + if(!O) + return + var/con_type + var/max_define + if(istype(O, /obj/item/trash/can)) + var/obj/item/trash/can/C = O + if(C.is_glass) + con_type = "glass bottle" + max_define = MAX_GLASS + else if(C.is_plastic) + con_type = "plastic bottle" + max_define = MAX_PLAST + else + con_type = "metal can" + max_define = MAX_METAL + else if(istype(O, /obj/item/weapon/reagent_containers/food/drinks/cans)) + var/obj/item/weapon/reagent_containers/food/drinks/cans/C = O + if(C.is_glass) + con_type = "glass bottle" + max_define = MAX_GLASS + else if(C.is_plastic) + con_type = "plastic bottle" + max_define = MAX_PLAST + else + con_type = "metal can" + max_define = MAX_METAL + if(con_type) + if(containers[con_type] < max_define) + containers[con_type]++ + visible_message("[src] whirs briefly as it prepares the container for reuse.") + qdel(O) + updateUsrDialog() + else + visible_message("[src] cannot store any more cans at this time. Please fill some before recycling more.") + O.forceMove(loc) + +/obj/machinery/bottler/proc/process_sheets(obj/item/stack/sheet/S) + if(!S) + return + S.forceMove(loc) + var/con_type + var/max_define + var/mat_ratio + //Glass sheets for glass bottles (1 bottle per sheet) + if(istype(S, /obj/item/stack/sheet/glass)) + con_type = "glass bottle" + max_define = MAX_GLASS + mat_ratio = RATIO_GLASS + else if(istype(S, /obj/item/stack/sheet/mineral/plastic)) + con_type = "plastic bottle" + max_define = MAX_PLAST + mat_ratio = RATIO_PLAST + else if(istype(S, /obj/item/stack/sheet/metal)) + con_type = "metal can" + max_define = MAX_METAL + mat_ratio = RATIO_METAL + else + visible_message("[src] rejects the unusable materials.") + return + var/missing + var/sheets_needed + var/sheets_to_use + if(con_type) + missing = max_define - containers[con_type] + sheets_needed = round(missing / mat_ratio, 1) + if(missing % mat_ratio) + sheets_needed += 1 + sheets_to_use = min(sheets_needed, S.amount) + if(missing) + visible_message("[src] shudders as it converts [sheets_to_use] [S.singular_name]\s into new [con_type]s.") + containers[con_type] += sheets_to_use * mat_ratio + containers[con_type] = min(containers[con_type], max_define) + S.use(sheets_to_use) + else + visible_message("[src] rejects the [S] because it already is fully stocked with [con_type]s.") + +/obj/machinery/bottler/proc/select_recipe() + for(var/datum/bottler_recipe/recipe in available_recipes) + var/number_matches = 0 + for(var/i = 1, i <= slots.len, i++) + var/obj/item/O = slots[i] + if(istype(O, recipe.ingredients[i])) + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) + var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O + if(G.seed && G.seed.kitchen_tag == recipe.tags[i]) + number_matches++ + else + number_matches++ + if(number_matches == 3) + return recipe + return null + +/obj/machinery/bottler/proc/dispense_empty_container(container) + var/con_type + var/obj/item/weapon/reagent_containers/food/drinks/cans/bottler/drink_container + switch(container) + if(1) //glass bottle + con_type = "glass bottle" + drink_container = /obj/item/weapon/reagent_containers/food/drinks/cans/bottler/glass_bottle + if(2) //plastic bottle + con_type = "plastic bottle" + drink_container = /obj/item/weapon/reagent_containers/food/drinks/cans/bottler/plastic_bottle + if(3) //metal can + con_type = "metal can" + drink_container = /obj/item/weapon/reagent_containers/food/drinks/cans/bottler/metal_can + if(containers[con_type]) + //empties aren't sealed, so let's open it quietly + drink_container = new drink_container() + drink_container.canopened = 1 + drink_container.flags |= OPENCONTAINER + drink_container.forceMove(loc) + containers[con_type]-- + +/obj/machinery/bottler/proc/process_ingredients(container) + //stop if we have ZERO ingredients (what would you process?) + if(!slots[1] && !slots[2] && !slots[3]) + visible_message("There are no ingredients to process! Please insert some first.") + return + //prep a container + var/obj/item/weapon/reagent_containers/food/drinks/cans/bottler/drink_container + var/con_type + switch(container) + if(1) //glass bottle + con_type = "glass bottle" + drink_container = /obj/item/weapon/reagent_containers/food/drinks/cans/bottler/glass_bottle + if(2) //plastic bottle + con_type = "plastic bottle" + drink_container = /obj/item/weapon/reagent_containers/food/drinks/cans/bottler/plastic_bottle + if(3) //metal can + con_type = "metal can" + drink_container = /obj/item/weapon/reagent_containers/food/drinks/cans/bottler/metal_can + + if(!con_type) + visible_message("Error 404: Drink Container Not Found.") + return + if(!containers[con_type]) + visible_message("Error 503: Out of [con_type]s.") + return + else + drink_container = new drink_container() + containers[con_type]-- + //select and process a recipe based on inserted ingredients + visible_message("[src] hums as it processes the ingredients...") + bottling = 1 + var/datum/bottler_recipe/recipe_to_use = select_recipe() + if(!recipe_to_use) + //bad recipe, ruins the drink + var/contents = pick("thick goop", "pungent sludge", "unspeakable slurry", "gross-looking concoction", "eldritch abomination of liquids") + visible_message("The [con_type] fills with \an [contents]...") + drink_container.reagents.add_reagent(pick("????", "toxic_slurry", "meatslurry", "glowing_slury", "fishwater"), pick(30, 50)) + drink_container.name = "Liquid Mistakes" + drink_container.desc = "WARNING: CONTENTS MAY BE AWFUL, DRINK AT OWN RISK." + else + //good recipe, make it + visible_message("The [con_type] fills with a delicious-looking beverage!") + drink_container.reagents.add_reagent(recipe_to_use.result, 50) + drink_container.name = "[recipe_to_use.name]" + drink_container.desc = "[recipe_to_use.description]" + flick("bottler_on", src) + spawn(45) + for(var/i = 1, i <= slots.len, i++) + qdel(slots[i]) + slots[i] = null + bottling = 0 + drink_container.forceMove(loc) + updateUsrDialog() + +/obj/machinery/bottler/attack_ai(mob/user) + attack_hand(user) + +/obj/machinery/bottler/attack_ghost(mob/user) + attack_hand(user) + +/obj/machinery/bottler/attack_hand(mob/user) + if(stat & BROKEN) + return + interact(user) + +/obj/machinery/bottler/interact(mob/user) + user.set_machine(src) + //html ahoy + var/dat = "" + if(bottling) + dat = "

        Bottling in process, please wait...

        " + else + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + dat += "" + if(containers["glass bottle"]) + dat += "" + else + dat += "" + if(containers["plastic bottle"]) + dat += "" + else + dat += "" + if(containers["metal can"]) + dat += "" + else + dat += "" + dat += "" + dat += "
        Containers:
        Glass Bottles: [containers["glass bottle"]]Plastic Bottles: [containers["plastic bottle"]]Metal Cans: [containers["metal can"]]
        DispenseOut of stockDispenseOut of stockDispenseOut of stock
        " + dat += "
        " + dat += "" + dat += "" + dat += "" + dat += "" + + dat += "" + for(var/i = 1, i <= slots.len, i++) + var/obj/O = slots[i] + if(O) + dat += "" + else + dat += "" + + if(slots[1] && slots[2] && slots[3]) + dat += "" + else + dat += "" + dat += "" + + dat += "" + for(var/i = 1, i <= slots.len, i++) + if(slots[i]) + dat += "" + else + dat += "" + dat += "" + dat += "" + dat += "
        Ingredient Tray Contents:
        [bicon(O)]
        [O.name]
        Tray EmptyProcess IngredientsInsufficient Ingredients
        EjectN/AEject All
        " + dat += "
        " + dat += "

        Insert three ingredients and press process to create a beverage. You will be able to select a container for the beverage before processing begins.

        " + dat += "

        Inserting empty bottles and cans, as well as sheets of glass, plastic, or metal will restock the appropriate container supply.

        " + var/datum/browser/popup = new(user, "bottler", "Bottler Menu", 575, 400) + popup.set_content(dat) + popup.open() + +/obj/machinery/bottler/Topic(href, href_list) + if(..()) + return 1 + if(bottling) + return + + add_fingerprint(usr) + usr.set_machine(src) + + if(href_list["process"]) + var/list/choices = list("Glass Bottle" = 1, "Plastic Bottle" = 2, "Metal Can" = 3) + var/selection = input("Select a container for your beverage.", "Container") as null|anything in choices + if(!selection) + return + else + selection = choices[selection] + process_ingredients(selection) + + if(href_list["eject"]) + var/slot = text2num(href_list["eject"]) + eject_items(slot) + + if(href_list["dispense"]) + var/container = text2num(href_list["dispense"]) + dispense_empty_container(container) + + updateUsrDialog() + return + +/obj/machinery/bottler/update_icon() + if(stat & BROKEN) + icon_state = "bottler_broken" + else if(bottling) + icon_state = "bottler_on" + else + icon_state = "bottler_off" \ No newline at end of file diff --git a/code/modules/food/beverages/bottler_recipes.dm b/code/modules/food/beverages/bottler_recipes.dm new file mode 100644 index 00000000000..be7504afade --- /dev/null +++ b/code/modules/food/beverages/bottler_recipes.dm @@ -0,0 +1,86 @@ + +/datum/bottler_recipe + var/name = "" + var/description = "" + var/list/ingredients[3] + var/list/tags[3] + var/datum/reagent/result = null + + +/* Example of how a bottler_recipe should look: +/datum/bottler_recipe/example + name = "Example" + description = "This is an example." + ingredients = list(thing_1, thing_2, thing_3) + tags = list(null, "tag_2", null) + result = "water" + +The ingredients list must have 3 non-null entries. +The tags list must have 3 entries, using null where a tag is unused. +Failing to ensure both lists have EXACTLY 3 entries (unless the system is updated in the future to use a different number) will result in runtimes. +There is no excuse to do this wrong now that there is an example for you. --FalseIncarnate +*/ + + +/datum/bottler_recipe/Paradise_Punch + name = "Paradise Punch" + description = "Tastes just how you'd think Paradise would if you could bottle it." + ingredients = list(/obj/item/weapon/reagent_containers/food/snacks/grown, + /obj/item/weapon/reagent_containers/food/snacks/grown, + /obj/item/weapon/reagent_containers/food/snacks/grown) + tags = list("grapes", "banana", "cherries") + result = "paradise_punch" + +/datum/bottler_recipe/Applepocalypse + name = "Apple-pocalypse" + description = "If doomsday came in fruit form, it'd probably be apples." + ingredients = list(/obj/item/weapon/reagent_containers/food/snacks/grown, + /obj/item/weapon/reagent_containers/food/snacks/grown, + /obj/item/weapon/reagent_containers/food/snacks/grown) + tags = list("apple", "apple", "apple") + result = "apple-pocalypse" + +/datum/bottler_recipe/Berry_Banned + name = "Berry Banned" + description = "Reason for ban: Excessive Flavor." + ingredients = list(/obj/item/weapon/reagent_containers/food/snacks/grown, + /obj/item/weapon/reagent_containers/food/snacks/grown, + /obj/item/weapon/reagent_containers/food/snacks/grown) + tags = list("berries", "berries", "berries") + result = "berry_banned" + +/datum/bottler_recipe/Berry_Banned2 + name = "Berry Banned" + description = "Reason for ban: Excessive Flavor." + ingredients = list(/obj/item/weapon/reagent_containers/food/snacks/grown, + /obj/item/weapon/reagent_containers/food/snacks/grown, + /obj/item/weapon/reagent_containers/food/snacks/grown) + tags = list("poisonberries", "poisonberries", "poisonberries") + result = "berry_banned2" + +/datum/bottler_recipe/Blackeye_Brew + name = "Blackeye Brew" + description = "Creamy, smooth flavor, just like the bald heads of the masses. Supposedly aged for 30 years." + ingredients = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola, + /obj/item/weapon/reagent_containers/food/snacks/grown, + /obj/item/weapon/reagent_containers/food/snacks/icecream) + tags = list(null, "sugarcane", null) + result = "blackeye_brew" + +/datum/bottler_recipe/Grape_Granade + name = "Grape Granade" + description = "Exploding with grape flavor and a favorite among ERT members system-wide." + ingredients = list(/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice, + /obj/item/weapon/reagent_containers/food/snacks/grown, + /obj/item/device/flash) + tags = list(null, "grapes", null) + result = "grape_granade" + +/datum/bottler_recipe/Meteor_Malt + name = "Meteor Malt" + description = "Soft drinks have been detected on collision course with your tastebuds." + ingredients = list(/obj/item/weapon/ore, + /obj/item/weapon/reagent_containers/food/snacks/grown, + /obj/item/weapon/ore) + tags = list(null, "wheat", null) + result = "meteor_malt" diff --git a/code/modules/food/cooker.dm b/code/modules/food/cooker.dm index 40e04817209..706ea0e367b 100644 --- a/code/modules/food/cooker.dm +++ b/code/modules/food/cooker.dm @@ -9,16 +9,18 @@ var/on = 0 var/onicon = null var/officon = null + var/openicon = null var/thiscooktype = null var/burns = 0 // whether a machine burns something - if it does, you probably want to add the cooktype to /snacks/badrecipe var/firechance = 0 var/cooktime = 0 var/foodcolor = null var/has_specials = 0 //Set to 1 if the machine has specials to check, otherwise leave it at 0 + var/upgradeable = 0 //Set to 1 if the machine supports upgrades / deconstruction, or else it will ignore stuff like screwdrivers and parts exchangers // checks if the snack has been cooked in a certain way /obj/machinery/cooker/proc/checkCooked(obj/item/weapon/reagent_containers/food/snacks/D) - if (D.cooktype[thiscooktype]) + if(D.cooktype[thiscooktype]) return 1 return 0 @@ -65,7 +67,7 @@ var/datum/effect/system/bad_smoke_spread/smoke = new /datum/effect/system/bad_smoke_spread() // burning things makes smoke! smoke.set_up(5, 0, src) smoke.start() - if (prob(firechance)) + if(prob(firechance)) var/turf/location = get_turf(src) var/obj/effect/decal/cleanable/liquid_fuel/oil = new(location) oil.name = "fat" @@ -91,9 +93,24 @@ return type /obj/machinery/cooker/attackby(obj/item/I, mob/user, params) + if(upgradeable) + //Not all cooker types currently support build/upgrade stuff, so not all of it will work well with this + //Until we decide whether or not we want to bring back the cereal maker or old grill/oven in some form, this initial check will have to suffice + if(isscrewdriver(I)) + default_deconstruction_screwdriver(user, openicon, officon, I) + return + if(iscrowbar(I)) + default_deconstruction_crowbar(I) + return + if(istype(I, /obj/item/weapon/storage/part_replacer)) + exchange_parts(user, I) + return if(stat & (NOPOWER|BROKEN)) return - if (!checkValid(I, user)) + if(panel_open) + to_chat(user, "Close the panel first!") + return + if(!checkValid(I, user)) return if(!burns) if(istype(I, /obj/item/weapon/reagent_containers/food/snacks)) diff --git a/code/modules/food/customizables.dm b/code/modules/food/customizables.dm index ff1ff9f6ad5..d14731f9add 100644 --- a/code/modules/food/customizables.dm +++ b/code/modules/food/customizables.dm @@ -425,24 +425,24 @@ continue - if (istype(ing, /obj/item/weapon/reagent_containers/food/snacks/customizable)) // split the ingredients into ones with basenames (sandwich, burger, etc) and ones without, keeping track of how many of each there are + if(istype(ing, /obj/item/weapon/reagent_containers/food/snacks/customizable)) // split the ingredients into ones with basenames (sandwich, burger, etc) and ones without, keeping track of how many of each there are var/obj/item/weapon/reagent_containers/food/snacks/customizable/gettype = ing - if (unsortedtypes[gettype.basename]) + if(unsortedtypes[gettype.basename]) unsortedtypes[gettype.basename]++ - if (unsortedtypes[gettype.basename] > ct) + if(unsortedtypes[gettype.basename] > ct) ct = unsortedtypes[gettype.basename] else (unsortedtypes[gettype.basename]) = 1 - if (unsortedtypes[gettype.basename] > ct) + if(unsortedtypes[gettype.basename] > ct) ct = unsortedtypes[gettype.basename] else if(unsorteditems[ing.name]) unsorteditems[ing.name]++ - if (unsorteditems[ing.name] > ci) + if(unsorteditems[ing.name] > ci) ci = unsorteditems[ing.name] else unsorteditems[ing.name] = 1 - if (unsorteditems[ing.name] > ci) + if(unsorteditems[ing.name] > ci) ci = unsorteditems[ing.name] sorteditems = sortlist(unsorteditems, ci) //order both types going from the lowest number to the highest number @@ -450,30 +450,30 @@ for(var/ings in sorteditems) //add the non-basename items to the name, sorting out the , and the and c++ - if (c == sorteditems.len - 1) + if(c == sorteditems.len - 1) seperator = " and " - else if (c == sorteditems.len) + else if(c == sorteditems.len) seperator = " " else seperator = ", " - if (sorteditems[ings] > levels.len) + if(sorteditems[ings] > levels.len) sorteditems[ings] = levels.len - if (sorteditems[ings] <= 1) + if(sorteditems[ings] <= 1) sendback +="[ings][seperator]" else sendback +="[levels[sorteditems[ings]]] [ings][seperator]" - for (var/ingtype in sortedtypes) // now add the types basenames, keeping the src one seperate so it can go on the end - if (sortedtypes[ingtype] > levels.len) + for(var/ingtype in sortedtypes) // now add the types basenames, keeping the src one seperate so it can go on the end + if(sortedtypes[ingtype] > levels.len) sortedtypes[ingtype] = levels.len - if (ingtype == basename) - if (sortedtypes[ingtype] < levels.len) + if(ingtype == basename) + if(sortedtypes[ingtype] < levels.len) sortedtypes[ingtype]++ endpart = "[levels[sortedtypes[ingtype]]] decker [basename]" continue - if (sortedtypes[ingtype] >= 2) + if(sortedtypes[ingtype] >= 2) sendback += "[levels[sortedtypes[ingtype]]] decker [ingtype] " else sendback += "[ingtype] " @@ -491,7 +491,7 @@ var/sorted[0] for(var/i = 1, i<= highest, i++) for(var/it in unsorted) - if (unsorted[it] == i) + if(unsorted[it] == i) sorted[it] = i return sorted diff --git a/code/modules/food/deep_fryer.dm b/code/modules/food/deep_fryer.dm index 96e5fb94c57..b5aaef15fec 100644 --- a/code/modules/food/deep_fryer.dm +++ b/code/modules/food/deep_fryer.dm @@ -10,8 +10,34 @@ foodcolor = "#FFAD33" officon = "fryer_off" onicon = "fryer_on" + openicon = "fryer_open" has_specials = 1 + upgradeable = 1 +/obj/machinery/cooker/deepfryer/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/deepfryer(null) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) + component_parts += new /obj/item/stack/cable_coil(null, 5) + RefreshParts() + +/obj/machinery/cooker/deepfryer/upgraded/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/deepfryer(null) + component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(null) + component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(null) + component_parts += new /obj/item/stack/cable_coil(null, 5) + RefreshParts() + +/obj/machinery/cooker/deepfryer/RefreshParts() + var/E = 0 + for(var/obj/item/weapon/stock_parts/micro_laser/L in component_parts) + E += L.rating + E -= 2 //Standard parts is 0 (1+1-2), Tier 4 parts is 6 (4+4-2) + cooktime = (200 - (E * 20)) //Effectively each laser improves cooktime by 20 per rating beyond the first (200 base, 80 max upgrade) /obj/machinery/cooker/deepfryer/gettype() var/obj/item/weapon/reagent_containers/food/snacks/deepfryholder/type = new(get_turf(src)) @@ -20,13 +46,13 @@ /obj/machinery/cooker/deepfryer/checkSpecials(obj/item/I) if(!I) return 0 - for (var/Type in subtypesof(/datum/deepfryer_special)) + for(var/Type in subtypesof(/datum/deepfryer_special)) var/datum/deepfryer_special/P = new Type() if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/grown)) var/obj/item/weapon/reagent_containers/food/snacks/grown/G = I if(G.seed.kitchen_tag != P.input) continue - else if (!istype(I, P.input)) + else if(!istype(I, P.input)) continue return P return 0 diff --git a/code/modules/food/recipes_candy.dm b/code/modules/food/recipes_candy.dm index 8067820786f..2ab54fc0e27 100644 --- a/code/modules/food/recipes_candy.dm +++ b/code/modules/food/recipes_candy.dm @@ -69,7 +69,7 @@ result = /obj/item/weapon/reagent_containers/food/snacks/candy/toffee /datum/recipe/candy/taffy - reagents = list("sugar" = 5, "water" = 5, "sodiumchloride" = 5) + reagents = list("salglu_solution" = 15) items = list() result = /obj/item/weapon/reagent_containers/food/snacks/candy/taffy @@ -532,4 +532,4 @@ /obj/item/weapon/reagent_containers/food/snacks/candy/caramel, /obj/item/weapon/reagent_containers/food/snacks/candy/nougat, ) - result = /obj/item/weapon/reagent_containers/food/snacks/candy/candybar/caramel_nougat \ No newline at end of file + result = /obj/item/weapon/reagent_containers/food/snacks/candy/candybar/caramel_nougat diff --git a/code/modules/food/recipes_grill.dm b/code/modules/food/recipes_grill.dm index 0c3c81078df..4c459b737ff 100644 --- a/code/modules/food/recipes_grill.dm +++ b/code/modules/food/recipes_grill.dm @@ -1,6 +1,12 @@ // /datum/recipe/grill +/datum/recipe/grill/bacon + items = list( + /obj/item/weapon/reagent_containers/food/snacks/raw_bacon, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bacon + /datum/recipe/grill/telebacon items = list( /obj/item/weapon/reagent_containers/food/snacks/meat, @@ -214,4 +220,4 @@ /obj/item/weapon/reagent_containers/food/snacks/boiledrice, /obj/item/weapon/reagent_containers/food/snacks/catfishmeat, ) - result = /obj/item/weapon/reagent_containers/food/snacks/sushi_Tai \ No newline at end of file + result = /obj/item/weapon/reagent_containers/food/snacks/sushi_Tai diff --git a/code/modules/food/recipes_oven.dm b/code/modules/food/recipes_oven.dm index 105bc4d0282..9ee3ff3343e 100644 --- a/code/modules/food/recipes_oven.dm +++ b/code/modules/food/recipes_oven.dm @@ -185,9 +185,9 @@ return being_cooked check_items(var/obj/container as obj) . = ..() - if (.) + if(.) var/obj/item/weapon/paper/paper = locate() in container - if (!paper || !paper.info) + if(!paper || !paper.info) return -1 return . diff --git a/code/modules/food/recipes_table.dm b/code/modules/food/recipes_table.dm index 0c9f72dd6d5..005be6c1f7e 100644 --- a/code/modules/food/recipes_table.dm +++ b/code/modules/food/recipes_table.dm @@ -1,5 +1,5 @@ /* Example for reference when defining recipes -/datum/table_recipe/food +/datum/crafting_recipe/food name = "" //in-game display name reqs[] = list() //type paths of items/reagents consumed associated with how many are needed (equivalent to var/list/items and var/list/reagents combined) result //type path of item resulting from this craft @@ -9,7 +9,7 @@ fruit[] = list() //grown products required by the recipe */ -/datum/table_recipe/sandwich +/datum/crafting_recipe/sandwich name = "Sandwich" reqs = list( /obj/item/weapon/reagent_containers/food/snacks/meatsteak = 1, @@ -17,55 +17,61 @@ /obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 1, ) result = /obj/item/weapon/reagent_containers/food/snacks/sandwich + category = CAT_FOOD -/datum/table_recipe/slimesandwich +/datum/crafting_recipe/slimesandwich name = "Slime Jelly Sandwich" reqs = list( /datum/reagent/slimejelly = 5, /obj/item/weapon/reagent_containers/food/snacks/breadslice = 2, ) result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime + category = CAT_FOOD -/datum/table_recipe/cherrysandwich +/datum/crafting_recipe/cherrysandwich name = "Cherry Jelly Sandwich" reqs = list( /datum/reagent/cherryjelly = 5, /obj/item/weapon/reagent_containers/food/snacks/breadslice = 2, ) result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry + category = CAT_FOOD -/datum/table_recipe/slimeburger +/datum/crafting_recipe/slimeburger name = "Slime Jelly Burger" reqs = list( /datum/reagent/slimejelly = 5, /obj/item/weapon/reagent_containers/food/snacks/bun = 1, ) result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime + category = CAT_FOOD -/datum/table_recipe/jellyburger +/datum/crafting_recipe/jellyburger name = "Cherry Jelly Burger" reqs = list( /datum/reagent/cherryjelly = 5, /obj/item/weapon/reagent_containers/food/snacks/bun = 1, ) result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry + category = CAT_FOOD -/datum/table_recipe/herbsalad +/* Temporarily disabled until we can find a workaround for this fruit shit. +/datum/crafting_recipe/herbsalad name = "herb salad" fruit = list("ambrosia" = 3, "apple" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/herbsalad -/datum/table_recipe/herbsalad/AdjustChems(var/obj/resultobj as obj) +/datum/crafting_recipe/herbsalad/AdjustChems(var/obj/resultobj as obj) if(istype(resultobj, /obj/item/weapon/reagent_containers)) var/obj/item/weapon/reagent_containers/RC = resultobj RC.reagents.del_reagent("toxin") -/datum/table_recipe/aesirsalad +/datum/crafting_recipe/aesirsalad name = "Aesir salad" fruit = list("ambrosiadeus" = 3, "goldapple" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/aesirsalad -/datum/table_recipe/validsalad +/datum/crafting_recipe/validsalad name = "valid salad" fruit = list("ambrosia" = 3, "potato" = 1) reqs = list( @@ -73,20 +79,12 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/validsalad -/datum/table_recipe/validsalad/AdjustChems(var/obj/resultobj as obj) +/datum/crafting_recipe/validsalad/AdjustChems(var/obj/resultobj as obj) if(istype(resultobj, /obj/item/weapon/reagent_containers)) var/obj/item/weapon/reagent_containers/RC = resultobj RC.reagents.del_reagent("toxin") -/datum/table_recipe/notasandwich - name = "not-a-sandwich" - reqs = list( - /obj/item/weapon/reagent_containers/food/snacks/breadslice = 2, - /obj/item/clothing/mask/fakemoustache = 1, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/notasandwich - -/datum/table_recipe/wrap +/datum/crafting_recipe/wrap name = "egg wrap" fruit = list("cabbage" = 1) reqs = list( @@ -94,75 +92,95 @@ /obj/item/weapon/reagent_containers/food/snacks/friedegg = 1, ) result = /obj/item/weapon/reagent_containers/food/snacks/wrap +*/ -/datum/table_recipe/sushi_Ebi +/datum/crafting_recipe/notasandwich + name = "not-a-sandwich" + reqs = list( + /obj/item/weapon/reagent_containers/food/snacks/breadslice = 2, + /obj/item/clothing/mask/fakemoustache = 1, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/notasandwich + category = CAT_FOOD + + +/datum/crafting_recipe/sushi_Ebi name = "Ebi Sushi" reqs = list( /obj/item/weapon/reagent_containers/food/snacks/boiledrice = 1, /obj/item/weapon/reagent_containers/food/snacks/boiled_shrimp = 1, ) result = /obj/item/weapon/reagent_containers/food/snacks/sushi_Ebi + category = CAT_FOOD -/datum/table_recipe/sushi_Ikura +/datum/crafting_recipe/sushi_Ikura name = "Ikura Sushi" reqs = list( /obj/item/weapon/reagent_containers/food/snacks/boiledrice = 1, /obj/item/fish_eggs/salmon = 1, ) result = /obj/item/weapon/reagent_containers/food/snacks/sushi_Ikura + category = CAT_FOOD -/datum/table_recipe/sushi_Inari +/datum/crafting_recipe/sushi_Inari name = "Inari Sushi" reqs = list( /obj/item/weapon/reagent_containers/food/snacks/boiledrice = 1, /obj/item/weapon/reagent_containers/food/snacks/fried_tofu = 1, ) result = /obj/item/weapon/reagent_containers/food/snacks/sushi_Inari + category = CAT_FOOD -/datum/table_recipe/sushi_Sake +/datum/crafting_recipe/sushi_Sake name = "Sake Sushi" reqs = list( /obj/item/weapon/reagent_containers/food/snacks/boiledrice = 1, /obj/item/weapon/reagent_containers/food/snacks/salmonmeat = 1, ) result = /obj/item/weapon/reagent_containers/food/snacks/sushi_Sake + category = CAT_FOOD -/datum/table_recipe/sushi_SmokedSalmon +/datum/crafting_recipe/sushi_SmokedSalmon name = "Smoked Salmon Sushi" reqs = list( /obj/item/weapon/reagent_containers/food/snacks/boiledrice = 1, /obj/item/weapon/reagent_containers/food/snacks/salmonsteak = 1, ) result = /obj/item/weapon/reagent_containers/food/snacks/sushi_SmokedSalmon + category = CAT_FOOD -/datum/table_recipe/sushi_Masago +/datum/crafting_recipe/sushi_Masago name = "Masago Sushi" reqs = list( /obj/item/weapon/reagent_containers/food/snacks/boiledrice = 1, /obj/item/fish_eggs/goldfish = 1, ) result = /obj/item/weapon/reagent_containers/food/snacks/sushi_Masago + category = CAT_FOOD -/datum/table_recipe/sushi_Tobiko +/datum/crafting_recipe/sushi_Tobiko name = "Tobiko Sushi" reqs = list( /obj/item/weapon/reagent_containers/food/snacks/boiledrice = 1, /obj/item/fish_eggs/shark = 1, ) result = /obj/item/weapon/reagent_containers/food/snacks/sushi_Tobiko + category = CAT_FOOD -/datum/table_recipe/sushi_TobikoEgg +/datum/crafting_recipe/sushi_TobikoEgg name = "Tobiko and Egg Sushi" reqs = list( /obj/item/weapon/reagent_containers/food/snacks/sushi_Tobiko = 1, /obj/item/weapon/reagent_containers/food/snacks/egg = 1, ) result = /obj/item/weapon/reagent_containers/food/snacks/sushi_TobikoEgg + category = CAT_FOOD -/datum/table_recipe/sushi_Tai +/datum/crafting_recipe/sushi_Tai name = "Tai Sushi" reqs = list( /obj/item/weapon/reagent_containers/food/snacks/boiledrice = 1, /obj/item/weapon/reagent_containers/food/snacks/catfishmeat = 1, ) - result = /obj/item/weapon/reagent_containers/food/snacks/sushi_Tai \ No newline at end of file + result = /obj/item/weapon/reagent_containers/food/snacks/sushi_Tai + category = CAT_FOOD diff --git a/code/modules/garbage_collection/garbage_collector.dm b/code/modules/garbage_collection/garbage_collector.dm index aa8933c42de..95535376f85 100644 --- a/code/modules/garbage_collection/garbage_collector.dm +++ b/code/modules/garbage_collection/garbage_collector.dm @@ -109,7 +109,7 @@ var/global/datum/controller/process/garbage_collector/garbageCollector hint = D.Destroy() catch(var/exception/e) if(istype(e)) - gcwarning("qdel() caught runtime destroying [D.type]: [e] in [e.file], line [e.line]") + log_runtime(e, D, "Caught by qdel() destroying [D.type]") else gcwarning("qdel() caught runtime destroying [D.type]: [e]") // Destroy runtimed? Panic! Hard delete! @@ -129,14 +129,14 @@ var/global/datum/controller/process/garbage_collector/garbageCollector return if(QDEL_HINT_IWILLGC) //functionally the same as the above. qdel should assume the object will gc on its own, and not check it. return - if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. + if(QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. D.hard_deleted = -1 // -1 means "this hard del skipped the queue", used for profiling del(D) if(garbageCollector) garbageCollector.dels_count++ - if (QDEL_HINT_PUTINPOOL) //qdel will put this object in the pool. + if(QDEL_HINT_PUTINPOOL) //qdel will put this object in the pool. PlaceInPool(D,0) - if (QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion. + if(QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion. #ifdef TESTING D.find_references(remove_from_queue = FALSE) #endif @@ -148,9 +148,9 @@ var/global/datum/controller/process/garbage_collector/garbageCollector // Returns 1 if the object has been queued for deletion. /proc/qdeleted(var/datum/D) - if (!istype(D)) + if(!istype(D)) return 0 - if (!isnull(D.gcDestroyed)) + if(!isnull(D.gcDestroyed)) return 1 return 0 @@ -169,7 +169,7 @@ var/global/datum/controller/process/garbage_collector/garbageCollector Destroy() catch(var/exception/e) if(istype(e)) - gcwarning("Del() caught runtime destroying [type]: [e] in [e.file], line [e.line]") + log_runtime(e, src, "Caught by Del() destroying [type]") else gcwarning("Del() caught runtime destroying [type]: [e]") if(del_profiling) diff --git a/code/modules/garbage_collection/gc_testing.dm b/code/modules/garbage_collection/gc_testing.dm index 25fc4bef495..686b39a8542 100644 --- a/code/modules/garbage_collection/gc_testing.dm +++ b/code/modules/garbage_collection/gc_testing.dm @@ -71,17 +71,17 @@ var/global/list/ghdels_profiled = list() code = 2 switch(code) if(0) // Directly deleted (skipped the GC queue entirely) - if (!("[type]" in dels_profiled)) + if(!("[type]" in dels_profiled)) dels_profiled["[type]"] = 0 dels_profiled["[type]"] += 1 if(1) // Hard-deleted by the GC - if (!("[type]" in ghdels_profiled)) + if(!("[type]" in ghdels_profiled)) ghdels_profiled["[type]"] = 0 ghdels_profiled["[type]"] += 1 if(2) // qdel'd and garbage collected by BYOND - if (!("[type]" in gdels_profiled)) + if(!("[type]" in gdels_profiled)) gdels_profiled["[type]"] = 0 gdels_profiled["[type]"] += 1 @@ -117,7 +117,7 @@ var/global/list/ghdels_profiled = list() L.Swap(i,s) var/dat = "" - for (var/t in L) + for(var/t in L) dat +="" dat += "
        [header]
        [L[t]][t]
        " return dat diff --git a/code/modules/holiday/christmas.dm b/code/modules/holiday/christmas.dm index 765792e5da1..7dccff585d8 100644 --- a/code/modules/holiday/christmas.dm +++ b/code/modules/holiday/christmas.dm @@ -61,5 +61,5 @@ icon_state = "xmashat" desc = "A crappy paper hat that you are REQUIRED to wear." flags_inv = 0 - 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) diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index 553251a2ee8..817f002f014 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -251,4 +251,4 @@ if(!user.put_in_active_hand(QB)) QB.forceMove(get_turf(src)) visible_message("[user] removes the queen from the apiary.") - queen_bee = null + queen_bee = null \ No newline at end of file diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index b6dc4eee727..23a5447f1d4 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -254,7 +254,7 @@ for(var/i=0,i<2,i++) var/obj/item/stack/sheet/wood/NG = new (user.loc) NG.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) - for (var/obj/item/stack/sheet/wood/G in user.loc) + for(var/obj/item/stack/sheet/wood/G in user.loc) if(G==NG) continue if(G.amount>=G.max_amount) @@ -325,7 +325,7 @@ else user.visible_message("[M] has been attacked with [src] by [user]!") - if (hitsound) + if(hitsound) playsound(loc, hitsound, 50, 1, -1) switch(damtype) if("brute") @@ -407,7 +407,7 @@ for(var/i=0,i<2,i++) var/obj/item/stack/tile/grass/G = new (user.loc) G.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) - for (var/obj/item/stack/tile/grass/NG in user.loc) + for(var/obj/item/stack/tile/grass/NG in user.loc) if(G==NG) continue if(NG.amount>=NG.max_amount) diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index fd9405cc6bf..39e94160275 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -80,7 +80,7 @@ /obj/item/weapon/grown/nettle/death name = "deathnettle" - desc = "The glowing \black nettle incites rage\black in you just from looking at it!" + desc = "The glowing nettle incites rage in you just from looking at it!" icon_state = "deathnettle" force = 30 throwforce = 15 @@ -110,7 +110,7 @@ icon = 'icons/obj/trash.dmi' icon_state = "corncob" item_state = "corncob" - w_class = 2.0 + w_class = 2 throwforce = 0 throw_speed = 4 throw_range = 20 @@ -129,7 +129,7 @@ icon = 'icons/obj/items.dmi' icon_state = "banana_peel" item_state = "banana_peel" - w_class = 2.0 + w_class = 2 throwforce = 0 throw_speed = 4 throw_range = 20 @@ -143,7 +143,7 @@ icon = 'icons/obj/harvest.dmi' icon_state = "sunflower" item_state = "sunflower" - w_class = 2.0 + w_class = 2 throwforce = 0 throw_speed = 4 throw_range = 20 @@ -161,7 +161,7 @@ icon = 'icons/obj/harvest.dmi' icon_state = "novaflower" item_state = "sunflower" - w_class = 2.0 + w_class = 2 throwforce = 0 throw_speed = 4 throw_range = 20 diff --git a/code/modules/hydroponics/hydro_reagents.dm b/code/modules/hydroponics/hydro_reagents.dm index 5e5cb819b98..db19d0832c9 100644 --- a/code/modules/hydroponics/hydro_reagents.dm +++ b/code/modules/hydroponics/hydro_reagents.dm @@ -5,7 +5,7 @@ flags = OPENCONTAINER | NOBLUDGEON slot_flags = SLOT_BELT throwforce = 4 - w_class = 2.0 + w_class = 2 throw_speed = 2 throw_range = 10 var/toxicity = 4 @@ -93,7 +93,7 @@ icon_state = "bottle16" flags = OPENCONTAINER possible_transfer_amounts = null - w_class = 2.0 + w_class = 2 var/fertilizer //Reagent contained, if any. diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index a028fa66727..7d646b23cc3 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -825,6 +825,7 @@ display_name = "grapevines" mutants = list("greengrapes") chems = list("plantmatter" = list(1,10), "sugar" = list(1,5)) + kitchen_tag = "grapes" preset_icon = "grapes" /datum/seed/grapes/New() @@ -1089,6 +1090,7 @@ seed_name = "sugarcane" display_name = "sugarcanes" chems = list("sugar" = list(4,5)) + kitchen_tag = "sugarcane" preset_icon = "sugarcane" /datum/seed/sugarcane/New() diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index 6e94201c75c..42323841094 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -3,7 +3,7 @@ desc = "A small disk used for carrying data on plant genetics." icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "disk" - w_class = 1.0 + w_class = 1 var/list/genes = list() var/genesource = "unknown" @@ -68,15 +68,15 @@ active = 0 if(failed_task) failed_task = 0 - visible_message("\icon[src] [src] pings unhappily, flashing a red warning light.") + visible_message("[bicon(src)] [src] pings unhappily, flashing a red warning light.") else - visible_message("\icon[src] [src] pings happily.") + visible_message("[bicon(src)] [src] pings happily.") if(eject_disk) eject_disk = 0 if(loaded_disk) loaded_disk.loc = get_turf(src) - visible_message("\icon[src] [src] beeps and spits out [loaded_disk].") + visible_message("[bicon(src)] [src] beeps and spits out [loaded_disk].") loaded_disk = null /obj/machinery/botany/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -151,7 +151,7 @@ /obj/machinery/botany/extractor/RefreshParts() var/tier = 1 - for (var/obj/item/weapon/stock_parts/scanning_module/S in component_parts) + for(var/obj/item/weapon/stock_parts/scanning_module/S in component_parts) tier = S.rating degrade_lower = 25 - (tier * 5) //Tier 1: 20, Tier 4: 5 degrade_upper = 70 - (tier * 10) //Tier 1: 60, Tier 4: 30 @@ -191,7 +191,7 @@ data["sourceName"] = 0 ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "botany_isolator.tmpl", "Lysis-isolation Centrifuge UI", 470, 450) ui.set_initial_data(data) ui.open() @@ -212,14 +212,14 @@ plant_controller.seeds[seed.seed.name] = seed.seed seed.update_seed() - visible_message("\icon[src] [src] beeps and spits out [seed].") + visible_message("[bicon(src)] [src] beeps and spits out [seed].") seed = null if(href_list["eject_disk"]) if(!loaded_disk) return loaded_disk.loc = get_turf(src) - visible_message("\icon[src] [src] beeps and spits out [loaded_disk].") + visible_message("[bicon(src)] [src] beeps and spits out [loaded_disk].") loaded_disk = null usr.set_machine(src) @@ -302,7 +302,7 @@ /obj/machinery/botany/editor/RefreshParts() var/tier = 1 - for (var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) tier = M.rating degrade_lower = 6 - tier //Tier 1: 5, Tier 4: 1 degrade_upper = 11 - tier //Tier 1: 10, Tier 4: 6 @@ -341,7 +341,7 @@ data["loaded"] = 0 ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "botany_editor.tmpl", "Bioballistic Delivery UI", 470, 450) ui.set_initial_data(data) ui.open() diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index c97238b490d..1749181b329 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -5,7 +5,7 @@ var/global/list/plant_seed_sprites = list() name = "packet of seeds" icon = 'icons/obj/seeds.dmi' icon_state = "blank" - w_class = 2.0 + w_class = 2 var/seed_type var/datum/seed/seed diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index fe905595677..fa5b8e311f3 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -13,7 +13,7 @@ src.ID = ID /datum/seed_pile/proc/matches(var/obj/item/seeds/O) - if (O.seed == seed_type) + if(O.seed == seed_type) return 1 return 0 @@ -52,52 +52,52 @@ interact(user) /obj/machinery/seed_storage/interact(mob/user as mob) - if (..()) + if(..()) return - if (!initialized) + if(!initialized) for(var/typepath in starting_seeds) var/amount = starting_seeds[typepath] if(isnull(amount)) amount = 1 - for (var/i = 1 to amount) + for(var/i = 1 to amount) var/O = new typepath add(O) initialized = 1 var/dat = "

        Seed storage contents

        " - if (piles.len == 0) + if(piles.len == 0) dat += "No seeds" else dat += "" dat += "" - if ("stats" in scanner) + if("stats" in scanner) dat += "" - if ("temperature" in scanner) + if("temperature" in scanner) dat += "" - if ("light" in scanner) + if("light" in scanner) dat += "" - if ("soil" in scanner) + if("soil" in scanner) dat += "" dat += "" - for (var/datum/seed_pile/S in piles) + for(var/datum/seed_pile/S in piles) var/datum/seed/seed = S.seed_type if(!seed) continue dat += "" dat += "" dat += "" - if ("stats" in scanner) + if("stats" in scanner) dat += "" if(seed.get_trait(TRAIT_HARVEST_REPEAT)) dat += "" else dat += "" - if ("temperature" in scanner) + if("temperature" in scanner) dat += "" - if ("light" in scanner) + if("light" in scanner) dat += "" - if ("soil" in scanner) + if("soil" in scanner) if(seed.get_trait(TRAIT_REQUIRES_NUTRIENTS)) if(seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) < 0.05) dat += "" @@ -128,17 +128,17 @@ dat += "VINE " if(2) dat += "VINE " - if ("pressure" in scanner) + if("pressure" in scanner) if(seed.get_trait(TRAIT_LOWKPA_TOLERANCE) < 20) dat += "LP " if(seed.get_trait(TRAIT_HIGHKPA_TOLERANCE) > 220) dat += "HP " - if ("temperature" in scanner) + if("temperature" in scanner) if(seed.get_trait(TRAIT_HEAT_TOLERANCE) > 30) dat += "TEMRES " else if(seed.get_trait(TRAIT_HEAT_TOLERANCE) < 10) dat += "TEMSEN " - if ("light" in scanner) + if("light" in scanner) if(seed.get_trait(TRAIT_LIGHT_TOLERANCE) > 10) dat += "LIGRES " else if(seed.get_trait(TRAIT_LIGHT_TOLERANCE) < 3) @@ -157,7 +157,7 @@ dat += "WEEDRES " if(seed.get_trait(TRAIT_PARASITE)) dat += "PAR " - if ("temperature" in scanner) + if("temperature" in scanner) if(seed.get_trait(TRAIT_ALTER_TEMP) > 0) dat += "TEMP+ " if(seed.get_trait(TRAIT_ALTER_TEMP) < 0) @@ -174,27 +174,27 @@ onclose(user, "seedstorage") /obj/machinery/seed_storage/Topic(var/href, var/list/href_list) - if (..()) + if(..()) return var/task = href_list["task"] var/ID = text2num(href_list["id"]) - for (var/datum/seed_pile/N in piles) - if (N.ID == ID) - if (task == "vend") + for(var/datum/seed_pile/N in piles) + if(N.ID == ID) + if(task == "vend") var/obj/O = pick(N.seeds) - if (O) + if(O) --N.amount N.seeds -= O - if (N.amount <= 0 || N.seeds.len <= 0) + if(N.amount <= 0 || N.seeds.len <= 0) piles -= N qdel(N) O.loc = src.loc else piles -= N qdel(N) - else if (task == "purge") - for (var/obj/O in N.seeds) + else if(task == "purge") + for(var/obj/O in N.seeds) qdel(O) piles -= N qdel(N) @@ -202,17 +202,17 @@ updateUsrDialog() /obj/machinery/seed_storage/attackby(var/obj/item/O as obj, var/mob/user as mob) - if (istype(O, /obj/item/seeds)) + if(istype(O, /obj/item/seeds)) add(O) user.visible_message("[user] puts \the [O.name] into \the [src].", "You put \the [O] into \the [src].") return - else if (istype(O, /obj/item/weapon/storage/bag/plants)) + else if(istype(O, /obj/item/weapon/storage/bag/plants)) var/obj/item/weapon/storage/P = O var/loaded = 0 for(var/obj/item/seeds/G in P.contents) ++loaded add(G) - if (loaded) + if(loaded) user.visible_message("[user] puts the seeds from \the [O.name] into \the [src].", "You put the seeds from \the [O.name] into \the [src].") else to_chat(user, "There are no seeds in \the [O.name].") @@ -223,7 +223,7 @@ to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") /obj/machinery/seed_storage/proc/add(var/obj/item/seeds/O as obj) - if (istype(O.loc, /mob)) + if(istype(O.loc, /mob)) var/mob/user = O.loc user.drop_item(O) else if(istype(O.loc,/obj/item/weapon/storage)) @@ -233,8 +233,8 @@ O.loc = src var/newID = 0 - for (var/datum/seed_pile/N in piles) - if (N.matches(O)) + for(var/datum/seed_pile/N in piles) + if(N.matches(O)) ++N.amount N.seeds += (O) return diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index c26d5b98bad..21dc0dad4af 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -259,11 +259,11 @@ die_off() return if(2.0) - if (prob(50)) + if(prob(50)) die_off() return if(3.0) - if (prob(5)) + if(prob(5)) die_off() return else diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 74a8d7824dc..e9c63ed8794 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -7,6 +7,8 @@ flags = OPENCONTAINER volume = 100 + hud_possible = list (PLANT_NUTRIENT_HUD, PLANT_WATER_HUD, PLANT_STATUS_HUD, PLANT_HEALTH_HUD, PLANT_TOXIN_HUD, PLANT_PEST_HUD, PLANT_WEED_HUD) + var/mechanical = 1 // Set to 0 to stop it from drawing the alert lights. var/base_name = "tray" @@ -73,10 +75,12 @@ if(weedlevel > 0) nymph.reagents.add_reagent("nutriment", weedlevel) weedlevel = 0 + plant_hud_set_weed() nymph.visible_message("[nymph] begins rooting through [src], ripping out weeds and eating them noisily.","You begin rooting through [src], ripping out weeds and eating them noisily.") else if(nymph.nutrition > 100 && nutrilevel < 10) nymph.nutrition -= ((10-nutrilevel)*5) nutrilevel = 10 + plant_hud_set_nutrient() nymph.visible_message("[nymph] secretes a trickle of green liquid, refilling [src].","You secrete a trickle of green liquid, refilling [src].") else nymph.visible_message("[nymph] rolls around in [src] for a bit.","You roll around in [src] for a bit.") @@ -85,6 +89,17 @@ /obj/machinery/portable_atmospherics/hydroponics/New() ..() + var/datum/atom_hud/data/hydroponic/hydro_hud = huds[DATA_HUD_HYDROPONIC] + prepare_huds() + hydro_hud.add_to_hud(src) + plant_hud_set_nutrient() + plant_hud_set_water() + plant_hud_set_status() + plant_hud_set_health() + plant_hud_set_toxin() + plant_hud_set_pest() + plant_hud_set_weed() + component_parts = list() component_parts += new /obj/item/weapon/circuitboard/hydroponics(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) @@ -101,6 +116,7 @@ if(closed_system) flags &= ~OPENCONTAINER + /obj/machinery/portable_atmospherics/hydroponics/upgraded/New() ..() component_parts = list() @@ -112,12 +128,14 @@ /obj/machinery/portable_atmospherics/hydroponics/RefreshParts() var/tmp_capacity = 0 - for (var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) + for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) tmp_capacity += M.rating maxwater = tmp_capacity * 50 // Up to 300 maxnutri = tmp_capacity * 5 // Up to 30 //waterlevel = maxwater //nutrilevel = 3 + plant_hud_set_nutrient() + plant_hud_set_water() /obj/machinery/portable_atmospherics/hydroponics/bullet_act(var/obj/item/projectile/Proj) @@ -150,12 +168,18 @@ die() check_level_sanity() update_icon() + plant_hud_set_status() + plant_hud_set_health() /obj/machinery/portable_atmospherics/hydroponics/proc/die() dead = 1 harvest = 0 weedlevel += 1 * HYDRO_SPEED_MULTIPLIER pestlevel = 0 + plant_hud_set_status() + plant_hud_set_health() + plant_hud_set_weed() + plant_hud_set_pest() //Harvests the product of a plant. /obj/machinery/portable_atmospherics/hydroponics/proc/harvest(var/mob/user) @@ -233,6 +257,9 @@ pestlevel = 0 sampled = 0 update_icon() + plant_hud_set_weed() + plant_hud_set_status() + plant_hud_set_health() visible_message("[src] has been overtaken by [seed.display_name].") return @@ -391,6 +418,14 @@ toxins = max(0,min(toxins,10)) yield_mod = min(100, yield_mod) + plant_hud_set_nutrient() + plant_hud_set_water() + plant_hud_set_status() + plant_hud_set_health() + plant_hud_set_toxin() + plant_hud_set_pest() + plant_hud_set_weed() + /obj/machinery/portable_atmospherics/hydroponics/proc/mutate_species() var/previous_plant = seed.display_name @@ -409,6 +444,9 @@ harvest = 0 weedlevel = 0 + plant_hud_set_health() + plant_hud_set_weed() + update_icon() visible_message("\red The \blue [previous_plant] \red has suddenly mutated into \blue [seed.display_name]!") @@ -427,7 +465,7 @@ //--FalseIncarnate //Check if held item is an open container - if (O.is_open_container()) + if(O.is_open_container()) //Check if container is of the "glass" subtype (includes buckets, beakers, vials) if(istype(O, /obj/item/weapon/reagent_containers/glass)) var/obj/item/weapon/reagent_containers/glass/C = O @@ -471,7 +509,7 @@ update_icon() //Check if container is any spray container - else if (istype(O, /obj/item/weapon/reagent_containers/spray)) + else if(istype(O, /obj/item/weapon/reagent_containers/spray)) var/obj/item/weapon/reagent_containers/spray/S = O //Check if there is a plant in the tray if(seed) @@ -537,7 +575,7 @@ var/obj/item/weapon/reagent_containers/syringe/S = O - if (S.mode == 1) + if(S.mode == 1) if(seed) return ..() else @@ -551,7 +589,7 @@ to_chat(user, "There's nothing to draw something from.") return 1 - else if (istype(O, /obj/item/seeds)) + else if(istype(O, /obj/item/seeds)) if(!seed) @@ -579,21 +617,22 @@ else to_chat(user, "\The [src] already has seeds in it!") - else if (istype(O, /obj/item/weapon/minihoe)) // The minihoe + else if(istype(O, /obj/item/weapon/minihoe)) // The minihoe if(weedlevel > 0) user.visible_message("[user] starts uprooting the weeds.", "You remove the weeds from the [src].") weedlevel = 0 update_icon() + plant_hud_set_weed() else to_chat(user, "This plot is completely devoid of weeds. It doesn't need uprooting.") - else if (istype(O, /obj/item/weapon/storage/bag/plants)) + else if(istype(O, /obj/item/weapon/storage/bag/plants)) attack_hand(user) var/obj/item/weapon/storage/bag/plants/S = O - for (var/obj/item/weapon/reagent_containers/food/snacks/grown/G in locate(user.x,user.y,user.z)) + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in locate(user.x,user.y,user.z)) if(!S.can_be_inserted(G)) return S.handle_item_insertion(G, 1) @@ -608,8 +647,8 @@ anchored = !anchored to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") - else if ((istype(O, /obj/item/weapon/tank) && !( src.destroyed ))) - if (src.holding) + else if((istype(O, /obj/item/weapon/tank) && !( src.destroyed ))) + if(src.holding) to_chat(user, "\blue There is alreadu a tank loaded into the [src].") return var/obj/item/weapon/tank/T = O diff --git a/code/modules/hydroponics/trays/tray_apiary.dm b/code/modules/hydroponics/trays/tray_apiary.dm index 25a2698d274..9ecf2bcb2fc 100644 --- a/code/modules/hydroponics/trays/tray_apiary.dm +++ b/code/modules/hydroponics/trays/tray_apiary.dm @@ -36,7 +36,7 @@ if(!yieldmod) yieldmod += 1 // to_chat(world, "Yield increased by 1, from 0, to a total of [myseed.yield]") - else if (prob(1/(yieldmod * yieldmod) *100))//This formula gives you diminishing returns based on yield. 100% with 1 yield, decreasing to 25%, 11%, 6, 4, 2... + else if(prob(1/(yieldmod * yieldmod) *100))//This formula gives you diminishing returns based on yield. 100% with 1 yield, decreasing to 25%, 11%, 6, 4, 2... yieldmod += 1 // to_chat(world, "Yield increased by 1, to a total of [myseed.yield]") else diff --git a/code/modules/hydroponics/trays/tray_process.dm b/code/modules/hydroponics/trays/tray_process.dm index 855d053008c..03568731dc5 100644 --- a/code/modules/hydroponics/trays/tray_process.dm +++ b/code/modules/hydroponics/trays/tray_process.dm @@ -21,10 +21,11 @@ // Bonus chance if the tray is unoccupied. if(waterlevel > 10 && nutrilevel > 2 && prob(isnull(seed) ? 6 : 3)) weedlevel += 1 * HYDRO_SPEED_MULTIPLIER + plant_hud_set_weed() // There's a chance for a weed explosion to happen if the weeds take over. // Plants that are themselves weeds (weed_tolerance > 10) are unaffected. - if (weedlevel >= 10 && prob(10)) + if(weedlevel >= 10 && prob(10)) if(!seed || weedlevel >= seed.get_trait(TRAIT_WEED_TOLERANCE)) weed_invasion() @@ -48,8 +49,10 @@ // Maintain tray nutrient and water levels. if(seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) > 0 && nutrilevel > 0 && prob(25)) nutrilevel -= max(0,seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) * HYDRO_SPEED_MULTIPLIER) + plant_hud_set_nutrient() if(seed.get_trait(TRAIT_WATER_CONSUMPTION) > 0 && waterlevel > 0 && prob(25)) waterlevel -= max(0,seed.get_trait(TRAIT_WATER_CONSUMPTION) * HYDRO_SPEED_MULTIPLIER) + plant_hud_set_water() // Make sure the plant is not starving or thirsty. Adequate // water and nutrients will cause a plant to become healthier. @@ -81,7 +84,7 @@ T.air_update_turf() // If we're attached to a pipenet, then we should let the pipenet know we might have modified some gasses - if (closed_system && connected_port) + if(closed_system && connected_port) connected_port.parent.update = 1 // Toxin levels beyond the plant's tolerance cause damage, but @@ -91,6 +94,7 @@ if(toxins > seed.get_trait(TRAIT_TOXINS_TOLERANCE)) health -= toxin_uptake toxins -= toxin_uptake + plant_hud_set_toxin() // Check for pests and weeds. // Some carnivorous plants happily eat pests. @@ -98,16 +102,18 @@ if(seed.get_trait(TRAIT_CARNIVOROUS)) health += HYDRO_SPEED_MULTIPLIER pestlevel -= HYDRO_SPEED_MULTIPLIER - else if (pestlevel >= seed.get_trait(TRAIT_PEST_TOLERANCE)) + else if(pestlevel >= seed.get_trait(TRAIT_PEST_TOLERANCE)) health -= HYDRO_SPEED_MULTIPLIER + plant_hud_set_pest() // Some plants thrive and live off of weeds. if(weedlevel > 0) if(seed.get_trait(TRAIT_PARASITE)) health += HYDRO_SPEED_MULTIPLIER weedlevel -= HYDRO_SPEED_MULTIPLIER - else if (weedlevel >= seed.get_trait(TRAIT_WEED_TOLERANCE)) + else if(weedlevel >= seed.get_trait(TRAIT_WEED_TOLERANCE)) health -= HYDRO_SPEED_MULTIPLIER + plant_hud_set_weed() // Handle life and death. // If the plant gets too old, begin killing it each cycle diff --git a/code/modules/hydroponics/trays/tray_reagents.dm b/code/modules/hydroponics/trays/tray_reagents.dm index 8f7e4f5e836..e4f68e6d106 100644 --- a/code/modules/hydroponics/trays/tray_reagents.dm +++ b/code/modules/hydroponics/trays/tray_reagents.dm @@ -11,7 +11,7 @@ var/reagent_total = reagents.get_reagent_amount(R.id) - //These are here because they have checks that would clutter up the switch statement cases, and thus get handled after the switch (readability) + //These are here because they have checks that would clutter up the switch statement cases, and thus get handled after the switch(readability) var/water_value = 0 var/health_value = 0 var/production_stat_value = 0 diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index 1dea731ff54..b1ee10cc075 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -313,7 +313,8 @@ throw_range = 3 w_class = 4 var/extend = 1 - flags = NOSHIELD | CONDUCT + flags = CONDUCT + armour_penetration = 20 slot_flags = SLOT_BACK origin_tech = "materials=2;combat=2" attack_verb = list("chopped", "sliced", "cut", "reaped") @@ -336,9 +337,9 @@ edge = 0 throw_speed = 2 throw_range = 3 - w_class = 2.0 + w_class = 2 extend = 0 - flags = NOSHIELD + armour_penetration = 20 slot_flags = SLOT_BELT origin_tech = "materials=3;combat=3" attack_verb = list("chopped", "sliced", "cut", "reaped") @@ -373,7 +374,7 @@ H.update_inv_l_hand() H.update_inv_r_hand() add_fingerprint(user) - if (!blood_DNA) return + if(!blood_DNA) return if(blood_overlay && (blood_DNA.len >= 1)) //updates blood overlay, if any overlays.Cut()//this might delete other item overlays as well but eeeeeeeh @@ -396,7 +397,7 @@ anchored = 0.0 var/matter = 0 var/mode = 1 - w_class = 3.0 + w_class = 3 /obj/item/weapon/bananapeel name = "banana peel" @@ -404,7 +405,7 @@ icon = 'icons/obj/items.dmi' icon_state = "banana_peel" item_state = "banana_peel" - w_class = 1.0 + w_class = 1 throwforce = 0 throw_speed = 4 throw_range = 20 @@ -415,7 +416,7 @@ icon = 'icons/obj/harvest.dmi' icon_state = "corncob" item_state = "corncob" - w_class = 1.0 + w_class = 1 throwforce = 0 throw_speed = 4 throw_range = 20 diff --git a/code/modules/karma/karma.dm b/code/modules/karma/karma.dm index 9c40f005a21..fa765fd244b 100644 --- a/code/modules/karma/karma.dm +++ b/code/modules/karma/karma.dm @@ -182,7 +182,7 @@ You've gained [totalkarma] total karma in your time here.
        "} dat += "
        " switch(karma_tab) - if (0) // Job Unlocks + if(0) // Job Unlocks dat += {" Unlock Barber -- 5KP
        Unlock Brig Physician -- 5KP
        @@ -193,7 +193,7 @@ You've gained [totalkarma] total karma in your time here.
        "} Unlock Magistrate -- 45KP
        "} - if (1) // Species Unlocks + if(1) // Species Unlocks dat += {" Unlock Machine People -- 15KP
        Unlock Kidan -- 30KP
        @@ -204,7 +204,7 @@ You've gained [totalkarma] total karma in your time here.
        "} Unlock Plasmaman -- 100KP
        "} - if (2) // Karma Refunds + if(2) // Karma Refunds var/list/refundable = list() var/list/purchased = checkpurchased() if("Tajaran Ambassador" in purchased) diff --git a/code/modules/library/computers/base.dm b/code/modules/library/computers/base.dm index b24c7e7dbbf..360cda83d74 100644 --- a/code/modules/library/computers/base.dm +++ b/code/modules/library/computers/base.dm @@ -19,8 +19,8 @@ if(stat & (BROKEN | NOPOWER)) return 1 - if (!Adjacent(user)) - if (!issilicon(user) && !isobserver(user)) + if(!Adjacent(user)) + if(!issilicon(user) && !isobserver(user)) user.unset_machine() user << browse(null, "window=library") return 1 diff --git a/code/modules/library/computers/checkout.dm b/code/modules/library/computers/checkout.dm index 2746aed857e..ff62f15c276 100644 --- a/code/modules/library/computers/checkout.dm +++ b/code/modules/library/computers/checkout.dm @@ -435,7 +435,7 @@ return if(bibledelay) - for (var/mob/V in hearers(src)) + for(var/mob/V in hearers(src)) V.show_message("[src]'s monitor flashes, \"Printer unavailable. Please allow a short time before attempting to print.\"") else bibledelay = 1 @@ -456,7 +456,7 @@ return var/obj/item/weapon/book/B = new newbook.path(loc) - if (!newbook.programmatic) + if(!newbook.programmatic) B.name = "Book: [newbook.title]" B.title = newbook.title B.author = newbook.author diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index f7729af3578..4d58fee8e11 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -26,6 +26,7 @@ /obj/item/weapon/storage/bible) /obj/structure/bookcase/initialize() + ..() for(var/obj/item/I in loc) if(is_type_in_list(I, valid_types)) I.forceMove(src) @@ -69,7 +70,7 @@ if("brute") health -= O.force * 0.75 else - if (health <= 0) + if(health <= 0) visible_message("The bookcase is smashed apart!") new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) @@ -288,7 +289,7 @@ icon_state ="scanner" throw_speed = 1 throw_range = 5 - w_class = 1.0 + w_class = 1 var/obj/machinery/computer/library/checkout/computer // Associated computer - Modes 1 to 3 use this var/obj/item/weapon/book/book // Currently scanned book var/mode = 0 // 0 - Scan only, 1 - Scan and Set Buffer, 2 - Scan and Attempt to Check In, 3 - Scan and Attempt to Add to Inventory diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index f2dede3b8ba..525de63a0af 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -9,6 +9,7 @@ invisibility = INVISIBILITY_LIGHTING color = "#000000" icon_state = "light1" + auto_init = 0 // doesn't need special init var/lum_r var/lum_g @@ -104,4 +105,4 @@ if(istype(T)) T.lighting_overlay = null - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index d128e22c0f6..0ca98c921d8 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -181,7 +181,7 @@ attack_verb = list("smashed", "slammed", "whacked", "thwacked") icon = 'icons/obj/weapons.dmi' icon_state = "bostaff0" - + block_chance = 50 /obj/item/weapon/twohanded/bostaff/update_icon() icon_state = "bostaff[wielded]" @@ -239,8 +239,7 @@ return ..() return ..() -/obj/item/weapon/twohanded/bostaff/IsShield() +/obj/item/weapon/twohanded/bostaff/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance) if(wielded) - return 1 - else - return 0 \ No newline at end of file + return ..() + return 0 \ No newline at end of file diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm index 3202f8fbe27..bc4e15eb598 100644 --- a/code/modules/martial_arts/sleeping_carp.dm +++ b/code/modules/martial_arts/sleeping_carp.dm @@ -38,6 +38,8 @@ D.visible_message("[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/media/broadcast/receivers/radio.dm b/code/modules/media/broadcast/receivers/radio.dm index 7b9c4ad7b15..a0d94dcbf31 100644 --- a/code/modules/media/broadcast/receivers/radio.dm +++ b/code/modules/media/broadcast/receivers/radio.dm @@ -8,6 +8,7 @@ var/on=0 /obj/machinery/media/receiver/boombox/initialize() + ..() if(on) update_on() update_icon() @@ -80,4 +81,4 @@ if(on) icon_state="wallradio-p" else - icon_state="wallradio" \ No newline at end of file + icon_state="wallradio" diff --git a/code/modules/media/broadcast/transmitters/broadcast.dm b/code/modules/media/broadcast/transmitters/broadcast.dm index d8607851752..898771b496d 100644 --- a/code/modules/media/broadcast/transmitters/broadcast.dm +++ b/code/modules/media/broadcast/transmitters/broadcast.dm @@ -19,6 +19,7 @@ var/const/MAX_TEMP=70 // Celsius /obj/machinery/media/transmitter/broadcast/initialize() + ..() testing("[type]/initialize() called!") if(autolink && autolink.len) for(var/obj/machinery/media/source in orange(20, src)) diff --git a/code/modules/media/jukebox.dm b/code/modules/media/jukebox.dm index 9cea989fde7..ae33c38dcc4 100644 --- a/code/modules/media/jukebox.dm +++ b/code/modules/media/jukebox.dm @@ -183,12 +183,12 @@ var/global/loopModeNames=list( to_chat(usr, "\red You touch the bluescreened menu. Nothing happens. You feel dumber.") return - if (href_list["power"]) + if(href_list["power"]) playing=!playing update_music() update_icon() - if (href_list["playlist"]) + if(href_list["playlist"]) if(!check_reload()) to_chat(usr, "\red You must wait 60 seconds between playlist reloads.") return @@ -199,12 +199,12 @@ var/global/loopModeNames=list( update_music() update_icon() - if (href_list["song"]) + if(href_list["song"]) current_song=Clamp(text2num(href_list["song"]),1,playlist.len) update_music() update_icon() - if (href_list["mode"]) + if(href_list["mode"]) loop_mode = (loop_mode % JUKEMODE_COUNT) + 1 return attack_hand(usr) @@ -218,7 +218,7 @@ var/global/loopModeNames=list( if(response) var/json = file2text(response["CONTENT"]) if("/>" in json) - visible_message("\icon[src] \The [src] buzzes, unable to update its playlist.","You hear a buzz.") + visible_message("[bicon(src)] \The [src] buzzes, unable to update its playlist.","You hear a buzz.") stat &= BROKEN update_icon() return @@ -226,11 +226,11 @@ var/global/loopModeNames=list( for(var/list/record in songdata) playlist += new /datum/song_info(record) if(playlist.len==0) - visible_message("\icon[src] \The [src] buzzes, unable to update its playlist.","You hear a buzz.") + visible_message("[bicon(src)] \The [src] buzzes, unable to update its playlist.","You hear a buzz.") stat &= BROKEN update_icon() return - visible_message("\icon[src] \The [src] beeps, and the menu on its front fills with [playlist.len] items.","You hear a beep.") + visible_message("[bicon(src)] \The [src] beeps, and the menu on its front fills with [playlist.len] items.","You hear a beep.") if(autoplay) playing=1 autoplay=0 @@ -261,8 +261,8 @@ var/global/loopModeNames=list( var/datum/song_info/song = playlist[current_song] media_url = song.url media_start_time = world.time - visible_message("\icon[src] \The [src] begins to play [song.display()].","You hear music.") - //visible_message("\icon[src] \The [src] warbles: [song.length/10]s @ [song.url]") + visible_message("[bicon(src)] \The [src] begins to play [song.display()].","You hear music.") + //visible_message("[bicon(src)] \The [src] warbles: [song.length/10]s @ [song.url]") else media_url="" media_start_time = 0 diff --git a/code/modules/media/mediamanager.dm b/code/modules/media/mediamanager.dm index d78afc6f9f2..125b224c8ea 100644 --- a/code/modules/media/mediamanager.dm +++ b/code/modules/media/mediamanager.dm @@ -51,26 +51,21 @@ if(vlc.attachEvent) { "} // Hook into the events we desire. -/hook_handler/soundmanager - // Set up player on login - proc/OnLogin(var/list/args) - //testing("Received OnLogin.") - var/client/C = args["client"] - C.media = new /datum/media_manager(args["mob"]) - C.media.open() - spawn(20) - C.media.update_music() +/hook/mob_login/proc/init_media_manager(client/client, mob/mob) + client.media = new /datum/media_manager(mob) + client.media.open() + spawn(20) + client.media.update_music() + return 1 // Update when moving between areas. - proc/OnMobAreaChange(var/list/args) - var/mob/M = args["mob"] - //if(istype(M, /mob/living/carbon/human)||istype(M, /mob/dead/observer)) - // testing("Received OnMobAreaChange for [M.type] [M] (M.client=[M.client==null?"null":"/client"]).") - if(M.client) - M.update_music() +/hook/mob_area_change/proc/update_media(mob/mob, area/newarea, area/oldarea) + if(mob.client) + mob.update_music() + return 1 /mob/proc/update_music() - if (client && client.media) + if(client && client.media) client.media.update_music() //else // testing("[src] - client: [client?"Y":"N"]; client.media: [client && client.media ? "Y":"N"]") @@ -124,7 +119,7 @@ to_chat(#define MP_DEBUG(x) owner, x) var/targetURL = "" var/targetStartTime = 0 - if (!owner) + if(!owner) //testing("owner is null") return @@ -141,7 +136,7 @@ to_chat(#define MP_DEBUG(x) owner, x) //else // testing("M is not playing or null.") - if (url != targetURL || abs(targetStartTime - start_time) > 1) + if(url != targetURL || abs(targetStartTime - start_time) > 1) url = targetURL start_time = targetStartTime send_update() diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 3e9580ef14b..cd229550880 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -156,12 +156,12 @@ to_chat(user, "The crate is locked with a Deca-code lock.") var/input = input(usr, "Enter [codelen] digits.", "Deca-Code Lock", "") as text if(in_range(src, user)) - if (input == code) + if(input == code) to_chat(user, "The crate unlocks!") locked = 0 overlays.Cut() overlays += "securecrateg" - else if (input == null || length(input) != codelen) + else if(input == null || length(input) != codelen) to_chat(user, "You leave the crate alone.") else to_chat(user, "A red light flashes.") diff --git a/code/modules/mining/coins.dm b/code/modules/mining/coins.dm index a8ac5e1a88c..83f9c871f44 100644 --- a/code/modules/mining/coins.dm +++ b/code/modules/mining/coins.dm @@ -7,7 +7,7 @@ flags = CONDUCT force = 1 throwforce = 2 - w_class = 1.0 + w_class = 1 var/string_attached var/list/sideslist = list("heads","tails") var/cmineral = null @@ -105,7 +105,7 @@ to_chat(user, "There already is a string attached to this coin.") return - if (CC.use(1)) + if(CC.use(1)) overlays += image('icons/obj/items.dmi',"coin_string_overlay") string_attached = 1 to_chat(user, "You attach a string to the coin.") diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 1320423a4e8..d3a65e3c0bf 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -19,7 +19,7 @@ var/ore_pickup_rate = 15 var/sheet_per_ore = 1 var/point_upgrade = 1 - var/list/ore_values = list(("sand" = 1), ("iron" = 1), ("plasma" = 15), ("silver" = 16), ("gold" = 18), ("uranium" = 30), ("diamond" = 50), ("bananium" = 60), ("tranquillite" = 60)) + var/list/ore_values = list(("sand" = 1), ("iron" = 1), ("plasma" = 15), ("silver" = 16), ("gold" = 18), ("uranium" = 30), ("diamond" = 50), ("bluespace crystal" = 50), ("bananium" = 60), ("tranquillite" = 60)) var/list/supply_consoles = list("Science", "Robotics", "Research Director's Desk", "Mechanic", "Engineering" = list("metal", "glass", "plasma"), "Chief Engineer's Desk" = list("metal", "glass", "plasma"), "Atmospherics" = list("metal", "glass", "plasma"), "Bar" = list("uranium", "plasma"), "Virology" = list("plasma", "uranium", "gold")) /obj/machinery/mineral/ore_redemption/New() @@ -84,9 +84,9 @@ var/i = 0 if(T) for(var/obj/item/weapon/ore/O in T) - if (i >= ore_pickup_rate) + if(i >= ore_pickup_rate) break - else if (!O || !O.refined_type) + else if(!O || !O.refined_type) continue else process_sheet(O) @@ -95,16 +95,16 @@ var/obj/structure/ore_box/B = locate() in T if(B) for(var/obj/item/weapon/ore/O in B.contents) - if (i >= ore_pickup_rate) + if(i >= ore_pickup_rate) break - else if (!O || !O.refined_type) + else if(!O || !O.refined_type) continue else process_sheet(O) i++ /obj/machinery/mineral/ore_redemption/attackby(var/obj/item/weapon/W, var/mob/user, params) - if (!powered()) + if(!powered()) return if(istype(W,/obj/item/weapon/card/id)) var/obj/item/weapon/card/id/I = usr.get_active_hand() @@ -425,7 +425,7 @@ if(href_list["purchase"]) if(istype(inserted_id)) var/datum/data/mining_equipment/prize = locate(href_list["purchase"]) - if (!prize || !(prize in prize_list)) + if(!prize || !(prize in prize_list)) return if(prize.cost > inserted_id.mining_points) else @@ -521,7 +521,7 @@ icon_state = "Jaunter" item_state = "electronic" throwforce = 0 - w_class = 2.0 + w_class = 2 throw_speed = 3 throw_range = 5 origin_tech = "bluespace=2" @@ -677,7 +677,7 @@ /obj/item/weapon/mining_drone_cube name = "mining drone cube" desc = "Compressed mining drone, ready for deployment. Just press the button to activate!" - w_class = 2.0 + w_class = 2 icon = 'icons/obj/aibots.dmi' icon_state = "minedronecube" item_state = "electronic" @@ -731,13 +731,13 @@ if(istype(I, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/W = I if(W.welding && !stat) - if(AIStatus == AI_ON) + if(FindTarget())//if the bot has anything to shoot at, to prevent combat repair cheesing to_chat(user, "[src] is moving around too much to repair!") return if(maxHealth == health) to_chat(user, "[src] is at full integrity.") else - health += 10 + adjustHealth(-10)//actually repairs the bot, not damages it to_chat(user, "You repair some of the armor on [src].") return if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner)) @@ -902,7 +902,7 @@ icon_state = "lazarus_hypo" item_state = "hypo" throwforce = 0 - w_class = 2.0 + w_class = 2 throw_speed = 3 throw_range = 5 var/loaded = 1 @@ -958,14 +958,15 @@ /**********************Mining Scanner**********************/ /obj/item/device/mining_scanner - desc = "A scanner that checks surrounding rock for useful minerals, it can also be used to stop gibtonite detonations. Requires you to wear mesons to work properly." - name = "mining scanner" + desc = "A scanner that checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear material scanners for optimal results." + name = "manual mining scanner" icon_state = "mining1" item_state = "analyzer" - w_class = 2.0 + w_class = 2 flags = CONDUCT slot_flags = SLOT_BELT var/cooldown = 0 + origin_tech = "engineering=1;magnets=1" /obj/item/device/mining_scanner/attack_self(mob/user) if(!user.client) @@ -989,29 +990,51 @@ qdel(src) /obj/item/device/t_scanner/adv_mining_scanner - desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Requires you to wear mesons to function properly." - name = "advanced mining scanner" + desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear meson scanners for optimal results. This one has an extended range." + name = "advanced automatic mining scanner" icon_state = "mining0" item_state = "analyzer" - w_class = 2.0 + w_class = 2 flags = CONDUCT slot_flags = SLOT_BELT - var/cooldown = 0 + var/cooldown = 35 + var/on_cooldown = 0 + var/range = 7 + var/meson = TRUE + origin_tech = "engineering=3;magnets=3" /obj/item/device/t_scanner/adv_mining_scanner/cyborg flags = CONDUCT | NODROP +/obj/item/device/t_scanner/adv_mining_scanner/material + meson = FALSE + desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear material scanners for optimal results. This one has an extended range." + +/obj/item/device/t_scanner/adv_mining_scanner/lesser + name = "automatic mining scanner" + desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear meson scanners for optimal results." + range = 4 + cooldown = 50 + +/obj/item/device/t_scanner/adv_mining_scanner/lesser/material + desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear material scanners for optimal results." + meson = FALSE + /obj/item/device/t_scanner/adv_mining_scanner/scan() - if(!cooldown) - cooldown = 1 - spawn(35) - cooldown = 0 + if(!on_cooldown) + on_cooldown = 1 + spawn(cooldown) + on_cooldown = 0 var/turf/t = get_turf(src) var/list/mobs = recursive_mob_check(t, client_check = 1, sight_check = 0, include_radio = 0) if(!mobs.len) return - mineral_scan_pulse(mobs, t) + if(meson) + mineral_scan_pulse(mobs, t, range) + else + mineral_scan_pulse_material(mobs, t, range) +//For use with mesons /proc/mineral_scan_pulse(list/mobs, turf/T, range = world.view) var/list/minerals = list() for(var/turf/simulated/mineral/M in range(range, T)) @@ -1029,6 +1052,26 @@ if(C) C.images -= I +//For use with material scanners +/proc/mineral_scan_pulse_material(list/mobs, turf/T, range = world.view) + var/list/minerals = list() + for(var/turf/simulated/mineral/M in range(range, T)) + if(M.scan_state) + minerals += M + if(minerals.len) + for(var/turf/simulated/mineral/M in minerals) + var/obj/effect/overlay/temp/mining_overlay/C = new/obj/effect/overlay/temp/mining_overlay(M) + C.icon_state = M.scan_state + +/obj/effect/overlay/temp/mining_overlay + layer = 18 + icon = 'icons/turf/mining.dmi' + anchored = 1 + mouse_opacity = 0 + duration = 30 + pixel_x = -4 + pixel_y = -4 + /**********************Xeno Warning Sign**********************/ /obj/structure/sign/xeno_warning_mining name = "DANGEROUS ALIEN LIFE" diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 47c9c45dbc3..ce6dcc15eb1 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -28,7 +28,7 @@ t = d.id_tag if(t == src.door_tag) src.release_door = d - if (machine && (release_door || !use_release_door)) + if(machine && (release_door || !use_release_door)) machine.CONSOLE = src else qdel(src) diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index b83a2001bb0..23bf8ab532f 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -13,7 +13,7 @@ ..() spawn(7) src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir)) - if (machine) + if(machine) machine.CONSOLE = src else qdel(src) @@ -24,7 +24,7 @@ //iron if(machine.ore_iron || machine.ore_glass || machine.ore_plasma || machine.ore_uranium || machine.ore_gold || machine.ore_silver || machine.ore_diamond || machine.ore_clown || machine.ore_mime || machine.ore_adamantine) if(machine.ore_iron) - if (machine.selected_iron==1) + if(machine.selected_iron==1) dat += text("Smelting ") else dat += text("Not smelting ") @@ -34,7 +34,7 @@ //sand - glass if(machine.ore_glass) - if (machine.selected_glass==1) + if(machine.selected_glass==1) dat += text("Smelting ") else dat += text("Not smelting ") @@ -44,7 +44,7 @@ //plasma if(machine.ore_plasma) - if (machine.selected_plasma==1) + if(machine.selected_plasma==1) dat += text("Smelting ") else dat += text("Not smelting ") @@ -54,7 +54,7 @@ //uranium if(machine.ore_uranium) - if (machine.selected_uranium==1) + if(machine.selected_uranium==1) dat += text("Smelting ") else dat += text("Not smelting ") @@ -64,7 +64,7 @@ //gold if(machine.ore_gold) - if (machine.selected_gold==1) + if(machine.selected_gold==1) dat += text("Smelting ") else dat += text("Not smelting ") @@ -74,7 +74,7 @@ //silver if(machine.ore_silver) - if (machine.selected_silver==1) + if(machine.selected_silver==1) dat += text("Smelting ") else dat += text("Not smelting ") @@ -84,7 +84,7 @@ //diamond if(machine.ore_diamond) - if (machine.selected_diamond==1) + if(machine.selected_diamond==1) dat += text("Smelting ") else dat += text("Not smelting ") @@ -94,7 +94,7 @@ //bananium if(machine.ore_clown) - if (machine.selected_clown==1) + if(machine.selected_clown==1) dat += text("Smelting ") else dat += text("Not smelting ") @@ -104,7 +104,7 @@ //tranquillite if(machine.ore_mime) - if (machine.selected_mime==1) + if(machine.selected_mime==1) dat += text("Smelting ") else dat += text("Not smelting ") @@ -115,7 +115,7 @@ //On or off dat += text("Machine is currently ") - if (machine.on==1) + if(machine.on==1) dat += text("On ") else dat += text("Off ") @@ -131,52 +131,52 @@ usr.set_machine(src) src.add_fingerprint(usr) if(href_list["sel_iron"]) - if (href_list["sel_iron"] == "yes") + if(href_list["sel_iron"] == "yes") machine.selected_iron = 1 else machine.selected_iron = 0 if(href_list["sel_glass"]) - if (href_list["sel_glass"] == "yes") + if(href_list["sel_glass"] == "yes") machine.selected_glass = 1 else machine.selected_glass = 0 if(href_list["sel_plasma"]) - if (href_list["sel_plasma"] == "yes") + if(href_list["sel_plasma"] == "yes") machine.selected_plasma = 1 else machine.selected_plasma = 0 if(href_list["sel_uranium"]) - if (href_list["sel_uranium"] == "yes") + if(href_list["sel_uranium"] == "yes") machine.selected_uranium = 1 else machine.selected_uranium = 0 if(href_list["sel_gold"]) - if (href_list["sel_gold"] == "yes") + if(href_list["sel_gold"] == "yes") machine.selected_gold = 1 else machine.selected_gold = 0 if(href_list["sel_silver"]) - if (href_list["sel_silver"] == "yes") + if(href_list["sel_silver"] == "yes") machine.selected_silver = 1 else machine.selected_silver = 0 if(href_list["sel_diamond"]) - if (href_list["sel_diamond"] == "yes") + if(href_list["sel_diamond"] == "yes") machine.selected_diamond = 1 else machine.selected_diamond = 0 if(href_list["sel_clown"]) - if (href_list["sel_clown"] == "yes") + if(href_list["sel_clown"] == "yes") machine.selected_clown = 1 else machine.selected_clown = 0 if(href_list["sel_mime"]) - if (href_list["sel_mime"] == "yes") + if(href_list["sel_mime"] == "yes") machine.selected_mime = 1 else machine.selected_mime = 0 if(href_list["set_on"]) - if (href_list["set_on"] == "on") + if(href_list["set_on"] == "on") machine.on = 1 else machine.on = 0 @@ -216,82 +216,82 @@ /obj/machinery/mineral/processing_unit/process() var/i - for (i = 0; i < 10; i++) - if (on) - if (selected_glass == 1 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) - if (ore_glass > 0) + for(i = 0; i < 10; i++) + if(on) + if(selected_glass == 1 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(ore_glass > 0) ore_glass--; generate_mineral(/obj/item/stack/sheet/glass) else on = 0 continue - if (selected_glass == 1 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0) - if (ore_glass > 0 && ore_iron > 0) + if(selected_glass == 1 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0) + if(ore_glass > 0 && ore_iron > 0) ore_glass--; ore_iron--; generate_mineral(/obj/item/stack/sheet/rglass) else on = 0 continue - if (selected_glass == 0 && selected_gold == 1 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) - if (ore_gold > 0) + if(selected_glass == 0 && selected_gold == 1 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(ore_gold > 0) ore_gold--; generate_mineral(/obj/item/stack/sheet/mineral/gold) else on = 0 continue - if (selected_glass == 0 && selected_gold == 0 && selected_silver == 1 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) - if (ore_silver > 0) + if(selected_glass == 0 && selected_gold == 0 && selected_silver == 1 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(ore_silver > 0) ore_silver--; generate_mineral(/obj/item/stack/sheet/mineral/silver) else on = 0 continue - if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 1 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) - if (ore_diamond > 0) + if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 1 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(ore_diamond > 0) ore_diamond--; generate_mineral(/obj/item/stack/sheet/mineral/diamond) else on = 0 continue - if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) - if (ore_plasma > 0) + if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(ore_plasma > 0) ore_plasma--; generate_mineral(/obj/item/stack/sheet/mineral/plasma) else on = 0 continue - if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 1 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) - if (ore_uranium > 0) + if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 1 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(ore_uranium > 0) ore_uranium--; generate_mineral(/obj/item/stack/sheet/mineral/uranium) else on = 0 continue - if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0) - if (ore_iron > 0) + if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0) + if(ore_iron > 0) ore_iron--; generate_mineral(/obj/item/stack/sheet/metal) else on = 0 continue - if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0) - if (ore_iron > 0 && ore_plasma > 0) + if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0) + if(ore_iron > 0 && ore_plasma > 0) ore_iron--; ore_plasma--; generate_mineral(/obj/item/stack/sheet/plasteel) else on = 0 continue - if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 1 && selected_mime == 0) - if (ore_clown > 0) + if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 1 && selected_mime == 0) + if(ore_clown > 0) ore_clown--; generate_mineral(/obj/item/stack/sheet/mineral/bananium) else on = 0 continue - if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 1) - if (ore_mime > 0) + if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 1) + if(ore_mime > 0) ore_mime--; generate_mineral(/obj/item/stack/sheet/mineral/tranquillite) else @@ -299,16 +299,16 @@ continue //THESE TWO ARE CODED FOR URIST TO USE WHEN HE GETS AROUND TO IT. //They were coded on 18 Feb 2012. If you're reading this in 2015, then firstly congratulations on the world not ending on 21 Dec 2012 and secondly, Urist is apparently VERY lazy. ~Errorage - /*if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 1 && selected_plasma == 0 && selected_uranium == 1 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) - if (ore_uranium >= 2 && ore_diamond >= 1) + /*if(selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 1 && selected_plasma == 0 && selected_uranium == 1 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(ore_uranium >= 2 && ore_diamond >= 1) ore_uranium -= 2 ore_diamond -= 1 generate_mineral(/obj/item/stack/sheet/mineral/adamantine) else on = 0 continue - if (selected_glass == 0 && selected_gold == 0 && selected_silver == 1 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) - if (ore_silver >= 1 && ore_plasma >= 3) + if(selected_glass == 0 && selected_gold == 0 && selected_silver == 1 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0) + if(ore_silver >= 1 && ore_plasma >= 3) ore_silver -= 1 ore_plasma -= 3 generate_mineral(/obj/item/stack/sheet/mineral/mythril) @@ -321,53 +321,53 @@ var/b = 1 //this part checks if all required ores are available - if (!(selected_gold || selected_silver ||selected_diamond || selected_uranium | selected_plasma || selected_iron || selected_iron)) + if(!(selected_gold || selected_silver ||selected_diamond || selected_uranium | selected_plasma || selected_iron || selected_iron)) b = 0 - if (selected_gold == 1) - if (ore_gold <= 0) + if(selected_gold == 1) + if(ore_gold <= 0) b = 0 - if (selected_silver == 1) - if (ore_silver <= 0) + if(selected_silver == 1) + if(ore_silver <= 0) b = 0 - if (selected_diamond == 1) - if (ore_diamond <= 0) + if(selected_diamond == 1) + if(ore_diamond <= 0) b = 0 - if (selected_uranium == 1) - if (ore_uranium <= 0) + if(selected_uranium == 1) + if(ore_uranium <= 0) b = 0 - if (selected_plasma == 1) - if (ore_plasma <= 0) + if(selected_plasma == 1) + if(ore_plasma <= 0) b = 0 - if (selected_iron == 1) - if (ore_iron <= 0) + if(selected_iron == 1) + if(ore_iron <= 0) b = 0 - if (selected_glass == 1) - if (ore_glass <= 0) + if(selected_glass == 1) + if(ore_glass <= 0) b = 0 - if (selected_clown == 1) - if (ore_clown <= 0) + if(selected_clown == 1) + if(ore_clown <= 0) b = 0 - if (selected_mime == 1) - if (ore_mime <= 0) + if(selected_mime == 1) + if(ore_mime <= 0) b = 0 - if (b) //if they are, deduct one from each, produce slag and shut the machine off - if (selected_gold == 1) + if(b) //if they are, deduct one from each, produce slag and shut the machine off + if(selected_gold == 1) ore_gold-- - if (selected_silver == 1) + if(selected_silver == 1) ore_silver-- - if (selected_diamond == 1) + if(selected_diamond == 1) ore_diamond-- - if (selected_uranium == 1) + if(selected_uranium == 1) ore_uranium-- - if (selected_plasma == 1) + if(selected_plasma == 1) ore_plasma-- - if (selected_iron == 1) + if(selected_iron == 1) ore_iron-- - if (selected_clown == 1) + if(selected_clown == 1) ore_clown-- - if (selected_mime == 1) + if(selected_mime == 1) ore_mime-- generate_mineral(/obj/item/weapon/ore/slag) on = 0 @@ -384,39 +384,39 @@ n++ if(n>10) break - if (istype(O,/obj/item/weapon/ore/iron)) + if(istype(O,/obj/item/weapon/ore/iron)) ore_iron++; O.loc = null continue - if (istype(O,/obj/item/weapon/ore/glass)) + if(istype(O,/obj/item/weapon/ore/glass)) ore_glass++; O.loc = null continue - if (istype(O,/obj/item/weapon/ore/diamond)) + if(istype(O,/obj/item/weapon/ore/diamond)) ore_diamond++; O.loc = null continue - if (istype(O,/obj/item/weapon/ore/plasma)) + if(istype(O,/obj/item/weapon/ore/plasma)) ore_plasma++ O.loc = null continue - if (istype(O,/obj/item/weapon/ore/gold)) + if(istype(O,/obj/item/weapon/ore/gold)) ore_gold++ O.loc = null continue - if (istype(O,/obj/item/weapon/ore/silver)) + if(istype(O,/obj/item/weapon/ore/silver)) ore_silver++ O.loc = null continue - if (istype(O,/obj/item/weapon/ore/uranium)) + if(istype(O,/obj/item/weapon/ore/uranium)) ore_uranium++ O.loc = null continue - if (istype(O,/obj/item/weapon/ore/bananium)) + if(istype(O,/obj/item/weapon/ore/bananium)) ore_clown++ O.loc = null continue - if (istype(O,/obj/item/weapon/ore/tranquillite)) + if(istype(O,/obj/item/weapon/ore/tranquillite)) ore_mime++ O.loc = null continue diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index 5f315648c10..44d7b037869 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -13,7 +13,7 @@ ..() spawn(7) src.machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) - if (machine) + if(machine) machine.CONSOLE = src else qdel(src) diff --git a/code/modules/mining/machine_unloading.dm b/code/modules/mining/machine_unloading.dm index 5ae7f376cb0..5214c8caec8 100644 --- a/code/modules/mining/machine_unloading.dm +++ b/code/modules/mining/machine_unloading.dm @@ -15,14 +15,14 @@ if(T) var/limit for(var/obj/structure/ore_box/B in T) - for (var/obj/item/weapon/ore/O in B) + for(var/obj/item/weapon/ore/O in B) B.contents -= O unload_mineral(O) limit++ - if (limit>=10) + if(limit>=10) return for(var/obj/item/I in T) unload_mineral(I) limit++ - if (limit>=10) + if(limit>=10) return \ No newline at end of file diff --git a/code/modules/mining/manufacturing.dm b/code/modules/mining/manufacturing.dm index 429b0ee42bc..36464c2d7c7 100644 --- a/code/modules/mining/manufacturing.dm +++ b/code/modules/mining/manufacturing.dm @@ -39,26 +39,26 @@ process() ..() - if (src.working) use_power(src.powconsumption) + if(src.working) use_power(src.powconsumption) ex_act(severity) switch(severity) if(1.0) qdel(src) if(2.0) - if (prob(60)) stat |= BROKEN + if(prob(60)) stat |= BROKEN if(3.0) - if (prob(30)) stat |= BROKEN + if(prob(30)) stat |= BROKEN return blob_act() - if (prob(25)) del src + if(prob(25)) del src return power_change() if(stat & BROKEN) icon_state = "fab-broken" else if( powered() ) - if (src.working) src.icon_state = "fab-active" + if(src.working) src.icon_state = "fab-active" else src.icon_state = "fab-idle" stat &= ~NOPOWER else @@ -92,31 +92,31 @@ var/AMTfabr = 0 for(var/obj/item/weapon/ore/O in src.contents) - if (istype(O,/obj/item/weapon/ore/iron)) AMTmaux++ - if (istype(O,/obj/item/weapon/ore/glass)) AMTmoli++ - if (istype(O,/obj/item/weapon/ore/silver)) AMTphar++ - if (istype(O,/obj/item/weapon/ore/diamond)) AMTclar++ - if (istype(O,/obj/item/weapon/ore/gold)) AMTbohr++ - if (istype(O,/obj/item/weapon/ore/coal)) AMTereb++ - if (istype(O,/obj/item/weapon/ore/uranium)) AMTcere++ - if (istype(O,/obj/item/weapon/ore/plasma)) AMTplas++ - if (istype(O,/obj/item/weapon/ore/osmium)) AMTuqil++ - if (istype(O,/obj/item/weapon/ore/hydrogen)) AMTtele++ - if (istype(O,/obj/item/weapon/ore/fabric)) AMTfabr++ + if(istype(O,/obj/item/weapon/ore/iron)) AMTmaux++ + if(istype(O,/obj/item/weapon/ore/glass)) AMTmoli++ + if(istype(O,/obj/item/weapon/ore/silver)) AMTphar++ + if(istype(O,/obj/item/weapon/ore/diamond)) AMTclar++ + if(istype(O,/obj/item/weapon/ore/gold)) AMTbohr++ + if(istype(O,/obj/item/weapon/ore/coal)) AMTereb++ + if(istype(O,/obj/item/weapon/ore/uranium)) AMTcere++ + if(istype(O,/obj/item/weapon/ore/plasma)) AMTplas++ + if(istype(O,/obj/item/weapon/ore/osmium)) AMTuqil++ + if(istype(O,/obj/item/weapon/ore/hydrogen)) AMTtele++ + if(istype(O,/obj/item/weapon/ore/fabric)) AMTfabr++ dat += "Available Minerals
        " - if (AMTmaux) dat += "Iron: [AMTmaux]
        " - if (AMTmoli) dat += "Glass: [AMTmoli]
        " - if (AMTphar) dat += "Silver: [AMTphar]
        " - if (AMTclar) dat += "Diamond: [AMTclar]
        " - if (AMTbohr) dat += "Gold: [AMTbohr]
        " - if (AMTereb) dat += "Coal: [AMTereb]
        " - if (AMTcere) dat += "Uranium: [AMTcere]
        " - if (AMTplas) dat += "Plasma: [AMTplas]
        " - if (AMTuqil) dat += "Platinum: [AMTuqil]
        " - if (AMTtele) dat += "Hydrogen: [AMTtele]
        " - if (AMTfabr) dat += "Fabric: [AMTfabr]
        " - if (!AMTmaux && !AMTmoli && !AMTphar && !AMTclar && !AMTbohr && !AMTereb && !AMTcere && !AMTplas && !AMTuqil && !AMTtele && !AMTfabr) + if(AMTmaux) dat += "Iron: [AMTmaux]
        " + if(AMTmoli) dat += "Glass: [AMTmoli]
        " + if(AMTphar) dat += "Silver: [AMTphar]
        " + if(AMTclar) dat += "Diamond: [AMTclar]
        " + if(AMTbohr) dat += "Gold: [AMTbohr]
        " + if(AMTereb) dat += "Coal: [AMTereb]
        " + if(AMTcere) dat += "Uranium: [AMTcere]
        " + if(AMTplas) dat += "Plasma: [AMTplas]
        " + if(AMTuqil) dat += "Platinum: [AMTuqil]
        " + if(AMTtele) dat += "Hydrogen: [AMTtele]
        " + if(AMTfabr) dat += "Fabric: [AMTfabr]
        " + if(!AMTmaux && !AMTmoli && !AMTphar && !AMTclar && !AMTbohr && !AMTereb && !AMTcere && !AMTplas && !AMTuqil && !AMTtele && !AMTfabr) dat += "No minerals currently loaded.
        " dat += {"
        @@ -126,42 +126,42 @@ dat += {"
        [A.name]
        Cost: [A.amount1] [A.cname1]"} - if (A.cost2) dat += ", [A.amount2] [A.cname2]" - if (A.cost3) dat += ", [A.amount3] [A.cname3]" + if(A.cost2) dat += ", [A.amount2] [A.cname2]" + if(A.cost3) dat += ", [A.amount3] [A.cname3]" dat += "
        Time: [A.time] Seconds
        " for(var/datum/manufacture/A in src.download) dat += {"
        [A.name] (Downloaded)
        Cost: [A.amount1] [A.cname1]"} - if (A.cost2) dat += ", [A.amount2] [A.cname2]" - if (A.cost3) dat += ", [A.amount3] [A.cname3]" + if(A.cost2) dat += ", [A.amount2] [A.cname2]" + if(A.cost3) dat += ", [A.amount3] [A.cname3]" dat += "
        Time: [A.time] Seconds
        " for(var/datum/manufacture/A in src.diskload) dat += {"
        [A.name] (Disk)
        Cost: [A.amount1] [A.cname1]"} - if (A.cost2) dat += ", [A.amount2] [A.cname2]" - if (A.cost3) dat += ", [A.amount3] [A.cname3]" + if(A.cost2) dat += ", [A.amount2] [A.cname2]" + if(A.cost3) dat += ", [A.amount3] [A.cname3]" dat += "
        Time: [A.time] Seconds
        " - if (src.hacked) + if(src.hacked) for(var/datum/manufacture/A in src.hidden) dat += {"
        [A.name] (Secret)
        Cost: [A.amount1] [A.cname1]"} - if (A.cost2) dat += ", [A.amount2] [A.cname2]" - if (A.cost3) dat += ", [A.amount3] [A.cname3]" + if(A.cost2) dat += ", [A.amount2] [A.cname2]" + if(A.cost3) dat += ", [A.amount3] [A.cname3]" dat += "
        Time: [A.time] Seconds
        " dat += "
        " - if (src.dl_list) + if(src.dl_list) dat += {"Download Available Schematics
        Clear Downloaded Schematics
        "} - if (src.acceptdisk) + if(src.acceptdisk) dat += {"Clear Disk Schematics
        "} user << browse(dat, "window=manufact;size=400x500") @@ -173,45 +173,45 @@ if(usr.stat || usr.restrained()) return - if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf)))) + if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf)))) usr.machine = src - if (href_list["download"]) + if(href_list["download"]) to_chat(if(!src.dl_list) usr, "\red This unit is not capable of downloading any additional schematics.") else var/amtdl = 0 //var/dontload = 0 - if (src.dl_list == "robotics") + if(src.dl_list == "robotics") /*for(var/i = robotics_research.starting_tier, i <= robotics_research.max_tiers, i++) for(var/datum/roboresearch/X in robotics_research.researched_items[i]) - for (var/datum/manufacture/S in X.schematics) - for (var/datum/manufacture/A in src.download) - if (istype(S,A)) dontload = 1 - if (!dontload) + for(var/datum/manufacture/S in X.schematics) + for(var/datum/manufacture/A in src.download) + if(istype(S,A)) dontload = 1 + if(!dontload) src.download += new S.type(src) amtdl++ else dontload = 0*/ - to_chat(if (amtdl) usr, "\blue [amtdl] new schematics downloaded from Robotics Research Database.") + to_chat(if(amtdl) usr, "\blue [amtdl] new schematics downloaded from Robotics Research Database.") to_chat(else usr, "\red No new schematics currently available in Robotics Research Database.") - if (href_list["delete"]) + if(href_list["delete"]) var/operation = text2num(href_list["delete"]) if(operation == 1) // Clear Disk Schematics var/amtgone = 0 for(var/datum/manufacture/D in src.diskload) src.diskload-= D amtgone++ - to_chat(if (amtgone) usr, "\blue Cleared [amtgone] schematics from database.") + to_chat(if(amtgone) usr, "\blue Cleared [amtgone] schematics from database.") to_chat(else usr, "\red No disk-loaded schematics detected in database.") if(operation == 2) // Clear Download Schematics var/amtgone = 0 for(var/datum/manufacture/D in src.download) src.download-= D amtgone++ - to_chat(if (amtgone) usr, "\blue Cleared [amtgone] schematics from database.") + to_chat(if(amtgone) usr, "\blue Cleared [amtgone] schematics from database.") to_chat(else usr, "\red No downloaded schematics detected in database.") - if (href_list["eject"]) + if(href_list["eject"]) var/operation = text2num(href_list["eject"]) var/ejectamt = 0 var/ejecting = null @@ -233,22 +233,22 @@ sleep(3) ejectamt = input(usr,"How many units do you want to eject?","Eject Materials") as num for(var/obj/item/weapon/ore/O in src.contents) - if (ejectamt <= 0) break - if (istype(O, ejecting)) + if(ejectamt <= 0) break + if(istype(O, ejecting)) O.loc = usr.loc ejectamt-- - if (href_list["disp"]) + if(href_list["disp"]) var/datum/manufacture/I = locate(href_list["disp"]) // Material Check var/A1 = 0 var/A2 = 0 var/A3 = 0 for(var/obj/item/weapon/ore/O in src.contents) - if (istype(O,I.cost1)) A1++ - if (istype(O,I.cost2)) A2++ - if (istype(O,I.cost3)) A3++ - if (A1 < I.amount1 || A2 < I.amount2 || A3 < I.amount3) + if(istype(O,I.cost1)) A1++ + if(istype(O,I.cost2)) A2++ + if(istype(O,I.cost3)) A3++ + if(A1 < I.amount1 || A2 < I.amount2 || A3 < I.amount3) to_chat(usr, "\red Insufficient materials to manufacture that item.") return // Consume Mats @@ -256,13 +256,13 @@ var/C2 = I.amount2 var/C3 = I.amount3 for(var/obj/item/weapon/ore/O in src.contents) - if (istype(O,I.cost1) && C1) + if(istype(O,I.cost1) && C1) del O C1-- - if (istype(O,I.cost2) && C2) + if(istype(O,I.cost2) && C2) del O C2-- - if (istype(O,I.cost3) && C3) + if(istype(O,I.cost3) && C3) del O C3-- // Manufacture Item @@ -272,16 +272,16 @@ var/powconsume = round(1500*worktime/3) /*for(var/i = robotics_research.starting_tier, i <= robotics_research.max_tiers, i++) for(var/datum/roboresearch/a in robotics_research.researched_items[i]) - if (a.manubonus) + if(a.manubonus) worktime -= a.timebonus - if (a.multiplier != 0) worktime /= a.multiplier + if(a.multiplier != 0) worktime /= a.multiplier powconsume -= a.powbonus*/ - if (worktime < 1) worktime = 1 + if(worktime < 1) worktime = 1 src.powconsumption = powconsume src.updateUsrDialog() sleep(worktime) var/make = I.create - while (make > 0) + while(make > 0) new I.item(src.loc) make-- src.working = 0 @@ -298,24 +298,24 @@ var/obj/item/stack/sheet/STACK = W for(var/mob/O in viewers(user, null)) O.show_message(text("\blue [] loads [] into the [].", user, W, src), 1) if(istype(STACK, /obj/item/stack/sheet/metal)) - for (var/amt = STACK.amount, amt > 0, amt--) new /obj/item/weapon/ore/iron(src) + for(var/amt = STACK.amount, amt > 0, amt--) new /obj/item/weapon/ore/iron(src) if(istype(STACK, /obj/item/stack/sheet/plasteel)) - for (var/amt = STACK.amount, amt > 0, amt--) + for(var/amt = STACK.amount, amt > 0, amt--) new /obj/item/weapon/ore/iron(src) new /obj/item/weapon/ore/plasma(src) if(istype(STACK, /obj/item/stack/sheet/glass)) - for (var/amt = STACK.amount, amt > 0, amt--) new /obj/item/weapon/ore/glass(src) + for(var/amt = STACK.amount, amt > 0, amt--) new /obj/item/weapon/ore/glass(src) if(istype(STACK, /obj/item/stack/sheet/rglass)) - for (var/amt = STACK.amount, amt > 0, amt--) + for(var/amt = STACK.amount, amt > 0, amt--) new /obj/item/weapon/ore/iron(src) new /obj/item/weapon/ore/glass(src) load = 2 - //else if (istype(W, /obj/item/weapon/plant/wheat/metal)) + //else if(istype(W, /obj/item/weapon/plant/wheat/metal)) // new /obj/item/weapon/ore/iron(src) // load = 2 /*else if(istype(W, /obj/item/stack/cable_coil/)) for(var/mob/O in viewers(user, null)) O.show_message(text("\blue [] loads [] into the [].", user, W, src), 1) - for (var/amt = W:amount, amt > 0, amt--) + for(var/amt = W:amount, amt > 0, amt--) new /obj/item/weapon/ore/silver(src) amt-- load = 2*/ @@ -324,7 +324,7 @@ load = 2 else if(istype(W, /obj/item/stack/rods)) var/obj/item/stack/RODS = W - for (var/amt = RODS.amount, amt > 0, amt--) new /obj/item/weapon/ore/iron(src) + for(var/amt = RODS.amount, amt > 0, amt--) new /obj/item/weapon/ore/iron(src) load = 2 else if(istype(W, /obj/item/clothing/)) if(istype(W, /obj/item/clothing/under/)) @@ -337,78 +337,78 @@ if(istype(W,/obj/item/clothing/suit/space/)) new /obj/item/weapon/ore/fabric(src) load = 2 else if(istype(W, /obj/item/weapon/disk/data/schematic)) - to_chat(if (!src.acceptdisk) user, "\red This unit is unable to accept disks.") + to_chat(if(!src.acceptdisk) user, "\red This unit is unable to accept disks.") else var/amtload = 0 var/dontload = 0 - for (var/datum/manufacture/WS in W:schematics) - for (var/datum/manufacture/A in src.available) - if (istype(WS,A)) dontload = 1 - for (var/datum/manufacture/B in src.download) - if (istype(WS,B)) dontload = 1 - for (var/datum/manufacture/C in src.diskload) - if (istype(WS,C)) dontload = 1 - for (var/datum/manufacture/D in src.hidden) - if (istype(WS,D) && src.hacked) dontload = 1 - if (!dontload) + for(var/datum/manufacture/WS in W:schematics) + for(var/datum/manufacture/A in src.available) + if(istype(WS,A)) dontload = 1 + for(var/datum/manufacture/B in src.download) + if(istype(WS,B)) dontload = 1 + for(var/datum/manufacture/C in src.diskload) + if(istype(WS,C)) dontload = 1 + for(var/datum/manufacture/D in src.hidden) + if(istype(WS,D) && src.hacked) dontload = 1 + if(!dontload) src.diskload += new WS.type(src) amtload++ else dontload = 0 - to_chat(if (amtload) user, "\blue [amtload] new schematics downloaded from disk.") + to_chat(if(amtload) user, "\blue [amtload] new schematics downloaded from disk.") to_chat(else user, "\red No new schematics available on disk.") - else if (istype(W, /obj/item/weapon/storage/bag/ore)) + else if(istype(W, /obj/item/weapon/storage/bag/ore)) for(var/mob/V in viewers(user, null)) V.show_message(text("\blue [] uses the []'s automatic ore loader on []!", user, src, W), 1) var/amtload = 0 - for (var/obj/item/weapon/ore/M in W.contents) + for(var/obj/item/weapon/ore/M in W.contents) M.loc = src amtload++ - to_chat(if (amtload) user, "\blue [amtload] pieces of ore loaded from [W]!") + to_chat(if(amtload) user, "\blue [amtload] pieces of ore loaded from [W]!") to_chat(else user, "\red No ore loaded!") else if(istype(W, /obj/item/weapon/card/emag)) src.hacked = 1 to_chat(user, "\blue You remove the [src]'s product locks!") else ..() - if (load == 1) + if(load == 1) user.unEquip(W) W.loc = src - if ((user.client && user.s_active != src)) + if((user.client && user.s_active != src)) user.client.screen -= W W.dropped() - else if (load == 2) + else if(load == 2) user.unEquip(W) W.dropped() - if ((user.client && user.s_active != src)) + if((user.client && user.s_active != src)) user.client.screen -= W del W src.updateUsrDialog() MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) - if (istype(O, /obj/structure/closet/crate/)) + if(istype(O, /obj/structure/closet/crate/)) for(var/mob/V in viewers(user, null)) V.show_message(text("\blue [] uses the []'s automatic ore loader on []!", user, src, O), 1) var/amtload = 0 - for (var/obj/item/weapon/ore/M in O.contents) + for(var/obj/item/weapon/ore/M in O.contents) M.loc = src amtload++ - to_chat(if (amtload) user, "\blue [amtload] pieces of ore loaded from [O]!") + to_chat(if(amtload) user, "\blue [amtload] pieces of ore loaded from [O]!") to_chat(else user, "\red No ore loaded!") - else if (istype(O, /obj/item/weapon/ore/)) + else if(istype(O, /obj/item/weapon/ore/)) for(var/mob/V in viewers(user, null)) V.show_message(text("\blue [] begins quickly stuffing ore into []!", user, src), 1) var/staystill = user.loc for(var/obj/item/weapon/ore/M in view(1,user)) M.loc = src sleep(3) - if (user.loc != staystill) break + if(user.loc != staystill) break to_chat(user, "\blue You finish stuffing ore into [src]!") - /*else if (istype(O, /obj/item/weapon/plant/wheat/metal)) + /*else if(istype(O, /obj/item/weapon/plant/wheat/metal)) for(var/mob/V in viewers(user, null)) V.show_message(text("\blue [] begins quickly stuffing [O] into []!", user, src), 1) var/staystill = user.loc for(var/obj/item/weapon/plant/wheat/metal/M in view(1,user)) new /obj/item/weapon/ore/iron(src) del M sleep(3) - if (user.loc != staystill) break + if(user.loc != staystill) break to_chat(user, "\blue You finish stuffing [O] into [src]!"*/) else ..() src.updateUsrDialog() diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index f1f317789b4..e774ef23924 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -9,6 +9,27 @@ /**********************Miner Lockers**************************/ +/obj/structure/closet/wardrobe/miner + name = "mining wardrobe" + icon_state = "mixed" + icon_closed = "mixed" + +/obj/structure/closet/wardrobe/miner/New() + ..() + contents = list() + new /obj/item/weapon/storage/backpack/duffel(src) + new /obj/item/weapon/storage/backpack/industrial(src) + new /obj/item/weapon/storage/backpack/satchel_eng(src) + new /obj/item/clothing/under/rank/miner(src) + new /obj/item/clothing/under/rank/miner(src) + new /obj/item/clothing/under/rank/miner(src) + new /obj/item/clothing/shoes/workboots(src) + new /obj/item/clothing/shoes/workboots(src) + new /obj/item/clothing/shoes/workboots(src) + new /obj/item/clothing/gloves/fingerless(src) + new /obj/item/clothing/gloves/fingerless(src) + new /obj/item/clothing/gloves/fingerless(src) + /obj/structure/closet/secure_closet/miner name = "miner's equipment" icon_state = "miningsec1" @@ -21,20 +42,11 @@ /obj/structure/closet/secure_closet/miner/New() ..() - sleep(2) - if(prob(50)) - new /obj/item/weapon/storage/backpack/industrial(src) - else - new /obj/item/weapon/storage/backpack/satchel_eng(src) - new /obj/item/device/radio/headset/headset_cargo(src) - new /obj/item/clothing/under/rank/miner(src) - new /obj/item/clothing/gloves/fingerless(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/device/mining_scanner(src) - new /obj/item/weapon/storage/bag/ore(src) - new /obj/item/device/flashlight/lantern(src) new /obj/item/weapon/shovel(src) new /obj/item/weapon/pickaxe(src) + new /obj/item/device/radio/headset/headset_cargo/mining(src) + new /obj/item/device/t_scanner/adv_mining_scanner/lesser(src) + new /obj/item/weapon/storage/bag/ore(src) new /obj/item/clothing/glasses/meson(src) /**********************Shuttle Computer**************************/ @@ -65,7 +77,7 @@ force = 15.0 throwforce = 10.0 item_state = "pickaxe" - w_class = 4.0 + w_class = 4 materials = list(MAT_METAL=2000) //one sheet, but where can you make them? var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO origin_tech = "materials=1;engineering=1" @@ -122,7 +134,7 @@ icon_state = "smdrill" origin_tech = "materials=6;powerstorage=4;engineering=5;syndicate=3" desc = "Microscopic supermatter crystals cover the head of this tiny drill." - w_class = 2.0 + w_class = 2 /obj/item/weapon/pickaxe/drill/cyborg/diamond //This is the BORG version! name = "diamond-tipped cyborg mining drill" //To inherit the NODROP flag, and easier to change borg specific drill mechanics. @@ -166,7 +178,7 @@ force = 8.0 throwforce = 4.0 item_state = "shovel" - w_class = 3.0 + w_class = 3 materials = list(MAT_METAL=50) origin_tech = "materials=1;engineering=1" attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked") @@ -178,7 +190,7 @@ item_state = "spade" force = 5.0 throwforce = 7.0 - w_class = 2.0 + w_class = 2 /**********************Mining car (Crate like thing, not the rail car)**************************/ @@ -199,7 +211,7 @@ desc = "It allows you to store and deploy lazarus-injected creatures easier." icon = 'icons/obj/mobcap.dmi' icon_state = "mobcap0" - w_class = 1.0 + w_class = 1 throw_range = 20 var/mob/living/simple_animal/captured = null var/colorindex = 0 @@ -249,4 +261,50 @@ if(colorindex >= 6) colorindex = 0 icon_state = "mobcap[colorindex]" - update_icon() \ No newline at end of file + update_icon() + +//Fans +/obj/structure/fans + icon = 'icons/obj/lavaland/survival_pod.dmi' + icon_state = "fans" + name = "environmental regulation system" + desc = "A large machine releasing a constant gust of air." + anchored = 1 + density = 1 + var/arbitraryatmosblockingvar = 1 + var/buildstacktype = /obj/item/stack/sheet/metal + var/buildstackamount = 5 + +/obj/structure/fans/proc/deconstruct() + if(buildstacktype) + new buildstacktype(loc, buildstackamount) + qdel(src) + +/obj/structure/fans/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W, /obj/item/weapon/wrench)) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + user.visible_message("[user] disassembles the fan.", \ + "You start to disassemble the fan...", "You hear clanking and banging noises.") + if(do_after(user, 20, target = src)) + deconstruct() + return ..() + +/obj/structure/fans/tiny + name = "tiny fan" + desc = "A tiny fan, releasing a thin gust of air." + layer = TURF_LAYER+0.1 + density = 0 + icon_state = "fan_tiny" + buildstackamount = 2 + +/obj/structure/fans/New(loc) + ..() + air_update_turf(1) + +/obj/structure/fans/Destroy() + arbitraryatmosblockingvar = 0 + air_update_turf(1) + return ..() + +/obj/structure/fans/CanAtmosPass(turf/T) + return !arbitraryatmosblockingvar \ No newline at end of file diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 41b994b31b6..a76dfa9a699 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -45,10 +45,10 @@ var/global/list/rockTurfEdgeCache = list( ..() switch(severity) if(3.0) - if (prob(75)) + if(prob(75)) src.gets_drilled(null, 1) if(2.0) - if (prob(90)) + if(prob(90)) src.gets_drilled(null, 1) if(1.0) src.gets_drilled(null, 1) @@ -58,7 +58,7 @@ var/global/list/rockTurfEdgeCache = list( ..() mineral_turfs += src - if (mineralType && mineralAmt && spread && spreadChance) + if(mineralType && mineralAmt && spread && spreadChance) for(var/dir in cardinal) if(prob(spreadChance)) var/turf/T = get_step(src, dir) @@ -88,19 +88,19 @@ var/global/list/rockTurfEdgeCache = list( var/turf/T if((istype(get_step(src, NORTH), /turf/simulated/floor)) || (istype(get_step(src, NORTH), /turf/space))) T = get_step(src, NORTH) - if (T) + if(T) T.overlays += rockTurfEdgeCache[SOUTH_EDGING] if((istype(get_step(src, SOUTH), /turf/simulated/floor)) || (istype(get_step(src, SOUTH), /turf/space))) T = get_step(src, SOUTH) - if (T) + if(T) T.overlays += rockTurfEdgeCache[NORTH_EDGING] if((istype(get_step(src, EAST), /turf/simulated/floor)) || (istype(get_step(src, EAST), /turf/space))) T = get_step(src, EAST) - if (T) + if(T) T.overlays += rockTurfEdgeCache[WEST_EDGING] if((istype(get_step(src, WEST), /turf/simulated/floor)) || (istype(get_step(src, WEST), /turf/space))) T = get_step(src, WEST) - if (T) + if(T) T.overlays += rockTurfEdgeCache[EAST_EDGING] /turf/simulated/mineral/random @@ -116,10 +116,10 @@ var/global/list/rockTurfEdgeCache = list( /turf/simulated/mineral/random/New() ..() - if (prob(mineralChance)) + if(prob(mineralChance)) var/mName = pickweight(mineralSpawnChanceList) //temp mineral name - if (mName) + if(mName) var/turf/simulated/mineral/M switch(mName) if("Uranium") @@ -367,13 +367,13 @@ var/global/list/rockTurfEdgeCache = list( /turf/simulated/mineral/attackby(var/obj/item/weapon/pickaxe/P as obj, mob/user as mob, params) - if (!user.IsAdvancedToolUser()) + if(!user.IsAdvancedToolUser()) to_chat(usr, "You don't have the dexterity to do this!") return - if (istype(P, /obj/item/weapon/pickaxe)) + if(istype(P, /obj/item/weapon/pickaxe)) var/turf/T = user.loc - if (!( istype(T, /turf) )) + if(!( istype(T, /turf) )) return if(last_act+P.digspeed > world.time)//prevents message spam @@ -393,9 +393,9 @@ var/global/list/rockTurfEdgeCache = list( return /turf/simulated/mineral/proc/gets_drilled() - if (mineralType && (src.mineralAmt > 0) && (src.mineralAmt < 11)) + if(mineralType && (src.mineralAmt > 0) && (src.mineralAmt < 11)) var/i - for (i=0;iThis area has already been dug!
        ") return to_chat(user, "You start digging...") sleep(20) - if ((user.loc == T && user.get_active_hand() == W)) + if((user.loc == T && user.get_active_hand() == W)) to_chat(user, "You dig a hole.") gets_dug() return - if ((istype(W, /obj/item/weapon/pickaxe))) + if((istype(W, /obj/item/weapon/pickaxe))) var/obj/item/weapon/pickaxe/P = W var/turf/T = user.loc - if (!( istype(T, /turf) )) + if(!( istype(T, /turf) )) return - if (dug) + if(dug) to_chat(user, "This area has already been dug!") return to_chat(user, "You start digging...") sleep(P.digspeed) - if ((user.loc == T && user.get_active_hand() == W)) + if((user.loc == T && user.get_active_hand() == W)) to_chat(user, "You dig a hole.") gets_dug() return @@ -557,7 +557,7 @@ var/global/list/rockTurfEdgeCache = list( return /turf/proc/fullUpdateMineralOverlays() - for (var/turf/t in range(1,src)) + for(var/turf/t in range(1,src)) t.updateMineralOverlays() /turf/simulated/floor/plating/airless/asteroid/cave diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm index be34465c207..02b69a160d7 100644 --- a/code/modules/mining/mint.dm +++ b/code/modules/mining/mint.dm @@ -26,28 +26,28 @@ var/turf/T = get_step(src,input_dir) if(T) for(var/obj/item/stack/sheet/O in T) - if (istype(O, /obj/item/stack/sheet/mineral/gold)) + if(istype(O, /obj/item/stack/sheet/mineral/gold)) amt_gold += 100 * O.amount O.loc = null - if (istype(O, /obj/item/stack/sheet/mineral/silver)) + if(istype(O, /obj/item/stack/sheet/mineral/silver)) amt_silver += 100 * O.amount O.loc = null - if (istype(O, /obj/item/stack/sheet/mineral/diamond)) + if(istype(O, /obj/item/stack/sheet/mineral/diamond)) amt_diamond += 100 * O.amount O.loc = null - if (istype(O, /obj/item/stack/sheet/mineral/plasma)) + if(istype(O, /obj/item/stack/sheet/mineral/plasma)) amt_plasma += 100 * O.amount O.loc = null - if (istype(O, /obj/item/stack/sheet/mineral/uranium)) + if(istype(O, /obj/item/stack/sheet/mineral/uranium)) amt_uranium += 100 * O.amount O.loc = null - if (istype(O, /obj/item/stack/sheet/metal)) + if(istype(O, /obj/item/stack/sheet/metal)) amt_iron += 100 * O.amount O.loc = null - if (istype(O, /obj/item/stack/sheet/mineral/bananium)) + if(istype(O, /obj/item/stack/sheet/mineral/bananium)) amt_clown += 100 * O.amount O.loc = null - if (istype(O, /obj/item/stack/sheet/mineral/tranquillite)) + if(istype(O, /obj/item/stack/sheet/mineral/tranquillite)) amt_mime += 100 * O.amount O.loc = null return @@ -58,49 +58,49 @@ var/dat = "Coin Press
        " dat += text("
        Gold inserted: [amt_gold] ") - if (chosen == "gold") + if(chosen == "gold") dat += text("chosen") else dat += text("Choose") dat += text("
        Silver inserted: [amt_silver] ") - if (chosen == "silver") + if(chosen == "silver") dat += text("chosen") else dat += text("Choose") dat += text("
        Iron inserted: [amt_iron] ") - if (chosen == "metal") + if(chosen == "metal") dat += text("chosen") else dat += text("Choose") dat += text("
        Diamond inserted: [amt_diamond] ") - if (chosen == "diamond") + if(chosen == "diamond") dat += text("chosen") else dat += text("Choose") dat += text("
        Plasma inserted: [amt_plasma] ") - if (chosen == "plasma") + if(chosen == "plasma") dat += text("chosen") else dat += text("Choose") dat += text("
        Uranium inserted: [amt_uranium] ") - if (chosen == "uranium") + if(chosen == "uranium") dat += text("chosen") else dat += text("Choose") if(amt_clown > 0) dat += text("
        Bananium inserted: [amt_clown] ") - if (chosen == "clown") + if(chosen == "clown") dat += text("chosen") else dat += text("Choose") if(amt_mime > 0) dat += text("
        Tranquillite inserted: [amt_mime] ") - if (chosen == "mime") + if(chosen == "mime") dat += text("chosen") else dat += text("Choose") dat += text("
        Adamantine inserted: [amt_adamantine] ")//I don't even know these color codes, so fuck it. - if (chosen == "adamantine") + if(chosen == "adamantine") dat += text("chosen") else dat += text("Choose") diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm index a7a7b4b10df..8972b675e1a 100644 --- a/code/modules/mining/money_bag.dm +++ b/code/modules/mining/money_bag.dm @@ -7,7 +7,7 @@ flags = CONDUCT force = 10.0 throwforce = 0 - w_class = 4.0 + w_class = 4 /obj/item/weapon/moneybag/attack_hand(user as mob) var/amt_gold = 0 @@ -20,58 +20,58 @@ var/amt_mime = 0 var/amt_adamantine = 0 - for (var/obj/item/weapon/coin/C in contents) - if (istype(C,/obj/item/weapon/coin/diamond)) + for(var/obj/item/weapon/coin/C in contents) + if(istype(C,/obj/item/weapon/coin/diamond)) amt_diamond++ - if (istype(C,/obj/item/weapon/coin/plasma)) + if(istype(C,/obj/item/weapon/coin/plasma)) amt_plasma++ - if (istype(C,/obj/item/weapon/coin/iron)) + if(istype(C,/obj/item/weapon/coin/iron)) amt_iron++ - if (istype(C,/obj/item/weapon/coin/silver)) + if(istype(C,/obj/item/weapon/coin/silver)) amt_silver++ - if (istype(C,/obj/item/weapon/coin/gold)) + if(istype(C,/obj/item/weapon/coin/gold)) amt_gold++ - if (istype(C,/obj/item/weapon/coin/uranium)) + if(istype(C,/obj/item/weapon/coin/uranium)) amt_uranium++ - if (istype(C,/obj/item/weapon/coin/clown)) + if(istype(C,/obj/item/weapon/coin/clown)) amt_clown++ - if (istype(C,/obj/item/weapon/coin/mime)) + if(istype(C,/obj/item/weapon/coin/mime)) amt_mime++ - if (istype(C,/obj/item/weapon/coin/adamantine)) + if(istype(C,/obj/item/weapon/coin/adamantine)) amt_adamantine++ var/dat = text("The contents of the moneybag reveal...
        ") - if (amt_gold) + if(amt_gold) dat += text("Gold coins: [amt_gold] Remove one
        ") - if (amt_silver) + if(amt_silver) dat += text("Silver coins: [amt_silver] Remove one
        ") - if (amt_iron) + if(amt_iron) dat += text("Metal coins: [amt_iron] Remove one
        ") - if (amt_diamond) + if(amt_diamond) dat += text("Diamond coins: [amt_diamond] Remove one
        ") - if (amt_plasma) + if(amt_plasma) dat += text("Plasma coins: [amt_plasma] Remove one
        ") - if (amt_uranium) + if(amt_uranium) dat += text("Uranium coins: [amt_uranium] Remove one
        ") - if (amt_clown) + if(amt_clown) dat += text("Bananium coins: [amt_clown] Remove one
        ") - if (amt_mime) + if(amt_mime) dat += text("Tranquillite coins: [amt_mime] Remove one
        ") - if (amt_adamantine) + if(amt_adamantine) dat += text("Adamantine coins: [amt_adamantine] Remove one
        ") user << browse("[dat]", "window=moneybag") /obj/item/weapon/moneybag/attackby(obj/item/weapon/W as obj, mob/user as mob, params) ..() - if (istype(W, /obj/item/weapon/coin)) + if(istype(W, /obj/item/weapon/coin)) var/obj/item/weapon/coin/C = W if(!user.drop_item()) return to_chat(user, "You add the [C.name] into the bag.") contents += C - if (istype(W, /obj/item/weapon/moneybag)) + if(istype(W, /obj/item/weapon/moneybag)) var/obj/item/weapon/moneybag/C = W - for (var/obj/O in C.contents) + for(var/obj/O in C.contents) contents += O; to_chat(user, "You empty the [C.name] into the bag.") return diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 7d6750c4be4..bf4a615c2e9 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -10,11 +10,11 @@ pressure_resistance = 5*ONE_ATMOSPHERE /obj/structure/ore_box/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/ore)) + if(istype(W, /obj/item/weapon/ore)) if(!user.drop_item()) return W.loc = src - if (istype(W, /obj/item/weapon/storage)) + if(istype(W, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = W S.hide_from(usr) for(var/obj/item/weapon/ore/O in S.contents) @@ -34,52 +34,54 @@ var/amt_mime = 0 var/amt_bluespace = 0 - for (var/obj/item/weapon/ore/C in contents) - if (istype(C,/obj/item/weapon/ore/diamond)) + for(var/obj/item/weapon/ore/C in contents) + if(istype(C,/obj/item/weapon/ore/diamond)) amt_diamond++ - if (istype(C,/obj/item/weapon/ore/glass)) + if(istype(C,/obj/item/weapon/ore/glass)) amt_glass++ - if (istype(C,/obj/item/weapon/ore/plasma)) + if(istype(C,/obj/item/weapon/ore/plasma)) amt_plasma++ - if (istype(C,/obj/item/weapon/ore/iron)) + if(istype(C,/obj/item/weapon/ore/iron)) amt_iron++ - if (istype(C,/obj/item/weapon/ore/silver)) + if(istype(C,/obj/item/weapon/ore/silver)) amt_silver++ - if (istype(C,/obj/item/weapon/ore/gold)) + if(istype(C,/obj/item/weapon/ore/gold)) amt_gold++ - if (istype(C,/obj/item/weapon/ore/uranium)) + if(istype(C,/obj/item/weapon/ore/uranium)) amt_uranium++ - if (istype(C,/obj/item/weapon/ore/bananium)) + if(istype(C,/obj/item/weapon/ore/bananium)) amt_clown++ - if (istype(C,/obj/item/weapon/ore/tranquillite)) + if(istype(C,/obj/item/weapon/ore/tranquillite)) amt_mime++ - if (istype(C,/obj/item/weapon/ore/bluespace_crystal)) + if(istype(C,/obj/item/weapon/ore/bluespace_crystal)) amt_bluespace++ var/dat = text("The contents of the ore box reveal...
        ") - if (amt_gold) + if(amt_gold) dat += text("Gold ore: [amt_gold]
        ") - if (amt_silver) + if(amt_silver) dat += text("Silver ore: [amt_silver]
        ") - if (amt_iron) + if(amt_iron) dat += text("Metal ore: [amt_iron]
        ") - if (amt_glass) + if(amt_glass) dat += text("Sand: [amt_glass]
        ") - if (amt_diamond) + if(amt_diamond) dat += text("Diamond ore: [amt_diamond]
        ") - if (amt_plasma) + if(amt_plasma) dat += text("Plasma ore: [amt_plasma]
        ") - if (amt_uranium) + if(amt_uranium) dat += text("Uranium ore: [amt_uranium]
        ") - if (amt_clown) + if(amt_clown) dat += text("Bananium ore: [amt_clown]
        ") - if (amt_mime) + if(amt_mime) dat += text("Tranquillite ore: [amt_mime]
        ") - if (amt_bluespace) + if(amt_bluespace) dat += text("Bluespace crystals: [amt_bluespace]
        ") dat += text("

        Empty box") - user << browse("[dat]", "window=orebox") + var/datum/browser/popup = new(user, "orebox", name, 400, 400) + popup.set_content(dat) + popup.open(0) return /obj/structure/ore_box/Topic(href, href_list) @@ -88,7 +90,7 @@ usr.set_machine(src) src.add_fingerprint(usr) if(href_list["removeall"]) - for (var/obj/item/weapon/ore/O in contents) + for(var/obj/item/weapon/ore/O in contents) contents -= O O.loc = src.loc to_chat(usr, "You empty the box.") @@ -122,7 +124,7 @@ obj/structure/ore_box/ex_act(severity, target) to_chat(usr, "The ore box is empty.") return - for (var/obj/item/weapon/ore/O in contents) + for(var/obj/item/weapon/ore/O in contents) contents -= O O.loc = src.loc to_chat(usr, "You empty the ore box.") diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm index f6fcac54798..7e3d3f6c4bf 100644 --- a/code/modules/mob/dead/observer/login.dm +++ b/code/modules/mob/dead/observer/login.dm @@ -1,6 +1,6 @@ /mob/dead/observer/Login() ..() - if (ghostimage) + if(ghostimage) ghostimage.icon_state = src.icon_state updateghostimages() diff --git a/code/modules/mob/dead/observer/logout.dm b/code/modules/mob/dead/observer/logout.dm index f80f0100cfc..aa72e364aa0 100644 --- a/code/modules/mob/dead/observer/logout.dm +++ b/code/modules/mob/dead/observer/logout.dm @@ -1,5 +1,5 @@ /mob/dead/observer/Logout() - if (client) + if(client) client.images -= ghost_darkness_images ..() spawn(0) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index ebefadd7b3d..c20e543057e 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -36,7 +36,7 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi verbs += /mob/dead/observer/proc/dead_tele // Our new boo spell. - AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/boo(src)) + AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/boo(null)) can_reenter_corpse = flags & GHOST_CAN_REENTER started_as_observer = flags & GHOST_IS_OBSERVER @@ -44,16 +44,12 @@ 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? attack_log = body.attack_log //preserve our attack logs by copying them to our ghost - if (ishuman(body)) + if(ishuman(body)) var/mob/living/carbon/human/H = body icon = H.stand_icon overlays = H.overlays_standing @@ -77,6 +73,14 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi 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) @@ -90,7 +94,7 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi var/mob/M = following M.following_mobs -= src following = null - if (ghostimage) + if(ghostimage) ghost_darkness_images -= ghostimage qdel(ghostimage) ghostimage = null @@ -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 @@ -153,19 +157,24 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp resting = 1 var/mob/dead/observer/ghost = ghostize(0) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly. - var/obj/structure/morgue/Morgue = locate() in M.loc - if(istype(M.loc,/obj/structure/morgue)) + if(istype(M.loc, /obj/structure/morgue)) Morgue = M.loc if(Morgue) Morgue.update() - + if(istype(M.loc, /obj/machinery/cryopod)) + var/obj/machinery/cryopod/P = M.loc + if(!P.control_computer) + P.find_control_computer(urgent=1) + if(P.control_computer) + P.despawn_occupant() return /mob/dead/observer/Move(NewLoc, direct) following = null dir = direct + ghostimage.dir = dir if(NewLoc) forceMove(NewLoc) return @@ -196,7 +205,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/Stat() ..() statpanel("Status") - if (client.statpanel == "Status") + if(client.statpanel == "Status") show_stat_station_time() if(ticker) if(ticker.mode) @@ -248,7 +257,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] @@ -357,6 +366,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 @@ -406,7 +418,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(istype(usr, /mob/dead/observer)) //Make sure they're an observer! - if (!target)//Make sure we actually have a target + if(!target)//Make sure we actually have a target return else var/mob/M = getmobs()[target] //Destination mob @@ -449,7 +461,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!istype(usr, /mob/dead/observer)) return // Shamelessly copied from the Gas Analyzers - if (!( istype(usr.loc, /turf) )) + if(!( istype(usr.loc, /turf) )) return var/datum/gas_mixture/environment = usr.loc.return_air() @@ -506,8 +518,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp //this is called when a ghost is drag clicked to something. /mob/dead/observer/MouseDrop(atom/over) if(!usr || !over) return - if (isobserver(usr) && usr.client && usr.client.holder) - if (usr.client.holder.cmd_ghost_drag(src,over)) + if(isobserver(usr) && usr.client && usr.client.holder) + if(usr.client.holder.cmd_ghost_drag(src,over)) return return ..() @@ -535,17 +547,17 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return ..() - if (href_list["track"]) + if(href_list["track"]) var/atom/target = locate(href_list["track"]) if(target) ManualFollow(target) - if (href_list["follow"]) + if(href_list["follow"]) var/atom/target = locate(href_list["follow"]) if(target) ManualFollow(target) - if (href_list["jump"]) + if(href_list["jump"]) var/mob/target = locate(href_list["jump"]) var/mob/A = usr; to_chat(A, "Teleporting to [target]...") @@ -594,27 +606,27 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp updateghostsight() /mob/dead/observer/proc/updateghostsight() - if (!seedarkness) + if(!seedarkness) see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING else see_invisible = SEE_INVISIBLE_OBSERVER - if (!ghostvision) + if(!ghostvision) see_invisible = SEE_INVISIBLE_LIVING; updateghostimages() /proc/updateallghostimages() - for (var/mob/dead/observer/O in player_list) + for(var/mob/dead/observer/O in player_list) O.updateghostimages() /mob/dead/observer/proc/updateghostimages() - if (!client) + if(!client) return - if (seedarkness || !ghostvision) + if(seedarkness || !ghostvision) client.images -= ghost_darkness_images else //add images for the 60inv things ghosts can normally see when darkness is enabled so they can see them now client.images |= ghost_darkness_images - if (ghostimage) + if(ghostimage) client.images -= ghostimage //remove ourself /mob/proc/can_admin_interact() diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index a6269b96d36..fb5b7735633 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -1,21 +1,39 @@ /mob/dead/observer/say(var/message) message = sanitize(copytext(message, 1, MAX_MESSAGE_LEN)) - if (!message) + if(!message) return log_say("Ghost/[src.key] : [message]") - if (src.client) + if(src.client) if(src.client.prefs.muted & MUTE_DEADCHAT) to_chat(src, "\red You cannot talk in deadchat (muted).") return - if (src.client.handle_spam_prevention(message,MUTE_DEADCHAT)) + 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/dead/observer/spells.dm b/code/modules/mob/dead/observer/spells.dm index 993f2b6e344..39dae4c0746 100644 --- a/code/modules/mob/dead/observer/spells.dm +++ b/code/modules/mob/dead/observer/spells.dm @@ -20,6 +20,7 @@ var/global/list/boo_phrases=list( school = "transmutation" charge_max = 600 clothes_req = 0 + stat_allowed = 1 invocation = "" invocation_type = "none" range = 1 // Or maybe 3? diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm new file mode 100644 index 00000000000..ecdc6a0220a --- /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/hear_say.dm b/code/modules/mob/hear_say.dm index 47004016a2b..af1dab9098c 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -1,51 +1,54 @@ // At minimum every mob has a hear_say proc. -/mob/proc/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) +/mob/proc/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "", var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) if(!client) - return + return 0 - if(speaker && !speaker.client && istype(src,/mob/dead/observer) && client.prefs.toggles & CHAT_GHOSTEARS && !speaker in view(src)) + if(isobserver(src) && client.prefs.toggles & CHAT_GHOSTEARS) + if(speaker && !speaker.client && !(speaker in view(src))) //Does the speaker have a client? It's either random stuff that observers won't care about (Experiment 97B says, 'EHEHEHEHEHEHEHE') //Or someone snoring. So we make it where they won't hear it. - return + return 0 //make sure the air can transmit speech - hearer's side var/turf/T = get_turf(src) - if ((T) && (!(istype(src, /mob/dead/observer)))) //Ghosts can hear even in vacuum. + if(T && !isobserver(src)) var/datum/gas_mixture/environment = T.return_air() - var/pressure = (environment)? environment.return_pressure() : 0 + var/pressure = environment ? environment.return_pressure() : 0 if(pressure < SOUND_MINIMUM_PRESSURE && get_dist(speaker, src) > 1) - return + return 0 - if (pressure < ONE_ATMOSPHERE*0.4) //sound distortion pressure, to help clue people in that the air is thin, even if it isn't a vacuum yet + if(pressure < ONE_ATMOSPHERE * 0.4) //sound distortion pressure, to help clue people in that the air is thin, even if it isn't a vacuum yet italics = 1 - sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact + sound_vol *= 0.5 - if(sleeping || stat == 1) + if(sleeping || stat == UNCONSCIOUS) hear_sleep(message) - return + return 0 //non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet. - if (language && (language.flags & NONVERBAL)) - if (!speaker || (src.sdisabilities & BLIND || src.blinded) || !(speaker in view(src))) + if(language && (language.flags & NONVERBAL)) + if(disabilities & BLIND || blinded) //blind people can't see dumbass message = stars(message) - if(!(language && (language.flags & INNATE))) // skip understanding checks for INNATE languages - if(!say_understands(speaker,language)) - if(istype(speaker,/mob/living/simple_animal)) - var/mob/living/simple_animal/S = speaker - if(S.speak.len) - message = pick(S.speak) - else - stars(message) + if(!speaker || !(speaker in view(src))) + message = stars(message) + + if(!say_understands(speaker, language)) + if(isanimal(speaker)) + var/mob/living/simple_animal/S = speaker + if(S.speak.len) + message = pick(S.speak) else - if(language) - message = language.scramble(message) - else - message = stars(message) + message = stars(message) + else + if(language) + message = language.scramble(message) + else + message = stars(message) var/speaker_name = speaker.name - if(istype(speaker, /mob/living/carbon/human)) + if(ishuman(speaker)) var/mob/living/carbon/human/H = speaker speaker_name = H.GetVoice() @@ -53,7 +56,7 @@ message = "[message]" var/track = null - if(istype(src, /mob/dead/observer)) + if(isobserver(src)) if(italics && client.prefs.toggles & CHAT_GHOSTRADIO) return if(speaker_name != speaker.real_name && speaker.real_name) @@ -62,7 +65,7 @@ if(client.prefs.toggles & CHAT_GHOSTEARS && speaker in view(src)) message = "[message]" - if(sdisabilities & DEAF || ear_deaf) + if(disabilities & DEAF || ear_deaf) if(!language || !(language.flags & INNATE)) // INNATE is the flag for audible-emote-language, so we don't want to show an "x talks but you cannot hear them" message if it's set if(speaker == src) to_chat(src, "You cannot hear yourself speak!") @@ -73,17 +76,16 @@ to_chat(src, "[speaker_name][alt_name] [track][language.format_message(message, verb)]") else to_chat(src, "[speaker_name][alt_name] [track][verb], \"[message]\"") - if (speech_sound && (get_dist(speaker, src) <= world.view && src.z == speaker.z)) + if(speech_sound && (get_dist(speaker, src) <= world.view && src.z == speaker.z)) var/turf/source = speaker? get_turf(speaker) : get_turf(src) src.playsound_local(source, speech_sound, sound_vol, 1) -/mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="", var/atom/follow_target) - +/mob/proc/hear_radio(var/message, var/verb = "says", var/datum/language/language = null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0, var/vname = "", var/atom/follow_target) if(!client) return - if(sleeping || stat==1) //If unconscious or sleeping + if(sleeping || stat == UNCONSCIOUS) //If unconscious or sleeping hear_sleep(message) return @@ -92,26 +94,28 @@ follow_target = speaker //non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet. - if (language && (language.flags & NONVERBAL)) - if (!speaker || (src.sdisabilities & BLIND || src.blinded) || !(speaker in view(src))) + if(language && (language.flags & NONVERBAL)) + if(disabilities & BLIND || blinded) //blind people can't see dumbass message = stars(message) - if(!(language && (language.flags & INNATE))) // skip understanding checks for INNATE languages - if(!say_understands(speaker,language)) - if(isanimal(speaker)) - var/mob/living/simple_animal/S = speaker - if(S.speak && S.speak.len) - message = pick(S.speak) - else - return + if(!speaker || !(speaker in view(src))) + message = stars(message) + + if(!say_understands(speaker, language)) + if(isanimal(speaker)) + var/mob/living/simple_animal/S = speaker + if(S.speak && S.speak.len) + message = pick(S.speak) else - if(language) - message = language.scramble(message) - else - message = stars(message) + return + else + if(language) + message = language.scramble(message) + else + message = stars(message) - if(hard_to_hear) - message = stars(message) + if(hard_to_hear) + message = stars(message) var/speaker_name = "unknown" if(speaker) @@ -128,7 +132,7 @@ var/jobname // the mob's "job" var/mob/living/carbon/human/impersonating //The crewmember being impersonated, if any. - if (ishuman(speaker)) + if(ishuman(speaker)) var/mob/living/carbon/human/H = speaker var/obj/item/weapon/card/id/id = H.wear_id @@ -143,15 +147,15 @@ else jobname = H.get_assignment() - else if (iscarbon(speaker)) // Nonhuman carbon mob + else if(iscarbon(speaker)) // Nonhuman carbon mob jobname = "No ID" - else if (isAI(speaker)) + else if(isAI(speaker)) jobname = "AI" - else if (isrobot(speaker)) + else if(isrobot(speaker)) jobname = "Cyborg" - else if (ispAI(speaker)) + else if(ispAI(speaker)) jobname = "Personal AI" - else if (isAutoAnnouncer(speaker)) + else if(isAutoAnnouncer(speaker)) var/mob/living/automatedannouncer/AA = speaker jobname = AA.role else @@ -178,7 +182,7 @@ formatted = language.format_message_radio(message, verb) else formatted = "[verb], \"[message]\"" - if(sdisabilities & DEAF || ear_deaf) + if(disabilities & DEAF || ear_deaf) if(prob(20)) to_chat(src, "You feel your headset vibrate but can hear nothing from it!") else if(track) 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/inventory.dm b/code/modules/mob/inventory.dm index bbc313e0421..559dac3abbf 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -165,7 +165,7 @@ return list(wear_mask, back, l_hand, r_hand) /mob/proc/get_id_card() - for(var/obj/item/I in src.get_all_slots()) + for(var/obj/item/I in get_all_slots()) . = I.GetID() if(.) break diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 6abd4acd6fc..abe6742fecc 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -276,6 +276,24 @@ flags = RESTRICTED | WHITELISTED syllables = list("blob","plop","pop","bop","boop") +/datum/language/grey + name = "Psionic Communication" + desc = "The grey's psionic communication, less potent version of their distant cousin's telepathy. Talk to other greys within a limited radius." + speech_verb = "expresses" + ask_verb = "inquires" + exclaim_verb = "imparts" + colour = "abductor" + key = "^" + flags = RESTRICTED | HIVEMIND + +/datum/language/grey/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) + ..(speaker,message,speaker.real_name) + +/datum/language/grey/check_special_condition(var/mob/living/carbon/human/other, var/mob/living/carbon/human/speaker) + if(other in range(7, speaker)) + return 1 + return 0 + /datum/language/drask name = "Orluum" desc = "The droning, vibrous language of the Drask. It sounds somewhat like whalesong." @@ -354,7 +372,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") @@ -500,24 +518,24 @@ if(!speaker.binarycheck()) return - if (!message) + if(!message) return var/message_start = "[name], [speaker.name]" var/message_body = "[speaker.say_quote(message)], \"[message]\"" - for (var/mob/M in dead_mob_list) + for(var/mob/M in dead_mob_list) if(!istype(M,/mob/new_player) && !istype(M,/mob/living/carbon/brain)) var/message_start_dead = "[name], [speaker.name] ([ghost_follow_link(speaker, ghost=M)])" M.show_message("[message_start_dead] [message_body]", 2) - for (var/mob/living/S in living_mob_list) + for(var/mob/living/S in living_mob_list) if(drone_only && !istype(S,/mob/living/silicon/robot/drone)) continue else if(istype(S , /mob/living/silicon/ai)) message_start = "[name], [speaker.name]" - else if (!S.binarycheck()) + else if(!S.binarycheck()) continue S.show_message("[message_start] [message_body]", 2) @@ -525,17 +543,11 @@ var/list/listening = hearers(1, src) listening -= src - for (var/mob/living/M in listening) + for(var/mob/living/M in listening) if(istype(M, /mob/living/silicon) || M.binarycheck()) continue M.show_message("synthesised voice beeps, \"beep beep beep\"",2) - //robot binary xmitter component power usage - if (isrobot(speaker)) - var/mob/living/silicon/robot/R = speaker - var/datum/robot_component/C = R.components["comms"] - R.use_power(C.energy_consumption) - /datum/language/binary/drone name = "Drone Talk" desc = "A heavily encoded damage control coordination stream." diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 6192b0acc6b..124a1120df6 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -118,11 +118,11 @@ /mob/living/carbon/alien/handle_mutations_and_radiation() // Aliens love radiation nom nom nom - if (radiation) - if (radiation > 100) + if(radiation) + if(radiation > 100) radiation = 100 - if (radiation < 0) + if(radiation < 0) radiation = 0 switch(radiation) @@ -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 @@ -228,8 +228,8 @@ Proc: AddInfectionImages() Des: Gives the client of the alien an image on each infected mob. ----------------------------------------*/ /mob/living/carbon/alien/proc/AddInfectionImages() - if (client) - for (var/mob/living/C in mob_list) + if(client) + for(var/mob/living/C in mob_list) if(C.status_flags & XENO_HOST) var/obj/item/organ/internal/body_egg/alien_embryo/A = C.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) if(A) @@ -243,7 +243,7 @@ Proc: RemoveInfectionImages() Des: Removes all infected images from the alien. ----------------------------------------*/ /mob/living/carbon/alien/proc/RemoveInfectionImages() - if (client) + if(client) for(var/image/I in client.images) if(dd_hasprefix_case(I.icon_state, "infected")) qdel(I) diff --git a/code/modules/mob/living/carbon/alien/alien_defenses.dm b/code/modules/mob/living/carbon/alien/alien_defenses.dm index 397a14fc259..3f2e2d28b78 100644 --- a/code/modules/mob/living/carbon/alien/alien_defenses.dm +++ b/code/modules/mob/living/carbon/alien/alien_defenses.dm @@ -6,17 +6,17 @@ As such, they can either help or harm other aliens. Help works like the human he In all, this is a lot like the monkey code. /N */ /mob/living/carbon/alien/attack_alien(mob/living/carbon/alien/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return - if (istype(loc, /turf) && istype(loc.loc, /area/start)) + if(istype(loc, /turf) && istype(loc.loc, /area/start)) to_chat(M, "No attacking people at spawn, you jackass.") return switch(M.a_intent) - if (I_HELP) + if(I_HELP) sleeping = max(0,sleeping-5) resting = 0 AdjustParalysis(-3) @@ -24,12 +24,12 @@ In all, this is a lot like the monkey code. /N AdjustWeakened(-3) visible_message("[M.name] nuzzles [src] trying to wake it up!") - if (I_GRAB) + if(I_GRAB) src.grabbedby(M) return 1 else - if (health > 0) + if(health > 0) playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) var/damage = 1 visible_message("[M.name] bites [src]!", \ @@ -57,7 +57,7 @@ In all, this is a lot like the monkey code. /N help_shake_act(M) if(I_GRAB) src.grabbedby(M) - if (I_HARM, I_DISARM) + if(I_HARM, I_DISARM) return 1 return 0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 9311ab0592f..28439ab0ff2 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -57,10 +57,10 @@ Doesn't work on other aliens/AI.*/ if(isalien(M)) var/amount = input("Amount:", "Transfer Plasma to [M]") as num - if (amount) + if(amount) amount = abs(round(amount)) if(powerc(amount)) - if (get_dist(src,M) <= 1) + if(get_dist(src,M) <= 1) M.adjustPlasma(amount) adjustPlasma(-amount) to_chat(M, "[src] has transfered [amount] plasma to you.") diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index a5e72059ab8..f0af54a45ab 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -18,8 +18,8 @@ /mob/living/carbon/alien/humanoid/hunter/handle_regular_hud_updates() ..() //-Yvarov - if (healths) - if (stat != 2) + if(healths) + if(stat != 2) switch(health) if(125 to INFINITY) healths.icon_state = "health0" @@ -85,7 +85,7 @@ leaping = 0 update_icons() -/mob/living/carbon/alien/humanoid/hunter/throw_impact(A) +/mob/living/carbon/alien/humanoid/hunter/throw_impact(atom/A) if(!leaping) return ..() @@ -93,20 +93,26 @@ if(A) if(istype(A, /mob/living)) var/mob/living/L = A - L.visible_message("[src] pounces on [L]!", "[src] pounces on you!") - if(ishuman(L)) - var/mob/living/carbon/human/H = L - H.apply_effect(5, WEAKEN, H.run_armor_check(null, "melee")) - else - L.Weaken(5) - sleep(2)//Runtime prevention (infinite bump() calls on hulks) - step_towards(src,L) + var/blocked = 0 + if(ishuman(A)) + var/mob/living/carbon/human/H = A + if(H.check_shields(90, "the [name]", src, attack_type = THROWN_PROJECTILE_ATTACK)) + blocked = 1 + if(!blocked) + L.visible_message("[src] pounces on [L]!", "[src] pounces on you!") + if(ishuman(L)) + var/mob/living/carbon/human/H = L + H.apply_effect(5, WEAKEN, H.run_armor_check(null, "melee")) + else + L.Weaken(5) + sleep(2)//Runtime prevention (infinite bump() calls on hulks) + step_towards(src,L) toggle_leap(0) pounce_cooldown = !pounce_cooldown spawn(pounce_cooldown_time) //3s by default pounce_cooldown = !pounce_cooldown - else + else if(A.density && !A.CanPass(src)) visible_message("[src] smashes into [A]!", "[src] smashes into [A]!") weakened = 2 diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index 831d01dbc87..d93fb0a835c 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -49,8 +49,8 @@ /mob/living/carbon/alien/humanoid/sentinel/handle_regular_hud_updates() ..() //-Yvarov - if (healths) - if (stat != 2) + if(healths) + if(stat != 2) switch(health) if(150 to INFINITY) healths.icon_state = "health0" 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..05eb2c8e226 --- /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/humanoid/empress.dm b/code/modules/mob/living/carbon/alien/humanoid/empress.dm index ffc8e04429e..d2553c9a28f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/empress.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/empress.dm @@ -56,8 +56,8 @@ ..() //-Yvarov - if (src.healths) - if (src.stat != 2) + if(src.healths) + if(src.stat != 2) switch(health) if(250 to INFINITY) src.healths.icon_state = "health0" diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 90fe6537759..9f47fc9910c 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -29,22 +29,22 @@ //This is fine, works the same as a human /mob/living/carbon/alien/humanoid/Bump(atom/movable/AM as mob|obj, yes) spawn( 0 ) - if ((!( yes ) || now_pushing)) + if((!( yes ) || now_pushing)) return now_pushing = 0 ..() - if (!istype(AM, /atom/movable)) + if(!istype(AM, /atom/movable)) return - if (ismob(AM)) + if(ismob(AM)) var/mob/tmob = AM tmob.LAssailant = src - if (!now_pushing) + if(!now_pushing) now_pushing = 1 - if (!AM.anchored) + if(!AM.anchored) var/t = get_dir(src, AM) - if (istype(AM, /obj/structure/window/full)) + if(istype(AM, /obj/structure/window/full)) for(var/obj/structure/window/win in get_step(AM,t)) now_pushing = 0 return @@ -55,13 +55,13 @@ /mob/living/carbon/alien/humanoid/movement_delay() var/tally = 0 - if (istype(src, /mob/living/carbon/alien/humanoid/queen)) + if(istype(src, /mob/living/carbon/alien/humanoid/queen)) tally += 4 - if (istype(src, /mob/living/carbon/alien/humanoid/drone)) + if(istype(src, /mob/living/carbon/alien/humanoid/drone)) tally += 0 - if (istype(src, /mob/living/carbon/alien/humanoid/sentinel)) + if(istype(src, /mob/living/carbon/alien/humanoid/sentinel)) tally += 0 - if (istype(src, /mob/living/carbon/alien/humanoid/hunter)) + if(istype(src, /mob/living/carbon/alien/humanoid/hunter)) tally = -2 // hunters go supersuperfast return (tally + move_delay_add + config.alien_delay) @@ -85,26 +85,24 @@ var/b_loss = null var/f_loss = null - switch (severity) - if (1.0) + switch(severity) + if(1.0) gib() return - if (2.0) - if (!shielded) + if(2.0) + if(!shielded) b_loss += 60 f_loss += 60 - ear_damage += 30 - ear_deaf += 120 + adjustEarDamage(30, 120) if(3.0) b_loss += 30 - if (prob(50) && !shielded) + if(prob(50) && !shielded) Paralyse(1) - ear_damage += 15 - ear_deaf += 60 + adjustEarDamage(15,60) adjustBruteLoss(b_loss) adjustFireLoss(f_loss) @@ -112,13 +110,13 @@ updatehealth() /mob/living/carbon/alien/humanoid/attack_slime(mob/living/carbon/slime/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return if(M.Victim) return // can't attack while eating! - if (stat > -100) + if(stat > -100) M.do_attack_animation(src) visible_message("The [M.name] glomps [src]!", \ @@ -153,7 +151,7 @@ "The [M.name] has shocked [src]!") Weaken(power) - if (stuttering < power) + if(stuttering < power) stuttering = power Stun(power) @@ -161,7 +159,7 @@ s.set_up(5, 1, src) s.start() - if (prob(stunprob) && M.powerlevel >= 8) + if(prob(stunprob) && M.powerlevel >= 8) adjustFireLoss(M.powerlevel * rand(6,10)) @@ -183,11 +181,11 @@ updatehealth() /mob/living/carbon/alien/humanoid/attack_hand(mob/living/carbon/human/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return - if (istype(loc, /turf) && istype(loc.loc, /area/start)) + if(istype(loc, /turf) && istype(loc.loc, /area/start)) to_chat(M, "No attacking people at spawn, you jackass.") return @@ -196,17 +194,17 @@ switch(M.a_intent) - if (I_HELP) + if(I_HELP) help_shake_act(M) - if (I_GRAB) + if(I_GRAB) grabbedby(M) - if (I_HARM) + if(I_HARM) M.do_attack_animation(src) var/damage = rand(1, 9) - if (prob(90)) - if (HULK in M.mutations)//HULK SMASH + if(prob(90)) + if(HULK in M.mutations)//HULK SMASH damage = 15 spawn(0) Paralyse(1) @@ -216,7 +214,7 @@ playsound(loc, "punch", 25, 1, -1) visible_message("[M] has punched [src]!", \ "[M] has punched [src]!") - if ((stat != DEAD) && (damage > 9||prob(5)))//Regular humans have a very small chance of weakening an alien. + if((stat != DEAD) && (damage > 9||prob(5)))//Regular humans have a very small chance of weakening an alien. Paralyse(2) visible_message("[M] has weakened [src]!", \ "[M] has weakened [src]!", \ @@ -227,15 +225,15 @@ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to punch [src]!") - if (I_DISARM) - if (!lying) - if (prob(5))//Very small chance to push an alien down. + if(I_DISARM) + if(!lying) + if(prob(5))//Very small chance to push an alien down. Paralyse(2) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) visible_message("[M] has pushed down [src]!", \ "[M] has pushed down [src]!") else - if (prob(50)) + if(prob(50)) drop_item() playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) visible_message("[M] has disarmed [src]!", \ @@ -251,11 +249,11 @@ In all, this is a lot like the monkey code. /N */ /mob/living/carbon/alien/humanoid/attack_alien(mob/living/carbon/alien/humanoid/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return - if (istype(loc, /turf) && istype(loc.loc, /area/start)) + if(istype(loc, /turf) && istype(loc.loc, /area/start)) to_chat(M, "No attacking people at spawn, you jackass.") return @@ -263,7 +261,7 @@ In all, this is a lot like the monkey code. /N switch(M.a_intent) - if (I_HELP) + if(I_HELP) sleeping = max(0,sleeping-5) resting = 0 AdjustParalysis(-3) @@ -272,7 +270,7 @@ In all, this is a lot like the monkey code. /N visible_message("[M.name] nuzzles [src] trying to wake it up!") else - if (health > 0) + if(health > 0) M.do_attack_animation(src) playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) var/damage = rand(1, 3) @@ -294,7 +292,7 @@ In all, this is a lot like the monkey code. /N else - if (health > 0) + if(health > 0) L.do_attack_animation(src) playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) var/damage = rand(1, 3) @@ -310,7 +308,7 @@ In all, this is a lot like the monkey code. /N /mob/living/carbon/alien/humanoid/restrained() - if (handcuffed) + if(handcuffed) return 1 return 0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index b41d5a9705d..4cccb6e57ed 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -15,24 +15,24 @@ /mob/living/carbon/alien/humanoid/handle_disabilities() - if (disabilities & EPILEPSY) - if ((prob(1) && paralysis < 10)) + if(disabilities & EPILEPSY) + if((prob(1) && paralysis < 10)) to_chat(src, "You have a seizure!") Paralyse(10) - if (disabilities & COUGHING) - if ((prob(5) && paralysis <= 1)) + if(disabilities & COUGHING) + if((prob(5) && paralysis <= 1)) drop_item() spawn( 0 ) emote("cough") return - if (disabilities & TOURETTES) - if ((prob(10) && paralysis <= 1)) + if(disabilities & TOURETTES) + if((prob(10) && paralysis <= 1)) Stun(10) spawn( 0 ) emote("twitch") return - if (disabilities & NERVOUS) - if (prob(10)) + if(disabilities & NERVOUS) + if(prob(10)) stuttering = max(10, stuttering) /mob/living/carbon/alien/humanoid/proc/adjust_body_temperature(current, loc_temp, boost) @@ -59,7 +59,7 @@ blinded = 1 silent = 0 else //ALIVE. LIGHTS ARE ON - if(health < config.health_threshold_dead || brain_op_stage == 4.0) + if(health < config.health_threshold_dead || !get_int_organ(/obj/item/organ/internal/brain)) death() blinded = 1 stat = DEAD @@ -95,7 +95,7 @@ move_delay_add = max(0, move_delay_add - rand(1, 2)) //Eyes - if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own + if(disabilities & BLIND) //disabled-blind, doesn't get better on its own blinded = 1 else if(eye_blind) //blindness, heals slowly over time eye_blind = max(eye_blind-1,0) @@ -104,12 +104,12 @@ eye_blurry = max(eye_blurry-1, 0) //Ears - if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own - ear_deaf = max(ear_deaf, 1) + if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own + setEarDamage(-1, max(ear_deaf, 1)) else if(ear_deaf) //deafness, heals slowly over time - ear_deaf = max(ear_deaf-1, 0) + adjustEarDamage(0,-1) else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs - ear_damage = max(ear_damage-0.05, 0) + adjustEarDamage(-0.05, 0) //Other if(stunned) diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 2b5060468a1..daba3852764 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -34,8 +34,8 @@ /mob/living/carbon/alien/humanoid/queen/handle_regular_hud_updates() ..() //-Yvarov - if (healths) - if (stat != DEAD) + if(healths) + if(stat != DEAD) switch(health) if(250 to INFINITY) healths.icon_state = "health0" @@ -88,37 +88,4 @@ icon_state = "queen_s" for(var/image/I in overlays_standing) - overlays += I - - -/* -/mob/living/carbon/alien/humanoid/queen/verb/evolve() // -- TLE - set name = "Evolve (1000)" - set desc = "The ultimate transformation. Become an alien Empress. Only one empress can exist at a time." - set category = "Alien" - - if(powerc(1000)) - // Queen check - var/no_queen = 1 - for(var/mob/living/carbon/alien/humanoid/empress/E in living_mob_list) - if(!E.key && E.brain_op_stage != 4) - continue - no_queen = 0 - - if(no_queen) - adjustToxLoss(-1000) - to_chat(src, "You begin to evolve!") - for(var/mob/O in viewers(src, null)) - O.show_message(text("[src] begins to twist and contort!"), 1) - var/mob/living/carbon/alien/humanoid/empress/new_xeno = new(loc) - if(mind) - mind.transfer_to(new_xeno) - else - new_xeno.key = key - new_xeno.mind.name = new_xeno.name - qdel(src) - else - to_chat(src, "We already have an alive empress.") - return - -*/ \ No newline at end of file + overlays += I \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index fb489552f78..898d23de066 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -56,7 +56,7 @@ /mob/living/carbon/alien/humanoid/regenerate_icons() ..() - if (notransform) return + if(notransform) return update_inv_head(0,0) update_inv_wear_suit(0,0) @@ -103,7 +103,7 @@ t_suit = "armor" standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "[t_suit]blood") - if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) + if(istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) unEquip(handcuffed) drop_r_hand() drop_l_hand() @@ -115,7 +115,7 @@ /mob/living/carbon/alien/humanoid/update_inv_head(var/update_icons=1) - if (head) + if(head) var/t_state = head.item_state if(!t_state) t_state = head.icon_state var/image/standing = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "[t_state]") 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..01d834b07cf --- /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/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index a513ab76a90..19f3368ce96 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -31,7 +31,7 @@ /mob/living/carbon/alien/larva/Bump(atom/movable/AM as mob|obj, yes) spawn( 0 ) - if ((!( yes ) || now_pushing)) + if((!( yes ) || now_pushing)) return now_pushing = 1 if(ismob(AM)) @@ -48,11 +48,11 @@ now_pushing = 0 ..() - if (!( istype(AM, /atom/movable) )) + if(!( istype(AM, /atom/movable) )) return - if (!( now_pushing )) + if(!( now_pushing )) now_pushing = 1 - if (!( AM.anchored )) + if(!( AM.anchored )) var/t = get_dir(src, AM) step(AM, t) now_pushing = null @@ -76,26 +76,24 @@ var/b_loss = null var/f_loss = null - switch (severity) - if (1.0) + switch(severity) + if(1.0) gib() return - if (2.0) + if(2.0) b_loss += 60 f_loss += 60 - ear_damage += 30 - ear_deaf += 120 + adjustEarDamage(30,120) if(3.0) b_loss += 30 - if (prob(50)) + if(prob(50)) Paralyse(1) - ear_damage += 15 - ear_deaf += 60 + adjustEarDamage(15,60) adjustBruteLoss(b_loss) adjustFireLoss(f_loss) @@ -123,14 +121,14 @@ /mob/living/carbon/alien/larva/attack_slime(mob/living/carbon/slime/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return if(M.Victim) return // can't attack while eating! - if (stat != DEAD) + if(stat != DEAD) M.do_attack_animation(src) visible_message("The [M.name] glomps [src]!", \ "The [M.name] glomps [src]!") @@ -148,11 +146,11 @@ return /mob/living/carbon/alien/larva/attack_hand(mob/living/carbon/human/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return - if (istype(loc, /turf) && istype(loc.loc, /area/start)) + if(istype(loc, /turf) && istype(loc.loc, /area/start)) to_chat(M, "No attacking people at spawn, you jackass.") return @@ -160,17 +158,17 @@ switch(M.a_intent) - if (I_HELP) + if(I_HELP) help_shake_act(M) - if (I_GRAB) + if(I_GRAB) grabbedby(M) else M.do_attack_animation(src) var/damage = rand(1, 9) - if (prob(90)) - if (HULK in M.mutations) + if(prob(90)) + if(HULK in M.mutations) damage += 5 spawn(0) Paralyse(1) @@ -180,7 +178,7 @@ playsound(loc, "punch", 25, 1, -1) visible_message("[M] has kicked [src]!", \ "[M] has kicked [src]!") - if ((stat != DEAD) && (damage > 4.9)) + if((stat != DEAD) && (damage > 4.9)) Paralyse(rand(5,10)) visible_message("[M] has weakened [src]!", \ "[M] has weakened [src]!", \ @@ -194,11 +192,11 @@ return /mob/living/carbon/alien/larva/attack_alien(mob/living/carbon/alien/humanoid/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return - if (istype(loc, /turf) && istype(loc.loc, /area/start)) + if(istype(loc, /turf) && istype(loc.loc, /area/start)) to_chat(M, "No attacking people at spawn, you jackass.") return @@ -206,7 +204,7 @@ switch(M.a_intent) - if (I_HELP) + if(I_HELP) sleeping = max(0,sleeping-5) resting = 0 AdjustParalysis(-3) @@ -215,7 +213,7 @@ visible_message("[M.name] nuzzles [src] trying to wake it up!") else - if (health > 0) + if(health > 0) M.do_attack_animation(src) playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) var/damage = 1 diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 4e7b974d855..76ceef6ad2e 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -19,7 +19,7 @@ blinded = 1 silent = 0 else //ALIVE. LIGHTS ARE ON - if(health < -25 || brain_op_stage == 4.0) + if(health < -25 || !get_int_organ(/obj/item/organ/internal/brain)) death() blinded = 1 silent = 0 @@ -54,7 +54,7 @@ move_delay_add = max(0, move_delay_add - rand(1, 2)) //Eyes - if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own + if(disabilities & BLIND) //disabled-blind, doesn't get better on its own blinded = 1 else if(eye_blind) //blindness, heals slowly over time eye_blind = max(eye_blind-1,0) @@ -63,12 +63,12 @@ eye_blurry = max(eye_blurry-1, 0) //Ears - if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own - ear_deaf = max(ear_deaf, 1) + if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own + setEarDamage(-1, max(ear_deaf, 1)) else if(ear_deaf) //deafness, heals slowly over time - ear_deaf = max(ear_deaf-1, 0) + adjustEarDamage(0,-1) else if(ear_damage < 25) //ear damage heals slowly under this threshold. - ear_damage = max(ear_damage-0.05, 0) + adjustEarDamage(-0.05,0) //Other if(stunned) diff --git a/code/modules/mob/living/carbon/alien/larva/powers.dm b/code/modules/mob/living/carbon/alien/larva/powers.dm index 44351eb792a..678e4211b0d 100644 --- a/code/modules/mob/living/carbon/alien/larva/powers.dm +++ b/code/modules/mob/living/carbon/alien/larva/powers.dm @@ -7,17 +7,17 @@ if(stat != CONSCIOUS) return - if (layer != TURF_LAYER+0.2) + if(layer != TURF_LAYER+0.2) layer = TURF_LAYER+0.2 to_chat(src, text("You are now hiding.")) for(var/mob/O in oviewers(src, null)) - if ((O.client && !( O.blinded ))) + if((O.client && !( O.blinded ))) to_chat(O, text("[] scurries to the ground!", src)) else layer = MOB_LAYER to_chat(src, text("\green You have stopped hiding.")) for(var/mob/O in oviewers(src, null)) - if ((O.client && !( O.blinded ))) + if((O.client && !( O.blinded ))) to_chat(O, text("[] slowly peaks up from the ground...", src)) /mob/living/carbon/alien/larva/verb/evolve() diff --git a/code/modules/mob/living/carbon/alien/larva/update_icons.dm b/code/modules/mob/living/carbon/alien/larva/update_icons.dm index 104811c4fc1..697d6413c02 100644 --- a/code/modules/mob/living/carbon/alien/larva/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/larva/update_icons.dm @@ -12,11 +12,11 @@ if(stat == DEAD) icon_state = "larva[state]_dead" - else if (handcuffed || legcuffed) //This should be an overlay. Who made this an icon_state? + else if(handcuffed || legcuffed) //This should be an overlay. Who made this an icon_state? icon_state = "larva[state]_cuff" else if(stat == UNCONSCIOUS || lying || resting) icon_state = "larva[state]_sleep" - else if (stunned) + else if(stunned) icon_state = "larva[state]_stun" else icon_state = "larva[state]" 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/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index f0935c520ce..6ea16fc24a1 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -52,7 +52,7 @@ var/const/MAX_ACTIVE_TIME = 400 to_chat(user, "[src] is not moving.") if(CONSCIOUS) to_chat(user, "[src] seems to be active!") - if (sterile) + if(sterile) to_chat(user, "It looks like the proboscis has been removed.") /obj/item/clothing/mask/facehugger/attackby(obj/item/O,mob/m, params) @@ -148,7 +148,7 @@ var/const/MAX_ACTIVE_TIME = 400 target.equip_to_slot(src, slot_wear_mask,,0) if(!sterile) M.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings - else if (iscorgi(M)) + else if(iscorgi(M)) var/mob/living/simple_animal/pet/corgi/C = M loc = C C.facehugger = src diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index 8e6da1eca78..aac43c16ac3 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -23,39 +23,44 @@ return ..() say_understands(var/other)//Goddamn is this hackish, but this say code is so odd - if (istype(other, /mob/living/silicon/ai)) + if(istype(other, /mob/living/silicon/ai)) if(!(container && istype(container, /obj/item/device/mmi))) return 0 else return 1 - if (istype(other, /mob/living/silicon/decoy)) + if(istype(other, /mob/living/silicon/decoy)) if(!(container && istype(container, /obj/item/device/mmi))) return 0 else return 1 - if (istype(other, /mob/living/silicon/pai)) + if(istype(other, /mob/living/silicon/pai)) if(!(container && istype(container, /obj/item/device/mmi))) return 0 else return 1 - if (istype(other, /mob/living/silicon/robot)) + if(istype(other, /mob/living/silicon/robot)) if(!(container && istype(container, /obj/item/device/mmi))) return 0 else return 1 - if (istype(other, /mob/living/carbon/human)) + if(istype(other, /mob/living/carbon/human)) return 1 - if (istype(other, /mob/living/carbon/slime)) + if(istype(other, /mob/living/carbon/slime)) return 1 return ..() -/mob/living/carbon/brain/update_canmove() +/mob/living/carbon/brain/update_canmove(delay_action_updates = 0) if(in_contents_of(/obj/mecha)) canmove = 1 use_me = 1 //If it can move, let it emote - else if(istype(loc, /obj/item/device/mmi)) canmove = 1 //mmi won't move anyways so whatever - else canmove = 0 + else if(istype(loc, /obj/item/device/mmi)) + canmove = 1 //mmi won't move anyways so whatever + else + canmove = 0 + + if(!delay_action_updates) + update_action_buttons_icon() return canmove /mob/living/carbon/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up. @@ -94,4 +99,10 @@ I'm using this for Stat to give it a more nifty interface to work with stat("Exosuit Integrity", "[!M.health ? "0" : "[(M.health / initial(M.health)) * 100]"]%") /mob/living/carbon/brain/can_safely_leave_loc() - return 0 //You're not supposed to be ethereal jaunting, brains \ No newline at end of file + return 0 //You're not supposed to be ethereal jaunting, brains + +/mob/living/carbon/brain/adjustEarDamage() + return + +/mob/living/carbon/brain/setEarDamage() // no ears to damage or heal + return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 92c04ca0066..dd2e81ed35b 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -4,7 +4,7 @@ max_damage = 200 icon_state = "brain2" force = 1.0 - w_class = 2.0 + w_class = 2 throwforce = 1.0 throw_speed = 3 throw_range = 5 @@ -21,8 +21,7 @@ /obj/item/organ/internal/brain/surgeryize() if(!owner) return - owner.ear_damage = 0 //Yeah, didn't you...hear? The ears are totally inside the brain. - owner.ear_deaf = 0 + owner.setEarDamage(0,0) //Yeah, didn't you...hear? The ears are totally inside the brain. /obj/item/organ/internal/brain/xeno name = "xenomorph brain" 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..23a609131f2 --- /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/life.dm b/code/modules/mob/living/carbon/brain/life.dm index 63eb38e607f..40273bf66ad 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -65,13 +65,13 @@ /mob/living/carbon/brain/handle_vision() ..() - if (stat == 2 || (XRAY in src.mutations)) + if(stat == 2 || (XRAY in src.mutations)) sight |= SEE_TURFS sight |= SEE_MOBS sight |= SEE_OBJS see_in_dark = 8 see_invisible = SEE_INVISIBLE_LEVEL_TWO - else if (stat != 2) + else if(stat != 2) sight &= ~SEE_TURFS sight &= ~SEE_MOBS sight &= ~SEE_OBJS diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index f6cdb0362e3..aad88276473 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -64,7 +64,7 @@ if(!C || brainmob.key || 0 == searching) return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located. if(response == "Yes") transfer_personality(C.mob) - else if (response == "Never for this round") + else if(response == "Never for this round") C.prefs.be_special -= ROLE_POSIBRAIN // This should not ever happen, but let's be safe @@ -99,7 +99,7 @@ src.brainmob.mind.assigned_role = "Positronic Brain" var/turf/T = get_turf_or_move(src.loc) - for (var/mob/M in viewers(T)) + for(var/mob/M in viewers(T)) M.show_message("\blue The positronic brain chimes quietly.") icon_state = "posibrain-occupied" @@ -110,7 +110,7 @@ icon_state = "posibrain" var/turf/T = get_turf_or_move(src.loc) - for (var/mob/M in viewers(T)) + for(var/mob/M in viewers(T)) M.show_message("\blue The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?") /obj/item/device/mmi/posibrain/Topic(href,href_list) @@ -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 \icon[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) @@ -182,7 +183,6 @@ src.brainmob.container = src src.brainmob.stat = 0 src.brainmob.silent = 0 - src.brainmob.brain_op_stage = 4.0 dead_mob_list -= src.brainmob ..() @@ -192,7 +192,7 @@ volunteer(O) else var/turf/T = get_turf_or_move(src.loc) - for (var/mob/M in viewers(T)) + for(var/mob/M in viewers(T)) M.show_message("\blue The positronic brain pings softly.") /obj/item/device/mmi/posibrain/ipc diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm index 03d6906b876..a343d245424 100644 --- a/code/modules/mob/living/carbon/brain/say.dm +++ b/code/modules/mob/living/carbon/brain/say.dm @@ -1,6 +1,6 @@ //TODO: Convert this over for languages. /mob/living/carbon/brain/say(var/message, var/datum/language/speaking = null) - if (silent) + if(silent) return if(!(container && istype(container, /obj/item/device/mmi))) @@ -24,9 +24,9 @@ if("headset") var/radio_worked = 0 // If any of the radios our brainmob could use functioned, this is set true so that we don't use any others // I'm doing it this way so that if the mecha radio fails for some reason, a radio MMI still has the built-in fallback - if (container && istype(container,/obj/item/device/mmi)) + if(container && istype(container,/obj/item/device/mmi)) var/obj/item/device/mmi/c = container - if (!radio_worked && c.mecha) + if(!radio_worked && c.mecha) var/obj/mecha/metalgear = c.mecha if(metalgear.radio) radio_worked = metalgear.radio.talk_into(src, message, message_mode, verb, speaking) @@ -36,7 +36,7 @@ if(R.radio) radio_worked = R.radio.talk_into(src, message, message_mode, verb, speaking) return radio_worked - if ("whisper") + if("whisper") whisper_say(message, speaking, alt_name) return 1 else return 0 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index f9afba579fb..f30ff8ed0f2 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -25,7 +25,7 @@ return ..() /mob/living/carbon/blob_act() - if (stat == DEAD) + if(stat == DEAD) return else show_message("The blob attacks!") @@ -65,7 +65,7 @@ if(istype(src, /mob/living/carbon/human)) var/mob/living/carbon/human/H = src var/obj/item/organ/external/organ = H.get_organ("chest") - if (istype(organ)) + if(istype(organ)) if(organ.take_damage(d, 0)) H.UpdateDamageIcon() @@ -119,7 +119,7 @@ if(stun) adjustToxLoss(-3) T = get_step(T, dir) - if (is_blocked_turf(T)) + if(is_blocked_turf(T)) break return 1 @@ -168,7 +168,7 @@ if(!tesla_shock || (tesla_shock && siemens_coeff > 0.5)) Stun(3) Weaken(3) - if (shock_damage > 200) + if(shock_damage > 200) src.visible_message( "[src] was arc flashed by the [source]!", \ "The [source] arc flashes and electrocutes you!", \ @@ -213,7 +213,7 @@ swap_hand() /mob/living/carbon/proc/help_shake_act(mob/living/carbon/M) - if (src.health >= config.health_threshold_crit) + if(src.health >= config.health_threshold_crit) if(src == M && istype(src, /mob/living/carbon/human)) var/mob/living/carbon/human/H = src src.visible_message( \ @@ -261,11 +261,11 @@ "You shake [src], but they are unresponsive. Probably suffering from SSD.") if(lying) // /vg/: For hugs. This is how update_icon figgers it out, anyway. - N3X15 var/t_him = "it" - if (src.gender == MALE) + if(src.gender == MALE) t_him = "him" - else if (src.gender == FEMALE) + else if(src.gender == FEMALE) t_him = "her" - if (istype(src,/mob/living/carbon/human) && src:w_uniform) + if(istype(src,/mob/living/carbon/human) && src:w_uniform) var/mob/living/carbon/human/H = src H.w_uniform.add_fingerprint(M) src.sleeping = max(0,src.sleeping-5) @@ -498,7 +498,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, //Throwing stuff /mob/living/carbon/proc/toggle_throw_mode() - if (in_throw_mode) + if(in_throw_mode) throw_mode_off() else throw_mode_on() @@ -565,7 +565,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, return 1 /mob/living/carbon/restrained() - if (handcuffed) + if(handcuffed) return 1 return @@ -644,8 +644,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, if(do_mob(usr, src, POCKET_STRIP_DELAY)) if(internal) internal = null - if(internals) - internals.icon_state = "internal0" + update_internals_hud_icon(0) else var/no_mask2 if(!(wear_mask && wear_mask.flags & AIRTIGHT)) @@ -655,8 +654,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, to_chat(usr, "[src] is not wearing a suitable mask or helmet!") return internal = ITEM - if(internals) - internals.icon_state = "internal1" + update_internals_hud_icon(1) visible_message("[usr] [internal ? "opens" : "closes"] the valve on [src]'s [ITEM].", \ "[usr] [internal ? "opens" : "closes"] the valve on [src]'s [ITEM].") @@ -858,7 +856,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed) else clear_alert("handcuffed") - update_action_buttons() //some of our action buttons might be unusable when we're handcuffed. + update_action_buttons_icon() //some of our action buttons might be unusable when we're handcuffed. update_inv_handcuffed() update_hud_handcuffed() @@ -890,51 +888,51 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, wear_mask) /mob/living/carbon/proc/uncuff() - if (handcuffed) + if(handcuffed) var/obj/item/weapon/W = handcuffed handcuffed = null - if (buckled && buckled.buckle_requires_restraints) + if(buckled && buckled.buckle_requires_restraints) buckled.unbuckle_mob() update_handcuffed() - if (client) + if(client) client.screen -= W - if (W) + if(W) W.loc = loc W.dropped(src) - if (W) + if(W) W.layer = initial(W.layer) W.plane = initial(W.plane) - if (legcuffed) + if(legcuffed) var/obj/item/weapon/W = legcuffed legcuffed = null update_inv_legcuffed() - if (client) + if(client) client.screen -= W - if (W) + if(W) W.loc = loc W.dropped(src) - if (W) + if(W) W.layer = initial(W.layer) W.plane = initial(W.plane) /mob/living/carbon/proc/slip(var/description, var/stun, var/weaken, var/tilesSlipped, var/walkSafely, var/slipAny) - if (flying || buckled || (walkSafely && m_intent == "walk")) + if(flying || buckled || (walkSafely && m_intent == "walk")) return - if ((lying) && (!(tilesSlipped))) + if((lying) && (!(tilesSlipped))) return - if (!(slipAny)) - if (istype(src, /mob/living/carbon/human)) + if(!(slipAny)) + if(istype(src, /mob/living/carbon/human)) var/mob/living/carbon/human/H = src - if ((isobj(H.shoes) && H.shoes.flags & NOSLIP) || H.species.bodyflags & FEET_NOSLIP) + if((isobj(H.shoes) && H.shoes.flags & NOSLIP) || H.species.bodyflags & FEET_NOSLIP) return - if (tilesSlipped) + if(tilesSlipped) for(var/t = 0, t<=tilesSlipped, t++) spawn (t) step(src, src.dir) stop_pulling() to_chat(src, "You slipped on the [description]!") playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - if (stun) + if(stun) Stun(stun) Weaken(weaken) return 1 @@ -966,15 +964,15 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, if(istype(toEat, /obj/item/weapon/reagent_containers/food/pill)) to_chat(src, "You [toEat.apply_method] [toEat].") else - if (fullness <= 50) + if(fullness <= 50) to_chat(src, "You hungrily chew out a piece of [toEat] and gobble it!") - else if (fullness > 50 && fullness <= 150) + else if(fullness > 50 && fullness <= 150) to_chat(src, "You hungrily begin to eat [toEat].") - else if (fullness > 150 && fullness <= 350) + else if(fullness > 150 && fullness <= 350) to_chat(src, "You take a bite of [toEat].") - else if (fullness > 350 && fullness <= 550) + else if(fullness > 350 && fullness <= 550) to_chat(src, "You unwillingly chew a bit of [toEat].") - else if (fullness > (550 * (1 + overeatduration / 2000))) // The more you eat - the more you can eat + else if(fullness > (550 * (1 + overeatduration / 2000))) // The more you eat - the more you can eat to_chat(src, "You cannot force any more of [toEat] to go down your throat.") return 0 return 1 @@ -1031,3 +1029,16 @@ so that different stomachs can handle things in different ways VB*/ var/obj/item/LH = get_inactive_hand() if(LH) . |= LH.GetAccess() + +/mob/living/carbon/proc/can_breathe_gas() + if(!wear_mask) + return TRUE + + if(!(wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT) && internal == null) + return TRUE + + return FALSE + +/mob/living/carbon/proc/update_internals_hud_icon(internal_state = 0) + if(hud_used && hud_used.internals) + hud_used.internals.icon_state = "internal[internal_state]" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 07a6a0d28cd..e900fc10517 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -1,15 +1,12 @@ -/mob/living/carbon/ +/mob/living/carbon gender = MALE hud_possible = list(HEALTH_HUD,STATUS_HUD,SPECIALROLE_HUD) var/list/stomach_contents = list() var/list/internal_organs = list() - var/brain_op_stage = 0.0 var/antibodies = 0 - var/last_eating = 0 //Not sure what this does... I found it hidden in food.dm var/life_tick = 0 // The amount of life ticks that have processed on this mob. - var/analgesic = 0 // when this is set, the mob isn't affected by shock or pain - // life should decrease this by 1 every tick + // total amount of wounds on mob, used to spread out healing and the like over all wounds var/number_wounds = 0 var/obj/item/handcuffed = null //Whether or not the mob is handcuffed diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index fca8c59fec3..b0ccdc8381d 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -2,4 +2,8 @@ losebreath = 0 med_hud_set_health() med_hud_set_status() + + if(reagents) + reagents.death_metabolize(src) + ..(gibbed) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/body_accessories.dm b/code/modules/mob/living/carbon/human/body_accessories.dm index 677e4b42784..f4b95eec4d4 100644 --- a/code/modules/mob/living/carbon/human/body_accessories.dm +++ b/code/modules/mob/living/carbon/human/body_accessories.dm @@ -102,6 +102,13 @@ var/global/list/body_accessory_by_species = list("None" = null) return 0 +/datum/body_accessory/tail/wingler_tail // Jay wingler fluff tail + name = "Jay Wingler Tail" + + icon_state = "winglertail" + animated_icon_state = "winglertail_a" + + //Vulpkanin /datum/body_accessory/tail/vulpkanin_2 name = "Vulpkanin Alt 1 (Bushy)" @@ -130,3 +137,11 @@ var/global/list/body_accessory_by_species = list("None" = null) icon_state = "vulptail5" animated_icon_state = "vulptail5_a" allowed_species = list("Vulpkanin") + +/datum/body_accessory/tail/vulpkanin_6 + name = "Vulpkanin Alt 5 (Straight Bushy)" + + icon_state = "vulptail6" + animated_icon_state = "vulptail6_a" + allowed_species = list("Vulpkanin") + 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..ef5768fcb0e --- /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(disabilities & 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/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 539d88f11cb..491d291c252 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -41,7 +41,7 @@ t_is = "are" else if(icon) - msg += "\icon[icon] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated + msg += "[bicon(icon(icon, dir=SOUTH))] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated switch(gender) if(MALE) t_He = "He" @@ -58,14 +58,14 @@ var/displayed_species = get_species() for(var/obj/item/clothing/C in src) //Disguise checks - if (C == src.head || C == src.wear_suit || C == src.wear_mask || C == src.w_uniform || C == src.belt || C == src.back) + if(C == src.head || C == src.wear_suit || C == src.wear_mask || C == src.w_uniform || C == src.belt || C == src.back) if(C.species_disguise) displayed_species = C.species_disguise - if (skipjumpsuit && skipface || (displayed_species in nospecies)) //either obscured or on the nospecies list + if(skipjumpsuit && skipface || (displayed_species in nospecies)) //either obscured or on the nospecies list msg += "!\n" //omit the species when examining - else if (displayed_species == "Slime People") //snowflakey because Slime People are defined as a plural + else if(displayed_species == "Slime People") //snowflakey because Slime People are defined as a plural msg += ", a slime person!\n" - else if (displayed_species == "Unathi") //DAMN YOU, VOWELS + else if(displayed_species == "Unathi") //DAMN YOU, VOWELS msg += ", a unathi!\n" else msg += ", \a [lowertext(displayed_species)]!\n" @@ -80,108 +80,108 @@ tie_msg += " with [english_accessory_list(U)]" if(w_uniform.blood_DNA) - msg += "[t_He] [t_is] wearing \icon[w_uniform] [w_uniform.gender==PLURAL?"some":"a"] [w_uniform.blood_color != "#030303" ? "blood-stained":"oil-stained"] [w_uniform.name][tie_msg]!\n" + msg += "[t_He] [t_is] wearing [bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [w_uniform.blood_color != "#030303" ? "blood-stained":"oil-stained"] [w_uniform.name][tie_msg]!\n" else - msg += "[t_He] [t_is] wearing \icon[w_uniform] \a [w_uniform][tie_msg].\n" + msg += "[t_He] [t_is] wearing [bicon(w_uniform)] \a [w_uniform][tie_msg].\n" //head if(head && !(head.flags & ABSTRACT)) if(head.blood_DNA) - msg += "[t_He] [t_is] wearing \icon[head] [head.gender==PLURAL?"some":"a"] [head.blood_color != "#030303" ? "blood-stained":"oil-stained"] [head.name] on [t_his] head!\n" + msg += "[t_He] [t_is] wearing [bicon(head)] [head.gender==PLURAL?"some":"a"] [head.blood_color != "#030303" ? "blood-stained":"oil-stained"] [head.name] on [t_his] head!\n" else - msg += "[t_He] [t_is] wearing \icon[head] \a [head] on [t_his] head.\n" + msg += "[t_He] [t_is] wearing [bicon(head)] \a [head] on [t_his] head.\n" //suit/armour if(wear_suit && !(wear_suit.flags & ABSTRACT)) if(wear_suit.blood_DNA) - msg += "[t_He] [t_is] wearing \icon[wear_suit] [wear_suit.gender==PLURAL?"some":"a"] [wear_suit.blood_color != "#030303" ? "blood-stained":"oil-stained"] [wear_suit.name]!\n" + msg += "[t_He] [t_is] wearing [bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [wear_suit.blood_color != "#030303" ? "blood-stained":"oil-stained"] [wear_suit.name]!\n" else - msg += "[t_He] [t_is] wearing \icon[wear_suit] \a [wear_suit].\n" + msg += "[t_He] [t_is] wearing [bicon(wear_suit)] \a [wear_suit].\n" //suit/armour storage if(s_store && !skipsuitstorage) if(s_store.blood_DNA) - msg += "[t_He] [t_is] carrying \icon[s_store] [s_store.gender==PLURAL?"some":"a"] [s_store.blood_color != "#030303" ? "blood-stained":"oil-stained"] [s_store.name] on [t_his] [wear_suit.name]!\n" + msg += "[t_He] [t_is] carrying [bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [s_store.blood_color != "#030303" ? "blood-stained":"oil-stained"] [s_store.name] on [t_his] [wear_suit.name]!\n" else - msg += "[t_He] [t_is] carrying \icon[s_store] \a [s_store] on [t_his] [wear_suit.name].\n" + msg += "[t_He] [t_is] carrying [bicon(s_store)] \a [s_store] on [t_his] [wear_suit.name].\n" //back if(back && !(back.flags & ABSTRACT)) if(back.blood_DNA) - msg += "[t_He] [t_has] \icon[back] [back.gender==PLURAL?"some":"a"] [back.blood_color != "#030303" ? "blood-stained":"oil-stained"] [back] on [t_his] back.\n" + msg += "[t_He] [t_has] [bicon(back)] [back.gender==PLURAL?"some":"a"] [back.blood_color != "#030303" ? "blood-stained":"oil-stained"] [back] on [t_his] back.\n" else - msg += "[t_He] [t_has] \icon[back] \a [back] on [t_his] back.\n" + msg += "[t_He] [t_has] [bicon(back)] \a [back] on [t_his] back.\n" //left hand if(l_hand && !(l_hand.flags & ABSTRACT)) if(l_hand.blood_DNA) - msg += "[t_He] [t_is] holding \icon[l_hand] [l_hand.gender==PLURAL?"some":"a"] [l_hand.blood_color != "#030303" ? "blood-stained":"oil-stained"] [l_hand.name] in [t_his] left hand!\n" + msg += "[t_He] [t_is] holding [bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [l_hand.blood_color != "#030303" ? "blood-stained":"oil-stained"] [l_hand.name] in [t_his] left hand!\n" else - msg += "[t_He] [t_is] holding \icon[l_hand] \a [l_hand] in [t_his] left hand.\n" + msg += "[t_He] [t_is] holding [bicon(l_hand)] \a [l_hand] in [t_his] left hand.\n" //right hand if(r_hand && !(r_hand.flags & ABSTRACT)) if(r_hand.blood_DNA) - msg += "[t_He] [t_is] holding \icon[r_hand] [r_hand.gender==PLURAL?"some":"a"] [r_hand.blood_color != "#030303" ? "blood-stained":"oil-stained"] [r_hand.name] in [t_his] right hand!\n" + msg += "[t_He] [t_is] holding [bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [r_hand.blood_color != "#030303" ? "blood-stained":"oil-stained"] [r_hand.name] in [t_his] right hand!\n" else - msg += "[t_He] [t_is] holding \icon[r_hand] \a [r_hand] in [t_his] right hand.\n" + msg += "[t_He] [t_is] holding [bicon(r_hand)] \a [r_hand] in [t_his] right hand.\n" //gloves if(gloves && !skipgloves && !(gloves.flags & ABSTRACT)) if(gloves.blood_DNA) - msg += "[t_He] [t_has] \icon[gloves] [gloves.gender==PLURAL?"some":"a"] [gloves.blood_color != "#030303" ? "blood-stained":"oil-stained"] [gloves.name] on [t_his] hands!\n" + msg += "[t_He] [t_has] [bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [gloves.blood_color != "#030303" ? "blood-stained":"oil-stained"] [gloves.name] on [t_his] hands!\n" else - msg += "[t_He] [t_has] \icon[gloves] \a [gloves] on [t_his] hands.\n" + msg += "[t_He] [t_has] [bicon(gloves)] \a [gloves] on [t_his] hands.\n" else if(blood_DNA) msg += "[t_He] [t_has] [hand_blood_color != "#030303" ? "blood-stained":"oil-stained"] hands!\n" //handcuffed? if(handcuffed) if(istype(handcuffed, /obj/item/weapon/restraints/handcuffs/cable/zipties)) - msg += "[t_He] [t_is] \icon[handcuffed] restrained with zipties!\n" + msg += "[t_He] [t_is] [bicon(handcuffed)] restrained with zipties!\n" else if(istype(handcuffed, /obj/item/weapon/restraints/handcuffs/cable)) - msg += "[t_He] [t_is] \icon[handcuffed] restrained with cable!\n" + msg += "[t_He] [t_is] [bicon(handcuffed)] restrained with cable!\n" else - msg += "[t_He] [t_is] \icon[handcuffed] handcuffed!\n" + msg += "[t_He] [t_is] [bicon(handcuffed)] handcuffed!\n" //belt if(belt) if(belt.blood_DNA) - msg += "[t_He] [t_has] \icon[belt] [belt.gender==PLURAL?"some":"a"] [belt.blood_color != "#030303" ? "blood-stained":"oil-stained"] [belt.name] about [t_his] waist!\n" + msg += "[t_He] [t_has] [bicon(belt)] [belt.gender==PLURAL?"some":"a"] [belt.blood_color != "#030303" ? "blood-stained":"oil-stained"] [belt.name] about [t_his] waist!\n" else - msg += "[t_He] [t_has] \icon[belt] \a [belt] about [t_his] waist.\n" + msg += "[t_He] [t_has] [bicon(belt)] \a [belt] about [t_his] waist.\n" //shoes if(shoes && !skipshoes && !(shoes.flags & ABSTRACT)) if(shoes.blood_DNA) - msg += "[t_He] [t_is] wearing \icon[shoes] [shoes.gender==PLURAL?"some":"a"] [shoes.blood_color != "#030303" ? "blood-stained":"oil-stained"] [shoes.name] on [t_his] feet!\n" + msg += "[t_He] [t_is] wearing [bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [shoes.blood_color != "#030303" ? "blood-stained":"oil-stained"] [shoes.name] on [t_his] feet!\n" else - msg += "[t_He] [t_is] wearing \icon[shoes] \a [shoes] on [t_his] feet.\n" - else if (blood_DNA) + msg += "[t_He] [t_is] wearing [bicon(shoes)] \a [shoes] on [t_his] feet.\n" + else if(blood_DNA) msg += "[t_He] [t_has] [feet_blood_color != "#030303" ? "blood-stained":"oil-stained"] feet!\n" //mask if(wear_mask && !skipmask && !(wear_mask.flags & ABSTRACT)) if(wear_mask.blood_DNA) - msg += "[t_He] [t_has] \icon[wear_mask] [wear_mask.gender==PLURAL?"some":"a"] [wear_mask.blood_color != "#030303" ? "blood-stained":"oil-stained"] [wear_mask.name] on [t_his] face!\n" + msg += "[t_He] [t_has] [bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [wear_mask.blood_color != "#030303" ? "blood-stained":"oil-stained"] [wear_mask.name] on [t_his] face!\n" else - msg += "[t_He] [t_has] \icon[wear_mask] \a [wear_mask] on [t_his] face.\n" + msg += "[t_He] [t_has] [bicon(wear_mask)] \a [wear_mask] on [t_his] face.\n" //eyes if(glasses && !skipeyes && !(glasses.flags & ABSTRACT)) if(glasses.blood_DNA) - msg += "[t_He] [t_has] \icon[glasses] [glasses.gender==PLURAL?"some":"a"] [glasses.blood_color != "#030303" ? "blood-stained":"oil-stained"] [glasses] covering [t_his] eyes!\n" + msg += "[t_He] [t_has] [bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [glasses.blood_color != "#030303" ? "blood-stained":"oil-stained"] [glasses] covering [t_his] eyes!\n" else - msg += "[t_He] [t_has] \icon[glasses] \a [glasses] covering [t_his] eyes.\n" + msg += "[t_He] [t_has] [bicon(glasses)] \a [glasses] covering [t_his] eyes.\n" //left ear if(l_ear && !skipears) - msg += "[t_He] [t_has] \icon[l_ear] \a [l_ear] on [t_his] left ear.\n" + msg += "[t_He] [t_has] [bicon(l_ear)] \a [l_ear] on [t_his] left ear.\n" //right ear if(r_ear && !skipears) - msg += "[t_He] [t_has] \icon[r_ear] \a [r_ear] on [t_his] right ear.\n" + msg += "[t_He] [t_has] [bicon(r_ear)] \a [r_ear] on [t_his] right ear.\n" //ID if(wear_id) @@ -193,9 +193,9 @@ var/obj/item/weapon/card/id/idcard = wear_id id = idcard.registered_name if(id && (id != real_name) && (get_dist(src, user) <= 1) && prob(10)) - msg += "[t_He] [t_is] wearing \icon[wear_id] \a [wear_id] yet something doesn't seem right...\n" + msg += "[t_He] [t_is] wearing [bicon(wear_id)] \a [wear_id] yet something doesn't seem right...\n" else*/ - msg += "[t_He] [t_is] wearing \icon[wear_id] \a [wear_id].\n" + msg += "[t_He] [t_is] wearing [bicon(wear_id)] \a [wear_id].\n" //Jitters switch(jitteriness) @@ -221,7 +221,7 @@ var/distance = get_dist(user,src) if(istype(user, /mob/dead/observer) || user.stat == 2) // ghosts can see anything distance = 1 - if (src.stat) + if(src.stat) msg += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep.\n" if((stat == 2 || src.health <= config.health_threshold_crit) && distance <= 3) msg += "[t_He] does not appear to be breathing.\n" @@ -462,9 +462,9 @@ perpname = name if(perpname) - for (var/datum/data/record/E in data_core.general) + for(var/datum/data/record/E in data_core.general) if(E.fields["name"] == perpname) - for (var/datum/data/record/R in data_core.security) + for(var/datum/data/record/R in data_core.security) if(R.fields["id"] == E.fields["id"]) criminal = R.fields["criminal"] @@ -484,10 +484,10 @@ else perpname = src.name - for (var/datum/data/record/E in data_core.general) - if (E.fields["name"] == perpname) - for (var/datum/data/record/R in data_core.general) - if (R.fields["id"] == E.fields["id"]) + for(var/datum/data/record/E in data_core.general) + if(E.fields["name"] == perpname) + for(var/datum/data/record/R in data_core.general) + if(R.fields["id"] == E.fields["id"]) medical = R.fields["p_stat"] msg += "Physical status: \[[medical]\]\n" @@ -497,7 +497,7 @@ if(print_flavor_text()) msg += "[print_flavor_text()]\n" msg += "*---------*" - if (pose) + 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 += "\n[t_He] is [pose]" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index ed02823215f..07060cfe1a4 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -39,6 +39,8 @@ martial_art = default_martial_art + handcrafting = new() + var/mob/M = src faction |= "\ref[M]" //what @@ -53,6 +55,9 @@ UpdateAppearance() +/mob/living/carbon/human/OpenCraftingMenu() + handcrafting.craft(src) + /mob/living/carbon/human/prepare_data_huds() //Update med hud images... ..() @@ -203,15 +208,14 @@ now_pushing = 0 return - if(tmob.r_hand && istype(tmob.r_hand, /obj/item/weapon/shield/riot)) - if(prob(99)) - now_pushing = 0 - return - if(tmob.l_hand && istype(tmob.l_hand, /obj/item/weapon/shield/riot)) - if(prob(99)) - now_pushing = 0 - return + //anti-riot equipment is also anti-push + if(tmob.r_hand && (prob(tmob.r_hand.block_chance * 2)) && !istype(tmob.r_hand, /obj/item/clothing)) + now_pushing = 0 + return + if(tmob.l_hand && (prob(tmob.l_hand.block_chance * 2)) && !istype(tmob.l_hand, /obj/item/clothing)) + now_pushing = 0 + return if(!(tmob.status_flags & CANPUSH)) now_pushing = 0 @@ -351,8 +355,7 @@ else valid_limbs -= processing_dismember if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs)) - ear_damage += 30 - ear_deaf += 120 + adjustEarDamage(30, 120) if(prob(70) && !shielded) Paralyse(10) @@ -376,8 +379,7 @@ else valid_limbs -= processing_dismember if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs)) - ear_damage += 15 - ear_deaf += 60 + adjustEarDamage(15,60) if(prob(50) && !shielded) Paralyse(10) @@ -414,16 +416,16 @@ M.attack_log += text("\[[time_stamp()]\] attacked [src.name] ([src.ckey])") src.attack_log += text("\[[time_stamp()]\] was attacked by [M.name] ([M.ckey])") var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) - if(check_shields(damage, "the [M.name]")) + if(check_shields(damage, "the [M.name]", null, MELEE_ATTACK, M.armour_penetration)) return 0 var/dam_zone = pick("head", "chest", "groin", "l_arm", "l_hand", "r_arm", "r_hand", "l_leg", "l_foot", "r_leg", "r_foot") var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone)) - var/armor = run_armor_check(affecting, "melee") + var/armor = run_armor_check(affecting, "melee", armour_penetration = M.armour_penetration) var/obj/item/organ/external/affected = src.get_organ(dam_zone) if(affected) affected.add_autopsy_data(M.name, damage) // Add the mob's name to the autopsy data - apply_damage(damage,M.melee_damage_type, affecting, armor, M.name) + apply_damage(damage, M.melee_damage_type, affecting, armor) updatehealth() /mob/living/carbon/human/attack_larva(mob/living/carbon/alien/larva/L as mob) @@ -461,7 +463,7 @@ else damage = rand(5, 25) - if(check_shields(damage, "the [M.name]")) + if(check_shields(damage, "the [M.name]", null, MELEE_ATTACK)) return 0 var/dam_zone = pick("head", "chest", "groin", "l_arm", "l_hand", "r_arm", "r_hand", "l_leg", "l_foot", "r_leg", "r_foot") @@ -489,11 +491,11 @@ M.powerlevel = 0 for(var/mob/O in viewers(src, null)) - if ((O.client && !( O.blinded ))) + if((O.client && !( O.blinded ))) O.show_message(text("\red The [M.name] has shocked []!", src), 1) Weaken(power) - if (stuttering < power) + if(stuttering < power) stuttering = power Stun(power) @@ -501,7 +503,7 @@ s.set_up(5, 1, src) s.start() - if (prob(stunprob) && M.powerlevel >= 8) + if(prob(stunprob) && M.powerlevel >= 8) adjustFireLoss(M.powerlevel * rand(6,10)) @@ -511,9 +513,9 @@ /mob/living/carbon/human/restrained() - if (handcuffed) + if(handcuffed) return 1 - if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) + if(istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) return 1 return 0 @@ -600,7 +602,6 @@ dat += "
        " dat += "" - dat += "" if(istype(w_uniform, /obj/item/clothing/under)) var/obj/item/clothing/under/U = w_uniform @@ -634,8 +635,8 @@ // Get rank from ID, ID inside PDA, PDA, ID in wallet, etc. /mob/living/carbon/human/proc/get_authentification_rank(var/if_no_id = "No id", var/if_no_job = "No job") var/obj/item/device/pda/pda = wear_id - if (istype(pda)) - if (pda.id) + if(istype(pda)) + if(pda.id) return pda.id.rank else return pda.ownrank @@ -651,16 +652,16 @@ /mob/living/carbon/human/proc/get_assignment(var/if_no_id = "No id", var/if_no_job = "No job") var/obj/item/device/pda/pda = wear_id var/obj/item/weapon/card/id/id = wear_id - if (istype(pda)) - if (pda.id && istype(pda.id, /obj/item/weapon/card/id)) + if(istype(pda)) + if(pda.id && istype(pda.id, /obj/item/weapon/card/id)) . = pda.id.assignment else . = pda.ownjob - else if (istype(id)) + else if(istype(id)) . = id.assignment else return if_no_id - if (!.) + if(!.) . = if_no_job return @@ -669,12 +670,12 @@ /mob/living/carbon/human/proc/get_authentification_name(var/if_no_id = "Unknown") var/obj/item/device/pda/pda = wear_id var/obj/item/weapon/card/id/id = wear_id - if (istype(pda)) - if (pda.id) + if(istype(pda)) + if(pda.id) . = pda.id.registered_name else . = pda.owner - else if (istype(id)) + else if(istype(id)) . = id.registered_name else return if_no_id @@ -715,9 +716,9 @@ /mob/living/carbon/human/proc/get_idcard() var/obj/item/weapon/card/id/id = wear_id var/obj/item/device/pda/pda = wear_id - if (istype(pda) && pda.id) + if(istype(pda) && pda.id) id = pda.id - if (istype(id)) + if(istype(id)) return id //Removed the horrible safety parameter. It was only being used by ninja code anyways. @@ -828,7 +829,7 @@ U.accessories -= A update_inv_w_uniform() - if (href_list["criminal"]) + if(href_list["criminal"]) if(hasHUD(usr,"security")) var/modified = 0 @@ -843,10 +844,10 @@ perpname = name if(perpname) - for (var/datum/data/record/E in data_core.general) - if (E.fields["name"] == perpname) - for (var/datum/data/record/R in data_core.security) - if (R.fields["id"] == E.fields["id"]) + for(var/datum/data/record/E in data_core.general) + if(E.fields["name"] == perpname) + for(var/datum/data/record/R in data_core.security) + if(R.fields["id"] == E.fields["id"]) var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Released", "Cancel") @@ -866,7 +867,7 @@ if(!modified) to_chat(usr, "\red Unable to locate a data core entry for this person.") - if (href_list["secrecord"]) + if(href_list["secrecord"]) if(hasHUD(usr,"security")) var/perpname = "wot" var/read = 0 @@ -879,10 +880,10 @@ perpname = tempPda.owner else perpname = src.name - for (var/datum/data/record/E in data_core.general) - if (E.fields["name"] == perpname) - for (var/datum/data/record/R in data_core.security) - if (R.fields["id"] == E.fields["id"]) + for(var/datum/data/record/E in data_core.general) + if(E.fields["name"] == perpname) + for(var/datum/data/record/R in data_core.security) + if(R.fields["id"] == E.fields["id"]) if(hasHUD(usr,"security")) to_chat(usr, "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]") to_chat(usr, "Minor Crimes: [R.fields["mi_crim"]]") @@ -896,7 +897,7 @@ if(!read) to_chat(usr, "\red Unable to locate a data core entry for this person.") - if (href_list["secrecordComment"]) + if(href_list["secrecordComment"]) if(hasHUD(usr,"security")) var/perpname = "wot" var/read = 0 @@ -909,24 +910,24 @@ perpname = tempPda.owner else perpname = src.name - for (var/datum/data/record/E in data_core.general) - if (E.fields["name"] == perpname) - for (var/datum/data/record/R in data_core.security) - if (R.fields["id"] == E.fields["id"]) + for(var/datum/data/record/E in data_core.general) + if(E.fields["name"] == perpname) + for(var/datum/data/record/R in data_core.security) + if(R.fields["id"] == E.fields["id"]) if(hasHUD(usr,"security")) read = 1 var/counter = 1 while(R.fields[text("com_[]", counter)]) to_chat(usr, text("[]", R.fields[text("com_[]", counter)])) counter++ - if (counter == 1) + if(counter == 1) to_chat(usr, "No comment found") to_chat(usr, "\[Add comment\]") if(!read) to_chat(usr, "\red Unable to locate a data core entry for this person.") - if (href_list["secrecordadd"]) + if(href_list["secrecordadd"]) if(hasHUD(usr,"security")) var/perpname = "wot" if(wear_id) @@ -937,13 +938,13 @@ perpname = tempPda.owner else perpname = src.name - for (var/datum/data/record/E in data_core.general) - if (E.fields["name"] == perpname) - for (var/datum/data/record/R in data_core.security) - if (R.fields["id"] == E.fields["id"]) + for(var/datum/data/record/E in data_core.general) + if(E.fields["name"] == perpname) + for(var/datum/data/record/R in data_core.security) + if(R.fields["id"] == E.fields["id"]) if(hasHUD(usr,"security")) var/t1 = sanitize(copytext(input("Add Comment:", "Sec. records", null, null) as message,1,MAX_MESSAGE_LEN)) - if ( !(t1) || usr.stat || usr.restrained() || !(hasHUD(usr,"security")) ) + if( !(t1) || usr.stat || usr.restrained() || !(hasHUD(usr,"security")) ) return var/counter = 1 while(R.fields[text("com_[]", counter)]) @@ -958,7 +959,7 @@ var/mob/living/silicon/ai/U = usr R.fields[text("com_[counter]")] = text("Made by [U.name] (artificial intelligence) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
        [t1]") - if (href_list["medical"]) + if(href_list["medical"]) if(hasHUD(usr,"medical")) var/perpname = "wot" var/modified = 0 @@ -972,10 +973,10 @@ else perpname = src.name - for (var/datum/data/record/E in data_core.general) - if (E.fields["name"] == perpname) - for (var/datum/data/record/R in data_core.general) - if (R.fields["id"] == E.fields["id"]) + for(var/datum/data/record/E in data_core.general) + if(E.fields["name"] == perpname) + for(var/datum/data/record/R in data_core.general) + if(R.fields["id"] == E.fields["id"]) var/setmedical = input(usr, "Specify a new medical status for this person.", "Medical HUD", R.fields["p_stat"]) in list("*SSD*", "*Deceased*", "Physically Unfit", "Active", "Disabled", "Cancel") if(hasHUD(usr,"medical")) @@ -996,7 +997,7 @@ if(!modified) to_chat(usr, "\red Unable to locate a data core entry for this person.") - if (href_list["medrecord"]) + if(href_list["medrecord"]) if(hasHUD(usr,"medical")) var/perpname = "wot" var/read = 0 @@ -1009,10 +1010,10 @@ perpname = tempPda.owner else perpname = src.name - for (var/datum/data/record/E in data_core.general) - if (E.fields["name"] == perpname) - for (var/datum/data/record/R in data_core.medical) - if (R.fields["id"] == E.fields["id"]) + for(var/datum/data/record/E in data_core.general) + if(E.fields["name"] == perpname) + for(var/datum/data/record/R in data_core.medical) + if(R.fields["id"] == E.fields["id"]) if(hasHUD(usr,"medical")) to_chat(usr, "Name: [R.fields["name"]] Blood Type: [R.fields["b_type"]]") to_chat(usr, "DNA: [R.fields["b_dna"]]") @@ -1027,7 +1028,7 @@ if(!read) to_chat(usr, "\red Unable to locate a data core entry for this person.") - if (href_list["medrecordComment"]) + if(href_list["medrecordComment"]) if(hasHUD(usr,"medical")) var/perpname = "wot" var/read = 0 @@ -1040,24 +1041,24 @@ perpname = tempPda.owner else perpname = src.name - for (var/datum/data/record/E in data_core.general) - if (E.fields["name"] == perpname) - for (var/datum/data/record/R in data_core.medical) - if (R.fields["id"] == E.fields["id"]) + for(var/datum/data/record/E in data_core.general) + if(E.fields["name"] == perpname) + for(var/datum/data/record/R in data_core.medical) + if(R.fields["id"] == E.fields["id"]) if(hasHUD(usr,"medical")) read = 1 var/counter = 1 while(R.fields[text("com_[]", counter)]) to_chat(usr, text("[]", R.fields[text("com_[]", counter)])) counter++ - if (counter == 1) + if(counter == 1) to_chat(usr, "No comment found") to_chat(usr, "\[Add comment\]") if(!read) to_chat(usr, "\red Unable to locate a data core entry for this person.") - if (href_list["medrecordadd"]) + if(href_list["medrecordadd"]) if(hasHUD(usr,"medical")) var/perpname = "wot" if(wear_id) @@ -1068,13 +1069,13 @@ perpname = tempPda.owner else perpname = src.name - for (var/datum/data/record/E in data_core.general) - if (E.fields["name"] == perpname) - for (var/datum/data/record/R in data_core.medical) - if (R.fields["id"] == E.fields["id"]) + for(var/datum/data/record/E in data_core.general) + if(E.fields["name"] == perpname) + for(var/datum/data/record/R in data_core.medical) + if(R.fields["id"] == E.fields["id"]) if(hasHUD(usr,"medical")) var/t1 = sanitize(copytext(input("Add Comment:", "Med. records", null, null) as message,1,MAX_MESSAGE_LEN)) - if ( !(t1) || usr.stat || usr.restrained() || !(hasHUD(usr,"medical")) ) + if( !(t1) || usr.stat || usr.restrained() || !(hasHUD(usr,"medical")) ) return var/counter = 1 while(R.fields[text("com_[]", counter)]) @@ -1086,11 +1087,11 @@ var/mob/living/silicon/robot/U = usr R.fields[text("com_[counter]")] = text("Made by [U.name] ([U.modtype] [U.braintype]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
        [t1]") - if (href_list["lookitem"]) + if(href_list["lookitem"]) var/obj/item/I = locate(href_list["lookitem"]) src.examinate(I) - if (href_list["lookmob"]) + if(href_list["lookmob"]) var/mob/M = locate(href_list["lookmob"]) src.examinate(M) . = ..() @@ -1195,7 +1196,7 @@ if(!affecting) . = 0 fail_msg = "They are missing that limb." - else if (affecting.status & ORGAN_ROBOT) + else if(affecting.status & ORGAN_ROBOT) . = 0 fail_msg = "That limb is robotic." else @@ -1324,7 +1325,7 @@ mutations.Remove(HUSK) if(!client || !key) //Don't boot out anyone already in the mob. - for (var/obj/item/organ/internal/brain/H in world) + for(var/obj/item/organ/internal/brain/H in world) if(H.brainmob) if(H.brainmob.real_name == src.real_name) if(H.brainmob.mind) @@ -1359,30 +1360,30 @@ var/germs = 0 var/tdamage = 0 var/ticks = 0 - while (germs < 2501 && ticks < 100000 && round(damage/10)*20) + while(germs < 2501 && ticks < 100000 && round(damage/10)*20) diary << "VIRUS TESTING: [ticks] : germs [germs] tdamage [tdamage] prob [round(damage/10)*20]" ticks++ - if (prob(round(damage/10)*20)) + if(prob(round(damage/10)*20)) germs++ - if (germs == 100) + if(germs == 100) to_chat(world, "Reached stage 1 in [ticks] ticks") - if (germs > 100) - if (prob(10)) + if(germs > 100) + if(prob(10)) damage++ germs++ - if (germs == 1000) + if(germs == 1000) to_chat(world, "Reached stage 2 in [ticks] ticks") - if (germs > 1000) + if(germs > 1000) damage++ germs++ - if (germs == 2500) + if(germs == 2500) to_chat(world, "Reached stage 3 in [ticks] ticks") to_chat(world, "Mob took [tdamage] tox damage") */ //returns 1 if made bloody, returns 0 otherwise /mob/living/carbon/human/add_blood(mob/living/carbon/human/M as mob) - if (!..()) + if(!..()) return 0 //if this blood isn't already in the list, add it if(blood_DNA[M.dna.unique_enzymes]) @@ -1620,32 +1621,32 @@ set name = "Write in blood" set desc = "Use blood on your hands to write a short message on the floor or a wall, murder mystery style." - if (usr != src) + if(usr != src) return 0 //something is terribly wrong - if (!bloody_hands) + if(!bloody_hands) verbs -= /mob/living/carbon/human/proc/bloody_doodle - if (src.gloves) + if(src.gloves) to_chat(src, "Your [src.gloves] are getting in the way.") return var/turf/simulated/T = src.loc - if (!istype(T)) //to prevent doodling out of mechs and lockers + if(!istype(T)) //to prevent doodling out of mechs and lockers to_chat(src, "You cannot reach the floor.") return var/direction = input(src,"Which way?","Tile selection") as anything in list("Here","North","South","East","West") - if (direction != "Here") + if(direction != "Here") T = get_step(T,text2dir(direction)) - if (!istype(T)) + if(!istype(T)) to_chat(src, "You cannot doodle there.") return var/num_doodles = 0 - for (var/obj/effect/decal/cleanable/blood/writing/W in T) + for(var/obj/effect/decal/cleanable/blood/writing/W in T) num_doodles++ - if (num_doodles > 4) + if(num_doodles > 4) to_chat(src, "There is no space to write on!") return @@ -1653,11 +1654,11 @@ var/message = stripped_input(src,"Write a message. It cannot be longer than [max_length] characters.","Blood writing", "") - if (message) + if(message) var/used_blood_amount = round(length(message) / 30, 1) bloody_hands = max(0, bloody_hands - used_blood_amount) //use up some blood - if (length(message) > max_length) + if(length(message) > max_length) message += "-" to_chat(src, "You ran out of blood to write with!") @@ -1882,7 +1883,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/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 33cb567ba4a..d39aa319e51 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -1,5 +1,5 @@ /mob/living/carbon/human/attack_hand(mob/living/carbon/human/M as mob) - if (istype(loc, /turf) && istype(loc.loc, /area/start)) + if(istype(loc, /turf) && istype(loc.loc, /area/start)) to_chat(M, "No attacking people at spawn, you jackass.") return @@ -10,7 +10,7 @@ var/mob/living/carbon/human/H = M if(istype(H)) var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] - if (H.hand) + if(H.hand) temp = H.organs_by_name["l_hand"] if(!temp || !temp.is_usable()) to_chat(H, "\red You can't use your hand.") @@ -18,10 +18,9 @@ ..() - if((M != src) && check_shields(0, M.name)) + if((M != src) && M.a_intent != "help" && check_shields(0, M.name, attack_type = UNARMED_ATTACK)) add_logs(src, M, "attempted to touch") - M.do_attack_animation(src) - visible_message("\red [M] attempted to touch [src]!") + visible_message("[M] attempted to touch [src]!") return 0 if(istype(M.gloves , /obj/item/clothing/gloves/boxing/hologlove)) @@ -109,36 +108,34 @@ return 1 if(I_HARM) + //Vampire code + if(M.mind && M.mind.vampire && (M.mind in ticker.mode.vampires) && !M.mind.vampire.draining && M.zone_sel && M.zone_sel.selecting == "head" && src != M) + if((head && (head.flags & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags & MASKCOVERSMOUTH))) + to_chat(M, "Remove their mask!") + return + if((M.head && (M.head.flags & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags & MASKCOVERSMOUTH))) + to_chat(M, "Remove your mask!") + return + if(mind && mind.vampire && (mind in ticker.mode.vampires)) + to_chat(M, "Your fangs fail to pierce [src.name]'s cold flesh") + return + if(SKELETON in mutations) + to_chat(M, "There is no blood in a skeleton!") + return + if(issmall(src) && !ckey) //Monkeyized humans are okay, humanized monkeys are okey, monkeys are not. + to_chat(M, "Blood from a monkey is useless!") + return + //we're good to suck the blood, blaah + M.mind.vampire.handle_bloodsucking(src) + add_logs(src, M, "vampirebit") + msg_admin_attack("[key_name_admin(M)] vampirebit [key_name_admin(src)]") + return + //end vampire codes if(attacker_style && attacker_style.harm_act(H, src)) return 1 else var/datum/unarmed_attack/attack = M.species.unarmed - //Vampire code - if(M.zone_sel && M.zone_sel.selecting == "head" && src != M) - if(M.mind && M.mind.vampire && (M.mind in ticker.mode.vampires) && !M.mind.vampire.draining) - if((head && (head.flags & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags & MASKCOVERSMOUTH))) - to_chat(M, "Remove their mask!") - return 0 - if((M.head && (M.head.flags & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags & MASKCOVERSMOUTH))) - to_chat(M, "Remove your mask!") - return 0 - if(mind && mind.vampire && (mind in ticker.mode.vampires)) - to_chat(M, "Your fangs fail to pierce [src.name]'s cold flesh") - return 0 - if(SKELETON in mutations) - to_chat(M, "There is no blood in a skeleton!") - return 0 - if(issmall(src) && !ckey) //Monkeyized humans are okay, humanized monkeys are okey, monkeys are not. - to_chat(M, "Blood from a monkey is useless!") - return 0 - //we're good to suck the blood, blaah - M.mind.vampire.handle_bloodsucking(src) - add_logs(src, M, "vampirebit") - msg_admin_attack("[key_name_admin(M)] vampirebit [key_name_admin(src)]") - return - //end vampire codes - M.do_attack_animation(src) add_logs(src, M, "[pick(attack.attack_verb)]ed") @@ -185,7 +182,7 @@ w_uniform.add_fingerprint(M) var/obj/item/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting)) var/randn = rand(1, 100) - if (randn <= 25) + if(randn <= 25) apply_effect(2, WEAKEN, run_armor_check(affecting, "melee")) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) visible_message("\red [M] has pushed [src]!") diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 88e655beb0e..0e2e95bc778 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -26,6 +26,7 @@ update_revive() med_hud_set_health() med_hud_set_status() + handle_hud_icons() /mob/living/carbon/human/adjustBrainLoss(var/amount) if(status_flags & GODMODE) @@ -103,7 +104,7 @@ if(species && species.brute_mod) amount = amount*species.brute_mod - if (organ_name in organs_by_name) + if(organ_name in organs_by_name) var/obj/item/organ/external/O = get_organ(organ_name) if(amount > 0) @@ -117,7 +118,7 @@ if(species && species.burn_mod) amount = amount*species.burn_mod - if (organ_name in organs_by_name) + if(organ_name in organs_by_name) var/obj/item/organ/external/O = get_organ(organ_name) if(amount > 0) @@ -316,8 +317,9 @@ This function restores the subjects blood to max. */ /mob/living/carbon/human/proc/restore_blood() if(!(species.flags & NO_BLOOD)) - var/blood_volume = vessel.get_reagent_amount("blood") - vessel.add_reagent("blood", 560.0 - blood_volume) + var/blood_type = get_blood_name() + var/blood_volume = vessel.get_reagent_amount(blood_type) + vessel.add_reagent(blood_type, BLOOD_VOLUME_NORMAL - blood_volume) /* This function restores all organs. @@ -383,7 +385,7 @@ This function restores all organs. var/list/attack_bubble_recipients = list() var/mob/living/user for(var/mob/O in viewers(user, src)) - if (O.client && !(O.blinded)) + if(O.client && !(O.blinded)) attack_bubble_recipients.Add(O.client) spawn(0) var/image/dmgIcon = image('icons/effects/hit_blips.dmi', src, "dmg[rand(1,2)]",MOB_LAYER+1) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 3a935e5e449..55fd52ada9e 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -32,7 +32,7 @@ emp_act return -1 // complete projectile permutation //Shields - if(check_shields(P.damage, "the [P.name]", P)) + if(check_shields(P.damage, "the [P.name]", P, PROJECTILE_ATTACK, P.armour_penetration)) P.on_hit(src, 100, def_zone) return 2 @@ -41,7 +41,7 @@ emp_act return //Shrapnel - if (P.damage_type == BRUTE) + if(P.damage_type == BRUTE) var/armor = getarmor_organ(organ, "bullet") if((P.embed && prob(20 + max(P.damage - armor, -10)))) var/obj/item/weapon/shard/shrapnel/SP = new() @@ -91,7 +91,7 @@ emp_act //this proc returns the Siemens coefficient of electrical resistivity for a particular external organ. /mob/living/carbon/human/proc/get_siemens_coefficient_organ(var/obj/item/organ/external/def_zone) - if (!def_zone) + if(!def_zone) return 1.0 var/siemens_coefficient = 1.0 @@ -132,40 +132,24 @@ emp_act //End Here -/mob/living/carbon/human/proc/check_shields(var/damage = 0, var/attack_text = "the attack", var/obj/item/O) - if(O) - if(O.flags & NOSHIELD) //weapon ignores shields altogether - return 0 - if(l_hand && istype(l_hand, /obj/item/weapon))//Current base is the prob(50-d/3) - var/obj/item/weapon/I = l_hand - if(I.IsShield() && (prob(50 - round(damage / 3)))) - visible_message("[src] blocks [attack_text] with [l_hand]!", \ - "[src] blocks [attack_text] with [l_hand]!") +/mob/living/carbon/human/proc/check_shields(damage = 0, attack_text = "the attack", atom/movable/AM, attack_type = MELEE_ATTACK, armour_penetration = 0) + var/block_chance_modifier = round(damage / -3) + + if(l_hand && !istype(l_hand, /obj/item/clothing)) + var/final_block_chance = l_hand.block_chance - (Clamp((armour_penetration-l_hand.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example + if(l_hand.hit_reaction(src, attack_text, final_block_chance, damage, attack_type)) return 1 - if(r_hand && istype(r_hand, /obj/item/weapon)) - var/obj/item/weapon/I = r_hand - if(I.IsShield() && (prob(50 - round(damage / 3)))) - visible_message("[src] blocks [attack_text] with [r_hand]!", \ - "[src] blocks [attack_text] with [r_hand]!") + if(r_hand && !istype(r_hand, /obj/item/clothing)) + var/final_block_chance = r_hand.block_chance - (Clamp((armour_penetration-r_hand.armour_penetration)/2,0,100)) + block_chance_modifier //Need to reset the var so it doesn't carry over modifications between attempts + if(r_hand.hit_reaction(src, attack_text, final_block_chance, damage, attack_type)) return 1 - if(wear_suit && istype(wear_suit, /obj/item/)) - var/obj/item/I = wear_suit - if(I.IsShield() && (prob(50))) - visible_message("The reactive teleport system flings [src] clear of [attack_text]!", \ - "The reactive teleport system flings [src] clear of [attack_text]!") - var/list/turfs = new/list() - for(var/turf/T in orange(6, src)) - if(istype(T,/turf/space)) continue - if(T.density) continue - if(T.x>world.maxx-6 || T.x<6) continue - if(T.y>world.maxy-6 || T.y<6) continue - turfs += T - if(!turfs.len) turfs += pick(/turf in orange(6, src)) - var/turf/picked = pick(turfs) - if(!isturf(picked)) return - if(buckled) - buckled.unbuckle_mob() - src.loc = picked + if(wear_suit) + var/final_block_chance = wear_suit.block_chance - (Clamp((armour_penetration-wear_suit.armour_penetration)/2,0,100)) + block_chance_modifier + if(wear_suit.hit_reaction(src, attack_text, final_block_chance, damage, attack_type)) + return 1 + if(w_uniform) + var/final_block_chance = w_uniform.block_chance - (Clamp((armour_penetration-w_uniform.armour_penetration)/2,0,100)) + block_chance_modifier + if(w_uniform.hit_reaction(src, attack_text, final_block_chance, damage, attack_type)) return 1 return 0 @@ -221,7 +205,7 @@ emp_act if(user != src) user.do_attack_animation(src) - if(check_shields(I.force, "the [I.name]", I)) + if(check_shields(I.force, "the [I.name]", I, MELEE_ATTACK, I.armour_penetration)) return 0 if(istype(I,/obj/item/weapon/card/emag)) @@ -236,7 +220,7 @@ emp_act var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].", armour_penetration = I.armour_penetration) var/weapon_sharp = is_sharp(I) var/weapon_edge = has_edge(I) - if ((weapon_sharp || weapon_edge) && prob(getarmor(user.zone_sel.selecting, "melee"))) + if((weapon_sharp || weapon_edge) && prob(getarmor(user.zone_sel.selecting, "melee"))) weapon_sharp = 0 weapon_edge = 0 @@ -299,9 +283,9 @@ emp_act forcesay(hit_appends) //forcesay checks stat already /* //Melee weapon embedded object code. Commented out, as most people on the forums seem to find this annoying and think it does not contribute to general gameplay. - Dave - if (I.damtype == BRUTE && !I.is_robot_module()) + if(I.damtype == BRUTE && !I.is_robot_module()) var/damage = I.force - if (armor) + if(armor) damage /= armor+1 //blunt objects should really not be embedding in things unless a huge amount of force is involved @@ -315,63 +299,56 @@ emp_act //this proc handles being hit by a thrown atom /mob/living/carbon/human/hitby(atom/movable/AM as mob|obj,var/speed = 5) - if(istype(AM,/obj/)) - var/obj/O = AM + if(istype(AM, /obj/item)) + var/obj/item/I = AM if(in_throw_mode && !get_active_hand() && speed <= 5) //empty active hand and we're in throw mode if(canmove && !restrained()) - if(isturf(O.loc)) - put_in_active_hand(O) - visible_message("[src] catches [O]!") + if(isturf(I.loc)) + put_in_active_hand(I) + visible_message("[src] catches [I]!") throw_mode_off() return var/zone = ran_zone("chest", 65) var/dtype = BRUTE - if(istype(O,/obj/item/weapon)) - var/obj/item/weapon/W = O + if(istype(I, /obj/item/weapon)) + var/obj/item/weapon/W = I dtype = W.damtype - var/throw_damage = O.throwforce*(speed/5) + var/throw_damage = I.throwforce*(speed/5) - /* - if(!zone) - visible_message("\blue \The [O] misses [src] narrowly!") - return - */ - O.throwing = 0 //it hit, so stop moving + I.throwing = 0 //it hit, so stop moving - if ((O.thrower != src) && check_shields(throw_damage, "[O]")) + if((I.thrower != src) && check_shields(throw_damage, "\the [I.name]", I, THROWN_PROJECTILE_ATTACK)) return var/obj/item/organ/external/affecting = get_organ(zone) if(!affecting) - var/missverb = (O.gender == PLURAL) ? "whizz" : "whizzes" - visible_message("\The [O] [missverb] past [src]'s missing [parse_zone(zone)]!", - "\The [O] [missverb] past your missing [parse_zone(zone)]!") + var/missverb = (I.gender == PLURAL) ? "whizz" : "whizzes" + visible_message("\The [I] [missverb] past [src]'s missing [parse_zone(zone)]!", + "\The [I] [missverb] past your missing [parse_zone(zone)]!") return var/hit_area = affecting.name - src.visible_message("\red [src] has been hit in the [hit_area] by [O].") - var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].") //I guess "melee" is the best fit here + src.visible_message("\red [src] has been hit in the [hit_area] by [I].") + var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].", I.armour_penetration) //I guess "melee" is the best fit here + apply_damage(throw_damage, dtype, zone, armor, is_sharp(I), has_edge(I), I) - apply_damage(throw_damage, dtype, zone, armor, is_sharp(O), has_edge(O), O) - - if(ismob(O.thrower)) - var/mob/M = O.thrower + if(ismob(I.thrower)) + var/mob/M = I.thrower if(M) - src.attack_log += text("\[[time_stamp()]\] Has been hit with a [O], thrown by [key_name(M)]") - M.attack_log += text("\[[time_stamp()]\] Hit [key_name(src)] with a thrown [O]") + src.attack_log += text("\[[time_stamp()]\] Has been hit with a [I], thrown by [key_name(M)]") + M.attack_log += text("\[[time_stamp()]\] Hit [key_name(src)] with a thrown [I]") if(!istype(src,/mob/living/simple_animal/mouse)) - msg_admin_attack("[key_name_admin(src)] was hit by a [O], thrown by [key_name_admin(M)]") + msg_admin_attack("[key_name_admin(src)] was hit by a [I], thrown by [key_name_admin(M)]") //thrown weapon embedded object code. - if(dtype == BRUTE && istype(O,/obj/item)) - var/obj/item/I = O - if (!I.is_robot_module()) + if(dtype == BRUTE && istype(I)) + if(!I.is_robot_module()) var/sharp = is_sharp(I) var/damage = throw_damage - if (armor) + if(armor) damage /= armor+1 //blunt objects should really not be embedding in things unless a huge amount of force is involved @@ -384,10 +361,10 @@ emp_act affecting.embed(I) // Begin BS12 momentum-transfer code. - if(O.throw_source && speed >= 15) - var/obj/item/weapon/W = O + if(I.throw_source && speed >= 15) + var/obj/item/weapon/W = I var/momentum = speed/2 - var/dir = get_dir(O.throw_source, src) + var/dir = get_dir(I.throw_source, src) visible_message("\red [src] staggers under the impact!","\red You stagger under the impact!") src.throw_at(get_edge_target_turf(src,dir),1,momentum) @@ -399,14 +376,14 @@ emp_act if(T) src.loc = T - visible_message("[src] is pinned to the wall by [O]!","You are pinned to the wall by [O]!") + visible_message("[src] is pinned to the wall by [I]!","You are pinned to the wall by [I]!") src.anchored = 1 - src.pinned += O + src.pinned += I /mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) - if (gloves) + if(gloves) gloves.add_blood(source) gloves:transfer_blood = amount gloves:bloody_hands_mob = source diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 6f106f5e125..a74409a9b44 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -53,6 +53,8 @@ var/global/default_martial_art = new/datum/martial_art var/speech_problem_flag = 0 + var/datum/personal_crafting/handcrafting + var/datum/martial_art/martial_art = null var/special_voice = "" // For changing our voice. Used by a symptom. @@ -70,7 +72,7 @@ var/global/default_martial_art = new/datum/martial_art var/mob/remoteview_target = null var/meatleft = 3 //For chef item var/decaylevel = 0 // For rotting bodies - var/max_blood = 560 // For stuff in the vessel + var/max_blood = BLOOD_VOLUME_NORMAL // For stuff in the vessel var/slime_color = "blue" //For slime people this defines their color, it's blue by default to pay tribute to the old icons var/check_mutations=0 // Check mutations on next life tick @@ -80,4 +82,4 @@ var/global/default_martial_art = new/datum/martial_art var/fire_dmi = 'icons/mob/OnFire.dmi' var/fire_sprite = "Standing" - var/datum/body_accessory/body_accessory = null \ No newline at end of file + var/datum/body_accessory/body_accessory = null diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 5d79e3f6237..cf66c1d2c15 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -24,7 +24,7 @@ tally += (health_deficiency / 25) var/hungry = (500 - nutrition)/5 // So overeat would be 100 and default level would be 80 - if (hungry >= 70) + if(hungry >= 70) tally += hungry/50 if(wear_suit) @@ -46,7 +46,7 @@ if(FAT in src.mutations) tally += 1.5 - if (bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT) + if(bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT) tally += (BODYTEMP_COLD_DAMAGE_LIMIT - bodytemperature) / COLD_SLOWDOWN_FACTOR tally += 2*stance_damage //damaged/missing feet or legs is slow @@ -79,7 +79,7 @@ break if(thrust) - if((movement_dir || thrust.stabilization_on) && thrust.allow_thrust(0.01, src)) + if((movement_dir || thrust.stabilizers) && thrust.allow_thrust(0.01, src)) return 1 return 0 diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 56838b8d14e..aa0724c5c80 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -42,45 +42,45 @@ E.process() number_wounds += E.number_wounds - if (!lying && world.time - l_move_time < 15) + if(!lying && world.time - l_move_time < 15) //Moving around with fractured ribs won't do you any good - if (E.is_broken() && E.internal_organs && E.internal_organs.len && prob(15)) + if(E.is_broken() && E.internal_organs && E.internal_organs.len && prob(15)) var/obj/item/organ/internal/I = pick(E.internal_organs) custom_pain("You feel broken bones moving in your [E.name]!", 1) I.take_damage(rand(3,5)) //Moving makes open wounds get infected much faster - if (E.wounds.len) + if(E.wounds.len) for(var/datum/wound/W in E.wounds) - if (W.infection_check()) + if(W.infection_check()) W.germ_level += 1 /mob/living/carbon/human/proc/handle_stance() // Don't need to process any of this if they aren't standing anyways // unless their stance is damaged, and we want to check if they should stay down - if (!stance_damage && (lying || resting) && (life_tick % 4) == 0) + if(!stance_damage && (lying || resting) && (life_tick % 4) == 0) return stance_damage = 0 // Buckled to a bed/chair. Stance damage is forced to 0 since they're sitting on something solid - if (istype(buckled, /obj/structure/stool/bed)) + if(istype(buckled, /obj/structure/stool/bed)) return for(var/limb_tag in list("l_leg","r_leg","l_foot","r_foot")) var/obj/item/organ/external/E = organs_by_name[limb_tag] if(!E || (E.status & (ORGAN_DESTROYED|ORGAN_DEAD)) || E.is_malfunctioning()) stance_damage += 2 // let it fail even if just foot&leg. Also malfunctioning happens sporadically so it should impact more when it procs - else if (E.is_broken() || !E.is_usable()) + else if(E.is_broken() || !E.is_usable()) stance_damage += 1 // Canes and crutches help you stand (if the latter is ever added) // One cane mitigates a broken leg+foot, or a missing foot. // Two canes are needed for a lost leg. If you are missing both legs, canes aren't gonna help you. - if (l_hand && istype(l_hand, /obj/item/weapon/cane)) + if(l_hand && istype(l_hand, /obj/item/weapon/cane)) stance_damage -= 2 - if (r_hand && istype(r_hand, /obj/item/weapon/cane)) + if(r_hand && istype(r_hand, /obj/item/weapon/cane)) stance_damage -= 2 if(stance_damage < 0) @@ -100,7 +100,7 @@ if(!l_hand && !r_hand) return - for (var/obj/item/organ/external/E in organs) + for(var/obj/item/organ/external/E in organs) if(!E || !E.can_grasp || (E.status & ORGAN_SPLINTED)) continue @@ -163,7 +163,7 @@ I use this to standardize shadowling dethrall code -- Crazylemon */ /mob/living/carbon/human/proc/named_organ_parent(var/organ_name) - if (!get_int_organ(organ_name)) + if(!get_int_organ(organ_name)) return null var/obj/item/organ/internal/O = get_int_organ(organ_name) return O.parent_organ \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/interactive/functions.dm b/code/modules/mob/living/carbon/human/interactive/functions.dm index b0806e66241..199530c4805 100644 --- a/code/modules/mob/living/carbon/human/interactive/functions.dm +++ b/code/modules/mob/living/carbon/human/interactive/functions.dm @@ -433,7 +433,7 @@ return 1 /mob/living/carbon/human/interactive/proc/souschef(obj) - if(shouldModulePass() || enforceHome() || prob(SNPC_FUZZY_CHANCE_LOW)) + if(shouldModulePass() || enforceHome() || prob(SNPC_FUZZY_CHANCE_HIGH) || prob(SNPC_FUZZY_CHANCE_HIGH)) return if(doing & SNPC_SPECIAL) @@ -442,7 +442,7 @@ var/static/list/customableTypes = list(/obj/item/weapon/reagent_containers/food/snacks/customizable,/obj/item/weapon/reagent_containers/food/snacks/breadslice,/obj/item/weapon/reagent_containers/food/snacks/bun,/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough,/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti,/obj/item/trash/plate,/obj/item/trash/bowl) - var/static/list/rawtypes = list(/obj/item/weapon/reagent_containers/food/snacks/grown, /obj/item/weapon/reagent_containers/food/snacks/rawcutlet, /obj/item/weapon/reagent_containers/food/snacks/rawmeatball, /obj/item/weapon/reagent_containers/food/snacks/rawsticks, /obj/item/weapon/reagent_containers/food/snacks/salmonmeat, /obj/item/weapon/reagent_containers/food/snacks/carpmeat, /obj/item/weapon/reagent_containers/food/snacks/catfishmeat, /obj/item/weapon/reagent_containers/food/snacks/spagetti, /obj/item/weapon/reagent_containers/food/snacks/dough_ball, /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, /obj/item/weapon/reagent_containers/food/snacks/doughslice, /obj/item/weapon/reagent_containers/food/snacks/meat, /obj/item/weapon/reagent_containers/food/snacks/boiledrice, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge) + var/static/list/rawtypes = list(/obj/item/weapon/reagent_containers/food/snacks/grown, /obj/item/weapon/reagent_containers/food/snacks/rawcutlet, /obj/item/weapon/reagent_containers/food/snacks/rawmeatball, /obj/item/weapon/reagent_containers/food/snacks/rawsticks, /obj/item/weapon/reagent_containers/food/snacks/salmonmeat, /obj/item/weapon/reagent_containers/food/snacks/carpmeat, /obj/item/weapon/reagent_containers/food/snacks/catfishmeat, /obj/item/weapon/reagent_containers/food/snacks/spagetti, /obj/item/weapon/reagent_containers/food/snacks/dough_ball, /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, /obj/item/weapon/reagent_containers/food/snacks/doughslice, /obj/item/weapon/reagent_containers/food/snacks/meat, /obj/item/weapon/reagent_containers/food/snacks/boiledrice, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, /obj/item/weapon/reagent_containers/food/snacks/raw_bacon) try var/list/allContents = getAllContents() @@ -460,7 +460,7 @@ var/global/list/available_recipes if(!available_recipes) available_recipes = list() - for (var/type in subtypesof(/datum/recipe)) + for(var/type in subtypesof(/datum/recipe)) var/datum/recipe/recipe = new type if(recipe.result) // Ignore recipe subtypes that lack a result available_recipes += recipe @@ -518,6 +518,7 @@ var/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel/CW = locate() in rangeCheck var/obj/item/weapon/reagent_containers/food/snacks/grown/potato/PO = locate() in rangeCheck var/obj/item/weapon/reagent_containers/food/snacks/meat/ME = locate() in rangeCheck + var/obj/item/weapon/reagent_containers/food/snacks/raw_bacon/RB = locate() in rangeCheck if(D) TARGET = D @@ -561,6 +562,13 @@ sleep(get_dist(src, ME)) ME.attackby(KK, src) foundCookable = 1 + else if(RB) + TARGET = RB + if(prob(50)) + tryWalk(get_turf(RB)) + sleep(get_dist(src, RB)) + RB.attackby(KK, src) + foundCookable = 1 // refresh allContents = getAllContents() @@ -640,7 +648,7 @@ newSnack.name = "Synthetic [newSnack.name]" custom_emote(2, "[pick("gibbers","drools","slobbers","claps wildly","spits")] as they vomit [newSnack] from their mouth!") catch(var/exception/e) - log_to_dd("Cooking error: [e] in [e.file]:[e.line]") + log_runtime(e, src, "Caught in SNPC cooking module") doing &= ~SNPC_SPECIAL // END COOKING MODULE @@ -776,6 +784,12 @@ else return "[word]ed" +/mob/living/carbon/human/interactive/proc/ing_verb(word) + if(copytext(word, length(word)) == "e") + return "[copytext(word, 1, length(word))]ing" + else + return "[word]ing" + /mob/living/carbon/human/interactive/proc/paperwork_sentence() var/verbs_use = pick_list(speak_file, "verbs_use") var/verbs_touch = pick_list(speak_file, "verbs_touch") diff --git a/code/modules/mob/living/carbon/human/interactive/interactive.dm b/code/modules/mob/living/carbon/human/interactive/interactive.dm index 14402788451..5e77278be6f 100644 --- a/code/modules/mob/living/carbon/human/interactive/interactive.dm +++ b/code/modules/mob/living/carbon/human/interactive/interactive.dm @@ -258,12 +258,15 @@ RPID.access = myjob.get_access() equip_to_slot_or_del(MYID, slot_wear_id) - MYPDA = new(src) + if(wear_pda) + MYPDA = wear_pda + else + MYPDA = new(src) + equip_to_slot_or_del(MYPDA, slot_belt) MYPDA.owner = real_name MYPDA.ownjob = alt_title MYPDA.ownrank = job MYPDA.name = "PDA-[real_name] ([alt_title])" - equip_to_slot_or_del(MYPDA, slot_belt) zone_sel.selecting = "chest" //arms if(prob((SNPC_FUZZY_CHANCE_LOW+SNPC_FUZZY_CHANCE_HIGH)/4)) @@ -317,7 +320,7 @@ if("Captain", "Head of Personnel") favoured_types = list(/obj/item/clothing, /obj/item/weapon/stamp/captain,/obj/item/weapon/disk/nuclear) if("Nanotrasen Representative") - favoured_types = list(/obj/item/clothing, /obj/item/weapon/stamp/centcom, /obj/item/weapon/paper, /obj/item/weapon/melee/baton/loaded/ntcane) + favoured_types = list(/obj/item/clothing, /obj/item/weapon/stamp/centcom, /obj/item/weapon/paper, /obj/item/weapon/melee/classic_baton/ntcane) functions += "paperwork" if("Magistrate", "Internal Affairs Agent") favoured_types = list(/obj/item/clothing, /obj/item/weapon/stamp/law, /obj/item/weapon/paper) @@ -836,7 +839,7 @@ return 0 if(myPath.len <= 0) - myPath = get_path_to(src, get_turf(target), /turf/proc/Distance, SNPC_MAX_RANGE_FIND + 1, 250,1, id=Path_ID) + myPath = get_path_to(src, get_turf(target), /turf/proc/Distance, SNPC_MAX_RANGE_FIND + 1, 250,1, id=Path_ID, simulated_only = 0) if(myPath) if(myPath.len > 0) @@ -951,4 +954,4 @@ if(RPID) RPID.registered_name = MYID.registered_name RPID.name = MYID.name - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index bde2c900636..5e0a4335b83 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -39,10 +39,10 @@ /mob/living/carbon/human/proc/equip_in_one_of_slots(obj/item/W, list/slots, del_on_fail = 1) - for (var/slot in slots) - if (equip_to_slot_if_possible(W, slots[slot], del_on_fail = 0)) + for(var/slot in slots) + if(equip_to_slot_if_possible(W, slots[slot], del_on_fail = 0)) return slot - if (del_on_fail) + if(del_on_fail) qdel(W) return null @@ -78,8 +78,6 @@ if(slot_wear_id) // the only relevant check for this is the uniform check return 1 - if(slot_wear_pda) - return 1 if(slot_l_ear) return has_organ("head") if(slot_r_ear) @@ -150,7 +148,7 @@ else if(I == r_ear) r_ear = null update_inv_ears() - else if (I == l_ear) + else if(I == l_ear) l_ear = null update_inv_ears() else if(I == shoes) @@ -166,9 +164,8 @@ update_fhair() update_head_accessory() if(internal) - if(internals) - internals.icon_state = "internal0" internal = null + update_internals_hud_icon(0) sec_hud_set_ID() update_inv_wear_mask() else if(I == wear_id) @@ -251,9 +248,6 @@ wear_id = W sec_hud_set_ID() update_inv_wear_id(redraw_mob) - if(slot_wear_pda) - wear_pda = W - update_inv_wear_pda(redraw_mob) if(slot_l_ear) l_ear = W if(l_ear.slot_flags & SLOT_TWOEARS) @@ -340,8 +334,6 @@ return belt if(slot_wear_id) return wear_id - if(slot_wear_pda) - return wear_pda if(slot_l_ear) return l_ear if(slot_r_ear) @@ -423,7 +415,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 @@ -521,16 +513,6 @@ if(!(I.slot_flags & SLOT_ID)) return 0 return 1 - if(slot_wear_pda) - if(wear_pda) - return 0 - if(!w_uniform) - if(!disable_warning) - to_chat(src, "You need a jumpsuit before you can attach this [name].") - return 0 - if(!(I.slot_flags & SLOT_PDA)) - return 0 - return 1 if(slot_l_store) if(I.flags & NODROP) //Pockets aren't visible, so you can't move NODROP items into them. return 0 diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index d96dd018f2a..b2b71d60545 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -78,8 +78,8 @@ /mob/living/carbon/human/handle_disabilities() - if (disabilities & EPILEPSY) - if ((prob(1) && paralysis < 1)) + if(disabilities & EPILEPSY) + if((prob(1) && paralysis < 1)) visible_message("[src] starts having a seizure!","You have a seizure!") Paralyse(10) Jitter(1000) @@ -89,13 +89,13 @@ if(prob(1) && hallucination < 1) hallucination += 20 - if (disabilities & COUGHING) - if ((prob(5) && paralysis <= 1)) + if(disabilities & COUGHING) + if((prob(5) && paralysis <= 1)) drop_item() emote("cough") - if (disabilities & TOURETTES) + if(disabilities & TOURETTES) speech_problem_flag = 1 - if ((prob(10) && paralysis <= 1)) + if((prob(10) && paralysis <= 1)) Stun(10) switch(rand(1, 3)) if(1) @@ -108,12 +108,12 @@ animate(src, pixel_x = pixel_x + x_offset, pixel_y = pixel_y + y_offset, time = 1) animate(pixel_x = initial(pixel_x) , pixel_y = initial(pixel_y), time = 1) - if (disabilities & NERVOUS) + if(disabilities & NERVOUS) speech_problem_flag = 1 - if (prob(10)) + if(prob(10)) stuttering = max(10, stuttering) - if (getBrainLoss() >= 60 && stat != 2) + if(getBrainLoss() >= 60 && stat != 2) speech_problem_flag = 1 if(prob(3)) var/list/s1 = list("IM A PONY NEEEEEEIIIIIIIIIGH", @@ -174,13 +174,28 @@ if(!gene.block) continue if(gene.is_active(src)) - /* if (prob(10) && prob(gene.instability)) - adjustCloneLoss(1) */ speech_problem_flag = 1 gene.OnMobLife(src) + if(gene_stability < 85) + var/instability = DEFAULT_GENE_STABILITY - gene_stability + if(prob(instability / 10)) + adjustFireLoss(min(6, instability / 12)) + to_chat(src, "You feel like your skin is burning and bubbling off!") + if(gene_stability < 70) + if(prob(instability / 12)) + adjustCloneLoss(min(5, instability / 15)) + to_chat(src, "You feel as if your body is warping.") + if(prob(instability / 10)) + adjustToxLoss(min(6, instability / 12)) + to_chat(src, "You feel weak and nauseous.") + if(gene_stability < 40 && prob(1)) + to_chat(src, "You feel incredibly sick... Something isn't right!") + spawn(300) + if(gene_stability < 40) + gib() if(!(species.flags & RADIMMUNE)) - if (radiation) + if(radiation) if(get_int_organ(/obj/item/organ/internal/nucleation/resonant_crystal)) var/rads = radiation/25 @@ -191,14 +206,14 @@ to_chat(src, "You feel relaxed.") return - if (radiation > 100) + if(radiation > 100) radiation = 100 Weaken(10) if(!lying) to_chat(src, "You feel weak.") emote("collapse") - if (radiation < 0) + if(radiation < 0) radiation = 0 else @@ -313,7 +328,6 @@ /mob/living/carbon/human/get_breath_from_internal(volume_needed) //making this call the parent would be far too complicated - if(internal) var/null_internals = 0 //internals are invalid, therefore turn them off var/skip_contents_check = 0 //rigsuit snowflake, oxygen tanks aren't stored inside the mob, so the 'contents.Find' check has to be skipped. @@ -338,12 +352,10 @@ if(internal) //check for hud updates every time this is called - if(internals) - internals.icon_state = "internal1" + update_internals_hud_icon(1) return internal.remove_air_volume(volume_needed) //returns the valid air else - if(internals) - internals.icon_state = "internal0" + update_internals_hud_icon(0) return null @@ -475,6 +487,16 @@ return if(RESIST_HEAT in mutations) return + var/thermal_protection = get_thermal_protection() + + if(thermal_protection >= FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT) + return + if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT) + bodytemperature += 11 + else + bodytemperature += BODYTEMP_HEATING_MAX + +/mob/living/carbon/human/proc/get_thermal_protection() var/thermal_protection = 0 //Simple check to estimate how protected we are against multiple temperatures if(wear_suit) if(wear_suit.max_heat_protection_temperature >= FIRE_SUIT_MAX_TEMP_PROTECT) @@ -483,34 +505,9 @@ if(head.max_heat_protection_temperature >= FIRE_HELM_MAX_TEMP_PROTECT) thermal_protection += (head.max_heat_protection_temperature*THERMAL_PROTECTION_HEAD) thermal_protection = round(thermal_protection) - if(thermal_protection >= FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT) - return - if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT) - bodytemperature += 11 - return - else - bodytemperature += BODYTEMP_HEATING_MAX - return -//END FIRE CODE + return thermal_protection - /* -/mob/living/carbon/human/proc/adjust_body_temperature(current, loc_temp, boost) - var/temperature = current - var/difference = abs(current-loc_temp) //get difference - var/increments// = difference/10 //find how many increments apart they are - if(difference > 50) - increments = difference/5 - else - increments = difference/10 - var/change = increments*boost // Get the amount to change by (x per increment) - var/temp_change - if(current < loc_temp) - temperature = min(loc_temp, temperature+change) - else if(current > loc_temp) - temperature = max(loc_temp, temperature-change) - temp_change = (temperature - current) - return temp_change - */ +//END FIRE CODE /mob/living/carbon/human/proc/stabilize_temperature_from_calories() if(bodytemperature <= species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects. @@ -693,10 +690,10 @@ update_inv_wear_suit() // nutrition decrease - if (nutrition > 0 && stat != 2) + if(nutrition > 0 && stat != 2) nutrition = max (0, nutrition - HUNGER_FACTOR) - if (nutrition > 450) + if(nutrition > 450) if(overeatduration < 800) //capped so people don't take forever to unfat overeatduration++ @@ -707,10 +704,10 @@ else overeatduration -= 2 - if (drowsyness) + if(drowsyness) drowsyness-- eye_blurry = max(2, eye_blurry) - if (prob(5)) + if(prob(5)) sleeping += 1 Paralyse(5) @@ -756,7 +753,7 @@ alcohol_strength *= 5 if(alcohol_strength >= slur_start) //slurring - if (!slurring) slurring = 1 + if(!slurring) slurring = 1 slurring = drunk if(alcohol_strength >= brawl_start) //the drunken martial art if(!istype(martial_art, /datum/martial_art/drunk_brawling)) @@ -766,7 +763,7 @@ if(istype(martial_art, /datum/martial_art/drunk_brawling)) martial_art.remove(src) if(alcohol_strength >= confused_start && prob(33)) //confused walking - if (!confused) confused = 1 + if(!confused) confused = 1 confused = max(confused+(3/sober_str),0) if(alcohol_strength >= blur_start) //blurry eyes eye_blurry = max(eye_blurry, 10/sober_str) @@ -778,7 +775,7 @@ if(alcohol_strength >= pass_out) Paralyse(5 / sober_str) drowsyness = max(drowsyness, 30/sober_str) - if (L) + if(L) L.take_damage(0.1, 1) adjustToxLoss(0.1) else //stuff only for synthetics @@ -819,9 +816,6 @@ handle_organs() handle_blood() - //the analgesic effect wears off slowly - analgesic = max(0, analgesic - 1) - if(paralysis) blinded = 1 stat = UNCONSCIOUS @@ -867,7 +861,7 @@ else //blindness - if(sdisabilities & BLIND) // Disabled-blind, doesn't get better on its own + if(disabilities & BLIND) // Disabled-blind, doesn't get better on its own blinded = 1 else if(eye_blind) // Blindness, heals slowly over time @@ -887,26 +881,22 @@ //Ears - if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own - ear_deaf = max(ear_deaf, 1) + if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own + setEarDamage(-1, max(ear_deaf, 1)) else if(ear_deaf) //deafness, heals slowly over time - ear_deaf = max(ear_deaf - 1, 0) + adjustEarDamage(0,-1) else if(istype(l_ear, /obj/item/clothing/ears/earmuffs) || istype(r_ear, /obj/item/clothing/ears/earmuffs)) //resting your ears with earmuffs heals ear damage faster - ear_damage = max(ear_damage - 0.15, 0) - ear_deaf = max(ear_deaf, 1) + adjustEarDamage(-0.15,0) + setEarDamage(-1, max(ear_deaf, 1)) else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs - ear_damage = max(ear_damage - 0.05, 0) - + adjustEarDamage(-0.05,0) if(flying) - spawn() - animate(src, pixel_y = pixel_y + 5 , time = 10, loop = 1, easing = SINE_EASING) - spawn(10) - if(flying) - animate(src, pixel_y = pixel_y - 5, time = 10, loop = 1, easing = SINE_EASING) + animate(src, pixel_y = pixel_y + 5 , time = 10, loop = 1, easing = SINE_EASING) + animate(pixel_y = pixel_y - 5, time = 10, loop = 1, easing = SINE_EASING) // If you're dirty, your gloves will become dirty, too. if(gloves && germ_level > gloves.germ_level && prob(10)) @@ -955,7 +945,7 @@ /mob/living/carbon/human/handle_random_events() // Puke if toxloss is too high if(!stat) - if (getToxLoss() >= 45 && nutrition > 20) + if(getToxLoss() >= 45 && nutrition > 20) lastpuke ++ if(lastpuke >= 25) // about 25 second delay I guess Stun(5) @@ -965,7 +955,7 @@ playsound(loc, 'sound/effects/splat.ogg', 50, 1) var/turf/location = loc - if (istype(location, /turf/simulated)) + if(istype(location, /turf/simulated)) location.add_vomit_floor(src, 1) nutrition -= 20 @@ -994,8 +984,10 @@ /mob/living/carbon/human/handle_shock() ..() - if(status_flags & GODMODE) return 0 //godmode - if(analgesic || (species && species.flags & NO_PAIN)) return // analgesic avoids all traumatic shock temporarily + if(status_flags & GODMODE) + return 0 //godmode + if(species && species.flags & NO_PAIN) + return if(health <= config.health_threshold_softcrit)// health 0 makes you immediately collapse shock_stage = max(shock_stage, 61) @@ -1020,17 +1012,17 @@ if(shock_stage >=60) if(shock_stage == 60) custom_emote(1,"falls limp.") - if (prob(2)) + if(prob(2)) to_chat(src, ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")) Weaken(20) if(shock_stage >= 80) - if (prob(5)) + if(prob(5)) to_chat(src, ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")) Weaken(20) if(shock_stage >= 120) - if (prob(2)) + if(prob(2)) to_chat(src, ""+pick("You black out!", "You feel like you could die any moment now.", "You're about to lose consciousness.")) Paralyse(5) @@ -1044,9 +1036,11 @@ /mob/living/carbon/human/proc/handle_pulse() - if(mob_master.current_cycle % 5) return pulse //update pulse every 5 life ticks (~1 tick/sec, depending on server load) + if(mob_master.current_cycle % 5) + return pulse //update pulse every 5 life ticks (~1 tick/sec, depending on server load) - if(species && species.flags & NO_BLOOD) return PULSE_NONE //No blood, no pulse. + if(species && species.flags & NO_BLOOD) + return PULSE_NONE //No blood, no pulse. if(stat == DEAD) return PULSE_NONE //that's it, you're dead, nothing can influence your pulse @@ -1056,32 +1050,29 @@ var/temp = PULSE_NORM - if(round(vessel.get_reagent_amount("blood")) <= BLOOD_VOLUME_BAD) //how much blood do we have + var/blood_type = get_blood_name() + if(round(vessel.get_reagent_amount(blood_type)) <= BLOOD_VOLUME_BAD) //how much blood do we have temp = PULSE_THREADY //not enough :( if(status_flags & FAKEDEATH) temp = PULSE_NONE //pretend that we're dead. unlike actual death, can be inflienced by meds for(var/datum/reagent/R in reagents.reagent_list) - if(R.id in bradycardics) + if(R.heart_rate_decrease) if(temp <= PULSE_THREADY && temp >= PULSE_NORM) temp-- - break //one reagent is enough - //comment out the breaks to make med effects stack - for(var/datum/reagent/R in reagents.reagent_list) //handles different chems' influence on pulse - if(R.id in tachycardics) + break + + for(var/datum/reagent/R in reagents.reagent_list)//handles different chems' influence on pulse + if(R.heart_rate_increase) if(temp <= PULSE_FAST && temp >= PULSE_NONE) temp++ break + for(var/datum/reagent/R in reagents.reagent_list) //To avoid using fakedeath - if(R.id in heartstopper) + if(R.heart_rate_stop) temp = PULSE_NONE break - for(var/datum/reagent/R in reagents.reagent_list) //Conditional heart-stoppage - if(R.id in cheartstopper) - if(R.volume >= R.overdose_threshold) - temp = PULSE_NONE - break return temp @@ -1141,7 +1132,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++ @@ -1160,9 +1151,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/say.dm b/code/modules/mob/living/carbon/human/say.dm index 840b500de01..72e6ff63314 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -38,8 +38,7 @@ say(temp) winset(client, "input", "text=[null]") -/mob/living/carbon/human/say_understands(var/mob/other,var/datum/language/speaking = null) - +/mob/living/carbon/human/say_understands(var/mob/other, var/datum/language/speaking = null) if(has_brain_worms()) //Brain worms translate everything. Even mice and alien speak. return 1 @@ -47,25 +46,19 @@ return 1 //These only pertain to common. Languages are handled by mob/say_understands() - if (!speaking) - if (istype(other, /mob/living/simple_animal/diona)) + if(!speaking) + if(istype(other, /mob/living/simple_animal/diona)) if(other.languages.len >= 2) //They've sucked down some blood and can speak common now. return 1 - if (istype(other, /mob/living/silicon)) + if(issilicon(other)) return 1 - if (istype(other, /mob/living/simple_animal/bot)) + if(isbot(other)) return 1 - if (istype(other, /mob/living/carbon/brain)) + if(isbrain(other)) return 1 - if (istype(other, /mob/living/carbon/slime)) + if(isslime(other)) return 1 - //This is already covered by mob/say_understands() - //if (istype(other, /mob/living/simple_animal)) - // if((other.universal_speak && !speaking) || src.universal_speak || src.universal_understand) - // return 1 - // return 0 - return ..() /mob/living/carbon/human/proc/HasVoiceChanger() @@ -113,7 +106,7 @@ var/list/returns[3] var/speech_problem_flag = 0 - if(silent || (sdisabilities & MUTE)) + if(silent || (disabilities & MUTE)) message = "" speech_problem_flag = 1 @@ -148,7 +141,7 @@ if(prob(braindam)) message = uppertext(message) verb = "yells loudly" - + if(locate(/obj/item/organ/internal/cyberimp/brain/clown_voice) in internal_organs) message = "[message]" @@ -166,57 +159,70 @@ used_radios += I if("headset") - if(l_ear && istype(l_ear,/obj/item/device/radio)) - var/obj/item/device/radio/R = l_ear - R.talk_into(src,message,null,verb,speaking) - used_radios += l_ear - else if(r_ear && istype(r_ear,/obj/item/device/radio)) - var/obj/item/device/radio/R = r_ear - R.talk_into(src,message,null,verb,speaking) - used_radios += r_ear + var/obj/item/device/radio/R = null + if(isradio(l_ear)) + R = l_ear + used_radios += R + if(R.talk_into(src, message, null, verb, speaking)) + return + + if(isradio(r_ear)) + R = r_ear + used_radios += R + if(R.talk_into(src, message, null, verb, speaking)) + return if("right ear") var/obj/item/device/radio/R - var/has_radio = 0 - if(r_ear && istype(r_ear,/obj/item/device/radio)) + if(isradio(r_ear)) R = r_ear - has_radio = 1 - if(r_hand && istype(r_hand, /obj/item/device/radio)) + else if(isradio(r_hand)) R = r_hand - has_radio = 1 - if(has_radio) - R.talk_into(src,message,null,verb,speaking) + if(R) used_radios += R - + R.talk_into(src, message, null, verb, speaking) if("left ear") var/obj/item/device/radio/R - var/has_radio = 0 - if(l_ear && istype(l_ear,/obj/item/device/radio)) + if(isradio(l_ear)) R = l_ear - has_radio = 1 - if(l_hand && istype(l_hand,/obj/item/device/radio)) + else if(isradio(l_hand)) R = l_hand - has_radio = 1 - if(has_radio) - R.talk_into(src,message,null,verb,speaking) + if(R) used_radios += R + R.talk_into(src, message, null, verb, speaking) if("whisper") whisper_say(message, speaking, alt_name) return 1 else if(message_mode) - if(l_ear && istype(l_ear,/obj/item/device/radio)) - l_ear.talk_into(src,message, message_mode, verb, speaking) + if(isradio(l_ear)) used_radios += l_ear - else if(r_ear && istype(r_ear,/obj/item/device/radio)) - r_ear.talk_into(src,message, message_mode, verb, speaking) + if(l_ear.talk_into(src, message, message_mode, verb, speaking)) + return + + if(isradio(r_ear)) used_radios += r_ear + if(r_ear.talk_into(src, message, message_mode, verb, speaking)) + return /mob/living/carbon/human/handle_speech_sound() var/list/returns[2] if(species.speech_sounds && prob(species.speech_chance)) returns[1] = sound(pick(species.speech_sounds)) returns[2] = 50 - return returns \ No newline at end of file + return returns + +/mob/living/carbon/human/binarycheck() + . = FALSE + var/obj/item/device/radio/headset/R + if(istype(l_ear, /obj/item/device/radio/headset)) + R = l_ear + if(R.translate_binary) + . = TRUE + + if(istype(r_ear, /obj/item/device/radio/headset)) + R = r_ear + if(R.translate_binary) + . = TRUE \ No newline at end of file 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/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index 003e1969d33..bae949dd9af 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -125,8 +125,7 @@ H.equip_or_collect(new/obj/item/weapon/tank/plasma/plasmaman(H), tank_slot) // Bigger plasma tank from Raggy. to_chat(H, "You are now running on plasma internals from the [H.s_store] in your [tank_slot_name]. You must breathe plasma in order to survive, and are extremely flammable.") H.internal = H.get_item_by_slot(tank_slot) - if (H.internals) - H.internals.icon_state = "internal1" + H.update_internals_hud_icon(1) // Plasmamen are so fucking different that they need their own proc. /datum/species/plasmaman/handle_breath(var/datum/gas_mixture/breath, var/mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species/shadow.dm b/code/modules/mob/living/carbon/human/species/shadow.dm index 55701b52d1c..fa7dadfebcb 100644 --- a/code/modules/mob/living/carbon/human/species/shadow.dm +++ b/code/modules/mob/living/carbon/human/species/shadow.dm @@ -33,5 +33,5 @@ if(light_amount > 2) //if there's enough light, start dying H.take_overall_damage(1,1) - else if (light_amount < 2) //heal in the dark + else if(light_amount < 2) //heal in the dark H.heal_overall_damage(1,1) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index bc4851b9ec3..32203931deb 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -42,7 +42,6 @@ var/heat_level_3_breathe = 1000 // Heat damage level 3 above this point; used for breathed air temperature var/body_temperature = 310.15 //non-IS_SYNTHETIC species will try to stabilize at this temperature. (also affects temperature processing) - var/passive_temp_gain = 0 //IS_SYNTHETIC species will gain this much temperature every second var/reagent_tag //Used for metabolizing reagents. var/siemens_coeff = 1 //base electrocution coefficient @@ -393,7 +392,7 @@ return /datum/species/proc/remove_abilities(var/mob/living/carbon/human/H) - for (var/proc/ability in species_abilities) + for(var/proc/ability in species_abilities) H.verbs -= ability return @@ -607,25 +606,22 @@ /datum/species/proc/handle_hud_icons(mob/living/carbon/human/H) if(H.healths) - if(H.analgesic) - H.healths.icon_state = "health_health_numb" + if(H.stat == DEAD) + H.healths.icon_state = "health7" else - if(H.stat == DEAD) - H.healths.icon_state = "health7" - else - switch(H.hal_screwyhud) - if(1) H.healths.icon_state = "health6" - if(2) H.healths.icon_state = "health7" - if(5) H.healths.icon_state = "health0" - else - switch(100 - ((flags & NO_PAIN) ? 0 : H.traumatic_shock) - H.staminaloss) - if(100 to INFINITY) H.healths.icon_state = "health0" - if(80 to 100) H.healths.icon_state = "health1" - if(60 to 80) H.healths.icon_state = "health2" - if(40 to 60) H.healths.icon_state = "health3" - if(20 to 40) H.healths.icon_state = "health4" - if(0 to 20) H.healths.icon_state = "health5" - else H.healths.icon_state = "health6" + switch(H.hal_screwyhud) + if(1) H.healths.icon_state = "health6" + if(2) H.healths.icon_state = "health7" + if(5) H.healths.icon_state = "health0" + else + switch(100 - ((flags & NO_PAIN) ? 0 : H.traumatic_shock) - H.staminaloss) + if(100 to INFINITY) H.healths.icon_state = "health0" + if(80 to 100) H.healths.icon_state = "health1" + if(60 to 80) H.healths.icon_state = "health2" + if(40 to 60) H.healths.icon_state = "health3" + if(20 to 40) H.healths.icon_state = "health4" + if(0 to 20) H.healths.icon_state = "health5" + else H.healths.icon_state = "health6" if(H.healthdoll) H.healthdoll.overlays.Cut() diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 7f5daa824d5..6268652f828 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -81,11 +81,6 @@ /datum/species/unathi/handle_death(var/mob/living/carbon/human/H) H.stop_tail_wagging(1) -/datum/species/unathi/equip(var/mob/living/carbon/human/H) - if(H.mind.assigned_role != "Clown") - H.unEquip(H.shoes) - H.equip_or_collect(new /obj/item/clothing/shoes/sandal(H), slot_shoes) - /datum/species/tajaran name = "Tajaran" name_plural = "Tajaran" @@ -148,11 +143,6 @@ /datum/species/tajaran/handle_death(var/mob/living/carbon/human/H) H.stop_tail_wagging(1) -/datum/species/tajaran/equip(var/mob/living/carbon/human/H) - if(H.mind.assigned_role != "Clown") - H.unEquip(H.shoes) - H.equip_or_collect(new /obj/item/clothing/shoes/sandal(H), slot_shoes) - /datum/species/vulpkanin name = "Vulpkanin" name_plural = "Vulpkanin" @@ -364,8 +354,7 @@ H.equip_or_collect(new /obj/item/weapon/tank/emergency_oxygen/vox(H), slot_l_hand) to_chat(H, "You are now running on nitrogen internals from the [H.l_hand] in your hand. Your species finds oxygen toxic, so you must breathe nitrogen only.") H.internal = H.l_hand - if (H.internals) - H.internals.icon_state = "internal1" + H.update_internals_hud_icon(1) /datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H) updatespeciescolor(H) @@ -692,7 +681,7 @@ icobase = 'icons/mob/human_races/r_grey.dmi' deform = 'icons/mob/human_races/r_def_grey.dmi' default_language = "Galactic Common" - //language = "Grey" // Perhaps if they ever get a hivemind + language = "Psionic Communication" unarmed_type = /datum/unarmed_attack/punch darksight = 5 // BOOSTED from 2 eyes = "grey_eyes_s" @@ -703,7 +692,7 @@ "lungs" = /obj/item/organ/internal/lungs, "liver" = /obj/item/organ/internal/liver/grey, "kidneys" = /obj/item/organ/internal/kidneys, - "brain" = /obj/item/organ/internal/brain, + "brain" = /obj/item/organ/internal/brain/grey, "appendix" = /obj/item/organ/internal/appendix, "eyes" = /obj/item/organ/internal/eyes, ) @@ -728,8 +717,6 @@ C.dna.SetSEState(REMOTETALKBLOCK,0,1) C.mutations -= REMOTE_TALK genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED) - C.mutations.Add(GREY) - C.update_mutations() ..() /datum/species/diona @@ -805,8 +792,7 @@ "is pulling themselves apart!") /datum/species/diona/can_understand(var/mob/other) - var/mob/living/simple_animal/diona/D = other - if(istype(D)) + if(istype(other, /mob/living/simple_animal/diona)) return 1 return 0 @@ -864,17 +850,6 @@ burn_mod = 2.5 // So they take 50% extra damage from brute/burn overall. death_message = "gives one shrill beep before falling limp, their monitor flashing blue before completely shutting off..." - cold_level_1 = 50 - cold_level_2 = -1 - cold_level_3 = -1 - - heat_level_1 = 500 //gives them about 25 seconds in space before taking damage - heat_level_2 = 540 - heat_level_3 = 600 - heat_level_3_breathe = 600 - - passive_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment. - flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_DNA | NO_POISON | RADIMMUNE | ALL_RPARTS clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_SKIN_COLOR | HAS_MARKINGS | HAS_HEAD_ACCESSORY diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 628ea630555..5620dd5f3c8 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 @@ -632,10 +637,10 @@ var/global/list/damage_icon_parts = list() for( var/obj/item/thing in list(r_store, l_store, wear_id, wear_pda, belt) ) // if(thing) // unEquip(thing) // - if (client) // + if(client) // client.screen -= thing // // - if (thing) // + if(thing) // thing.loc = loc // thing.dropped(src) // thing.layer = initial(thing.layer) @@ -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]!") @@ -964,16 +968,6 @@ var/global/list/damage_icon_parts = list() client.screen += r_store r_store.screen_loc = ui_storage2 -/mob/living/carbon/human/update_inv_wear_pda() - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[slot_wear_pda] - if(inv) - inv.update_icon() - - if(wear_pda) - client.screen += wear_pda - wear_pda.screen_loc = ui_pda - /mob/living/carbon/human/update_inv_wear_mask(var/update_icons = 1) ..() if(client && hud_used) @@ -1257,13 +1251,29 @@ 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). + var/icon/icon_file + if(fexists(icon_path)) //Just ensuring the nonexistance of a file with the above path won't cause a runtime. + 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). + var/icon/icon_file + if(fexists(icon_path)) //Just ensuring the nonexistance of a file with the above path won't cause a runtime. + 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 @@ -1274,7 +1284,7 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/proc/generate_head_icon() //gender no longer matters for the mouth, although there should probably be seperate base head icons. // var/g = "m" -// if (gender == FEMALE) g = "f" +// if(gender == FEMALE) g = "f" var/obj/item/organ/external/head/H = get_organ("head") //base icons var/icon/face_lying = new /icon('icons/mob/human_face.dmi',"bald_l") diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index eb328291bf7..73f4b5a1c28 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -181,19 +181,17 @@ /mob/living/carbon/proc/get_breath_from_internal(volume_needed) if(internal) - if(!contents.Find(internal)) + if(internal.loc != src) internal = null if(!wear_mask || !(wear_mask.flags & AIRTIGHT)) //not wearing mask or non-breath mask if(!head || !(head.flags & AIRTIGHT)) //not wearing helmet or non-breath helmet internal = null //turn off internals if(internal) - if(internals) - internals.icon_state = "internal1" + update_internals_hud_icon(1) return internal.remove_air_volume(volume_needed) else - if(internals) - internals.icon_state = "internal0" + update_internals_hud_icon(0) return @@ -440,18 +438,12 @@ see_invisible = see_override -/mob/living/carbon/handle_actions() - ..() - for(var/obj/item/I in internal_organs) - give_action_button(I, 1) - - /mob/living/carbon/handle_hud_icons() return /mob/living/carbon/handle_hud_icons_health() if(healths) - if (stat != DEAD) + if(stat != DEAD) switch(health) if(100 to INFINITY) healths.icon_state = "health0" diff --git a/code/modules/mob/living/carbon/shock.dm b/code/modules/mob/living/carbon/shock.dm index 43195db4f11..0a86f2756cf 100644 --- a/code/modules/mob/living/carbon/shock.dm +++ b/code/modules/mob/living/carbon/shock.dm @@ -16,14 +16,12 @@ src.traumatic_shock -= R.shock_reduction // now you too can varedit cyanide to reduce shock by 1000 - Iamgoofball if(src.slurring) src.traumatic_shock -= 10 - if(src.analgesic) - src.traumatic_shock = 0 // broken or ripped off organs will add quite a bit of pain if(istype(src,/mob/living/carbon/human)) var/mob/living/carbon/human/M = src for(var/obj/item/organ/external/organ in M.organs) - if (!organ) + if(!organ) continue else if(organ.status & ORGAN_BROKEN || organ.open) src.traumatic_shock += 15 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..c77d5e24a65 --- /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..4dd67695e2a 100644 --- a/code/modules/mob/living/carbon/slime/examine.dm +++ b/code/modules/mob/living/carbon/slime/examine.dm @@ -1,12 +1,13 @@ /mob/living/carbon/slime/examine(mob/user) + to_chat(user, "*---------*") ..(user) - var/msg = "" - if (src.stat == DEAD) + var/msg = "" + if(src.stat == DEAD) msg += "It is limp and unresponsive.\n" else - if (src.getBruteLoss()) + if(src.getBruteLoss()) msg += "" - if (src.getBruteLoss() < 40) + if(src.getBruteLoss() < 40) msg += "It has some punctures in its flesh!" else msg += "It has severe punctures and tears in its flesh!" diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm index 6dce9aba656..b51e0084ee3 100644 --- a/code/modules/mob/living/carbon/slime/life.dm +++ b/code/modules/mob/living/carbon/slime/life.dm @@ -9,7 +9,7 @@ if(..()) handle_nutrition() handle_targets() - if (!ckey) + if(!ckey) handle_speech_and_mood() /mob/living/carbon/slime/proc/AIprocess() // the master AI process @@ -17,9 +17,9 @@ if(AIproc || stat == DEAD || client) return var/hungry = 0 - if (nutrition < get_starve_nutrition()) + if(nutrition < get_starve_nutrition()) hungry = 2 - else if (nutrition < get_grow_nutrition() && prob(25) || nutrition < get_hunger_nutrition()) + else if(nutrition < get_grow_nutrition() && prob(25) || nutrition < get_hunger_nutrition()) hungry = 1 AIproc = 1 @@ -183,19 +183,19 @@ adjustCloneLoss(-1) adjustBruteLoss(-1) - if (src.stat == DEAD) + if(src.stat == DEAD) src.lying = 1 src.blinded = 1 else - if (src.paralysis || src.stunned || src.weakened || (status_flags && FAKEDEATH)) //Stunned etc. - if (src.stunned > 0) + if(src.paralysis || src.stunned || src.weakened || (status_flags && FAKEDEATH)) //Stunned etc. + if(src.stunned > 0) AdjustStunned(-1) src.stat = 0 - if (src.weakened > 0) + if(src.weakened > 0) AdjustWeakened(-1) src.lying = 0 src.stat = 0 - if (src.paralysis > 0) + if(src.paralysis > 0) AdjustParalysis(-1) src.blinded = 0 src.lying = 0 @@ -205,34 +205,34 @@ src.lying = 0 src.stat = 0 - if (src.stuttering) src.stuttering = 0 + if(src.stuttering) src.stuttering = 0 - if (src.eye_blind) + if(src.eye_blind) src.eye_blind = 0 src.blinded = 1 - if (src.ear_deaf > 0) src.ear_deaf = 0 - if (src.ear_damage < 25) + if(src.ear_deaf > 0) src.ear_deaf = 0 + if(src.ear_damage < 25) src.ear_damage = 0 src.density = !( src.lying ) - if (src.sdisabilities & BLIND) + if(src.disabilities & BLIND) src.blinded = 1 - if (src.sdisabilities & DEAF) + if(src.disabilities & DEAF) src.ear_deaf = 1 - if (src.eye_blurry > 0) + if(src.eye_blurry > 0) src.eye_blurry = 0 - if (src.druggy > 0) + if(src.druggy > 0) src.druggy = 0 return 1 /mob/living/carbon/slime/proc/handle_nutrition() - if (prob(15)) + if(prob(15)) nutrition -= 1 + is_adult if(nutrition <= 0) @@ -240,9 +240,10 @@ if(prob(75)) adjustToxLoss(rand(0,5)) - else if (nutrition >= get_grow_nutrition() && amount_grown < 10) + else if(nutrition >= get_grow_nutrition() && amount_grown < 10) nutrition -= 20 amount_grown++ + update_action_buttons_icon() if(amount_grown >= 10 && !Victim && !Target && !ckey) if(is_adult) @@ -278,7 +279,7 @@ if(Target) --target_patience - if (target_patience <= 0 || SStun || Discipline || attacked) // Tired of chasing or something draws out attention + if(target_patience <= 0 || SStun || Discipline || attacked) // Tired of chasing or something draws out attention target_patience = 0 Target = null @@ -286,9 +287,9 @@ var/hungry = 0 // determines if the slime is hungry - if (nutrition < get_starve_nutrition()) + if(nutrition < get_starve_nutrition()) hungry = 2 - else if (nutrition < get_grow_nutrition() && prob(25) || nutrition < get_hunger_nutrition()) + else if(nutrition < get_grow_nutrition() && prob(25) || nutrition < get_hunger_nutrition()) hungry = 1 if(hungry == 2 && !client) // if a slime is starving, it starts losing its friends @@ -340,26 +341,26 @@ Target = C break - if (Target) + if(Target) target_patience = rand(5,7) - if (is_adult) + if(is_adult) target_patience += 3 if(!Target) // If we have no target, we are wandering or following orders - if (Leader) - if (holding_still) + if(Leader) + if(holding_still) holding_still = max(holding_still - 1, 0) else if(canmove && isturf(loc)) step_to(src, Leader) else if(hungry) - if (holding_still) + if(holding_still) holding_still = max(holding_still - hungry, 0) else if(canmove && isturf(loc) && prob(50)) step(src, pick(cardinal)) else - if (holding_still) + if(holding_still) holding_still = max(holding_still - 1, 0) else if(canmove && isturf(loc) && prob(33)) step(src, pick(cardinal)) @@ -370,85 +371,85 @@ /mob/living/carbon/slime/proc/handle_speech_and_mood() //Mood starts here var/newmood = "" - if (rabid || attacked) newmood = "angry" - else if (Target) newmood = "mischevous" + if(rabid || attacked) newmood = "angry" + else if(Target) newmood = "mischevous" - if (!newmood) - if (Discipline && prob(25)) + if(!newmood) + if(Discipline && prob(25)) newmood = "pout" - else if (prob(1)) + else if(prob(1)) newmood = pick("sad", ":3", "pout") - if ((mood == "sad" || mood == ":3" || mood == "pout") && !newmood) - if (prob(75)) newmood = mood + if((mood == "sad" || mood == ":3" || mood == "pout") && !newmood) + if(prob(75)) newmood = mood - if (newmood != mood) // This is so we don't redraw them every time + if(newmood != mood) // This is so we don't redraw them every time mood = newmood regenerate_icons() //Speech understanding starts here var/to_say - if (speech_buffer.len > 0) + if(speech_buffer.len > 0) var/who = speech_buffer[1] // Who said it? var/phrase = speech_buffer[2] // What did they say? - if ((findtext(phrase, num2text(number)) || findtext(phrase, "slimes"))) // Talking to us - if (findtext(phrase, "hello") || findtext(phrase, "hi")) + if((findtext(phrase, num2text(number)) || findtext(phrase, "slimes"))) // Talking to us + if(findtext(phrase, "hello") || findtext(phrase, "hi")) to_say = pick("Hello...", "Hi...") - else if (findtext(phrase, "follow")) - if (Leader) - if (Leader == who) // Already following him + else if(findtext(phrase, "follow")) + if(Leader) + if(Leader == who) // Already following him to_say = pick("Yes...", "Lead...", "Following...") - else if (Friends[who] > Friends[Leader]) // VIVA + else if(Friends[who] > Friends[Leader]) // VIVA Leader = who to_say = "Yes... I follow [who]..." else to_say = "No... I follow [Leader]..." else - if (Friends[who] > 2) + if(Friends[who] > 2) Leader = who to_say = "I follow..." else // Not friendly enough to_say = pick("No...", "I won't follow...") - else if (findtext(phrase, "stop")) - if (Victim) // We are asked to stop feeding - if (Friends[who] > 4) + else if(findtext(phrase, "stop")) + if(Victim) // We are asked to stop feeding + if(Friends[who] > 4) Victim = null Target = null - if (Friends[who] < 7) + if(Friends[who] < 7) --Friends[who] to_say = "Grrr..." // I'm angry but I do it else to_say = "Fine..." - else if (Target) // We are asked to stop chasing - if (Friends[who] > 3) + else if(Target) // We are asked to stop chasing + if(Friends[who] > 3) Target = null - if (Friends[who] < 6) + if(Friends[who] < 6) --Friends[who] to_say = "Grrr..." // I'm angry but I do it else to_say = "Fine..." - else if (Leader) // We are asked to stop following - if (Leader == who) + else if(Leader) // We are asked to stop following + if(Leader == who) to_say = "Yes... I'll stay..." Leader = null else - if (Friends[who] > Friends[Leader]) + if(Friends[who] > Friends[Leader]) Leader = null to_say = "Yes... I'll stop..." else to_say = "No... I'll keep following..." - else if (findtext(phrase, "stay")) - if (Leader) - if (Leader == who) + else if(findtext(phrase, "stay")) + if(Leader) + if(Leader == who) holding_still = Friends[who] * 10 to_say = "Yes... Staying..." - else if (Friends[who] > Friends[Leader]) + else if(Friends[who] > Friends[Leader]) holding_still = (Friends[who] - Friends[Leader]) * 10 to_say = "Yes... Staying..." else to_say = "No... I'll keep following..." else - if (Friends[who] > 2) + if(Friends[who] > 2) holding_still = Friends[who] * 10 to_say = "Yes... Staying..." else @@ -456,7 +457,7 @@ speech_buffer = list() //Speech starts here - if (to_say) + if(to_say) say (to_say) else if(prob(1)) emote(pick("bounce","sway","light","vibrate","jiggle")) @@ -465,83 +466,83 @@ var/slimes_near = -1 // Don't count myself var/dead_slimes = 0 var/friends_near = list() - for (var/mob/living/carbon/M in view(7,src)) - if (isslime(M)) + for(var/mob/living/carbon/M in view(7,src)) + if(isslime(M)) ++slimes_near - if (M.stat == DEAD) + if(M.stat == DEAD) ++dead_slimes - if (M in Friends) + if(M in Friends) t += 20 friends_near += M - if (nutrition < get_hunger_nutrition()) t += 10 - if (nutrition < get_starve_nutrition()) t += 10 - if (prob(2) && prob(t)) + if(nutrition < get_hunger_nutrition()) t += 10 + if(nutrition < get_starve_nutrition()) t += 10 + if(prob(2) && prob(t)) var/phrases = list() - if (Target) phrases += "[Target]... looks tasty..." - if (nutrition < get_starve_nutrition()) + if(Target) phrases += "[Target]... looks tasty..." + if(nutrition < get_starve_nutrition()) phrases += "So... hungry..." phrases += "Very... hungry..." phrases += "Need... food..." phrases += "Must... eat..." - else if (nutrition < get_hunger_nutrition()) + else if(nutrition < get_hunger_nutrition()) phrases += "Hungry..." phrases += "Where is the food?" phrases += "I want to eat..." phrases += "Rawr..." phrases += "Blop..." phrases += "Blorble..." - if (rabid || attacked) + if(rabid || attacked) phrases += "Hrr..." phrases += "Nhuu..." phrases += "Unn..." - if (mood == ":3") + if(mood == ":3") phrases += "Purr..." - if (attacked) + if(attacked) phrases += "Grrr..." - if (getToxLoss() > 30) + if(getToxLoss() > 30) phrases += "Cold..." - if (getToxLoss() > 60) + if(getToxLoss() > 60) phrases += "So... cold..." phrases += "Very... cold..." - if (getToxLoss() > 90) + if(getToxLoss() > 90) phrases += "..." phrases += "C... c..." - if (Victim) + if(Victim) phrases += "Nom..." phrases += "Tasty..." - if (powerlevel > 3) phrases += "Bzzz..." - if (powerlevel > 5) phrases += "Zap..." - if (powerlevel > 8) phrases += "Zap... Bzz..." - if (mood == "sad") phrases += "Bored..." - if (slimes_near) phrases += "Brother..." - if (slimes_near > 1) phrases += "Brothers..." - if (dead_slimes) phrases += "What happened?" - if (!slimes_near) + if(powerlevel > 3) phrases += "Bzzz..." + if(powerlevel > 5) phrases += "Zap..." + if(powerlevel > 8) phrases += "Zap... Bzz..." + if(mood == "sad") phrases += "Bored..." + if(slimes_near) phrases += "Brother..." + if(slimes_near > 1) phrases += "Brothers..." + if(dead_slimes) phrases += "What happened?" + if(!slimes_near) phrases += "Lonely..." - for (var/M in friends_near) + for(var/M in friends_near) phrases += "[M]... friend..." - if (nutrition < get_hunger_nutrition()) + if(nutrition < get_hunger_nutrition()) phrases += "[M]... feed me..." say (pick(phrases)) /mob/living/carbon/slime/proc/get_max_nutrition() // Can't go above it - if (is_adult) return 1200 + if(is_adult) return 1200 else return 1000 /mob/living/carbon/slime/proc/get_grow_nutrition() // Above it we grow, below it we can eat - if (is_adult) return 1000 + if(is_adult) return 1000 else return 800 /mob/living/carbon/slime/proc/get_hunger_nutrition() // Below it we will always eat - if (is_adult) return 600 + if(is_adult) return 600 else return 500 /mob/living/carbon/slime/proc/get_starve_nutrition() // Below it we will eat before everything else - if (is_adult) return 300 + if(is_adult) return 300 else return 200 /mob/living/carbon/slime/proc/will_hunt(var/hunger = -1) // Check for being stopped from feeding and chasing - if (hunger == 2 || rabid || attacked) return 1 - if (Leader) return 0 - if (holding_still) return 0 + if(hunger == 2 || rabid || attacked) return 1 + if(Leader) return 0 + if(holding_still) return 0 return 1 diff --git a/code/modules/mob/living/carbon/slime/say.dm b/code/modules/mob/living/carbon/slime/say.dm index 50311ace49e..6d47231792b 100644 --- a/code/modules/mob/living/carbon/slime/say.dm +++ b/code/modules/mob/living/carbon/slime/say.dm @@ -2,27 +2,27 @@ var/verb = "telepathically chirps" var/ending = copytext(text, length(text)) - if (ending == "?") + if(ending == "?") verb = "telepathically asks" - else if (ending == "!") + else if(ending == "!") verb = "telepathically cries" return verb /mob/living/carbon/slime/say_understands(var/other) - if (istype(other, /mob/living/carbon/slime)) + if(istype(other, /mob/living/carbon/slime)) return 1 return ..() /mob/living/carbon/slime/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "", var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) - if (speaker in Friends) + if(speaker in Friends) speech_buffer = list() speech_buffer.Add(speaker) speech_buffer.Add(lowertext(html_decode(message))) ..() /mob/living/carbon/slime/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="", var/atom/follow_target) - if (speaker in Friends) + if(speaker in Friends) speech_buffer = list() speech_buffer.Add(speaker) speech_buffer.Add(lowertext(html_decode(message))) diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index 9ed50676e75..634e9865e45 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -75,12 +75,12 @@ /mob/living/carbon/slime/regenerate_icons() icon_state = "[colour] [is_adult ? "adult" : "baby"] slime" overlays.len = 0 - if (mood) + if(mood) overlays += image('icons/mob/slimes.dmi', icon_state = "aslime-[mood]") ..() /mob/living/carbon/slime/movement_delay() - if (bodytemperature >= 330.23) // 135 F + if(bodytemperature >= 330.23) // 135 F return -1 // slimes become supercharged at high temperatures var/tally = 0 @@ -88,7 +88,7 @@ var/health_deficiency = (100 - health) if(health_deficiency >= 45) tally += (health_deficiency / 25) - if (bodytemperature < 183.222) + if(bodytemperature < 183.222) tally += (283.222 - bodytemperature) / 10 * 1.75 if(reagents) @@ -104,7 +104,7 @@ return tally + config.slime_delay /mob/living/carbon/slime/Bump(atom/movable/AM as mob|obj, yes) - if ((!(yes) || now_pushing)) + if((!(yes) || now_pushing)) return now_pushing = 1 @@ -121,7 +121,7 @@ if(prob(probab)) if(istype(AM, /obj/structure/window) || istype(AM, /obj/structure/grille)) if(nutrition <= get_hunger_nutrition() && !Atkcool) - if (is_adult || prob(5)) + if(is_adult || prob(5)) AM.attack_slime(src) spawn() Atkcool = 1 @@ -143,13 +143,13 @@ now_pushing = 0 ..() - if (!istype(AM, /atom/movable)) + if(!istype(AM, /atom/movable)) return - if (!( now_pushing )) + if(!( now_pushing )) now_pushing = 1 - if (!( AM.anchored )) + if(!( AM.anchored )) var/t = get_dir(src, AM) - if (istype(AM, /obj/structure/window)) + if(istype(AM, /obj/structure/window)) if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) for(var/obj/structure/window/win in get_step(AM,t)) now_pushing = 0 @@ -169,7 +169,7 @@ else stat(null, "Health: [round((health / 150) * 100)]%") - if (client.statpanel == "Status") + if(client.statpanel == "Status") stat(null, "Nutrition: [nutrition]/[get_max_nutrition()]") if(amount_grown >= 10) if(is_adult) @@ -197,12 +197,12 @@ var/b_loss = null var/f_loss = null - switch (severity) - if (1.0) + switch(severity) + if(1.0) qdel(src) return - if (2.0) + if(2.0) b_loss += 60 f_loss += 60 @@ -231,13 +231,13 @@ return /mob/living/carbon/slime/attack_slime(mob/living/carbon/slime/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return - if (Victim) return // can't attack while eating! + if(Victim) return // can't attack while eating! - if (health > -100) + if(health > -100) M.do_attack_animation(src) visible_message(" The [M.name] has glomped [src]!", \ @@ -292,11 +292,11 @@ adjustBruteLoss(damage) /mob/living/carbon/slime/attack_hand(mob/living/carbon/human/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return - if (istype(loc, /turf) && istype(loc.loc, /area/start)) + if(istype(loc, /turf) && istype(loc.loc, /area/start)) to_chat(M, "No attacking people at spawn, you jackass.") return @@ -377,10 +377,10 @@ switch(M.a_intent) - if (I_HELP) + if(I_HELP) help_shake_act(M) - if (I_GRAB) + if(I_GRAB) grabbedby(M) else @@ -388,8 +388,8 @@ var/damage = rand(1, 9) attacked += 10 - if (prob(90)) - if (HULK in M.mutations) + if(prob(90)) + if(HULK in M.mutations) damage += 15 if(Victim || Target) Victim = null @@ -418,25 +418,25 @@ /mob/living/carbon/slime/attack_alien(mob/living/carbon/alien/humanoid/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return - if (istype(loc, /turf) && istype(loc.loc, /area/start)) + if(istype(loc, /turf) && istype(loc.loc, /area/start)) to_chat(M, "No attacking people at spawn, you jackass.") return switch(M.a_intent) - if (I_HELP) + if(I_HELP) visible_message("[M] caresses [src] with its scythe like arm.") - if (I_HARM) + if(I_HARM) M.do_attack_animation(src) - if (prob(95)) + if(prob(95)) attacked += 10 playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) var/damage = rand(15, 30) - if (damage >= 25) + if(damage >= 25) damage = rand(20, 40) visible_message("[M] has attacked [name]!", \ "[M] has attacked [name]!") @@ -450,10 +450,10 @@ visible_message("[M] has attempted to lunge at [name]!", \ "[M] has attempted to lunge at [name]!") - if (I_GRAB) + if(I_GRAB) grabbedby(M) - if (I_DISARM) + if(I_DISARM) M.do_attack_animation(src) playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) var/damage = 5 @@ -499,7 +499,7 @@ if(S.next_step(user, src)) return 1 if(istype(W,/obj/item/stack/sheet/mineral/plasma)) //Lets you feed slimes plasma. - if (user in Friends) + if(user in Friends) ++Friends[user] else Friends[user] = 1 @@ -580,8 +580,8 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 /mob/living/carbon/slime/proc/apply_water() adjustToxLoss(rand(15,20)) - if (!client) - if (Target) // Like cats + if(!client) + if(Target) // Like cats Target = null ++Discipline return diff --git a/code/modules/mob/living/carbon/superheroes.dm b/code/modules/mob/living/carbon/superheroes.dm index 1ad57bd787d..23233fd5e09 100644 --- a/code/modules/mob/living/carbon/superheroes.dm +++ b/code/modules/mob/living/carbon/superheroes.dm @@ -33,8 +33,9 @@ if(default_spells.len) for(var/spell in default_spells) var/obj/effect/proc_holder/spell/S = spell - if(!S) return - H.AddSpell(new S) + if(!S) + return + H.mind.AddSpell(new S(null)) /datum/superheroes/proc/assign_id(var/mob/living/carbon/human/H) var/obj/item/weapon/card/id/syndicate/W = new(H) @@ -191,14 +192,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/death.dm b/code/modules/mob/living/death.dm index 14585f6ae21..e17d9af6250 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -2,4 +2,5 @@ blinded = max(blinded, 1) clear_fullscreens() + update_action_buttons_icon() ..(gibbed) \ No newline at end of file diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 82f865621da..a151a062bce 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -49,9 +49,7 @@ handle_disabilities() // eye, ear, brain damages handle_status_effects() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc - handle_actions() - - update_canmove() + update_canmove(1) // set to 1 to not update icon action buttons; rip this argument out if Life is ever refactored to be non-stupid. -Fox if(client) //regular_hud_updates() //THIS DOESN'T FUCKING UPDATE SHIT @@ -95,7 +93,7 @@ if(paralysis) stat = UNCONSCIOUS - else if (status_flags & FAKEDEATH) + else if(status_flags & FAKEDEATH) stat = UNCONSCIOUS else @@ -176,7 +174,7 @@ /mob/living/proc/handle_disabilities() //Eyes - if(sdisabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own + if(disabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own eye_blind = max(eye_blind, 1) else if(eye_blind) //blindness, heals slowly over time eye_blind = max(eye_blind-1,0) @@ -197,7 +195,6 @@ handle_vision() handle_hud_icons() - update_action_buttons() return 1 @@ -247,84 +244,6 @@ /mob/living/proc/handle_hud_icons_health() return -/mob/living/proc/handle_actions() - //Pretty bad, i'd use picked/dropped instead but the parent calls in these are nonexistent - for(var/datum/action/A in actions) - if(A.CheckRemoval(src)) - A.Remove(src) - for(var/obj/item/I in src) - give_action_button(I, 1) - return - -/mob/living/proc/give_action_button(var/obj/item/I, recursive = 0) - if(I.action_button_name) - if(!I.action) - if(I.action_button_custom_type) - I.action = new I.action_button_custom_type - else - I.action = new /datum/action/item_action - I.action.name = I.action_button_name - I.action.target = I - I.action.Grant(src) - - if(recursive) - for(var/obj/item/T in I) - give_action_button(T, recursive - 1) - -/mob/living/update_action_buttons() - if(!hud_used) return - if(!client) return - - if(!hud_used.hud_shown) - return - - client.screen -= hud_used.hide_actions_toggle - for(var/datum/action/A in actions) - if(A.button) - client.screen -= A.button - - if(hud_used.action_buttons_hidden) - if(!hud_used.hide_actions_toggle) - hud_used.hide_actions_toggle = new(hud_used) - hud_used.hide_actions_toggle.UpdateIcon() - - if(!hud_used.hide_actions_toggle.moved) - hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(1) - //hud_used.SetButtonCoords(hud_used.hide_actions_toggle,1) - - client.screen += hud_used.hide_actions_toggle - return - - var/button_number = 0 - for(var/datum/action/A in actions) - button_number++ - if(A.button == null) - var/obj/screen/movable/action_button/N = new(hud_used) - N.owner = A - A.button = N - - var/obj/screen/movable/action_button/B = A.button - - B.UpdateIcon() - - B.name = A.UpdateName() - - client.screen += B - - if(!B.moved) - B.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number) - //hud_used.SetButtonCoords(B,button_number) - - if(button_number > 0) - if(!hud_used.hide_actions_toggle) - hud_used.hide_actions_toggle = new(hud_used) - hud_used.hide_actions_toggle.InitialiseIcon(src) - if(!hud_used.hide_actions_toggle.moved) - hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number+1) - //hud_used.SetButtonCoords(hud_used.hide_actions_toggle,button_number+1) - client.screen += hud_used.hide_actions_toggle - - /mob/living/proc/process_nations() if(client) var/client/C = client diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 7185cfdb53b..7d07216c586 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -3,6 +3,9 @@ ..() return QDEL_HINT_HARDDEL_NOW +/mob/living/proc/OpenCraftingMenu() + return + /mob/living/Stat() . = ..() if(. && get_rig_stats) @@ -55,7 +58,7 @@ /mob/living/verb/succumb() set hidden = 1 - if (InCritical()) + if(InCritical()) attack_log += "[src] has ["succumbed to death"] with [round(health, 0.1)] points of health!" adjustOxyLoss(health - config.health_threshold_dead) updatehealth() @@ -271,7 +274,7 @@ /mob/living/proc/get_organ_target() var/mob/shooter = src var/t = shooter:zone_sel.selecting - if ((t in list( "eyes", "mouth" ))) + if((t in list( "eyes", "mouth" ))) t = "head" var/obj/item/organ/external/def_zone = ran_zone(t) return def_zone @@ -323,12 +326,12 @@ if(iscarbon(src)) var/mob/living/carbon/C = src - if (C.handcuffed && !initial(C.handcuffed)) + if(C.handcuffed && !initial(C.handcuffed)) C.unEquip(C.handcuffed) C.handcuffed = initial(C.handcuffed) C.update_handcuffed() - if (C.legcuffed && !initial(C.legcuffed)) + if(C.legcuffed && !initial(C.legcuffed)) C.unEquip(C.legcuffed) C.legcuffed = initial(C.legcuffed) C.update_inv_legcuffed() @@ -343,7 +346,7 @@ dead_mob_list -= src living_mob_list |= src mob_list |= src - ear_deaf = 0 + setEarDamage(-1,0) timeofdeath = 0 /mob/living/proc/rejuvenate() @@ -370,13 +373,11 @@ hallucination = 0 nutrition = 400 bodytemperature = 310 - sdisabilities = 0 disabilities = 0 blinded = 0 eye_blind = 0 eye_blurry = 0 - ear_deaf = 0 - ear_damage = 0 + setEarDamage(0,0) heal_overall_damage(1000, 1000) ExtinguishMob() fire_stacks = 0 @@ -440,26 +441,26 @@ return /mob/living/Move(atom/newloc, direct) - if (buckled && buckled.loc != newloc) //not updating position - if (!buckled.anchored) + if(buckled && buckled.loc != newloc) //not updating position + if(!buckled.anchored) return buckled.Move(newloc, direct) else return 0 - if (restrained()) + if(restrained()) stop_pulling() var/t7 = 1 - if (restrained()) + if(restrained()) for(var/mob/living/M in range(src, 1)) - if ((M.pulling == src && M.stat == 0 && !( M.restrained() ))) + if((M.pulling == src && M.stat == 0 && !( M.restrained() ))) t7 = null if(t7 && pulling && (get_dist(src, pulling) <= 1 || pulling.loc == loc)) var/turf/T = loc . = ..() - if (pulling && pulling.loc) + if(pulling && pulling.loc) if(!( isturf(pulling.loc) )) stop_pulling() return @@ -473,46 +474,46 @@ stop_pulling() return - if (!restrained()) + if(!restrained()) var/diag = get_dir(src, pulling) - if ((diag - 1) & diag) + if((diag - 1) & diag) else diag = null - if ((get_dist(src, pulling) > 1 || diag)) - if (isliving(pulling)) + if((get_dist(src, pulling) > 1 || diag)) + if(isliving(pulling)) var/mob/living/M = pulling var/ok = 1 - if (locate(/obj/item/weapon/grab, M.grabbed_by)) - if (prob(75)) + if(locate(/obj/item/weapon/grab, M.grabbed_by)) + if(prob(75)) var/obj/item/weapon/grab/G = pick(M.grabbed_by) - if (istype(G, /obj/item/weapon/grab)) + if(istype(G, /obj/item/weapon/grab)) for(var/mob/O in viewers(M, null)) O.show_message(text("\red [] has been pulled from []'s grip by []", G.affecting, G.assailant, src), 1) //G = null qdel(G) else ok = 0 - if (locate(/obj/item/weapon/grab, M.grabbed_by.len)) + if(locate(/obj/item/weapon/grab, M.grabbed_by.len)) ok = 0 - if (ok) + if(ok) var/atom/movable/t = M.pulling M.stop_pulling() - if (M.lying && (prob(M.getBruteLoss() / 6))) + if(M.lying && (prob(M.getBruteLoss() / 6))) var/turf/location = M.loc - if (istype(location, /turf/simulated)) + if(istype(location, /turf/simulated)) location.add_blood(M) pulling.Move(T, get_dir(pulling, T)) if(M) M.start_pulling(t) else - if (pulling) + if(pulling) pulling.Move(T, get_dir(pulling, T)) else stop_pulling() . = ..() - if (s_active && !( s_active in contents ) && get_turf(s_active) != get_turf(src)) //check !( s_active in contents ) first so we hopefully don't have to call get_turf() so much. + if(s_active && !( s_active in contents ) && get_turf(s_active) != get_turf(src)) //check !( s_active in contents ) first so we hopefully don't have to call get_turf() so much. s_active.close(src) if(.) // did we actually move? @@ -643,7 +644,7 @@ //called when the mob receives a bright flash /mob/living/proc/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash) - if(check_eye_prot() < intensity && (override_blindness_check || !(sdisabilities & BLIND))) + if(check_eye_prot() < intensity && (override_blindness_check || !(disabilities & BLIND))) overlay_fullscreen("flash", type) addtimer(src, "clear_fullscreen", 25, FALSE, "flash", 25) return 1 @@ -834,6 +835,15 @@ /mob/living/proc/get_permeability_protection() return 0 +/mob/living/proc/attempt_harvest(obj/item/I, mob/user) + if(stat == DEAD && !isnull(butcher_results)) //can we butcher it? + if(istype(I, /obj/item/weapon/kitchen/knife)) + to_chat(user, "You begin to butcher [src]...") + playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1) + if(do_mob(user, src, 80)) + harvest(user) + return 1 + /mob/living/proc/harvest(mob/living/user) if(qdeleted(src)) return @@ -854,7 +864,7 @@ return tally /mob/living/proc/can_use_guns(var/obj/item/weapon/gun/G) - if (G.trigger_guard != TRIGGER_GUARD_ALLOW_ALL && !IsAdvancedToolUser()) + if(G.trigger_guard != TRIGGER_GUARD_ALLOW_ALL && !IsAdvancedToolUser()) to_chat(src, "You don't have the dexterity to do this!") return 0 return 1 diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index cc50408148e..2049d5fd21d 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -43,7 +43,7 @@ var/armor = run_armor_check(def_zone, P.flag, armour_penetration = P.armour_penetration) var/proj_sharp = is_sharp(P) var/proj_edge = has_edge(P) - if ((proj_sharp || proj_edge) && prob(getarmor(def_zone, P.flag))) + if((proj_sharp || proj_edge) && prob(getarmor(def_zone, P.flag))) proj_sharp = 0 proj_edge = 0 @@ -62,49 +62,40 @@ //this proc handles being hit by a thrown atom /mob/living/hitby(atom/movable/AM as mob|obj,var/speed = 5)//Standardization and logging -Sieve - if(istype(AM,/obj/)) - var/obj/O = AM + if(istype(AM, /obj/item)) + var/obj/item/I = AM var/zone = ran_zone("chest", 65)//Hits a random part of the body, geared towards the chest var/dtype = BRUTE - if(istype(O,/obj/item/weapon)) - var/obj/item/weapon/W = O + if(istype(I, /obj/item/weapon)) + var/obj/item/weapon/W = I dtype = W.damtype - if (W.hitsound && W.throwforce > 0) + if(W.hitsound && W.throwforce > 0) playsound(loc, W.hitsound, 30, 1, -1) //run to-hit check here - var/throw_damage = O.throwforce*(speed/5) + var/throw_damage = I.throwforce*(speed/5) - //var/miss_chance = 15 - //if (O.throw_source) - //var/distance = get_dist(O.throw_source, loc) - //miss_chance = min(15*(distance-2), 0) - /* - if (prob(miss_chance)) - visible_message("\blue \The [O] misses [src] narrowly!") - return - */ - src.visible_message("\red [src] has been hit by [O].") - var/armor = run_armor_check(zone, "melee") + src.visible_message("\red [src] has been hit by [I].") + var/armor = run_armor_check(zone, "melee", "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].", I.armour_penetration) - apply_damage(throw_damage, dtype, zone, armor, is_sharp(O), has_edge(O), O) + apply_damage(throw_damage, dtype, zone, armor, is_sharp(I), has_edge(I), I) - O.throwing = 0 //it hit, so stop moving + I.throwing = 0 //it hit, so stop moving - if(ismob(O.thrower)) - var/mob/M = O.thrower + if(ismob(I.thrower)) + var/mob/M = I.thrower if(M) - src.attack_log += text("\[[time_stamp()]\] Has been hit with a [O], thrown by [key_name(M)]") - M.attack_log += text("\[[time_stamp()]\] Hit [key_name(src)] with a thrown [O]") + attack_log += text("\[[time_stamp()]\] Has been hit with a [I], thrown by [key_name(M)]") + M.attack_log += text("\[[time_stamp()]\] Hit [key_name(src)] with a thrown [I]") if(!istype(src,/mob/living/simple_animal/mouse)) - msg_admin_attack("[key_name_admin(src)] was hit by a [O], thrown by [key_name_admin(M)]") + msg_admin_attack("[key_name_admin(src)] was hit by a [I], thrown by [key_name_admin(M)]") // Begin BS12 momentum-transfer code. - if(O.throw_source && speed >= 15) - var/obj/item/weapon/W = O + if(I.throw_source && speed >= 15) + var/obj/item/weapon/W = I var/momentum = speed/2 - var/dir = get_dir(O.throw_source, src) + var/dir = get_dir(I.throw_source, src) visible_message("\red [src] staggers under the impact!","\red You stagger under the impact!") src.throw_at(get_edge_target_turf(src,dir),1,momentum) @@ -113,16 +104,16 @@ if(W.sharp) //Projectile is suitable for pinning. //Handles embedding for non-humans and simple_animals. - O.loc = src - src.embedded += O + I.loc = src + embedded += I var/turf/T = near_wall(dir,2) if(T) src.loc = T - visible_message("[src] is pinned to the wall by [O]!","You are pinned to the wall by [O]!") + visible_message("[src] is pinned to the wall by [I]!","You are pinned to the wall by [I]!") src.anchored = 1 - src.pinned += O + src.pinned += I /mob/living/mech_melee_attack(obj/mecha/M) if(M.occupant.a_intent == I_HARM) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index ce73ae369c0..19dc6f99cd1 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -7,10 +7,10 @@ //Damage related vars, NOTE: THESE SHOULD ONLY BE MODIFIED BY PROCS - var/bruteloss = 0.0 //Brutal damage caused by brute force (punching, being clubbed by a toolbox ect... this also accounts for pressure damage) - var/oxyloss = 0.0 //Oxygen depravation damage (no air in lungs) - var/toxloss = 0.0 //Toxic damage caused by being poisoned or radiated - var/fireloss = 0.0 //Burn damage caused by being way too hot, too cold or burnt. + var/bruteloss = 0 //Brutal damage caused by brute force (punching, being clubbed by a toolbox ect... this also accounts for pressure damage) + var/oxyloss = 0 //Oxygen depravation damage (no air in lungs) + var/toxloss = 0 //Toxic damage caused by being poisoned or radiated + var/fireloss = 0 //Burn damage caused by being way too hot, too cold or burnt. var/cloneloss = 0 //Damage caused by being cloned or ejected from the cloner early. slimes also deal cloneloss damage to victims var/brainloss = 0 //'Retardation' damage caused by someone hitting you in the head with a bible or being infected with brainrot. var/staminaloss = 0 //Stamina damage, or exhaustion. You recover it slowly naturally, and are stunned if it gets too high. Holodeck and hallucinations deal this. @@ -23,11 +23,6 @@ //Allows mobs to move through dense areas without restriction. For instance, in space or out of holder objects. var/incorporeal_move = 0 //0 is off, 1 is normal, 2 is for ninjas. - var/t_plasma = null - var/t_oxygen = null - var/t_sl_gas = null - var/t_n2 = null - var/now_pushing = null var/atom/movable/cameraFollow = null @@ -36,9 +31,8 @@ var/fire_stacks = 0 //Tracks how many stacks of fire we have on, max is usually 20 var/update_slimes = 1 - var/specialsauce = 0 //Has this person consumed enough special sauce? IF so they're a ticking time bomb of death. var/implanting = 0 //Used for the mind-slave implant - var/silent = null //Can't talk. Value goes down every life proc. + var/silent = 0 //Can't talk. Value goes down every life proc. //NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU. var/floating = 0 var/nightvision = 0 @@ -49,9 +43,12 @@ var/list/icon/pipes_shown = list() var/last_played_vent - var/list/datum/action/actions = list() var/step_count = 0 var/list/butcher_results = null - var/list/surgeries = list() //a list of surgery datums. generally empty, they're added when the player wants them. \ No newline at end of file + var/list/weather_immunities = list() + + var/list/surgeries = list() //a list of surgery datums. generally empty, they're added when the player wants them. + + var/gene_stability = DEFAULT_GENE_STABILITY diff --git a/code/modules/mob/living/logout.dm b/code/modules/mob/living/logout.dm index b79d822d80b..71e26e60858 100644 --- a/code/modules/mob/living/logout.dm +++ b/code/modules/mob/living/logout.dm @@ -1,6 +1,6 @@ /mob/living/Logout() ..() - if (mind) + if(mind) if(!key) //key and mind have become seperated. I believe this is for when a staff member aghosts. mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body. //This causes instant sleep and tags a player as SSD. See life.dm for furthering SSD. diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 812d2e8df58..842b03c4bbd 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -26,10 +26,10 @@ var/list/ai_verbs_default = list( //Not sure why this is necessary... /proc/AutoUpdateAI(obj/subject) var/is_in_use = 0 - if (subject!=null) + if(subject!=null) for(var/A in ai_list) var/mob/living/silicon/ai/M = A - if ((M.client && M.machine == subject)) + if((M.client && M.machine == subject)) is_in_use = 1 subject.attack_ai(M) return is_in_use @@ -54,6 +54,7 @@ var/list/ai_verbs_default = list( var/obj/item/device/pda/silicon/ai/aiPDA = null var/obj/item/device/multitool/aiMulti = null var/custom_sprite = 0 //For our custom sprites + var/custom_hologram = 0 //For our custom holograms var/obj/item/device/radio/headset/heads/ai_integrated/aiRadio = null @@ -121,8 +122,8 @@ var/list/ai_verbs_default = list( var/pickedName = null while(!pickedName) pickedName = pick(ai_names) - for (var/mob/living/silicon/ai/A in mob_list) - if (A.real_name == pickedName && possibleNames.len > 1) //fixing the theoretically possible infinite loop + for(var/mob/living/silicon/ai/A in mob_list) + if(A.real_name == pickedName && possibleNames.len > 1) //fixing the theoretically possible infinite loop possibleNames -= pickedName pickedName = null @@ -138,7 +139,7 @@ var/list/ai_verbs_default = list( proc_holder_list = new() if(L) - if (istype(L, /datum/ai_laws)) + if(istype(L, /datum/ai_laws)) laws = L else make_laws() @@ -154,7 +155,7 @@ var/list/ai_verbs_default = list( aiCamera = new/obj/item/device/camera/siliconcam/ai_camera(src) - if (istype(loc, /turf)) + if(istype(loc, /turf)) add_ai_verbs(src) //Languages @@ -176,12 +177,12 @@ var/list/ai_verbs_default = list( add_language("Clownish", 0) if(!safety)//Only used by AIize() to successfully spawn an AI. - if (!B)//If there is no player/brain inside. + if(!B)//If there is no player/brain inside. new/obj/structure/AIcore/deactivated(loc)//New empty terminal. qdel(src)//Delete AI. return else - if (B.brainmob.mind) + if(B.brainmob.mind) B.brainmob.mind.transfer_to(src) on_mob_init() @@ -219,7 +220,7 @@ var/list/ai_verbs_default = list( to_chat(src, radio_text) - if (!(ticker && ticker.mode && (mind in ticker.mode.malf_ai))) + if(!(ticker && ticker.mode && (mind in ticker.mode.malf_ai))) show_laws() to_chat(src, "These laws may be changed by other players, or by you being the traitor.") @@ -298,18 +299,19 @@ var/list/ai_verbs_default = list( Entry[i] = trim(Entry[i]) if(Entry.len < 2) - continue; + continue - if(Entry[1] == src.ckey && Entry[2] == src.real_name) + if(Entry.len < 3 && Entry[1] == ckey && Entry[2] == real_name) custom_sprite = 1 //They're in the list? Custom sprite time icon = 'icons/mob/custom-synthetic.dmi' + //if(icon_state == initial(icon_state)) var/icontype = "" - if (custom_sprite == 1) icontype = ("Custom")//automagically selects custom sprite if one is available + if(custom_sprite == 1) icontype = ("Custom")//automagically selects custom sprite if one is available else icontype = input("Select an icon!", "AI", null, null) in list("Monochrome", "Blue", "Clown", "Inverted", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Firewall", "Green", "Red", "Static", "Triumvirate", "Triumvirate Static", "Red October", "Sparkles", "ANIMA", "President", "NT") switch(icontype) - if("Custom") icon_state = "[src.ckey]-ai" + if("Custom") icon_state = "[ckey]-ai" if("Clown") icon_state = "ai-clown2" if("Monochrome") icon_state = "ai-mono" if("Inverted") icon_state = "ai-u" @@ -340,9 +342,9 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/show_malf_ai() if(ticker.mode.name == "AI malfunction") var/datum/game_mode/malfunction/malf = ticker.mode - for (var/datum/mind/malfai in malf.malf_ai) - if (mind == malfai) // are we the evil one? - if (malf.apcs >= 3) + for(var/datum/mind/malfai in malf.malf_ai) + if(mind == malfai) // are we the evil one? + if(malf.apcs >= 3) stat(null, "Time until station control secured: [max(malf.AI_win_timeleft/(malf.apcs/3), 0)] seconds") // this verb lets the ai see the stations manifest @@ -436,13 +438,13 @@ var/list/ai_verbs_default = list( ai_announcement() /mob/living/silicon/ai/check_eye(var/mob/user as mob) - if (!current) + if(!current) return null user.reset_view(current) return 1 /mob/living/silicon/ai/blob_act() - if (stat != 2) + if(stat != 2) adjustBruteLoss(60) updatehealth() return 1 @@ -452,7 +454,7 @@ var/list/ai_verbs_default = list( return 0 /mob/living/silicon/ai/emp_act(severity) - if (prob(30)) + if(prob(30)) switch(pick(1,2)) if(1) view_core() @@ -467,11 +469,11 @@ var/list/ai_verbs_default = list( if(1.0) gib() if(2.0) - if (stat != 2) + if(stat != 2) adjustBruteLoss(60) adjustFireLoss(60) if(3.0) - if (stat != 2) + if(stat != 2) adjustBruteLoss(30) return @@ -481,21 +483,21 @@ var/list/ai_verbs_default = list( if(usr != src) return ..() - if (href_list["mach_close"]) - if (href_list["mach_close"] == "aialerts") + if(href_list["mach_close"]) + if(href_list["mach_close"] == "aialerts") viewalerts = 0 var/t1 = text("window=[]", href_list["mach_close"]) unset_machine() src << browse(null, t1) - if (href_list["switchcamera"]) + if(href_list["switchcamera"]) switchCamera(locate(href_list["switchcamera"])) in cameranet.cameras - if (href_list["showalerts"]) + if(href_list["showalerts"]) subsystem_alarm_monitor() if(href_list["show_paper"]) if(last_paper_seen) src << browse(last_paper_seen, "window=show_paper") //Carn: holopad requests - if (href_list["jumptoholopad"]) + if(href_list["jumptoholopad"]) var/obj/machinery/hologram/holopad/H = locate(href_list["jumptoholopad"]) if(stat == CONSCIOUS) if(H) @@ -507,7 +509,7 @@ var/list/ai_verbs_default = list( play_vox_word(href_list["say_word"], null, src) return - if (href_list["track"]) + if(href_list["track"]) var/mob/living/target = locate(href_list["track"]) in mob_list if(target && target.can_track()) ai_actual_track(target) @@ -515,7 +517,7 @@ var/list/ai_verbs_default = list( to_chat(src, "Target is not on or near any active cameras on the station.") return - if (href_list["trackbot"]) + if(href_list["trackbot"]) var/mob/living/simple_animal/bot/target = locate(href_list["trackbot"]) in simple_animal_list if(target) ai_actual_track(target) @@ -523,7 +525,7 @@ var/list/ai_verbs_default = list( to_chat(src, "Target is not on or near any active cameras on the station.") return - if (href_list["callbot"]) //Command a bot to move to a selected location. + if(href_list["callbot"]) //Command a bot to move to a selected location. Bot = locate(href_list["callbot"]) in simple_animal_list if(!Bot || Bot.remote_disabled || src.control_disabled) return //True if there is no bot found, the bot is manually emagged, or the AI is carded with wireless off. @@ -531,17 +533,17 @@ var/list/ai_verbs_default = list( to_chat(src, "Set your waypoint by clicking on a valid location free of obstructions.") return - if (href_list["interface"]) //Remotely connect to a bot! + if(href_list["interface"]) //Remotely connect to a bot! Bot = locate(href_list["interface"]) in simple_animal_list if(!Bot || Bot.remote_disabled || src.control_disabled) return Bot.attack_ai(src) - if (href_list["botrefresh"]) //Refreshes the bot control panel. + if(href_list["botrefresh"]) //Refreshes the bot control panel. botcall() return - if (href_list["ai_take_control"]) //Mech domination + if(href_list["ai_take_control"]) //Mech domination var/obj/mecha/M = locate(href_list["ai_take_control"]) if(controlled_mech) to_chat(src, "You are already loaded into an onboard computer!") @@ -549,17 +551,17 @@ var/list/ai_verbs_default = list( if(M) M.transfer_ai(AI_MECH_HACK,src, usr) //Called om the mech itself. - else if (href_list["faketrack"]) + else if(href_list["faketrack"]) var/mob/target = locate(href_list["track"]) in mob_list var/mob/living/silicon/ai/A = locate(href_list["track2"]) in mob_list if(A && target) A.cameraFollow = target to_chat(A, "Now tracking [target.name] on camera.") - if (usr.machine == null) + if(usr.machine == null) usr.machine = usr - while (src.cameraFollow == target) + while(src.cameraFollow == target) to_chat(usr, "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb).") sleep(40) continue @@ -575,23 +577,23 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/attack_alien(mob/living/carbon/alien/humanoid/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return - if (istype(loc, /turf) && istype(loc.loc, /area/start)) + if(istype(loc, /turf) && istype(loc.loc, /area/start)) to_chat(M, "No attacking people at spawn, you jackass.") return switch(M.a_intent) - if (I_HELP) + if(I_HELP) visible_message("[M] caresses [src]'s plating with its scythe like arm.") else //harm M.do_attack_animation(src) var/damage = rand(10, 20) - if (prob(90)) + if(prob(90)) playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1) visible_message("[M] has slashed at [src]!",\ "[M] has slashed at [src]!") @@ -644,7 +646,7 @@ var/list/ai_verbs_default = list( d += "Query network status
        " d += "
        NameVarietyEYMPrPtHarvestTempLightNutriWaterNotesAmount
        [seed.seed_name]#[seed.uid][seed.get_trait(TRAIT_ENDURANCE)][seed.get_trait(TRAIT_YIELD)][seed.get_trait(TRAIT_MATURATION)][seed.get_trait(TRAIT_PRODUCTION)][seed.get_trait(TRAIT_POTENCY)]MultipleSingle[seed.get_trait(TRAIT_IDEAL_HEAT)] K[seed.get_trait(TRAIT_IDEAL_LIGHT)] LLow
         ↳Pockets:[(l_store && !(l_store.flags&ABSTRACT)) ? "Left (Full)" : "Left (Empty)"]" dat += " [(r_store && !(r_store.flags&ABSTRACT)) ? "Right (Full)" : "Right (Empty)"]
         ↳ID:[(wear_id && !(wear_id.flags&ABSTRACT)) ? wear_id : "Empty"]
         ↳PDA:[(wear_pda && !(wear_pda.flags&ABSTRACT)) ? wear_pda : "Empty"]
        " - for (var/mob/living/simple_animal/bot/Bot in simple_animal_list) + for(var/mob/living/simple_animal/bot/Bot in simple_animal_list) if((Bot.z in ai_allowed_Zlevel) && !Bot.remote_disabled) //Only non-emagged bots on the allowed Z-level are detected! bot_area = get_area(Bot) d += "" @@ -686,7 +688,7 @@ var/list/ai_verbs_default = list( if(!tracking) cameraFollow = null - if (!C || stat == DEAD) //C.can_use()) + if(!C || stat == DEAD) //C.can_use()) return 0 if(!src.eyeobj) @@ -716,7 +718,7 @@ var/list/ai_verbs_default = list( var/mob/living/silicon/ai/U = usr - for (var/obj/machinery/camera/C in cameranet.cameras) + for(var/obj/machinery/camera/C in cameranet.cameras) if(!C.can_use()) continue @@ -770,7 +772,7 @@ var/list/ai_verbs_default = list( if(check_unable()) return - for (var/obj/machinery/M in machines) //change status + for(var/obj/machinery/M in machines) //change status if(istype(M, /obj/machinery/ai_status_display)) var/obj/machinery/ai_status_display/AISD = M AISD.emotion = emote @@ -792,6 +794,21 @@ var/list/ai_verbs_default = list( if(check_unable()) return + if(!custom_hologram) //Check to see if custom sprite time, checking the appopriate file to change a var + var/file = file2text("config/custom_sprites.txt") + var/lines = splittext(file, "\n") + + for(var/line in lines) + // split & clean up + var/list/Entry = splittext(line, ":") + for(var/i = 1 to Entry.len) + Entry[i] = trim(Entry[i]) + + if(Entry.len < 3) + continue + + if (Entry[1] == ckey && Entry[2] == real_name && Entry[3] == "Hologram") //Custom holograms + custom_hologram = 1 // option is given in hologram menu var/input if(alert("Would you like to select a hologram based on a crew member or switch to unique avatar?",,"Crew Member","Unique")=="Crew Member") @@ -815,8 +832,12 @@ var/list/ai_verbs_default = list( "default", "floating face", "xeno queen", - "eldritch" + "eldritch", + "ancient machine" ) + if(custom_hologram) //insert custom hologram + icon_list.Add("custom") + input = input("Please select a hologram:") as null|anything in icon_list if(input) qdel(holo_icon) @@ -829,6 +850,10 @@ var/list/ai_verbs_default = list( holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo3")) if("eldritch") holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo4")) + if("ancient machine") + holo_icon = getHologramIcon(icon('icons/mob/ancient_machine.dmi', "ancient_machine")) + if("custom") + holo_icon = getHologramIcon(icon('icons/mob/custom-synthetic.dmi', "[ckey]-ai-holo")) return /mob/living/silicon/ai/proc/corereturn() @@ -852,10 +877,10 @@ var/list/ai_verbs_default = list( camera_light_on = !camera_light_on - if (!camera_light_on) + if(!camera_light_on) to_chat(src, "Camera lights deactivated.") - for (var/obj/machinery/camera/C in lit_cameras) + for(var/obj/machinery/camera/C in lit_cameras) C.set_light(0) lit_cameras = list() @@ -888,19 +913,19 @@ var/list/ai_verbs_default = list( var/list/obj/machinery/camera/add = list() var/list/obj/machinery/camera/remove = list() var/list/obj/machinery/camera/visible = list() - for (var/datum/camerachunk/CC in eyeobj.visibleCameraChunks) - for (var/obj/machinery/camera/C in CC.cameras) - if (!C.can_use() || get_dist(C, eyeobj) > 7) + for(var/datum/camerachunk/CC in eyeobj.visibleCameraChunks) + for(var/obj/machinery/camera/C in CC.cameras) + if(!C.can_use() || get_dist(C, eyeobj) > 7) continue visible |= C add = visible - lit_cameras remove = lit_cameras - visible - for (var/obj/machinery/camera/C in remove) + for(var/obj/machinery/camera/C in remove) lit_cameras -= C //Removed from list before turning off the light so that it doesn't check the AI looking away. C.Togglelight(0) - for (var/obj/machinery/camera/C in add) + for(var/obj/machinery/camera/C in add) C.Togglelight(1) lit_cameras |= C @@ -936,7 +961,7 @@ var/list/ai_verbs_default = list( return to_chat(src, "Accessing Subspace Transceiver control...") - if (src.aiRadio) + if(src.aiRadio) src.aiRadio.interact(src) @@ -952,7 +977,7 @@ var/list/ai_verbs_default = list( if(H.digitalcamo) to_chat(src, "Unable to locate an airlock") return - if (!near_camera(target)) + if(!near_camera(target)) to_chat(src, "Target is not near any active cameras.") return var/obj/machinery/door/airlock/tobeopened @@ -1012,7 +1037,7 @@ var/list/ai_verbs_default = list( to_chat(user, "No intelligence patterns detected.")//No more magical carding of empty cores, AI RETURN TO BODY!!!11 return - if (mind.special_role == "malfunction") //AI MALF!! + if(mind.special_role == "malfunction") //AI MALF!! to_chat(user, "ERROR: Remote transfer interface disabled.")//Do ho ho ho~ return @@ -1040,4 +1065,4 @@ var/list/ai_verbs_default = list( eyeobj.setLoc(get_turf(C)) client.eye = eyeobj - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index b0b0f44d0e6..d0293d7f50b 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -1,7 +1,7 @@ /mob/living/silicon/ai/death(gibbed) if(stat == DEAD) return stat = DEAD - if (src.custom_sprite == 1)//check for custom AI sprite, defaulting to blue screen if no. + if(src.custom_sprite == 1)//check for custom AI sprite, defaulting to blue screen if no. icon_state = "[ckey]-ai-crash" else icon_state = "ai-crash" update_canmove() @@ -21,7 +21,7 @@ for(var/obj/machinery/ai_status_display/O in world) //change status spawn( 0 ) O.mode = 2 - if (istype(loc, /obj/item/device/aicard)) + if(istype(loc, /obj/item/device/aicard)) loc.icon_state = "aicard-404" timeofdeath = worldtime2text() diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index d65e6e0d7d8..c2358c9b237 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -1,24 +1,26 @@ /mob/living/silicon/ai/examine(mob/user) + to_chat(user, "*---------*") if(!..(user)) + to_chat(user, "*---------*") return - var/msg = "" - if (src.stat == DEAD) + var/msg = "" + if(src.stat == DEAD) msg += "It appears to be powered-down.\n" else msg += "" - if (src.getBruteLoss()) - if (src.getBruteLoss() < 30) + if(src.getBruteLoss()) + if(src.getBruteLoss() < 30) msg += "It looks slightly dented.\n" else msg += "It looks severely dented!\n" - if (src.getFireLoss()) - if (src.getFireLoss() < 30) + 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) + if(src.stat == UNCONSCIOUS) msg += "It is non-responsive and displaying the text: \"RUNTIME: Sensory Overload, stack 26/3\".\n" msg += "" msg += "*---------*" diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 317aae2dd6b..00435fdd17a 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -50,7 +50,7 @@ var/mob/living/silicon/ai/AI = usr if(AI.eyeobj && AI.client.eye == AI.eyeobj) AI.cameraFollow = null - if (isturf(src.loc) || isturf(src)) + if(isturf(src.loc) || isturf(src)) AI.eyeobj.setLoc(src) // AI MOVEMENT @@ -82,7 +82,7 @@ //user.unset_machine() //Uncomment this if it causes problems. //user.lightNearbyCamera() - if (user.camera_light_on) + if(user.camera_light_on) user.light_cameras() // Return to the Core. diff --git a/code/modules/mob/living/silicon/ai/laws.dm b/code/modules/mob/living/silicon/ai/laws.dm index 74816aeeb89..4ce1dbda48c 100755 --- a/code/modules/mob/living/silicon/ai/laws.dm +++ b/code/modules/mob/living/silicon/ai/laws.dm @@ -6,7 +6,7 @@ /mob/living/silicon/ai/show_laws(var/everyone = 0) var/who - if (everyone) + if(everyone) who = world else who = src diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index dabaf2c4153..f82db9b4662 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -12,7 +12,7 @@ updatehealth() update_gravity(mob_has_gravity()) - if (health <= config.health_threshold_dead) + if(health <= config.health_threshold_dead) death() return 0 @@ -102,7 +102,7 @@ var/PRP for(PRP = 1, PRP <= 4, PRP++) for(var/obj/machinery/power/apc/APC in my_area) - if (!(APC.stat & BROKEN)) + if(!(APC.stat & BROKEN)) theAPC = APC break @@ -116,7 +116,7 @@ return if(my_area.power_equip) - if (!istype(T, /turf/space)) + if(!istype(T, /turf/space)) to_chat(src, "Alert cancelled. Power has been restored without our assistance.") aiRestorePowerRoutine = 0 clear_fullscreen("blind") diff --git a/code/modules/mob/living/silicon/ai/logout.dm b/code/modules/mob/living/silicon/ai/logout.dm index 09bc93bf349..acc6220bc46 100644 --- a/code/modules/mob/living/silicon/ai/logout.dm +++ b/code/modules/mob/living/silicon/ai/logout.dm @@ -3,7 +3,7 @@ for(var/obj/machinery/ai_status_display/O in world) //change status O.mode = 0 if(!isturf(loc)) - if (client) + if(client) client.eye = loc client.perspective = EYE_PERSPECTIVE src.view_core() 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/decoy/life.dm b/code/modules/mob/living/silicon/decoy/life.dm index d62d5d15dae..ade3c535506 100644 --- a/code/modules/mob/living/silicon/decoy/life.dm +++ b/code/modules/mob/living/silicon/decoy/life.dm @@ -1,8 +1,8 @@ /mob/living/silicon/decoy/Life() - if (src.stat == 2) + if(src.stat == 2) return else - if (src.health <= config.health_threshold_dead && src.stat != 2) + if(src.health <= config.health_threshold_dead && src.stat != 2) death() return diff --git a/code/modules/mob/living/silicon/emote.dm b/code/modules/mob/living/silicon/emote.dm new file mode 100644 index 00000000000..9e95b9cefaa --- /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/laws.dm b/code/modules/mob/living/silicon/laws.dm index 30784e61b93..b49aa82625c 100644 --- a/code/modules/mob/living/silicon/laws.dm +++ b/code/modules/mob/living/silicon/laws.dm @@ -3,7 +3,7 @@ var/list/additional_law_channels = list("State" = "") /mob/living/silicon/proc/laws_sanity_check() - if (!src.laws) + if(!src.laws) laws = new base_law_type /mob/living/silicon/proc/has_zeroth_law() diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm index 0f938ab31b0..92055b813ab 100644 --- a/code/modules/mob/living/silicon/pai/death.dm +++ b/code/modules/mob/living/silicon/pai/death.dm @@ -6,7 +6,7 @@ force_fold_out() var/turf/T = get_turf_or_move(loc) - for (var/mob/M in viewers(T)) + for(var/mob/M in viewers(T)) M.show_message("[src] emits a dull beep before it loses power and collapses.", 3, "You hear a dull beep followed by the sound of glass crunching.", 2) name = "pAI debris" desc = "The unfortunate remains of some poor personal AI device." 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/life.dm b/code/modules/mob/living/silicon/pai/life.dm index ac8e20238d3..c0e4c2f275b 100644 --- a/code/modules/mob/living/silicon/pai/life.dm +++ b/code/modules/mob/living/silicon/pai/life.dm @@ -13,7 +13,7 @@ if(cable) if(get_dist(src, cable) > 1) var/turf/T = get_turf_or_move(loc) - for (var/mob/M in viewers(T)) + for(var/mob/M in viewers(T)) M.show_message("\red The data cable rapidly retracts back into its spool.", 3, "\red You hear a click and the sound of wire spooling rapidly.", 2) qdel(src.cable) cable = null diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 635efadcaba..3cf863a3591 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -127,21 +127,21 @@ /mob/living/silicon/pai/Stat() ..() statpanel("Status") - if (src.client.statpanel == "Status") + if(src.client.statpanel == "Status") show_silenced() - if (proc_holder_list.len)//Generic list for proc_holder objects. + if(proc_holder_list.len)//Generic list for proc_holder objects. for(var/obj/effect/proc_holder/P in proc_holder_list) statpanel("[P.panel]","",P) /mob/living/silicon/pai/check_eye(var/mob/user as mob) - if (!src.current) + if(!src.current) return null user.reset_view(src.current) return 1 /mob/living/silicon/pai/blob_act() - if (src.stat != 2) + if(src.stat != 2) src.adjustBruteLoss(60) src.updatehealth() return 1 @@ -166,7 +166,7 @@ to_chat(src, "Communication circuit overload. Shutting down and reloading communication circuits - speech and messaging functionality will be unavailable until the reboot is complete.") if(prob(20)) var/turf/T = get_turf_or_move(src.loc) - for (var/mob/M in viewers(T)) + for(var/mob/M in viewers(T)) M.show_message("\red A shower of sparks spray from [src]'s inner workings.", 3, "\red You hear and smell the ozone hiss of electrical sparks being expelled violently.", 2) return src.death(0) @@ -191,15 +191,15 @@ switch(severity) if(1.0) - if (src.stat != 2) + if(src.stat != 2) adjustBruteLoss(100) adjustFireLoss(100) if(2.0) - if (src.stat != 2) + if(src.stat != 2) adjustBruteLoss(60) adjustFireLoss(60) if(3.0) - if (src.stat != 2) + if(src.stat != 2) adjustBruteLoss(30) return @@ -223,28 +223,28 @@ updatehealth() /mob/living/silicon/pai/attack_alien(mob/living/carbon/alien/humanoid/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return - if (istype(src.loc, /turf) && istype(src.loc.loc, /area/start)) + if(istype(src.loc, /turf) && istype(src.loc.loc, /area/start)) to_chat(M, "You cannot attack someone in the spawn area.") return switch(M.a_intent) - if (I_HELP) + if(I_HELP) for(var/mob/O in viewers(src, null)) - if ((O.client && !( O.blinded ))) + if((O.client && !( O.blinded ))) O.show_message(text("\blue [M] caresses [src]'s casing with its scythe like arm."), 1) else //harm M.do_attack_animation(src) var/damage = rand(10, 20) - if (prob(90)) + if(prob(90)) playsound(src.loc, 'sound/weapons/slash.ogg', 25, 1, -1) for(var/mob/O in viewers(src, null)) - if ((O.client && !( O.blinded ))) + if((O.client && !( O.blinded ))) O.show_message(text("\red [] has slashed at []!", M, src), 1) if(prob(8)) flash_eyes(affect_silicon = 1) @@ -253,17 +253,17 @@ else playsound(src.loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1) for(var/mob/O in viewers(src, null)) - if ((O.client && !( O.blinded ))) + if((O.client && !( O.blinded ))) O.show_message(text("\red [] took a swipe at []!", M, src), 1) return /mob/living/silicon/pai/proc/switchCamera(var/obj/machinery/camera/C) usr:cameraFollow = null - if (!C) + if(!C) src.unset_machine() src.reset_view(null) return 0 - if (stat == 2 || !C.status || !(src.network in C.network)) return 0 + if(stat == 2 || !C.status || !(src.network in C.network)) return 0 // ok, we're alive, camera is good and in our network... @@ -306,7 +306,7 @@ to_chat(usr, "You can't change your camera network because you are dead!") return - for (var/obj/machinery/camera/C in Cameras) + for(var/obj/machinery/camera/C in Cameras) if(!C.status) continue else @@ -441,9 +441,9 @@ /mob/living/silicon/pai/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/stack/nanopaste)) var/obj/item/stack/nanopaste/N = W - if (stat == DEAD) + if(stat == DEAD) to_chat(user, "\The [src] is beyond help, at this point.") - else if (getBruteLoss() || getFireLoss()) + else if(getBruteLoss() || getFireLoss()) adjustBruteLoss(-15) adjustFireLoss(-15) updatehealth() @@ -466,10 +466,15 @@ return /mob/living/silicon/pai/attack_hand(mob/user as mob) - if(stat == 2) return - visible_message("[user.name] boops [src] on the head.") - spawn(1) - close_up() + if(stat == DEAD) + return + if(user.a_intent == I_HELP) + user.visible_message("[user] pets [src].") + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + else + visible_message("[user.name] boops [src] on the head.") + spawn(1) + close_up() //I'm not sure how much of this is necessary, but I would rather avoid issues. /mob/living/silicon/pai/proc/close_up() @@ -516,35 +521,36 @@ to_chat(src, "You are far too small to pull anything!") return -/mob/living/silicon/pai/update_canmove() +/mob/living/silicon/pai/update_canmove(delay_action_updates = 0) . = ..() 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(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) /mob/living/silicon/pai/bullet_act(var/obj/item/projectile/Proj) ..(Proj) updatehealth() - if (stat != 2) + if(stat != 2) spawn(1) close_up() return 2 diff --git a/code/modules/mob/living/silicon/pai/personality.dm b/code/modules/mob/living/silicon/pai/personality.dm index 49b7e394d44..d089b76a3fb 100644 --- a/code/modules/mob/living/silicon/pai/personality.dm +++ b/code/modules/mob/living/silicon/pai/personality.dm @@ -32,12 +32,12 @@ // returns 0 if savefile did not exist /datum/paiCandidate/proc/savefile_load(mob/user, var/silent = 1) - if (IsGuestKey(user.key)) + if(IsGuestKey(user.key)) return 0 var/path = savefile_path(user) - if (!fexists(path)) + if(!fexists(path)) return 0 var/savefile/F = new /savefile(path) @@ -47,9 +47,9 @@ var/version = null F["version"] >> version - if (isnull(version) || version != 1) + if(isnull(version) || version != 1) fdel(path) - if (!silent) + if(!silent) alert(user, "Your savefile was incompatible with this version and was deleted.") return 0 diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index 949c946a6c8..2e6548ef2c4 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 @@ -373,7 +374,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates if(!C) return //handle logouts that happen whilst the alert is waiting for a response. if(response == "Yes") recruitWindow(C.mob) - else if (response == "Never for this round") + else if(response == "Never for this round") var/warning = alert(C, "Are you sure? This action will be undoable and you will need to wait until next round.", "You sure?", "Yes", "No") if(warning == "Yes") asked[C.key] = INFINITY diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index e85345db226..539832d9c08 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -85,7 +85,7 @@ var/global/list/default_pai_software = list() data["current_emotion"] = card.current_emotion ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "pai_interface.tmpl", "pAI Software Interface", 450, 600) ui.set_initial_data(data) ui.open() diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index b4fd1ff3fa7..3e15e7118d9 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -65,7 +65,7 @@ var/answer = input(M, "[P] is requesting a DNA sample from you. Will you allow it to confirm your identity?", "[P] Check DNA", "No") in list("Yes", "No") if(answer == "Yes") var/turf/T = get_turf_or_move(P.loc) - for (var/mob/v in viewers(T)) + for(var/mob/v in viewers(T)) v.show_message("[M] presses \his thumb against [P].", 3, "[P] makes a sharp clicking sound as it extracts DNA material from [M].", 2) var/datum/dna/dna = M.dna to_chat(P, "

        [M]'s UE string : [dna.unique_enzymes]

        ") @@ -296,7 +296,7 @@ return t = sanitize(copytext(t, 1, MAX_MESSAGE_LEN)) t = readd_quotes(t) - if (!t) + if(!t) return M.current_room.topic = t @@ -329,7 +329,7 @@ return t = sanitize(copytext(t, 1, MAX_MESSAGE_LEN)) t = readd_quotes(t) - if (!t || !P.pda.can_use()) + if(!t || !P.pda.can_use()) return target.post(M, t) @@ -380,12 +380,12 @@ if(record) var/datum/data/record/R = record var/datum/data/record/M = null - if (!( data_core.general.Find(R) )) + if(!( data_core.general.Find(R) )) P.medical_cannotfind = 1 else P.medical_cannotfind = 0 for(var/datum/data/record/E in data_core.medical) - if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) M = E P.medicalActive1 = R P.medicalActive2 = M @@ -434,14 +434,14 @@ if(record) var/datum/data/record/R = record var/datum/data/record/S = null - if (!( data_core.general.Find(R) )) + if(!( data_core.general.Find(R) )) P.securityActive1 = null P.securityActive2 = null P.security_cannotfind = 1 else P.security_cannotfind = 0 for(var/datum/data/record/E in data_core.security) - if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) S = E P.securityActive1 = R P.securityActive2 = S @@ -670,7 +670,7 @@ if(href_list["send"]) P.sradio.send_signal("ACTIVATE") for(var/mob/O in hearers(1, P.loc)) - O.show_message(text("\icon[] *beep* *beep*", P), 3, "*beep* *beep*", 2) + O.show_message("[bicon(P)] *beep* *beep*", 3, "*beep* *beep*", 2) return 1 else if(href_list["freq"]) diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index c6ae0f57ddf..f51325f546b 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -7,8 +7,8 @@ var/toggled = 1 var/brute_damage = 0 var/electronics_damage = 0 - var/energy_consumption = 0 var/max_damage = 30 + var/component_disabled = 0 var/mob/living/silicon/robot/owner // The actual device object that has to be installed for this. @@ -51,28 +51,22 @@ electronics_damage = max(0, electronics_damage - electronics) /datum/robot_component/proc/is_powered() - return (installed == 1) && (brute_damage + electronics_damage < max_damage) && (!energy_consumption || powered) + return (installed == 1) && (brute_damage + electronics_damage < max_damage) && (powered) /datum/robot_component/proc/consume_power() if(toggled == 0) powered = 0 return - if(owner.cell.charge >= energy_consumption) - owner.cell.use(energy_consumption) - powered = 1 - else - powered = 0 + powered = 1 /datum/robot_component/armour name = "armour plating" - energy_consumption = 0 external_type = /obj/item/robot_parts/robot_component/armour max_damage = 100 /datum/robot_component/actuator name = "actuator" - energy_consumption = 1 external_type = /obj/item/robot_parts/robot_component/actuator max_damage = 50 @@ -87,24 +81,20 @@ /datum/robot_component/radio name = "radio" external_type = /obj/item/robot_parts/robot_component/radio - energy_consumption = 1 max_damage = 40 /datum/robot_component/binary_communication name = "binary communication device" external_type = /obj/item/robot_parts/robot_component/binary_communication_device - energy_consumption = 0 max_damage = 30 /datum/robot_component/camera name = "camera" external_type = /obj/item/robot_parts/robot_component/camera - energy_consumption = 1 max_damage = 40 /datum/robot_component/diagnosis_unit name = "self-diagnosis unit" - energy_consumption = 1 external_type = /obj/item/robot_parts/robot_component/diagnosis_unit max_damage = 30 @@ -121,7 +111,13 @@ /mob/living/silicon/robot/proc/is_component_functioning(module_name) var/datum/robot_component/C = components[module_name] - return C && C.installed == 1 && C.toggled && C.is_powered() + return C && C.installed == 1 && C.toggled && C.is_powered() && !C.component_disabled + +/mob/living/silicon/robot/proc/disable_component(module_name, duration) + var/datum/robot_component/D = get_component(module_name) + D.component_disabled++ + spawn(duration) + D.component_disabled-- // Returns component by it's string name /mob/living/silicon/robot/proc/get_component(var/component_name) @@ -175,7 +171,7 @@ flags = CONDUCT slot_flags = SLOT_BELT throwforce = 3 - w_class = 2.0 + w_class = 2 throw_speed = 5 throw_range = 10 origin_tech = "magnets=1;biotech=1" diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 9a5c1a9f4d5..1089e05862a 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -111,11 +111,11 @@ to_chat(user, "\red The maintenance drone chassis not compatible with \the [W].") return - else if (istype(W, /obj/item/weapon/crowbar)) + else if(istype(W, /obj/item/weapon/crowbar)) to_chat(user, "The machine is hermetically sealed. You can't open the case.") return - else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) + else if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) if(stat == 2) @@ -253,6 +253,8 @@ /mob/living/silicon/robot/drone/proc/request_player() for(var/mob/dead/observer/O in player_list) + if(O.has_enabled_antagHUD == 1 && config.antag_hud_restricted) + continue if(jobban_isbanned(O,"nonhumandept") || jobban_isbanned(O,"Drone")) continue if(O.client) @@ -301,7 +303,7 @@ /mob/living/silicon/robot/drone/Bump(atom/movable/AM as mob|obj, yes) - if (!yes || ( \ + if(!yes || ( \ !istype(AM,/obj/machinery/door) && \ !istype(AM,/obj/machinery/recharge_station) && \ !istype(AM,/obj/machinery/disposal/deliveryChute) && \ @@ -335,7 +337,7 @@ /mob/living/silicon/robot/drone/remove_robot_verbs() src.verbs -= silicon_subsystems -/mob/living/silicon/robot/drone/update_canmove() +/mob/living/silicon/robot/drone/update_canmove(delay_action_updates = 0) . = ..() density = 0 //this is reset every canmove update otherwise diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm index 151fc6de51d..d450d508bd3 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm @@ -26,7 +26,7 @@ set desc = "Allows you to hide beneath tables or certain items. Toggled on or off." set category = "Drone" - if (layer != TURF_LAYER+0.2) + if(layer != TURF_LAYER+0.2) layer = TURF_LAYER+0.2 to_chat(src, text("\blue You are now hiding.")) else diff --git a/code/modules/mob/living/silicon/robot/drone/drone_console.dm b/code/modules/mob/living/silicon/robot/drone/drone_console.dm index 5e7077f7000..f9be6f13413 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_console.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_console.dm @@ -57,10 +57,10 @@ to_chat(usr, "\red Access denied.") return - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) + if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) - if (href_list["setarea"]) + if(href_list["setarea"]) //Probably should consider using another list, but this one will do. var/t_area = input("Select the area to ping.", "Set Target Area", null) as null|anything in TAGGERLOCATIONS @@ -71,14 +71,14 @@ drone_call_area = t_area to_chat(usr, "\blue You set the area selector to [drone_call_area].") - else if (href_list["ping"]) + else if(href_list["ping"]) to_chat(usr, "\blue You issue a maintenance request for all active drones, highlighting [drone_call_area].") for(var/mob/living/silicon/robot/drone/D in world) if(D.client && D.stat == 0) to_chat(D, "-- Maintenance drone presence requested in: [drone_call_area].") - else if (href_list["resync"]) + else if(href_list["resync"]) var/mob/living/silicon/robot/drone/D = locate(href_list["resync"]) @@ -86,7 +86,7 @@ to_chat(usr, "\red You issue a law synchronization directive for the drone.") D.law_resync() - else if (href_list["shutdown"]) + else if(href_list["shutdown"]) var/mob/living/silicon/robot/drone/D = locate(href_list["shutdown"]) @@ -96,7 +96,7 @@ log_game("[key_name(usr)] issued kill order for [key_name(src)] from control console.") D.shut_down() - else if (href_list["search_fab"]) + else if(href_list["search_fab"]) if(dronefab) return @@ -111,7 +111,7 @@ to_chat(usr, "\red Unable to locate drone fabricator.") - else if (href_list["toggle_fab"]) + else if(href_list["toggle_fab"]) if(!dronefab) return diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index b5026a882fe..b6a932a52ec 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -222,7 +222,7 @@ for(var/obj/W in T) //Different classes of items give different commodities. - if (istype(W,/obj/item/weapon/cigbutt)) + if(istype(W,/obj/item/weapon/cigbutt)) stored_comms["plastic"]++ else if(istype(W,/obj/effect/spider/spiderling)) stored_comms["wood"]++ @@ -270,7 +270,7 @@ stored_comms["glass"]++ stored_comms["glass"]++ stored_comms["glass"]++ - else if (istype(W,/obj/item/weapon/light/tube) || istype(W,/obj/item/weapon/light/bulb)) + else if(istype(W,/obj/item/weapon/light/tube) || istype(W,/obj/item/weapon/light/bulb)) stored_comms["glass"]++ else continue @@ -310,11 +310,11 @@ var/tools = "Tools and devices
        " var/resources = "
        Resources
        " - for (var/O in module.modules) + for(var/O in module.modules) var/module_string = "" - if (!O) + if(!O) module_string += text("Resource depleted
        ") else if(activated(O)) module_string += text("[O]: Activated
        ") @@ -328,8 +328,8 @@ dat += tools - if (emagged) - if (!module.emag) + if(emagged) + if(!module.emag) dat += text("Resource depleted
        ") else if(activated(module.emag)) dat += text("[module.emag]: Activated
        ") @@ -344,7 +344,7 @@ /mob/living/silicon/robot/drone/use_power() ..() - if(!src.has_power || !decompiler) + if(low_power_mode || !decompiler) return //The decompiler replenishes drone stores from hoovered-up junk each tick. diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm index 881fde51dee..3a316b0140b 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm @@ -19,7 +19,7 @@ ..() /obj/machinery/drone_fabricator/power_change() - if (powered()) + if(powered()) stat &= ~NOPOWER else icon_state = "drone_fab_nopower" @@ -88,10 +88,10 @@ to_chat(src, "\red That verb is not currently permitted.") return - if (!src.stat) + if(!src.stat) return - if (usr != src) + if(usr != src) return 0 //something is terribly wrong if(jobban_isbanned(src,"nonhumandept") || jobban_isbanned(src,"Drone")) @@ -128,7 +128,7 @@ pluralcheck = " [deathtimeminutes] minutes and" var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10,1) - if (deathtime < 6000 && joinedasobserver == 0) + if(deathtime < 6000 && joinedasobserver == 0) to_chat(usr, "You have been dead for[pluralcheck] [deathtimeseconds] seconds.") to_chat(usr, "You must wait 10 minutes to respawn as a drone!") return diff --git a/code/modules/mob/living/silicon/robot/drone/drone_say.dm b/code/modules/mob/living/silicon/robot/drone/drone_say.dm index 9ce0b6c027e..5d00d45f97c 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_say.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_say.dm @@ -1,15 +1,15 @@ /mob/living/silicon/robot/drone/say(var/message) if(local_transmit) - if (src.client) + if(src.client) if(client.prefs.muted & MUTE_IC) to_chat(src, "You cannot send IC messages (muted).") return 0 - if (src.client.handle_spam_prevention(message,MUTE_IC)) + if(src.client.handle_spam_prevention(message,MUTE_IC)) return 0 message = sanitize(message) - if (stat == 2) + if(stat == 2) return say_dead(message) if(copytext(message,1,2) == "*") @@ -21,7 +21,7 @@ return L.broadcast(src,trim(copytext(message,2))) //Must be concious to speak - if (stat) + if(stat) return 0 var/list/listeners = hearers(5,src) @@ -31,8 +31,8 @@ if(D.client && D.local_transmit) to_chat(D, "[src] transmits, \"[message]\"") - for (var/mob/M in player_list) - if (istype(M, /mob/new_player)) + for(var/mob/M in player_list) + if(istype(M, /mob/new_player)) continue else if(M.stat == 2 && M.client && M.client.prefs.toggles & CHAT_GHOSTEARS) to_chat(M, "[src] transmits, \"[message]\"") 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..bf7f413708f --- /dev/null +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -0,0 +1,174 @@ +/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) + +/mob/living/silicon/robot/verb/powerwarn() + set category = "Robot Commands" + set name = "Power Warning" + + if(!is_component_functioning("power cell") || !cell || !cell.charge) + visible_message("The power warning light on [src] flashes urgently.",\ + "You announce you are operating in low power mode.") + playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) + else + to_chat(src, "You can only use this emote when you're out of charge.") \ 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 8d2af648463..cb207932a9a 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -1,45 +1,51 @@ /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 \icon[act_module] \a [act_module].\n" + msg += "It is holding [bicon(act_module)] \a [act_module].\n" msg += "" - if (src.getBruteLoss()) - if (src.getBruteLoss() < 75) + if(getBruteLoss()) + if(getBruteLoss() < maxHealth*0.5) msg += "It looks slightly dented.\n" else msg += "It looks severely dented!\n" - if (src.getFireLoss()) - if (src.getFireLoss() < 75) + if(getFireLoss()) + if(getFireLoss() < maxHealth*0.5) msg += "It looks slightly charred.\n" else msg += "It looks severely burnt and heat-warped!\n" - if (src.fire_stacks < 0) + if(health < -maxHealth*0.5) + msg += "It looks barely operational.\n" + if(fire_stacks < 0) msg += "It's covered in water.\n" - if (src.fire_stacks > 0) + else if(fire_stacks > 0) msg += "It's coated in something flammable.\n" msg += "" if(opened) msg += "Its cover is open and the power cell is [cell ? "installed" : "missing"].\n" else - msg += "Its cover is closed.\n" + msg += "Its cover is closed[locked ? "" : ", and looks unlocked"].\n" - if(!has_power) - msg += "It appears to be running on backup power.\n" + if(cell && cell.charge <= 0) + msg += "Its battery indicator is blinking red!\n" - switch(src.stat) + switch(stat) if(CONSCIOUS) - if(!src.client) msg += "It appears to be in stand-by mode.\n" //afk - if(UNCONSCIOUS) msg += "It doesn't seem to be responding.\n" - if(DEAD) msg += "It looks completely unsalvageable.\n" + if(!client) + msg += "It appears to be in stand-by mode.\n" //afk + if(UNCONSCIOUS) + msg += "It doesn't seem to be responding.\n" + if(DEAD) + msg += "It looks like its system is corrupted and requires a reset.\n" msg += "*---------*" if(print_flavor_text()) msg += "\n[print_flavor_text()]\n" - if (pose) + 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]" diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 7e824eeb279..d843203ebc3 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -45,7 +45,7 @@ if(activated(O)) to_chat(src, "Already activated") return - if (is_component_functioning("power cell") && cell) + if(is_component_functioning("power cell") && cell) if(istype(O, /obj/item/borg)) var/obj/item/borg/B = O if(B.powerneeded) diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index bc575831537..2a62a0b1cc4 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -7,12 +7,12 @@ laws_sanity_check() var/who - if (everyone) + if(everyone) who = world else who = src if(lawupdate) - if (connected_ai) + if(connected_ai) if(connected_ai.stat || connected_ai.control_disabled) to_chat(src, "AI signal lost, unable to sync laws.") @@ -30,11 +30,11 @@ to_chat(who, "Obey these laws:") laws.show_laws(who) // TODO: Update to new antagonist system. - if (mind && (mind.special_role == "traitor" && mind.original == src) && connected_ai) + if(mind && (mind.special_role == "traitor" && mind.original == src) && connected_ai) to_chat(who, "Remember, [connected_ai.name] is technically your master, but your objective comes first.") - else if (connected_ai) + else if(connected_ai) to_chat(who, "Remember, [connected_ai.name] is your master, other AIs can be ignored.") - else if (emagged) + else if(emagged) to_chat(who, "Remember, you are not required to listen to the AI.") else to_chat(who, "Remember, you are not bound to any AI, you are not required to listen to them.") @@ -43,7 +43,7 @@ /mob/living/silicon/robot/lawsync() laws_sanity_check() var/datum/ai_laws/master = connected_ai && lawupdate ? connected_ai.laws : null - if (master) + if(master) master.sync(src) ..() return diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index fa534b66123..b2c8857f040 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -2,14 +2,14 @@ set invisibility = 0 set background = BACKGROUND_ENABLED - if (src.notransform) + if(src.notransform) return //Status updates, death etc. clamp_values() if(..()) - use_power() + handle_robot_cell() process_locks() process_queued_alarms() @@ -17,60 +17,34 @@ SetStunned(min(stunned, 30)) SetParalysis(min(paralysis, 30)) SetWeakened(min(weakened, 20)) - sleeping = 0 - ear_deaf = 0 + SetSleeping(0) +/mob/living/silicon/robot/proc/handle_robot_cell() + if(stat != DEAD) + if(!is_component_functioning("power cell") || !cell) + Paralyse(2) + uneq_all() + low_power_mode = 1 + update_headlamp() + diag_hud_set_borgcell() + return + if(low_power_mode) + if(is_component_functioning("power cell") && cell && cell.charge) + low_power_mode = 0 + update_headlamp() + else if(stat == CONSCIOUS) + use_power() /mob/living/silicon/robot/proc/use_power() - if (stat == DEAD) - return - else if (is_component_functioning("power cell") && cell) - if(module) - for(var/obj/item/borg/B in get_all_slots()) - if(B.powerneeded) - if((cell.charge * 100 / cell.maxcharge) < B.powerneeded) - to_chat(src, "Deactivating [B.name] due to lack of power!") - uneq_module(B) - if(cell.charge <= 0) + if(is_component_functioning("power cell") && cell && cell.charge) + if(cell.charge <= 100) uneq_all() - update_headlamp(1) - stat = UNCONSCIOUS - has_power = 0 - for(var/V in components) - var/datum/robot_component/C = components[V] - if(C.name == "actuator") // Let drained robots move, disable the rest - continue - C.consume_power() - else if(cell.charge <= 100) - uneq_all() - cell.use(1) - else - if(module_state_1) - cell.use(4) - if(module_state_2) - cell.use(4) - if(module_state_3) - cell.use(4) - - for(var/V in components) - var/datum/robot_component/C = components[V] - C.consume_power() - - var/amt = Clamp((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell. - cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick - - if(!is_component_functioning("actuator")) - Paralyse(3) - eye_blind = 0 - // Please, PLEASE be careful with statements like this - make sure they're not - // dead beforehand, for example -- Crazylemon - stat = CONSCIOUS - has_power = 1 + var/amt = Clamp((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell. + cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick else uneq_all() - stat = UNCONSCIOUS - update_headlamp(1) - Paralyse(3) + low_power_mode = 1 + update_headlamp() diag_hud_set_borgcell() /mob/living/silicon/robot/handle_regular_status_updates() @@ -232,7 +206,7 @@ /mob/living/silicon/robot/proc/update_items() - if (client) + if(client) for(var/obj/I in get_all_slots()) client.screen |= I if(module_state_1) @@ -253,12 +227,14 @@ weapon_lock = 0 weaponlock_time = 120 -/mob/living/silicon/robot/update_canmove() +/mob/living/silicon/robot/update_canmove(delay_action_updates = 0) if(paralysis || stunned || weakened || buckled || lockcharge) canmove = 0 else canmove = 1 update_transform() + if(!delay_action_updates) + update_action_buttons_icon() return canmove //Robots on fire diff --git a/code/modules/mob/living/silicon/robot/photos.dm b/code/modules/mob/living/silicon/robot/photos.dm index 33f739c41c9..88bf9c50990 100644 --- a/code/modules/mob/living/silicon/robot/photos.dm +++ b/code/modules/mob/living/silicon/robot/photos.dm @@ -1,12 +1,12 @@ /mob/living/silicon/robot/proc/photosync() var/obj/item/device/camera/siliconcam/master_cam = connected_ai ? connected_ai.aiCamera : null - if (!master_cam) + if(!master_cam) return var/synced synced = 0 for(var/datum/picture/z in aiCamera.aipictures) - if (!(master_cam.aipictures.Find(z))) + if(!(master_cam.aipictures.Find(z))) aiCamera.printpicture(null, z) synced = 1 if(synced) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 81c781b51ff..b7f3eec50bc 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -21,6 +21,7 @@ var/list/robot_verbs_default = list( var/obj/screen/inv2 = null var/obj/screen/inv3 = null var/obj/screen/lamp_button = null + var/obj/screen/thruster_button = null var/shown_robot_modules = 0 //Used to determine whether they have the module menu shown or not var/obj/screen/robot_modules_background @@ -57,11 +58,9 @@ var/list/robot_verbs_default = list( var/viewalerts = 0 var/modtype = "Default" var/lower_mod = 0 - var/jetpack = 0 - var/datum/effect/system/ion_trail_follow/ion_trail = null var/datum/effect/system/spark_spread/spark_system//So they can initialize sparks whenever/N var/jeton = 0 - var/has_power = 1 + var/low_power_mode = 0 //whether the robot has no charge left. var/weapon_lock = 0 var/weaponlock_time = 120 var/lawupdate = 1 //Cyborgs will sync their laws with their AI by default @@ -81,12 +80,16 @@ var/list/robot_verbs_default = list( hud_possible = list(SPECIALROLE_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD,NATIONS_HUD) - var/jetpackoverlay = 0 var/magpulse = 0 + var/ionpulse = 0 // Jetpack-like effect. + var/ionpulse_on = 0 // Jetpack-like effect. + var/datum/effect/system/ion_trail_follow/ion_trail // Ionpulse effect. var/obj/item/borg/sight/hud/sec/sechud = null var/obj/item/borg/sight/hud/med/healthhud = null + var/datum/action/item_action/toggle_research_scanner/scanner = null + /mob/living/silicon/robot/New(loc,var/syndie = 0,var/unfinished = 0, var/alien = 0) spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, src) @@ -143,6 +146,7 @@ var/list/robot_verbs_default = list( cell_component.installed = 1 diag_hud_set_borgcell() + scanner = new(src) scanner.Grant(src) /mob/living/silicon/robot/proc/init(var/alien=0) @@ -168,7 +172,7 @@ var/list/robot_verbs_default = list( setup_PDA() //We also need to update name of internal camera. - if (camera) + if(camera) camera.c_tag = newname //Check for custom sprite @@ -221,7 +225,7 @@ var/list/robot_verbs_default = list( // setup the PDA and its name /mob/living/silicon/robot/proc/setup_PDA() - if (!rbPDA) + if(!rbPDA) rbPDA = new(src) rbPDA.set_name_and_job(real_name, braintype) if(scrambledcodes) @@ -231,8 +235,6 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/binarycheck() if(is_component_functioning("comms")) - var/datum/robot_component/RC = get_component("comms") - use_power(RC.energy_consumption) return 1 return 0 @@ -316,7 +318,7 @@ var/list/robot_verbs_default = list( if(camera && "Robots" in camera.network) camera.network.Add("Medical") module_sprites["Basic"] = "Medbot" - module_sprites["Standard"] = "surgeon" + module_sprites["Surgeon"] = "surgeon" module_sprites["Advanced Droid"] = "droid-medical" module_sprites["Needles"] = "medicalrobot" module_sprites["Standard"] = "robotMedi" @@ -375,7 +377,7 @@ var/list/robot_verbs_default = list( module.add_subsystems(src) //Custom_sprite check and entry - if (custom_sprite == 1) + if(custom_sprite == 1) module_sprites["Custom"] = "[src.ckey]-[modtype]" hands.icon_state = lowertext(module.module_type) @@ -411,9 +413,9 @@ var/list/robot_verbs_default = list( return null var/dat = "[src.name] Self-Diagnosis Report\n" - for (var/V in components) + for(var/V in components) var/datum/robot_component/C = components[V] - dat += "[C.name]

        Name

        Status

        Location

        Control

        [Bot.hacked ? "(!) [Bot.name]" : Bot.name] ([Bot.model])
        Power consumption[C.energy_consumption]
        Brute Damage:[C.brute_damage]
        Electronics Damage:[C.electronics_damage]
        Powered:[(!C.energy_consumption || C.is_powered()) ? "Yes" : "No"]
        Toggled:[ C.toggled ? "Yes" : "No"]

        " + dat += "[C.name]
        Brute Damage:[C.brute_damage]
        Electronics Damage:[C.electronics_damage]
        Powered:[C.is_powered() ? "Yes" : "No"]
        Toggled:[ C.toggled ? "Yes" : "No"]

        " return dat @@ -466,8 +468,37 @@ var/list/robot_verbs_default = list( src.verbs -= robot_verbs_default src.verbs -= silicon_subsystems +/mob/living/silicon/robot/proc/ionpulse() + if(!ionpulse_on) + return + + if(cell.charge <= 50) + toggle_ionpulse() + return + + cell.charge -= 50 // 500 steps on a default cell. + return 1 + +/mob/living/silicon/robot/proc/toggle_ionpulse() + if(!ionpulse) + to_chat(src, "No thrusters are installed!") + return + + if(!ion_trail) + ion_trail = new + ion_trail.set_up(src) + + ionpulse_on = !ionpulse_on + to_chat(src, "You [ionpulse_on ? null :"de"]activate your ion thrusters.") + if(ionpulse_on) + ion_trail.start() + else + ion_trail.stop() + if(thruster_button) + thruster_button.icon_state = "ionpulse[ionpulse_on]" + /mob/living/silicon/robot/blob_act() - if (stat != 2) + if(stat != 2) adjustBruteLoss(60) updatehealth() return 1 @@ -481,7 +512,7 @@ var/list/robot_verbs_default = list( ..() if(ticker && ticker.mode.name == "AI malfunction") var/datum/game_mode/malfunction/malf = ticker.mode - for (var/datum/mind/malfai in malf.malf_ai) + for(var/datum/mind/malfai in malf.malf_ai) if(connected_ai) if(connected_ai.mind == malfai) if(malf.apcs >= 3) @@ -490,23 +521,6 @@ var/list/robot_verbs_default = list( stat(null, "Time left: [max(ticker.mode:AI_win_timeleft/(ticker.mode:apcs/3), 0)]") return 0 - -// this function displays jetpack pressure in the stat panel -/mob/living/silicon/robot/proc/show_jetpack_pressure() - // if you have a jetpack, show the internal tank pressure - var/obj/item/weapon/tank/jetpack/current_jetpack = installed_jetpack() - if (current_jetpack) - stat("Internal Atmosphere Info", current_jetpack.name) - stat("Tank Pressure", current_jetpack.air_contents.return_pressure()) - - -// this function returns the robots jetpack, if one is installed -/mob/living/silicon/robot/proc/installed_jetpack() - if(module) - return (locate(/obj/item/weapon/tank/jetpack) in module.modules) - return 0 - - // this function displays the cyborgs current cell charge in the stat panel /mob/living/silicon/robot/proc/show_cell_power() if(cell) @@ -519,9 +533,8 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/Stat() ..() statpanel("Status") - if (client.statpanel == "Status") + if(client.statpanel == "Status") show_cell_power() - show_jetpack_pressure() /mob/living/silicon/robot/restrained() return 0 @@ -533,11 +546,11 @@ var/list/robot_verbs_default = list( gib() return if(2.0) - if (stat != 2) + if(stat != 2) adjustBruteLoss(60) adjustFireLoss(60) if(3.0) - if (stat != 2) + if(stat != 2) adjustBruteLoss(30) return @@ -551,7 +564,7 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/Bump(atom/movable/AM as mob|obj, yes) spawn( 0 ) - if ((!( yes ) || now_pushing)) + if((!( yes ) || now_pushing)) return now_pushing = 1 if(ismob(AM)) @@ -566,13 +579,13 @@ var/list/robot_verbs_default = list( return now_pushing = 0 ..() - if (!istype(AM, /atom/movable)) + if(!istype(AM, /atom/movable)) return - if (!now_pushing) + if(!now_pushing) now_pushing = 1 - if (!AM.anchored) + if(!AM.anchored) var/t = get_dir(src, AM) - if (istype(AM, /obj/structure/window/full)) + if(istype(AM, /obj/structure/window/full)) for(var/obj/structure/window/win in get_step(AM,t)) now_pushing = 0 return @@ -582,7 +595,7 @@ var/list/robot_verbs_default = list( return /mob/living/silicon/robot/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/restraints/handcuffs)) // fuck i don't even know why isrobot() in handcuff code isn't working so this will have to do + if(istype(W, /obj/item/weapon/restraints/handcuffs)) // fuck i don't even know why isrobot() in handcuff code isn't working so this will have to do return if(opened) // Are they trying to insert something? @@ -604,15 +617,15 @@ var/list/robot_verbs_default = list( return - if (istype(W, /obj/item/weapon/weldingtool) && user.a_intent == I_HELP) + if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent == I_HELP) if(W == module_active) return - if (!getBruteLoss()) + if(!getBruteLoss()) to_chat(user, "Nothing to fix!") return var/obj/item/weapon/weldingtool/WT = W user.changeNext_move(CLICK_CD_MELEE) - if (WT.remove_fuel(0)) + if(WT.remove_fuel(0)) playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) adjustBruteLoss(-30) updatehealth() @@ -624,7 +637,7 @@ var/list/robot_verbs_default = list( else if(istype(W, /obj/item/stack/cable_coil) && user.a_intent == I_HELP && (wiresexposed || istype(src,/mob/living/silicon/robot/drone))) - if (!getFireLoss()) + if(!getFireLoss()) to_chat(user, "Nothing to fix!") return var/obj/item/stack/cable_coil/coil = W @@ -634,7 +647,7 @@ var/list/robot_verbs_default = list( coil.use(1) user.visible_message("\The [user] fixes some of the burnt wires on \the [src] with \the [coil].") - else if (istype(W, /obj/item/weapon/crowbar)) // crowbar means open or close the cover + else if(istype(W, /obj/item/weapon/crowbar)) // crowbar means open or close the cover if(opened) if(cell) to_chat(user, "You close the cover.") @@ -693,7 +706,7 @@ var/list/robot_verbs_default = list( opened = 1 update_icons() - else if (istype(W, /obj/item/weapon/stock_parts/cell) && opened) // trying to put a cell inside + else if(istype(W, /obj/item/weapon/stock_parts/cell) && opened) // trying to put a cell inside var/datum/robot_component/C = components["power cell"] if(wiresexposed) to_chat(user, "Close the panel first.") @@ -713,8 +726,8 @@ var/list/robot_verbs_default = list( C.electronics_damage = 0 diag_hud_set_borgcell() - else if (istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/device/multitool)) - if (wiresexposed) + else if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/device/multitool)) + if(wiresexposed) wires.Interact(user) else to_chat(user, "You can't reach the wiring.") @@ -737,7 +750,7 @@ var/list/robot_verbs_default = list( else to_chat(user, "Unable to locate a radio.") - else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card + else if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card if(emagged)//still allow them to open the cover to_chat(user, "The interface seems slightly damaged") if(opened) @@ -847,28 +860,28 @@ var/list/robot_verbs_default = list( to_chat(usr, "You unlock your cover.") /mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/humanoid/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return - if (istype(loc, /turf) && istype(loc.loc, /area/start)) + if(istype(loc, /turf) && istype(loc.loc, /area/start)) to_chat(M, "No attacking people at spawn, you jackass.") return switch(M.a_intent) - if (I_HELP) + if(I_HELP) for(var/mob/O in viewers(src, null)) - if ((O.client && !( O.blinded ))) + if((O.client && !( O.blinded ))) O.show_message(text("[M] caresses [src]'s plating with its scythe like arm."), 1) - if (I_GRAB) + if(I_GRAB) grabbedby(M) - if (I_HARM) + if(I_HARM) M.do_attack_animation(src) var/damage = rand(10, 20) - if (prob(90)) + if(prob(90)) playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1) visible_message("[M] has slashed at [src]!",\ "[M] has slashed at [src]!") @@ -881,10 +894,10 @@ var/list/robot_verbs_default = list( visible_message("[M] took a swipe at [src]!", \ "[M] took a swipe at [src]!") - if (I_DISARM) + if(I_DISARM) if(!(lying)) M.do_attack_animation(src) - if (prob(85)) + if(prob(85)) Stun(7) step(src,get_dir(M,src)) spawn(5) @@ -960,7 +973,7 @@ var/list/robot_verbs_default = list( diag_hud_set_borgcell() if(!opened && (!istype(user, /mob/living/silicon))) - if (user.a_intent == I_HELP) + if(user.a_intent == I_HELP) user.visible_message("[user] pets [src]!", \ "You pet [src]!") @@ -992,7 +1005,7 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/update_icons() overlays.Cut() - if(stat != DEAD && !(paralysis || stunned || weakened)) //Not dead, not stunned. + if(stat != DEAD && !(paralysis || stunned || weakened || low_power_mode)) //Not dead, not stunned. overlays += "eyes-[icon_state]" else overlays -= "eyes" @@ -1015,7 +1028,7 @@ var/list/robot_verbs_default = list( var/combat = list("Combat","Peacekeeper") if(modtype in combat) - if (base_icon == "") + if(base_icon == "") base_icon = icon_state if(module_active && istype(module_active,/obj/item/borg/combat/mobility)) icon_state = "[base_icon]-roll" @@ -1024,9 +1037,6 @@ var/list/robot_verbs_default = list( for(var/obj/item/borg/combat/shield/S in module.modules) if(activated(S)) overlays += "[base_icon]-shield" - - if(jetpackoverlay) - overlays += "minerjetpack-[icon_state]" update_fire() /mob/living/silicon/robot/proc/installed_modules() @@ -1050,14 +1060,14 @@ var/list/robot_verbs_default = list( Installed Modules

        "} - for (var/obj in module.modules) - if (!obj) + for(var/obj in module.modules) + if(!obj) dat += text("") else if(activated(obj)) dat += text("") else dat += text("") - if (emagged) + if(emagged) if(activated(module.emag)) dat += text("") else @@ -1081,31 +1091,31 @@ var/list/robot_verbs_default = list( if(usr != src) return 1 - if (href_list["mach_close"]) + if(href_list["mach_close"]) var/t1 = text("window=[href_list["mach_close"]]") unset_machine() src << browse(null, t1) return 1 - if (href_list["showalerts"]) + if(href_list["showalerts"]) subsystem_alarm_monitor() return 1 - if (href_list["mod"]) + if(href_list["mod"]) var/obj/item/O = locate(href_list["mod"]) - if (istype(O) && (O.loc == src)) + if(istype(O) && (O.loc == src)) O.attack_self(src) return 1 - if (href_list["act"]) + if(href_list["act"]) var/obj/item/O = locate(href_list["act"]) - if (!istype(O) || !(O.loc == src || O.loc == src.module)) + if(!istype(O) || !(O.loc == src || O.loc == src.module)) return 1 activate_module(O) installed_modules() - if (href_list["deact"]) + if(href_list["deact"]) var/obj/item/O = locate(href_list["deact"]) if(activated(O)) if(module_state_1 == O) @@ -1130,7 +1140,7 @@ var/list/robot_verbs_default = list( radio.interact(src)//Just use the radio's Topic() instead of bullshit special-snowflake code /mob/living/silicon/robot/proc/control_headlamp() - if(stat || lamp_recharging) + if(stat || lamp_recharging || low_power_mode) to_chat(src, "This function is currently offline.") return @@ -1142,7 +1152,7 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/proc/update_headlamp(var/turn_off = 0, var/cooldown = 100) set_light(0) - if(lamp_intensity && (turn_off || stat)) + if(lamp_intensity && (turn_off || stat || low_power_mode)) to_chat(src, "Your headlamp has been deactivated.") lamp_intensity = 0 lamp_recharging = 1 @@ -1173,7 +1183,7 @@ var/list/robot_verbs_default = list( var/turf/tile = loc if(isturf(tile)) tile.clean_blood() - if (istype(tile, /turf/simulated)) + if(istype(tile, /turf/simulated)) var/turf/simulated/S = tile S.dirt = 0 for(var/A in tile) @@ -1246,7 +1256,7 @@ var/list/robot_verbs_default = list( set src = usr var/obj/item/W = get_active_hand() - if (W) + if(W) W.attack_self(src) return @@ -1271,7 +1281,7 @@ var/list/robot_verbs_default = list( var/icontype - if (custom_sprite == 1) + if(custom_sprite == 1) icontype = "Custom" triesleft = 0 else @@ -1292,7 +1302,7 @@ var/list/robot_verbs_default = list( update_icons() - if (triesleft >= 1) + if(triesleft >= 1) var/choice = input("Look at your icon - is this what you want?") in list("Yes","No") if(choice=="No") choose_icon(triesleft, module_sprites) @@ -1329,7 +1339,7 @@ var/list/robot_verbs_default = list( sync() /mob/living/silicon/robot/adjustOxyLoss(var/amount) - if (suiciding) + if(suiciding) ..() /mob/living/silicon/robot/regenerate_icons() @@ -1345,6 +1355,7 @@ var/list/robot_verbs_default = list( faction = list("nanotrasen") designation = "Nanotrasen Combat" req_access = list(access_cent_specops) + ionpulse = 1 var/searching_for_ckey = 0 /mob/living/silicon/robot/deathsquad/New(loc) @@ -1392,6 +1403,7 @@ var/list/robot_verbs_default = list( designation = "Syndicate Assault" modtype = "Syndicate" req_access = list(access_syndicate) + ionpulse = 1 lawchannel = "State" var/playstyle_string = "You are a Syndicate assault cyborg!
        \ You are armed with powerful offensive tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ @@ -1470,3 +1482,11 @@ var/list/robot_verbs_default = list( status_flags &= ~CANPUSH notify_ai(2) + +/mob/living/silicon/robot/emp_act(severity) + ..() + switch(severity) + if(1) + disable_component("comms", 160) + if(2) + disable_component("comms", 60) diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm index 54bc69b7020..2ef7f30e45b 100644 --- a/code/modules/mob/living/silicon/robot/robot_damage.dm +++ b/code/modules/mob/living/silicon/robot/robot_damage.dm @@ -4,12 +4,12 @@ stat = CONSCIOUS return health = maxHealth - (getOxyLoss() + getFireLoss() + getBruteLoss()) - if (stat == DEAD && health > 0) + if(stat == DEAD && health > 0) update_revive() 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_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm index 13c48d03ac5..84c07ee7c20 100644 --- a/code/modules/mob/living/silicon/robot/robot_items.dm +++ b/code/modules/mob/living/silicon/robot/robot_items.dm @@ -17,7 +17,7 @@ select_colour(user) if("Mode") - if (mode == 1) + if(mode == 1) mode = 2 else mode = 1 @@ -30,10 +30,10 @@ // see code\modules\paperwork\paper.dm line 62 /obj/item/weapon/pen/multi/robopen/proc/RenamePaper(mob/user as mob,obj/paper as obj) - if ( !user || !paper ) + if( !user || !paper ) return var/n_name = input(user, "What would you like to label the paper?", "Paper Labelling", null) as text - if ( !user || !paper ) + if( !user || !paper ) return n_name = copytext(n_name, 1, 32) @@ -87,7 +87,7 @@ set src in range(0) var/N = input("How much damage should the shield absorb?") in list("5","10","25","50","75","100") - if (N) + if(N) shield_level = text2num(N)/100 /obj/item/borg/combat/mobility diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 7fb1ba0a8aa..762efbcf02d 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -2,13 +2,12 @@ name = "robot module" icon = 'icons/obj/module.dmi' icon_state = "std_module" - w_class = 100.0 + w_class = 100 item_state = "electronic" flags = CONDUCT var/list/modules = list() var/obj/item/emag = null - var/obj/item/borg/upgrade/jetpack = null var/list/subsystems = list() var/module_type = "NoMod" // For icon usage @@ -39,8 +38,6 @@ modules.Cut() qdel(emag) emag = null - qdel(jetpack) - jetpack = null return ..() /obj/item/weapon/robot_module/proc/fix_modules() @@ -230,7 +227,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) @@ -316,16 +313,18 @@ module_type = "Miner" /obj/item/weapon/robot_module/miner/New() - src.modules += new /obj/item/device/flash/cyborg(src) - src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/wrench(src) - src.modules += new /obj/item/weapon/screwdriver(src) - src.modules += new /obj/item/device/t_scanner/adv_mining_scanner/cyborg(src) - src.modules += new /obj/item/weapon/storage/bag/ore/cyborg(src) - src.modules += new /obj/item/weapon/pickaxe/drill/cyborg(src) - src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) - src.modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(src) - src.emag = new /obj/item/borg/stun(src) + modules += new /obj/item/device/flash/cyborg(src) + modules += new /obj/item/borg/sight/meson(src) + modules += new /obj/item/weapon/storage/bag/ore/cyborg(src) + modules += new /obj/item/weapon/pickaxe/drill/cyborg(src) + modules += new /obj/item/weapon/shovel(src) + modules += new /obj/item/weapon/weldingtool/mini(src) + modules += new /obj/item/weapon/extinguisher/mini(src) + modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) + modules += new /obj/item/device/t_scanner/adv_mining_scanner/cyborg(src) + modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(src) + modules += new /obj/item/device/gps/cyborg(src) + emag = new /obj/item/borg/stun(src) fix_modules() @@ -338,7 +337,6 @@ src.modules += new /obj/item/borg/sight/thermal(src) src.modules += new /obj/item/weapon/melee/energy/sword/cyborg(src) src.modules += new /obj/item/weapon/gun/energy/pulse/cyborg(src) - src.modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src) src.modules += new /obj/item/weapon/crowbar(src) src.emag = null @@ -354,7 +352,6 @@ src.modules += new /obj/item/weapon/gun/energy/printer(src) src.modules += new /obj/item/weapon/gun/projectile/revolver/grenadelauncher/multi/cyborg(src) src.modules += new /obj/item/weapon/card/emag(src) - src.modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src) src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/weapon/pinpointer/operative(src) src.emag = null @@ -393,7 +390,6 @@ src.modules += new /obj/item/weapon/surgicaldrill(src) src.modules += new /obj/item/weapon/melee/energy/sword/cyborg/saw(src) //Energy saw -- primary weapon src.modules += new /obj/item/weapon/card/emag(src) - src.modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src) src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/weapon/pinpointer/operative(src) src.emag = null @@ -507,7 +503,7 @@ //checks whether this item is a module of the robot it is located in. /obj/item/proc/is_robot_module() - if (!istype(src.loc, /mob/living/silicon/robot)) + if(!istype(src.loc, /mob/living/silicon/robot)) return 0 var/mob/living/silicon/robot/R = src.loc diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm index 00ed6522440..ff28a93a64e 100644 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -1,9 +1,8 @@ /mob/living/silicon/robot/Process_Spacemove(var/movement_dir = 0) - if(module) - for(var/obj/item/weapon/tank/jetpack/J in module.modules) - if(J && istype(J, /obj/item/weapon/tank/jetpack)) - if(J.allow_thrust(0.01)) return 1 - if(..()) return 1 + if(ionpulse()) + return 1 + if(..()) + return 1 return 0 //No longer needed, but I'll leave it here incase we plan to re-use it. diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 94ae02a56ce..7f25a743fc7 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -20,7 +20,7 @@ if(message_mode == "department") return holopad_talk(message, verb, speaking) else if(message_mode) - if (aiRadio.disabledAi || aiRestorePowerRoutine || stat) + if(aiRadio.disabledAi || aiRestorePowerRoutine || stat) to_chat(src, "System Error - Transceiver Disabled.") return 0 if(message_mode == "general") @@ -41,9 +41,9 @@ /mob/living/silicon/say_quote(var/text) var/ending = copytext(text, length(text)) - if (ending == "?") + if(ending == "?") return speak_query - else if (ending == "!") + else if(ending == "!") return speak_exclamation return speak_statement @@ -54,14 +54,14 @@ /mob/living/silicon/say_understands(var/other,var/datum/language/speaking = null) //These only pertain to common. Languages are handled by mob/say_understands() - if (!speaking) - if (istype(other, /mob/living/carbon)) + if(!speaking) + if(istype(other, /mob/living/carbon)) return 1 - if (istype(other, /mob/living/silicon)) + if(istype(other, /mob/living/silicon)) return 1 - if (istype(other, /mob/living/simple_animal/bot)) + if(istype(other, /mob/living/simple_animal/bot)) return 1 - if (istype(other, /mob/living/carbon/brain)) + if(istype(other, /mob/living/carbon/brain)) return 1 return ..() @@ -72,7 +72,7 @@ message = trim(message) - if (!message) + if(!message) return var/obj/machinery/hologram/holopad/T = src.holo @@ -113,7 +113,7 @@ message = trim(message) - if (!message) + if(!message) return var/obj/machinery/hologram/holopad/T = src.holo @@ -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/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index e6fc318335b..f467925d309 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -130,7 +130,7 @@ /proc/islinked(var/mob/living/silicon/robot/bot, var/mob/living/silicon/ai/ai) if(!istype(bot) || !istype(ai)) return 0 - if (bot.connected_ai == ai) + if(bot.connected_ai == ai) return 1 return 0 @@ -163,15 +163,15 @@ return universal_speak || (speaking in src.speech_synthesizer_langs) //need speech synthesizer support to vocalize a language /mob/living/silicon/add_language(var/language, var/can_speak=1) - if (..(language) && can_speak) + if(..(language) && can_speak) speech_synthesizer_langs.Add(all_languages[language]) return 1 /mob/living/silicon/remove_language(var/rem_language) ..(rem_language) - for (var/datum/language/L in speech_synthesizer_langs) - if (L.name == rem_language) + for(var/datum/language/L in speech_synthesizer_langs) + if(L.name == rem_language) speech_synthesizer_langs -= L /mob/living/silicon/check_languages() @@ -209,7 +209,7 @@ onclose(src, "airoster") /mob/living/silicon/Bump(atom/movable/AM as mob|obj, yes) //Allows the AI to bump into mobs if it's itself pushed - if ((!( yes ) || now_pushing)) + if((!( yes ) || now_pushing)) return now_pushing = 1 if(ismob(AM)) @@ -219,13 +219,13 @@ return now_pushing = 0 ..() - if (!istype(AM, /atom/movable)) + if(!istype(AM, /atom/movable)) return - if (!now_pushing) + if(!now_pushing) now_pushing = 1 - if (!AM.anchored) + if(!AM.anchored) var/t = get_dir(src, AM) - if (istype(AM, /obj/structure/window)) + if(istype(AM, /obj/structure/window)) if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) for(var/obj/structure/window/win in get_step(AM,t)) now_pushing = 0 @@ -278,16 +278,16 @@ var/sensor_type = input("Please select sensor type.", "Sensor Integration", null) in list("Security", "Medical","Diagnostic","Disable") remove_med_sec_hud() switch(sensor_type) - if ("Security") + if("Security") add_sec_hud() to_chat(src, "Security records overlay enabled.") - if ("Medical") + if("Medical") add_med_hud() to_chat(src, "Life signs monitor overlay enabled.") - if ("Diagnostic") + if("Diagnostic") add_diag_hud() to_chat(src, "Robotics diagnostic overlay enabled.") - if ("Disable") + if("Disable") to_chat(src, "Sensor augmentations disabled.") /mob/living/silicon/proc/receive_alarm(var/datum/alarm_handler/alarm_handler, var/datum/alarm/alarm, was_raised) @@ -358,4 +358,12 @@ return ..() /mob/living/silicon/is_mechanical() - return 1 \ No newline at end of file + return 1 + +/////////////////////////////////// EAR DAMAGE //////////////////////////////////// + +/mob/living/silicon/adjustEarDamage() + return + +/mob/living/silicon/setEarDamage() + return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 700b47da3f3..3cc10b39d42 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -161,7 +161,7 @@ diag_hud.add_hud_to(src) permanent_huds |= diag_hud -/mob/living/simple_animal/bot/update_canmove() +/mob/living/simple_animal/bot/update_canmove(delay_action_updates = 0) . = ..() if(!on) . = 0 @@ -325,7 +325,7 @@ else to_chat(user, "You attempt to pull [paicard] free...") if(do_after(user, 30, target = src)) - if (paicard) + if(paicard) user.visible_message("[user] uses [W] to pull [paicard] out of [bot_name]!","You pull [paicard] out of [bot_name] with [W].") ejectpai(user) else @@ -417,7 +417,7 @@ Pass the desired type path itself, declaring a temporary var beforehand is not r */ /mob/living/simple_animal/bot/proc/scan(scan_type, old_target, scan_range = DEFAULT_SCAN_RANGE) var/final_result - for (var/scan in shuffle(view(scan_range, src))) //Search for something in range! + for(var/scan in shuffle(view(scan_range, src))) //Search for something in range! if(!istype(scan, scan_type)) //Check that the thing we found is the type we want! continue //If not, keep searching! if( (scan in ignore_list) || (scan == old_target) ) //Filter for blacklisted elements, usually unreachable or previously processed oness @@ -507,7 +507,7 @@ Pass a positive integer as an argument to override a bot's default speed. turn_on() //Saves the AI the hassle of having to activate a bot manually. access_card = all_access //Give the bot all-access while under the AI's command. if(message) - to_chat(calling_ai, "\icon[src] [name] called to [end_area.name]. [path.len-1] meters to destination.") + to_chat(calling_ai, "[bicon(src)] [name] called to [end_area.name]. [path.len-1] meters to destination.") pathset = 1 mode = BOT_RESPONDING tries = 0 @@ -522,7 +522,7 @@ Pass a positive integer as an argument to override a bot's default speed. var/success = bot_move(ai_waypoint, 3) if(!success) if(calling_ai) - to_chat(calling_ai, "\icon[src] [get_turf(src) == ai_waypoint ? "[src] successfully arrived to waypoint." : "[src] failed to reach waypoint."]") + to_chat(calling_ai, "[bicon(src)] [get_turf(src) == ai_waypoint ? "[src] successfully arrived to waypoint." : "[src] failed to reach waypoint."]") calling_ai = null bot_reset() diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 34888dd3488..497393cf5d7 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -323,7 +323,7 @@ Auto Patrol[]"}, return anchored = 0 threatlevel = 0 - for (var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal + for(var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal if((C.stat) || (C.handcuffed)) continue 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..1bf29d14178 --- /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/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index e2bad0bcd3b..bb62af5ce35 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -106,8 +106,8 @@ visible_message("[user] crowbars out the power cell from [src].", "You pry the powercell out of [src].") update_controls() - else if (istype(I, /obj/item/weapon/wrench)) - if (health < maxHealth) + else if(istype(I, /obj/item/weapon/wrench)) + if(health < maxHealth) adjustBruteLoss(-25) updatehealth() user.visible_message( @@ -639,7 +639,7 @@ if(pathset) //The AI called us here, so notify it of our arrival. loaddir = dir //The MULE will attempt to load a crate in whatever direction the MULE is "facing". if(calling_ai) - to_chat(calling_ai, "\icon[src] [src] wirelessly plays a chiming sound!") + to_chat(calling_ai, "[bicon(src)] [src] wirelessly plays a chiming sound!") playsound(calling_ai, 'sound/machines/chime.ogg',40, 0) calling_ai = null radio_channel = "AI Private" //Report on AI Private instead if the AI is controlling us. diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 284584406c2..f89b0a1760f 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -385,7 +385,7 @@ Auto Patrol: []"}, /mob/living/simple_animal/bot/secbot/proc/look_for_perp() anchored = 0 - for (var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal + for(var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal if((C.stat) || (C.handcuffed)) continue diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index e8ba27fa07d..5f078682947 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -26,17 +26,19 @@ 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() . = ..() regenerate_icons() -/mob/living/simple_animal/pet/corgi/death() +/mob/living/simple_animal/pet/corgi/death(gibbed) ..() regenerate_icons() @@ -78,8 +80,8 @@ custom_emote(1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.") return - if (istype(O, /obj/item/weapon/razor)) - if (shaved) + if(istype(O, /obj/item/weapon/razor)) + if(shaved) to_chat(user, "You can't shave this corgi, it's already been shaved!") return user.visible_message("[user] starts to shave [src] using \the [O].", "You start to shave [src] using \the [O]...") @@ -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() @@ -159,7 +164,7 @@ if(!item_to_add) usr.visible_message("[usr] pets [src].","You rest your hand on [src]'s back for a moment.") return - if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess + if(istype(item_to_add,/obj/item/weapon/grenade/plastic/c4)) // last thing he ever wears, I guess item_to_add.afterattack(src,usr,1) return @@ -203,7 +208,7 @@ //Many hats added, Some will probably be removed, just want to see which ones are popular. /mob/living/simple_animal/pet/corgi/proc/place_on_head(obj/item/item_to_add, var/mob/user as mob) - if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess + if(istype(item_to_add,/obj/item/weapon/grenade/plastic/c4)) // last thing he ever wears, I guess item_to_add.afterattack(src,user,1) return @@ -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]" @@ -429,13 +437,13 @@ step_to(src,movement_target,1) if(movement_target) //Not redundant due to sleeps, Item can be gone in 6 decisecomds - if (movement_target.loc.x < src.x) + if(movement_target.loc.x < src.x) dir = WEST - else if (movement_target.loc.x > src.x) + else if(movement_target.loc.x > src.x) dir = EAST - else if (movement_target.loc.y < src.y) + else if(movement_target.loc.y < src.y) dir = SOUTH - else if (movement_target.loc.y > src.y) + else if(movement_target.loc.y > src.y) dir = NORTH else dir = SOUTH @@ -463,7 +471,7 @@ /mob/living/simple_animal/pet/corgi/Ian/Bump(atom/movable/AM as mob|obj, yes) spawn( 0 ) - if ((!( yes ) || now_pushing)) + if((!( yes ) || now_pushing)) return now_pushing = 1 if(ismob(AM)) @@ -480,13 +488,13 @@ tmob.LAssailant = src now_pushing = 0 ..() - if (!( istype(AM, /atom/movable) )) + if(!( istype(AM, /atom/movable) )) return - if (!( now_pushing )) + if(!( now_pushing )) now_pushing = 1 - if (!( AM.anchored )) + if(!( AM.anchored )) var/t = get_dir(src, AM) - if (istype(AM, /obj/structure/window/full)) + if(istype(AM, /obj/structure/window/full)) for(var/obj/structure/window/win in get_step(AM,t)) now_pushing = 0 return @@ -604,6 +612,8 @@ 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 loot = list(/obj/effect/decal/cleanable/blood/gibs/robot) + del_on_death = 1 + deathmessage = "blows apart!" /mob/living/simple_animal/pet/corgi/Ian/borgi/emag_act(user as mob) if(!emagged) @@ -614,7 +624,7 @@ /mob/living/simple_animal/pet/corgi/Ian/borgi/proc/explode() for(var/mob/M in viewers(src, null)) - if (M.client) + if(M.client) M.show_message("\red [src] makes an odd whining noise.") sleep(10) explosion(get_turf(src), 0, 1, 4, 7) @@ -623,7 +633,7 @@ /mob/living/simple_animal/pet/corgi/Ian/borgi/proc/shootAt(var/atom/movable/target) var/turf/T = get_turf(src) var/turf/U = get_turf(target) - if (!T || !U) + if(!T || !U) return var/obj/item/projectile/beam/A = new /obj/item/projectile/beam(loc) A.icon = 'icons/effects/genetics.dmi' @@ -639,7 +649,7 @@ ..() if(emagged && prob(25)) var/mob/living/carbon/target = locate() in view(10,src) - if (target) + if(target) shootAt(target) //spark for no reason @@ -648,12 +658,8 @@ s.set_up(3, 1, src) s.start() -/mob/living/simple_animal/pet/corgi/Ian/borgi/death() - ..() - visible_message("[src] blows apart!") +/mob/living/simple_animal/pet/corgi/Ian/borgi/death(gibbed) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() - respawnable_list += src - qdel(src) - return + ..() diff --git a/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm b/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm index dc687743197..a20c7b73d5f 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm @@ -4,7 +4,7 @@ set category = "Corgi" to_chat(src, text("[pick("You dance around","You chase your tail")].")) for(var/mob/O in oviewers(src, null)) - if ((O.client && !( O.blinded ))) + if((O.client && !( O.blinded ))) to_chat(O, text("[] [pick("dances around","chases its tail")].", src)) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) dir = i diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 31da301ce57..5d409814940 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -69,7 +69,7 @@ if(MED.amount <= 0) qdel(MED) for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) + if((M.client && !( M.blinded ))) M.show_message("\blue [user] applies the [MED] on [src]") else to_chat(user, "\blue this [src] is dead, medical items won't bring it back to life.") @@ -77,12 +77,12 @@ if(O.force) health -= O.force for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) + if((M.client && !( M.blinded ))) M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") else to_chat(usr, "\red This weapon is ineffective, it does no damage.") for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) + if((M.client && !( M.blinded ))) M.show_message("\red [user] gently taps [src] with the [O]. ") /mob/living/simple_animal/crab/Topic(href, href_list) diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm index 125061f9275..8bb2ea57f85 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona.dm @@ -191,7 +191,7 @@ adult.real_name = pick(diona_names) //I hate this being here of all places but unfortunately dna is based on real_name! adult.rename_self("diona") - for (var/obj/item/W in src.contents) + for(var/obj/item/W in src.contents) src.unEquip(W) qdel(src) @@ -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..7dd9a50c828 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 @@ -239,7 +241,7 @@ var/global/chicken_count = 0 pixel_y = rand(0, 10) chicken_count += 1 -/mob/living/simple_animal/chicken/death() +/mob/living/simple_animal/chicken/death(gibbed) ..() chicken_count -= 1 diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index b269256f7a0..4d499e9f54f 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -112,11 +112,11 @@ if( ishuman(AM) ) if(!stat) var/mob/M = AM - to_chat(M, "\blue \icon[src] Squeek!") + to_chat(M, "\blue [bicon(src)] Squeek!") M << 'sound/effects/mousesqueek.ogg' ..() -/mob/living/simple_animal/mouse/death() +/mob/living/simple_animal/mouse/death(gibbed) layer = MOB_LAYER if(client) client.time_died_as_mouse = world.time diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm index eba412580db..30f55a2220f 100644 --- a/code/modules/mob/living/simple_animal/friendly/pet.dm +++ b/code/modules/mob/living/simple_animal/friendly/pet.dm @@ -17,7 +17,7 @@ ..() regenerate_icons() -/mob/living/simple_animal/pet/death() +/mob/living/simple_animal/pet/death(gibbed) ..() regenerate_icons() diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm index eac1a448571..a76fe47cdba 100644 --- a/code/modules/mob/living/simple_animal/friendly/slime.dm +++ b/code/modules/mob/living/simple_animal/friendly/slime.dm @@ -18,7 +18,7 @@ /mob/living/simple_animal/slime/Bump(atom/movable/AM as mob|obj, yes) spawn( 0 ) - if ((!( yes ) || now_pushing)) + if((!( yes ) || now_pushing)) return now_pushing = 1 if(ismob(AM)) @@ -35,13 +35,13 @@ tmob.LAssailant = src now_pushing = 0 ..() - if (!( istype(AM, /atom/movable) )) + if(!( istype(AM, /atom/movable) )) return - if (!( now_pushing )) + if(!( now_pushing )) now_pushing = 1 - if (!( AM.anchored )) + if(!( AM.anchored )) var/t = get_dir(src, AM) - if (istype(AM, /obj/structure/window/full)) + if(istype(AM, /obj/structure/window/full)) for(var/obj/structure/window/win in get_step(AM,t)) now_pushing = 0 return @@ -64,21 +64,18 @@ response_harm = "stomps on" emote_see = list("jiggles", "bounces in place") var/colour = "grey" + del_on_death = 1 /mob/living/simple_animal/adultslime/New() ..() overlays += "aslime-:33" -/mob/living/simple_animal/slime/adult/death() - var/mob/living/simple_animal/slime/S1 = new /mob/living/simple_animal/slime (src.loc) - S1.icon_state = "[src.colour] baby slime" - S1.icon_living = "[src.colour] baby slime" - S1.icon_dead = "[src.colour] baby slime dead" - S1.colour = "[src.colour]" - var/mob/living/simple_animal/slime/S2 = new /mob/living/simple_animal/slime (src.loc) - S2.icon_state = "[src.colour] baby slime" - S2.icon_living = "[src.colour] baby slime" - S2.icon_dead = "[src.colour] baby slime dead" - S2.colour = "[src.colour]" - qdel(src) \ No newline at end of file +/mob/living/simple_animal/slime/adult/death(gibbed) + for(var/i in 1 to 2) + var/mob/living/simple_animal/slime/S = new /mob/living/simple_animal/slime (src.loc) + S.icon_state = "[colour] baby slime" + S.icon_living = "[colour] baby slime" + S.icon_dead = "[colour] baby slime dead" + S.colour = "[colour]" + ..() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index 590dfa47b5e..b453cfa5ea2 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -40,6 +40,8 @@ speak_emote = list("beeps","clicks","chirps") can_hide = 1 ventcrawler = 2 + loot = list(/obj/effect/decal/cleanable/blood/gibs/robot) + del_on_death = 1 /mob/living/simple_animal/spiderbot/attackby(var/obj/item/O as obj, var/mob/user as mob, params) @@ -84,9 +86,9 @@ src.update_icon() return 1 - if (istype(O, /obj/item/weapon/weldingtool)) + if(istype(O, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = O - if (WT.remove_fuel(0)) + if(WT.remove_fuel(0)) if(health < maxHealth) health += pick(1,1,1,2,2,3) if(health > maxHealth) @@ -100,7 +102,7 @@ to_chat(user, "Need more welding fuel!") return else if(istype(O, /obj/item/weapon/card/id)||istype(O, /obj/item/device/pda)) - if (!mmi) + if(!mmi) to_chat(user, "\red There's no reason to swipe your ID - the spiderbot has no brain to remove.") return 0 @@ -128,20 +130,20 @@ else if(O.force) var/damage = O.force - if (O.damtype == STAMINA) + if(O.damtype == STAMINA) damage = 0 adjustBruteLoss(damage) for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) + if((M.client && !( M.blinded ))) M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") else to_chat(usr, "\red This weapon is ineffective, it does no damage.") for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) + if((M.client && !( M.blinded ))) M.show_message("\red [user] gently taps [src] with the [O]. ") /mob/living/simple_animal/spiderbot/emag_act(user as mob) - if (emagged) + if(emagged) to_chat(user, "\red [src] is already overloaded - better run.") return 0 else @@ -163,7 +165,7 @@ /mob/living/simple_animal/spiderbot/proc/explode() //When emagged. for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) + if((M.client && !( M.blinded ))) M.show_message("\red [src] makes an odd warbling noise, fizzles, and explodes.") explosion(get_turf(loc), -1, -1, 3, 5) eject_brain() @@ -205,20 +207,14 @@ ..() -/mob/living/simple_animal/spiderbot/death() - - living_mob_list -= src - dead_mob_list += src - +/mob/living/simple_animal/spiderbot/death(gibbed) if(camera) camera.status = 0 if(held_item) held_item.forceMove(src.loc) held_item = null - - robogibs(src.loc, viruses) - qdel(src) + ..() //Cannibalized from the parrot mob. ~Zuhayr @@ -285,4 +281,4 @@ /mob/living/simple_animal/spiderbot/examine(mob/user) ..(user) if(src.held_item) - to_chat(user, "It is carrying \a [src.held_item] \icon[src.held_item].") + to_chat(user, "It is carrying \a [src.held_item] [bicon(src.held_item)].") diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 56f63ee99be..6cd1d147211 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -21,15 +21,16 @@ a_intent = I_HARM attack_sound = 'sound/weapons/bladeslice.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) - var/dead = 0 unsuitable_atmos_damage = 15 + heat_damage_per_tick = 20 faction = list("alien") status_flags = CANPUSH minbodytemp = 0 see_in_dark = 8 see_invisible = SEE_INVISIBLE_MINIMUM - heat_damage_per_tick = 20 gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE + death_sound = 'sound/voice/hiss6.ogg' + deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..." /mob/living/simple_animal/hostile/alien/drone @@ -47,7 +48,6 @@ /mob/living/simple_animal/hostile/alien/drone/handle_automated_action() if(!..()) //AIStatus is off return - plant_cooldown-- if(AIStatus == AI_IDLE) if(!plants_off && prob(10) && plant_cooldown<=0) @@ -136,14 +136,6 @@ damage = 30 icon_state = "toxin" -/mob/living/simple_animal/hostile/alien/death() - ..() - if(dead == 0) - dead = 1 - visible_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...") - playsound(src, 'sound/voice/hiss6.ogg', 100, 1) - - /mob/living/simple_animal/hostile/alien/maid name = "lusty xenomorph maid" melee_damage_lower = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index c24b0b6a844..4899eef3aaf 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -39,6 +39,7 @@ //Spaceborn beings don't get hurt by space 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 + del_on_death = 1 var/datum/reagent/beegent = null //hehe, beegent var/obj/structure/beebox/beehome = null @@ -61,8 +62,6 @@ /mob/living/simple_animal/hostile/poison/bees/death(gibbed) beegent = null ..() - ghostize() - qdel(src) /mob/living/simple_animal/hostile/poison/bees/examine(mob/user) ..() diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index ddd302c3e8c..b7fbbec41fb 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -55,12 +55,8 @@ icon_living = "holocarp" maxbodytemp = INFINITY gold_core_spawnable = CHEM_MOB_SPAWN_INVALID + del_on_death = 1 -/mob/living/simple_animal/hostile/carp/holocarp/death() - ..() - ghostize() - qdel(src) - return /mob/living/simple_animal/hostile/carp/megacarp icon = 'icons/mob/alienqueen.dmi' diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 94cf8dae65c..b3ea7f442fa 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -24,6 +24,8 @@ speak_emote = list("states") gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE loot = list(/obj/effect/decal/cleanable/blood/gibs/robot) + deathmessage = "blows apart!" + del_on_death = 1 /mob/living/simple_animal/hostile/hivebot/range name = "Hivebot" @@ -45,15 +47,11 @@ maxHealth = 80 ranged = 1 -/mob/living/simple_animal/hostile/hivebot/death() - ..() - visible_message("[src] blows apart!") +/mob/living/simple_animal/hostile/hivebot/death(gibbed) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() - ghostize() - qdel(src) - return + ..() /mob/living/simple_animal/hostile/hivebot/tele//this still needs work name = "Beacon" diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index faf0cc0f9a3..a3739dfe088 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -219,7 +219,7 @@ //////////////END HOSTILE MOB TARGETTING AND AGGRESSION//////////// -/mob/living/simple_animal/hostile/death() +/mob/living/simple_animal/hostile/death(gibbed) LoseAggro() mouse_opacity = 1 ..() diff --git a/code/modules/mob/living/simple_animal/hostile/illusion.dm b/code/modules/mob/living/simple_animal/hostile/illusion.dm new file mode 100644 index 00000000000..a770f6b1c32 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/illusion.dm @@ -0,0 +1,71 @@ +/mob/living/simple_animal/hostile/illusion + name = "illusion" + desc = "It's a fake!" + icon = 'icons/effects/effects.dmi' + icon_state = "static" + icon_living = "static" + icon_dead = "null" + melee_damage_lower = 5 + melee_damage_upper = 5 + a_intent = "harm" + attacktext = "gores" + maxHealth = 100 + health = 100 + speed = 0 + faction = list("illusion") + var/life_span = INFINITY //how long until they despawn + var/mob/living/parent_mob + var/multiply_chance = 0 //if we multiply on hit + deathmessage = "vanishes into thin air! It was a fake!" + del_on_death = 1 + + +/mob/living/simple_animal/hostile/illusion/Life() + ..() + if(world.time > life_span) + death() + +/mob/living/simple_animal/hostile/illusion/proc/Copy_Parent(mob/living/original, life = 50, health = 100, damage = 0, replicate = 0 ) + appearance = original.appearance + parent_mob = original + dir = original.dir + life_span = world.time+life + melee_damage_lower = damage + melee_damage_upper = damage + multiply_chance = replicate + faction -= "neutral" + transform = initial(transform) + pixel_y = initial(pixel_y) + pixel_x = initial(pixel_x) + +/mob/living/simple_animal/hostile/illusion/examine(mob/user) + if(parent_mob) + parent_mob.examine(user) + else + return ..() + + +/mob/living/simple_animal/hostile/illusion/AttackingTarget() + ..() + if(istype(target, /mob/living) && prob(multiply_chance)) + var/mob/living/L = target + if(L.stat == DEAD) + return + var/mob/living/simple_animal/hostile/illusion/M = new(loc) + M.faction = faction.Copy() + M.Copy_Parent(parent_mob, 80, health/2, melee_damage_upper, multiply_chance/2) + M.GiveTarget(L) + +///////Actual Types///////// + +/mob/living/simple_animal/hostile/illusion/escape + retreat_distance = 10 + minimum_distance = 10 + melee_damage_lower = 0 + melee_damage_upper = 0 + speed = -1 + environment_smash = 0 + + +/mob/living/simple_animal/hostile/illusion/escape/AttackingTarget() + return diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index f14d1bf649a..c0616bc5eea 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -27,18 +27,13 @@ var/is_electronic = 0 gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE + del_on_death = 1 /mob/living/simple_animal/hostile/mimic/FindTarget() . = ..() if(.) custom_emote(1, "growls at [.]") -/mob/living/simple_animal/hostile/mimic/death() - ..() - visible_message("[src] stops moving!") - ghostize() - qdel(src) - /mob/living/simple_animal/hostile/mimic/emp_act(severity) if(is_electronic) switch(severity) @@ -100,7 +95,7 @@ ..() icon_state = initial(icon_state) -/mob/living/simple_animal/hostile/mimic/crate/death() +/mob/living/simple_animal/hostile/mimic/crate/death(gibbed) var/obj/structure/closet/crate/C = new(get_turf(src)) // Put loot in crate for(var/obj/O in src) @@ -135,7 +130,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca for(var/mob/living/M in contents) //a fix for animated statues from the flesh to stone spell death() -/mob/living/simple_animal/hostile/mimic/copy/death() +/mob/living/simple_animal/hostile/mimic/copy/death(gibbed) for(var/atom/movable/M in src) M.loc = get_turf(src) 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..9433f4923af 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -135,6 +135,7 @@ var/alerted = 0 var/ore_eaten = 1 var/chase_time = 100 + var/will_burrow = 1 /mob/living/simple_animal/hostile/asteroid/goldgrub/New() ..() @@ -170,7 +171,7 @@ visible_message("The ore was swallowed whole!") /mob/living/simple_animal/hostile/asteroid/goldgrub/proc/Burrow()//Begin the chase to kill the goldgrub in time - if(!alerted) + if(!alerted && will_burrow) alerted = 1 spawn(chase_time) if(alerted) @@ -193,7 +194,7 @@ visible_message("The [P.name] was repelled by [src.name]'s girth!") return -/mob/living/simple_animal/hostile/asteroid/goldgrub/death() +/mob/living/simple_animal/hostile/asteroid/goldgrub/death(gibbed) alerted = 0 Reward() ..() @@ -320,14 +321,12 @@ throw_message = "falls right through the strange body of the" environment_smash = 0 pass_flags = PASSTABLE + del_on_death = 1 /mob/living/simple_animal/hostile/asteroid/hivelordbrood/New() ..() spawn(100) - qdel(src) - -/mob/living/simple_animal/hostile/asteroid/hivelordbrood/death() - qdel(src) + death() /mob/living/simple_animal/hostile/asteroid/goliath name = "goliath" @@ -456,8 +455,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/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index e6dda5e301c..99e6f61431c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -26,6 +26,7 @@ ventcrawler = 2 robust_searching = 1 speak_emote = list("squeaks") + deathmessage = "fainted" var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight @@ -88,8 +89,7 @@ icon_state = "mushroom_color" UpdateMushroomCap() -/mob/living/simple_animal/hostile/mushroom/death() - visible_message("[src] fainted.") +/mob/living/simple_animal/hostile/mushroom/death(gibbed) ..() UpdateMushroomCap() diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index 89835092ffd..d3fec4bf8d8 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -24,6 +24,7 @@ speak_emote = list("yarrs") loot = list(/obj/effect/landmark/mobcorpse/pirate, /obj/item/weapon/melee/energy/sword/pirate) + del_on_death = 1 faction = list("pirate") /mob/living/simple_animal/hostile/pirate/ranged @@ -38,11 +39,4 @@ minimum_distance = 5 projectiletype = /obj/item/projectile/beam loot = list(/obj/effect/landmark/mobcorpse/pirate/ranged, - /obj/item/weapon/gun/energy/laser) - - -/mob/living/simple_animal/hostile/pirate/death() - ..() - ghostize() - qdel(src) - return \ No newline at end of file + /obj/item/weapon/gun/energy/laser) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 71d088a425c..9f98b205fc9 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -40,6 +40,8 @@ var/has_loot = 1 faction = list("malf_drone") + deathmessage = "suddenly breaks apart." + del_on_death = 1 /mob/living/simple_animal/hostile/retaliate/malf_drone/New() ..() @@ -77,7 +79,7 @@ //repair a bit of damage if(prob(1)) - src.visible_message("\red \icon[src] [src] shudders and shakes as some of it's damaged systems come back online.") + src.visible_message("\red [bicon(src)] [src] shudders and shakes as some of it's damaged systems come back online.") var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() @@ -92,10 +94,10 @@ //sometimes our targetting sensors malfunction, and we attack anyone nearby if(prob(disabled ? 0 : 1)) if(hostile_drone) - src.visible_message("\blue \icon[src] [src] retracts several targetting vanes, and dulls it's running lights.") + src.visible_message("\blue [bicon(src)] [src] retracts several targetting vanes, and dulls it's running lights.") hostile_drone = 0 else - src.visible_message("\red \icon[src] [src] suddenly lights up, and additional targetting vanes slide into place.") + src.visible_message("\red [bicon(src)] [src] suddenly lights up, and additional targetting vanes slide into place.") hostile_drone = 1 if(health / maxHealth > 0.9) @@ -116,17 +118,17 @@ exploding = 0 if(!disabled) if(prob(50)) - src.visible_message("\blue \icon[src] [src] suddenly shuts down!") + src.visible_message("\blue [bicon(src)] [src] suddenly shuts down!") else - src.visible_message("\blue \icon[src] [src] suddenly lies still and quiet.") + src.visible_message("\blue [bicon(src)] [src] suddenly lies still and quiet.") disabled = rand(150, 600) walk(src,0) if(exploding && prob(20)) if(prob(50)) - src.visible_message("\red \icon[src] [src] begins to spark and shake violenty!") + src.visible_message("\red [bicon(src)] [src] begins to spark and shake violenty!") else - src.visible_message("\red \icon[src] [src] sparks and shakes like it's about to explode!") + src.visible_message("\red [bicon(src)] [src] sparks and shakes like it's about to explode!") var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() @@ -149,11 +151,6 @@ hostile_drone = 0 walk(src,0) -/mob/living/simple_animal/hostile/retaliate/malf_drone/death() - ..() - visible_message("\blue \icon[src] [src] suddenly breaks apart.") - qdel(src) - /mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() //Seriously, what the actual hell. //some random debris left behind if(has_loot) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm index 210ff43ebda..66972b06d2e 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm @@ -46,6 +46,7 @@ faction = list("undead") // did I mention ghost loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm) + del_on_death = 1 /mob/living/simple_animal/hostile/retaliate/ghost/Process_Spacemove(var/check_drift = 0) return 1 @@ -61,10 +62,6 @@ else invisibility = pick(0,60,60,invisibility) ..() -/mob/living/simple_animal/hostile/retaliate/ghost/death() - ..() - qdel(src) - return /mob/living/simple_animal/hostile/retaliate/skeleton name = "skeleton" @@ -92,11 +89,7 @@ faction = list("undead") loot = list(/obj/effect/decal/remains/human) - -/mob/living/simple_animal/hostile/retaliate/skeleton/death() - ..() - qdel(src) - return + del_on_death = 1 /mob/living/simple_animal/hostile/retaliate/zombie name = "zombie" @@ -124,8 +117,4 @@ faction = list("undead") loot = list(/obj/effect/decal/cleanable/blood/gibs) - -/mob/living/simple_animal/hostile/retaliate/zombie/death() - ..() - qdel(src) - return \ No newline at end of file + del_on_death = 1 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index 0126dd5c704..30bdb8c95e2 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -24,6 +24,7 @@ status_flags = CANPUSH loot = list(/obj/effect/landmark/mobcorpse/russian, /obj/item/weapon/kitchen/knife) + del_on_death = 1 /mob/living/simple_animal/hostile/russian/ranged @@ -39,8 +40,3 @@ loot = list(/obj/effect/landmark/mobcorpse/russian/ranged, /obj/item/weapon/gun/projectile/shotgun/boltaction) casingtype = /obj/item/ammo_casing/a762 - -/mob/living/simple_animal/hostile/russian/death() - ..() - qdel(src) - return diff --git a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm index a186bbe3d09..c59cdf0570a 100644 --- a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm +++ b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm @@ -184,7 +184,7 @@ //Harder to kill the head, but it can kill off the whole worm -/mob/living/simple_animal/hostile/spaceWorm/wormHead/death() +/mob/living/simple_animal/hostile/spaceWorm/wormHead/death(gibbed) ..() if(prob(catastrophicDeathProb)) for(var/mob/living/simple_animal/hostile/spaceWorm/SW in totalWormSegments) @@ -294,7 +294,7 @@ qdel(src) -/mob/living/simple_animal/hostile/spaceWorm/death() +/mob/living/simple_animal/hostile/spaceWorm/death(gibbed) ..() if(myHead) myHead.totalWormSegments -= src diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 1c7836c0a13..cb48c63b66f 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -52,9 +52,9 @@ /mob/living/simple_animal/hostile/statue/New(loc, var/mob/living/creator) ..() // Give spells - AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/flicker_lights(src)) - AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/blindness(src)) - AddSpell(new /obj/effect/proc_holder/spell/targeted/night_vision(src)) + AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/flicker_lights(null)) + AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/blindness(null)) + AddSpell(new /obj/effect/proc_holder/spell/targeted/night_vision(null)) // Give nightvision see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 32bdf5fc772..d3f63450fe6 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -24,11 +24,7 @@ check_friendly_fire = 1 status_flags = CANPUSH loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier) - -/mob/living/simple_animal/hostile/syndicate/death() - ..() - qdel(src) - return + del_on_death = 1 ///////////////Sword and shield//////////// @@ -39,6 +35,7 @@ icon_living = "syndicatemelee" attacktext = "slashes" attack_sound = 'sound/weapons/bladeslice.ogg' + armour_penetration = 28 status_flags = 0 loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier, /obj/item/weapon/melee/energy/sword/saber/red, /obj/item/weapon/shield/energy) @@ -46,7 +43,7 @@ if(O.force) if(prob(80)) var/damage = O.force - if (O.damtype == STAMINA) + if(O.damtype == STAMINA) damage = 0 health -= damage visible_message("\red \b [src] has been attacked with the [O] by [user]. ") @@ -123,9 +120,5 @@ minbodytemp = 0 flying = 1 gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE - -/mob/living/simple_animal/hostile/viscerator/death() - ..() - visible_message("\red [src] is smashed into pieces!") - qdel(src) - return + del_on_death = 1 + deathmessage = "is smashed into pieces!" \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index b47312b15df..9d22827a292 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -30,6 +30,8 @@ faction = list("hostile", "winter") loot = list(/obj/item/stack/sheet/wood) gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE + deathmessage = "is hacked into pieces!" + del_on_death = 1 /mob/living/simple_animal/hostile/tree/FindTarget() . = ..() @@ -42,9 +44,4 @@ if(istype(L)) if(prob(15)) L.Weaken(3) - L.visible_message("\the [src] knocks down \the [L]!") - -/mob/living/simple_animal/hostile/tree/death() - ..() - visible_message("\red [src] is hacked into pieces!") - qdel(src) \ No newline at end of file + L.visible_message("\the [src] knocks down \the [L]!") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm index 12ede5955ea..6552999aef8 100644 --- a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm @@ -33,14 +33,14 @@ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE -/mob/living/simple_animal/hostile/winter/snowman/death() +/mob/living/simple_animal/hostile/winter/snowman/death(gibbed) if(prob(50)) //50% chance to drop weapon on death, if it has one to drop loot = list(/obj/item/weapon/melee/candy_sword) if(prob(20)) //chance to become a stationary snowman structure instead of a corpse loot.Add(/obj/structure/snowman) - visible_message("The [src.name] shimmers as its animating magic fades away!") + deathmessage = "shimmers as its animating magic fades away!" + del_on_death = 1 ..() //this is just to make sure it gets properly killed before we qdel it - qdel(src) else ..() @@ -73,7 +73,7 @@ icon_living = "santa" icon_dead = "santa-dead" -/mob/living/simple_animal/hostile/winter/santa/death() +/mob/living/simple_animal/hostile/winter/santa/death(gibbed) ..() if(death_message) visible_message(death_message) @@ -121,7 +121,7 @@ melee_damage_lower = 15 melee_damage_upper = 25 //that's gonna leave a mark, for sure -/mob/living/simple_animal/hostile/winter/santa/stage_4/death() +/mob/living/simple_animal/hostile/winter/santa/stage_4/death(gibbed) to_chat(world, "
        ") to_chat(world, "THE FAT MAN HAS FALLEN!") to_chat(world, "SANTA CLAUS HAS BEEN DEFEATED!") diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 6e528516e3e..1266b31f746 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -112,7 +112,7 @@ hear_radio_list -= src return ..() -/mob/living/simple_animal/parrot/death() +/mob/living/simple_animal/parrot/death(gibbed) if(held_item) held_item.loc = src.loc held_item = null @@ -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..1fc2df4cf76 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 @@ -77,7 +77,7 @@ /mob/living/simple_animal/possessed_object/New(var/atom/loc as obj) ..() - if (!istype(loc, /obj/item)) // Some silly motherfucker spawned us directly via the game panel. + if(!istype(loc, /obj/item)) // Some silly motherfucker spawned us directly via the game panel. message_admins("Posessed object improperly spawned, deleting.") // So silly admins with debug off will see the message too and not spam these things. log_debug("[src] spawned manually, no object to assign attributes to.") qdel() diff --git a/code/modules/mob/living/simple_animal/powers.dm b/code/modules/mob/living/simple_animal/powers.dm index 934c93bb3ad..9177b61ea2d 100644 --- a/code/modules/mob/living/simple_animal/powers.dm +++ b/code/modules/mob/living/simple_animal/powers.dm @@ -6,15 +6,15 @@ if(stat != CONSCIOUS) return - if (layer != TURF_LAYER+0.2) + if(layer != TURF_LAYER+0.2) layer = TURF_LAYER+0.2 to_chat(src, text("\green You are now hiding.")) for(var/mob/O in oviewers(src, null)) - if ((O.client && !( O.blinded ))) + if((O.client && !( O.blinded ))) to_chat(O, text("[] scurries to the ground!", src)) else layer = MOB_LAYER to_chat(src, text("\green You have stopped hiding.")) for(var/mob/O in oviewers(src, null)) - if ((O.client && !( O.blinded ))) + if((O.client && !( O.blinded ))) to_chat(O, text("[] slowly peaks up from the ground...", src)) diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 9aff96b1fcf..99a65c0052d 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -25,31 +25,25 @@ faction = list("cult") status_flags = CANPUSH loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm) + del_on_death = 1 + deathmessage = "lets out a contented sigh as their form unwinds." - death() - ..() - for(var/mob/M in viewers(src, null)) - if((M.client && !( M.blinded ))) - M.show_message("\red [src] lets out a contented sigh as their form unwinds. ") - ghostize() - qdel(src) - attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri if(istype(O, /obj/item/device/soulstone)) O.transfer_soul("SHADE", src, user) else if(O.force) var/damage = O.force - if (O.damtype == STAMINA) + if(O.damtype == STAMINA) damage = 0 health -= damage for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) + if((M.client && !( M.blinded ))) M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") else to_chat(usr, "\red This weapon is ineffective, it does no damage.") for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) + if((M.client && !( M.blinded ))) M.show_message("\red [user] gently taps [src] with the [O]. ") return diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 9eee62d810a..d2dbd5f14f2 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -49,6 +49,7 @@ //LETTING SIMPLE ANIMALS ATTACK? WHAT COULD GO WRONG. Defaults to zero so Ian can still be cuddly var/melee_damage_lower = 0 var/melee_damage_upper = 0 + var/armour_penetration = 0 //How much armour they ignore, as a flat reduction from the targets armour value var/melee_damage_type = BRUTE //Damage type of a simple mob's melee attack, should it do damage. var/list/damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) // 1 for full damage , 0 for none , -1 for 1:1 heal from that source var/attacktext = "attacks" @@ -70,8 +71,14 @@ var/gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //if CHEM_MOB_SPAWN_HOSTILE can be spawned by plasma with gold core, CHEM_MOB_SPAWN_FRIENDLY are 'friendlies' spawned with blood var/master_commander = null //holding var for determining who own/controls a sentient simple animal (for sentience potions). + + var/mob/living/simple_animal/hostile/spawner/nest + var/sentience_type = SENTIENCE_ORGANIC // Sentience type, for slime potions var/list/loot = list() //list of things spawned at mob's loc when it dies + var/del_on_death = 0 //causes mob to be deleted on death, useful for mobs that spawn lootable corpses + var/deathmessage = "" + var/death_sound = null //The sound played on death /mob/living/simple_animal/New() @@ -307,14 +314,14 @@ switch(M.a_intent) if(I_HELP) - if (health > 0) + if(health > 0) visible_message(" [M] [response_help] [src].") playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) if(I_GRAB) - if (M == src || anchored) + if(M == src || anchored) return - if (!(status_flags & CANPUSH)) + if(!(status_flags & CANPUSH)) return var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M, src ) @@ -340,10 +347,10 @@ switch(M.a_intent) - if (I_HELP) + if(I_HELP) visible_message("[M] caresses [src] with its scythe like arm.") - if (I_GRAB) + if(I_GRAB) grabbedby(M) if(I_HARM, I_DISARM) @@ -376,13 +383,13 @@ /mob/living/simple_animal/attack_slime(mob/living/carbon/slime/M as mob) - if (!ticker) + if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return if(M.Victim) return // can't attack while eating! - if (health > 0) + if(health > 0) M.do_attack_animation(src) visible_message("[M.name] glomps [src]!", \ "[M.name] glomps [src]!") @@ -433,25 +440,25 @@ return else user.changeNext_move(CLICK_CD_MELEE) + if(attempt_harvest(O, user)) + return user.do_attack_animation(src) if(istype(O) && istype(user) && !O.attack(src, user)) var/damage = 0 if(O.force) if(O.force >= force_threshold) damage = O.force - if (O.damtype == STAMINA) + if(O.damtype == STAMINA) damage = 0 visible_message("[user] has [O.attack_verb.len ? "[pick(O.attack_verb)]": "attacked"] [src] with [O]!",\ "[user] has [O.attack_verb.len ? "[pick(O.attack_verb)]": "attacked"] you with [O]!") 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.") adjustBruteLoss(damage) - ..() /mob/living/simple_animal/movement_delay() @@ -468,25 +475,38 @@ stat(null, "Health: [round((health / maxHealth) * 100)]%") /mob/living/simple_animal/death(gibbed) + if(nest) + nest.spawned_mobs -= src + nest = null if(loot.len) for(var/i in loot) new i(loc) - health = 0 - icon_state = icon_dead - stat = DEAD - density = 0 if(!gibbed) - visible_message("\The [src] stops moving...") + if(death_sound) + playsound(get_turf(src),death_sound, 200, 1) + if(deathmessage) + visible_message("\The [src] [deathmessage]") + else if(!del_on_death) + visible_message("\The [src] stops moving...") + if(del_on_death) + ghostize() + qdel(src) + else + health = 0 + icon_state = icon_dead + stat = DEAD + density = 0 + lying = 1 ..() /mob/living/simple_animal/ex_act(severity) ..() - switch (severity) - if (1.0) + switch(severity) + if(1.0) gib() return - if (2.0) + if(2.0) adjustBruteLoss(60) @@ -526,17 +546,17 @@ /mob/living/simple_animal/proc/CanAttack(var/atom/the_target) if(see_invisible < the_target.invisibility) return 0 - if (isliving(the_target)) + if(isliving(the_target)) var/mob/living/L = the_target if(L.stat != CONSCIOUS) return 0 - if (istype(the_target, /obj/mecha)) + if(istype(the_target, /obj/mecha)) var/obj/mecha/M = the_target - if (M.occupant) + if(M.occupant) return 0 - if (istype(the_target,/obj/spacepod)) + if(istype(the_target,/obj/spacepod)) var/obj/spacepod/S = the_target - if (S.pilot) + if(S.pilot) return 0 return 1 @@ -616,7 +636,7 @@ return verb -/mob/living/simple_animal/update_canmove() +/mob/living/simple_animal/update_canmove(delay_action_updates = 0) if(paralysis || stunned || weakened || stat || resting) drop_r_hand() drop_l_hand() @@ -626,6 +646,8 @@ else canmove = 1 update_transform() + if(!delay_action_updates) + update_action_buttons_icon() return canmove /mob/living/simple_animal/update_transform() @@ -693,3 +715,9 @@ /mob/living/simple_animal/proc/sentience_act() //Called when a simple animal gains sentience via gold slime potion return + +/mob/living/simple_animal/adjustEarDamage() + return + +/mob/living/simple_animal/setEarDamage() + return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/spawner.dm b/code/modules/mob/living/simple_animal/spawner.dm new file mode 100644 index 00000000000..0cbf24cf6e2 --- /dev/null +++ b/code/modules/mob/living/simple_animal/spawner.dm @@ -0,0 +1,83 @@ +/mob/living/simple_animal/hostile/spawner + name = "monster nest" + icon = 'icons/mob/animal.dmi' + health = 100 + maxHealth = 100 + var/list/spawned_mobs = list() + var/max_mobs = 5 + var/spawn_delay = 0 + var/spawn_time = 300 //30 seconds default + var/mob_type = /mob/living/simple_animal/hostile/carp + var/spawn_text = "emerges from" + status_flags = 0 + anchored = 1 + AIStatus = AI_OFF + a_intent = "harm" + stop_automated_movement = 1 + wander = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 0 + maxbodytemp = 350 + layer = MOB_LAYER-0.1 + sentience_type = SENTIENCE_BOSS + + +/mob/living/simple_animal/hostile/spawner/Destroy() + for(var/mob/living/simple_animal/L in spawned_mobs) + if(L.nest == src) + L.nest = null + spawned_mobs = null + return ..() + +/mob/living/simple_animal/hostile/spawner/process_ai() + ..() + spawn_mob() + +/mob/living/simple_animal/hostile/spawner/proc/spawn_mob() + if(spawned_mobs.len >= max_mobs) + return 0 + if(spawn_delay > world.time) + return 0 + spawn_delay = world.time + spawn_time + var/mob/living/simple_animal/L = new mob_type(src.loc) + spawned_mobs += L + L.nest = src + L.faction = src.faction + visible_message("[L] [spawn_text] [src].") + +/mob/living/simple_animal/hostile/spawner/syndicate + name = "warp beacon" + icon = 'icons/obj/device.dmi' + icon_state = "syndbeacon" + spawn_text = "warps in from" + mob_type = /mob/living/simple_animal/hostile/syndicate/ranged + faction = list("syndicate") + +/mob/living/simple_animal/hostile/spawner/mining + name = "monster den" + desc = "A hole dug into the ground, harboring all kinds of monsters found within most caves or mining asteroids." + icon_state = "hole" + icon_living = "hole" + health = 200 + maxHealth = 200 + max_mobs = 3 + icon = 'icons/mob/nest.dmi' + spawn_text = "crawls out of" + mob_type = /mob/living/simple_animal/hostile/asteroid/goldgrub + 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) + faction = list("mining") + +/mob/living/simple_animal/hostile/spawner/mining/goliath + name = "goliath den" + desc = "A den housing a nest of goliaths, oh god why?" + mob_type = /mob/living/simple_animal/hostile/asteroid/goliath + +/mob/living/simple_animal/hostile/spawner/mining/hivelord + name = "hivelord den" + desc = "A den housing a nest of hivelords." + mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord + +/mob/living/simple_animal/hostile/spawner/mining/basilisk + name = "basilisk den" + desc = "A den housing a nest of basilisks, bring a coat." + mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/tribbles.dm b/code/modules/mob/living/simple_animal/tribbles.dm index 23def05f072..b21c3110b1d 100644 --- a/code/modules/mob/living/simple_animal/tribbles.dm +++ b/code/modules/mob/living/simple_animal/tribbles.dm @@ -79,7 +79,7 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, src.procreate() -/mob/living/simple_animal/tribble/death() // Gotta make sure to remove tribbles from the list on death +/mob/living/simple_animal/tribble/death(gibbed) // Gotta make sure to remove tribbles from the list on death ..() totaltribbles -= 1 @@ -91,7 +91,7 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, icon = 'icons/mob/tribbles.dmi' icon_state = "tribble1" item_state = "tribble1" - w_class = 10.0 + w_class = 10 var/gestation = 0 /obj/item/toy/tribble/attack_self(mob/user as mob) //hug that tribble (and play a sound if we add one) @@ -115,7 +115,7 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, if(istype(O, /obj/item/weapon/scalpel) && src.gestation != null) gestation = null to_chat(user, "You neuter the tribble so that it can no longer re-produce.") - else if (istype(O, /obj/item/weapon/cautery) && src.gestation == null) + else if(istype(O, /obj/item/weapon/cautery) && src.gestation == null) gestation = 0 to_chat(user, "You fuse some recently cut tubes together, it should be able to reproduce again.") @@ -136,16 +136,16 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, /obj/structure/tribble_cage/ex_act(severity) switch(severity) - if (1) + if(1) new /obj/item/weapon/shard( src.loc ) Break() qdel(src) - if (2) - if (prob(50)) + if(2) + if(prob(50)) src.health -= 15 src.healthcheck() - if (3) - if (prob(50)) + if(3) + if(prob(50)) src.health -= 5 src.healthcheck() @@ -158,15 +158,15 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, /obj/structure/tribble_cage/blob_act() - if (prob(75)) + if(prob(75)) new /obj/item/weapon/shard( src.loc ) Break() qdel(src) /obj/structure/tribble_cage/proc/healthcheck() - if (src.health <= 0) - if (!( src.destroyed )) + if(src.health <= 0) + if(!( src.destroyed )) src.density = 0 src.destroyed = 1 new /obj/item/weapon/shard( src.loc ) @@ -192,12 +192,12 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, /obj/structure/tribble_cage/attack_hand(mob/user as mob) - if (src.destroyed) + if(src.destroyed) return else to_chat(usr, text("\blue You kick the lab cage.")) for(var/mob/O in oviewers()) - if ((O.client && !( O.blinded ))) + if((O.client && !( O.blinded ))) to_chat(O, text("\red [] kicks the lab cage.", usr)) src.health -= 2 healthcheck() diff --git a/code/modules/mob/living/simple_animal/vox.dm b/code/modules/mob/living/simple_animal/vox.dm deleted file mode 100644 index 1a46e46e4e4..00000000000 --- a/code/modules/mob/living/simple_animal/vox.dm +++ /dev/null @@ -1,169 +0,0 @@ -/mob/living/simple_animal/vox/armalis/ - - name = "serpentine alien" - real_name = "serpentine alien" - desc = "A one-eyed, serpentine creature, half-machine, easily nine feet from tail to beak!" - icon = 'icons/mob/vox.dmi' - icon_state = "armalis" - icon_living = "armalis" - maxHealth = 500 - health = 500 - response_harm = "slashes at the" - harm_intent_damage = 0 - melee_damage_lower = 30 - melee_damage_upper = 40 - attacktext = "slammed its enormous claws into" - speed = -1 - attack_sound = 'sound/weapons/bladeslice.ogg' - status_flags = 0 - universal_speak = 1 - - var/armour = null - var/amp = null - var/quills = 3 - -/mob/living/simple_animal/vox/armalis/death(gibbed) - if(!gibbed) - stat = DEAD - visible_message("[src] shudders violently and explodes!","\red You feel your body rupture!") - explosion(get_turf(loc), -1, -1, 3, 5) - gib() - return - return ..() - -/mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(O.force) - if(O.force >= 25) - var/damage = O.force - if (O.damtype == STAMINA) - damage = 0 - health -= damage - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") - else - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b The [O] bounces harmlessly off of [src]. ") - else - to_chat(usr, "\red This weapon is ineffective, it does no damage.") - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with the [O]. ") - -/mob/living/simple_animal/vox/armalis/verb/fire_quill(mob/target as mob in oview()) - - set name = "Fire quill" - set desc = "Fires a viciously pointed quill at a high speed." - set category = "Alien" - - if(quills<=0) - return - - to_chat(src, "\red You launch a razor-sharp quill at [target]!") - for(var/mob/O in oviewers()) - if ((O.client && !( O.blinded ))) - to_chat(O, "\red [src] launches a razor-sharp quill at [target]!") - - var/obj/item/weapon/quill/Q = new(loc) - Q.fingerprintslast = src.ckey - Q.throw_at(target,10,30) - - quills-- - - spawn(100) - to_chat(src, "\red You feel a fresh quill slide into place.") - quills++ - -/obj/item/weapon/quill - name = "vox quill" - desc = "A wickedly barbed quill from some bizarre animal." - icon_state = "quill" - item_state = "quill" - throwforce = 5 - w_class = 3.0 - sharp = 1 - edge = 0 - -/mob/living/simple_animal/vox/armalis/verb/message_mob() - set category = "Alien" - set name = "Commune with creature" - set desc = "Send a telepathic message to an unlucky recipient." - - var/list/targets = list() - var/target = null - var/text = null - - targets += getmobs() //Fill list, prompt user with list - target = input("Select a creature!", "Speak to creature", null, null) as null|anything in targets - text = input("What would you like to say?", "Speak to creature", null, null) - - if (!target || !text) - return - - var/mob/M = targets[target] - - if(istype(M, /mob/dead/observer) || M.stat == DEAD) - to_chat(src, "Not even the armalis can speak to the dead.") - return - - to_chat(M, "\blue Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]") - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.species.name == "Vox") - return - to_chat(H, "\red Your nose begins to bleed...") - H.drip(1) - -/mob/living/simple_animal/vox/armalis/verb/shriek() - set category = "Alien" - set name = "Shriek" - set desc = "Give voice to a psychic shriek." - -/mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(istype(O,/obj/item/vox/armalis_armour)) - user.drop_item() - armour = O - speed = 1 - maxHealth += 200 - health += 200 - O.loc = src - visible_message("\blue [src] is quickly outfitted in [O] by [user].","\blue You quickly outfit [src] in [O].") - regenerate_icons() - return - if(istype(O,/obj/item/vox/armalis_amp)) - user.drop_item() - amp = O - O.loc = src - visible_message("\blue [src] is quickly outfitted in [O] by [user].","\blue You quickly outfit [src] in [O].") - regenerate_icons() - return - return ..() - -/mob/living/simple_animal/vox/armalis/regenerate_icons() - - overlays = list() - if(armour) - var/icon/armour = image('icons/mob/vox.dmi',"armour") - speed = 1 - overlays += armour - if(amp) - var/icon/amp = image('icons/mob/vox.dmi',"amplifier") - overlays += amp - return - -/obj/item/vox/armalis_armour - - name = "strange armour" - desc = "Hulking reinforced armour for something huge." - icon = 'icons/obj/clothing/suits.dmi' - icon_state = "armour-armalis" - item_state = "armour-armalis" - -/obj/item/vox/armalis_amp - - name = "strange lenses" - desc = "A series of metallic lenses and chains." - icon = 'icons/obj/clothing/hats.dmi' - icon_state = "amp" - item_state = "amp" diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 5cf956e610a..eec1b92e63d 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -74,12 +74,10 @@ add_click_catcher() if(viewing_alternate_appearances && viewing_alternate_appearances.len) - for(var/aakey in viewing_alternate_appearances) - var/datum/alternate_appearance/AA = viewing_alternate_appearances[aakey] - if(AA) - AA.display_to(list(src)) + for(var/datum/alternate_appearance/AA in viewing_alternate_appearances) + AA.display_to(list(src)) - CallHook("Login", list("client" = src.client, "mob" = src)) + callHook("mob_login", list("client" = client, "mob" = src)) // Calling update_interface() in /mob/Login() causes the Cyborg to immediately be ghosted; because of winget(). // Calling it in the overriden Login, such as /mob/living/Login() doesn't cause this. diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index fdc342876dc..ac13431f6b0 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -3,7 +3,7 @@ player_list -= src log_access("Logout: [key_name(src)]") if(admin_datums[src.ckey]) - if (ticker && ticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. + if(ticker && ticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. var/admins_number = admins.len message_admins("Admin logout: [key_name_admin(src)]") @@ -11,6 +11,6 @@ send2adminirc("[key_name(src)] logged out - no more admins online.") ..() - CallHook("Logout", list("client" = src.client, "mob" = src)) + callHook("mob_logout", list("client" = client, "mob" = src)) return 1 \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index f41cef386aa..d470e19c401 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -6,6 +6,7 @@ hud_used = null if(mind && mind.current == src) spellremove(src) + mobspellremove(src) for(var/infection in viruses) qdel(infection) ghostize() @@ -14,6 +15,10 @@ following_mobs = null if(buckled) buckled.unbuckle_mob() + if(viewing_alternate_appearances) + for(var/datum/alternate_appearance/AA in viewing_alternate_appearances) + AA.viewers -= src + viewing_alternate_appearances = null return ..() /mob/New() @@ -23,7 +28,6 @@ else living_mob_list += src prepare_huds() - emoteHandler = new /datum/emoteHandler(src) ..() /atom/proc/prepare_huds() @@ -57,20 +61,20 @@ if(!client) return - if (type) - if(type & 1 && (sdisabilities & BLIND || blinded || paralysis) )//Vision related - if (!( alt )) + if(type) + if(type & 1 && (disabilities & BLIND || blinded || paralysis) )//Vision related + if(!( alt )) return else msg = alt type = alt_type - if (type & 2 && (sdisabilities & DEAF || ear_deaf))//Hearing related - if (!( alt )) + if(type & 2 && (disabilities & DEAF || ear_deaf))//Hearing related + if(!( alt )) return else msg = alt type = alt_type - if ((type & 1 && sdisabilities & BLIND)) + if((type & 1 && disabilities & BLIND)) return // Added voice muffling for Issue 41. if(stat == UNCONSCIOUS || (sleeping > 0 && stat != 2)) @@ -146,7 +150,7 @@ /mob/proc/findname(msg) for(var/mob/M in mob_list) - if (M.real_name == text("[]", msg)) + if(M.real_name == text("[]", msg)) return M return 0 @@ -155,8 +159,6 @@ /mob/proc/Life() // handle_typing_indicator() -// if(organStructure) -// organStructure.ProcessOrgans() return @@ -171,7 +173,7 @@ var/obj/item/W = get_active_hand() if(istype(W)) - if (istype(W, /obj/item/clothing)) + if(istype(W, /obj/item/clothing)) var/obj/item/clothing/C = W if(C.rig_restrict_helmet) to_chat(src, "\red You must fasten the helmet to a hardsuit first. (Target the head and use on a hardsuit)")// Stop eva helms equipping. @@ -248,12 +250,12 @@ 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( \ slot_back,\ slot_wear_id,\ - slot_wear_pda,\ slot_w_uniform,\ slot_wear_suit,\ slot_wear_mask,\ @@ -402,7 +404,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)) @@ -481,7 +483,7 @@ var/list/slot_equipment_priority = list( \ return 0 return 1 if(slot_in_backpack) - if (H.back && istype(H.back, /obj/item/weapon/storage/backpack)) + if(H.back && istype(H.back, /obj/item/weapon/storage/backpack)) var/obj/item/weapon/storage/backpack/B = H.back if(B.contents.len < B.storage_slots && w_class <= B.max_w_class) return 1 @@ -490,12 +492,12 @@ var/list/slot_equipment_priority = list( \ //END HUMAN /mob/proc/reset_view(atom/A) - if (client) - if (istype(A, /atom/movable)) + if(client) + if(istype(A, /atom/movable)) client.perspective = EYE_PERSPECTIVE client.eye = A else - if (isturf(loc)) + if(isturf(loc)) client.eye = client.mob client.perspective = MOB_PERSPECTIVE else @@ -546,7 +548,7 @@ var/list/slot_equipment_priority = list( \ return 0 var/tile = get_turf(A) - if (!tile) + if(!tile) return 0 changeNext_move(CLICK_CD_POINT) @@ -559,30 +561,30 @@ var/list/slot_equipment_priority = list( \ return 1 /mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag) - if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) ))) - if (!( L )) + if((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) ))) + if(!( L )) return null else return L.container else - if (!( L )) + if(!( L )) L = new /obj/effect/list_container/mobl( null ) L.container += src L.master = src - if (istype(l_hand, /obj/item/weapon/grab)) + if(istype(l_hand, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = l_hand - if (!( L.container.Find(G.affecting) )) + if(!( L.container.Find(G.affecting) )) L.container += G.affecting - if (G.affecting) + if(G.affecting) G.affecting.ret_grab(L, 1) - if (istype(r_hand, /obj/item/weapon/grab)) + if(istype(r_hand, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = r_hand - if (!( L.container.Find(G.affecting) )) + if(!( L.container.Find(G.affecting) )) L.container += G.affecting - if (G.affecting) + if(G.affecting) G.affecting.ret_grab(L, 1) - if (!( flag )) - if (L.master == src) + if(!( flag )) + if(L.master == src) var/list/temp = list( ) temp += L.container //L = null @@ -602,12 +604,12 @@ var/list/slot_equipment_priority = list( \ if(hand) var/obj/item/W = l_hand - if (W) + if(W) W.attack_self(src) update_inv_l_hand() else var/obj/item/W = r_hand - if (W) + if(W) W.attack_self(src) update_inv_r_hand() return @@ -647,15 +649,15 @@ var/list/slot_equipment_priority = list( \ /mob/proc/store_memory(msg as message, popup, sane = 1) msg = copytext(msg, 1, MAX_MESSAGE_LEN) - if (sane) + if(sane) msg = sanitize(msg) - if (length(memory) == 0) + if(length(memory) == 0) memory += msg else memory += "
        [msg]" - if (popup) + if(popup) memory() /mob/proc/update_flavor_text() @@ -671,7 +673,7 @@ var/list/slot_equipment_priority = list( \ flavor_text = msg /mob/proc/print_flavor_text(var/shrink = 1) - if (flavor_text && flavor_text != "") + if(flavor_text && flavor_text != "") var/msg = replacetext(flavor_text, "\n", " ") if(lentext(msg) <= 40 || !shrink) return "[html_encode(msg)]" //Repeat after me, "I will not give players access to decoded HTML." @@ -688,11 +690,11 @@ var/list/slot_equipment_priority = list( \ set name = "Respawn" set category = "OOC" - if (!abandon_allowed) + if(!abandon_allowed) to_chat(usr, "Respawning is disabled.") return - if (stat != DEAD || !ticker) + if(stat != DEAD || !ticker) to_chat(usr, "You must be dead to use this!") return @@ -742,7 +744,7 @@ var/list/slot_equipment_priority = list( \ continue if(istype(O, /obj/item/weapon/disk/nuclear)) var/name = "Nuclear Disk" - if (names.Find(name)) + if(names.Find(name)) namecounts[name]++ name = "[name] ([namecounts[name]])" else @@ -752,7 +754,7 @@ var/list/slot_equipment_priority = list( \ if(istype(O, /obj/singularity)) var/name = "Singularity" - if (names.Find(name)) + if(names.Find(name)) namecounts[name]++ name = "[name] ([namecounts[name]])" else @@ -763,7 +765,7 @@ var/list/slot_equipment_priority = list( \ for(var/mob/M in sortAtom(mob_list)) var/name = M.name - if (names.Find(name)) + if(names.Find(name)) namecounts[name]++ name = "[name] ([namecounts[name]])" else @@ -780,14 +782,14 @@ var/list/slot_equipment_priority = list( \ var/ok = "[is_admin ? "Admin Observe" : "Observe"]" eye_name = input("Please, select a player!", ok, null, null) as null|anything in creatures - if (!eye_name) + if(!eye_name) return var/mob/mob_eye = creatures[eye_name] if(client && mob_eye) client.eye = mob_eye - if (is_admin) + if(is_admin) client.adminobs = 1 if(mob_eye == client.mob || client.eye == client.mob) client.adminobs = 0 @@ -869,9 +871,9 @@ var/list/slot_equipment_priority = list( \ //this and stop_pulling really ought to be /mob/living procs /mob/proc/start_pulling(atom/movable/AM) - if ( !AM || !src || src==AM || !isturf(AM.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort! + if( !AM || !src || src==AM || !isturf(AM.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort! return - if (!( AM.anchored )) + if(!( AM.anchored )) AM.add_fingerprint(src) // If we're pulling something then drop what we're currently pulling and pull this instead. @@ -957,8 +959,8 @@ var/list/slot_equipment_priority = list( \ if(mind && mind.changeling) add_stings_to_statpanel(mind.changeling.purchasedpowers) - if(spell_list && spell_list.len) - for(var/obj/effect/proc_holder/spell/S in spell_list) + if(mob_spell_list && mob_spell_list.len) + for(var/obj/effect/proc_holder/spell/S in mob_spell_list) add_spell_to_statpanel(S) if(mind && istype(src, /mob/living) && mind.spell_list && mind.spell_list.len) for(var/obj/effect/proc_holder/spell/S in mind.spell_list) @@ -991,6 +993,7 @@ var/list/slot_equipment_priority = list( \ for(var/obj/effect/proc_holder/changeling/S in stings) if(S.chemical_cost >=0 && S.can_be_used_by(src)) statpanel("[S.panel]",((S.chemical_cost > 0) ? "[S.chemical_cost]" : ""),S) + /mob/proc/add_spell_to_statpanel(var/obj/effect/proc_holder/spell/S) switch(S.charge_type) if("recharge") @@ -999,17 +1002,6 @@ var/list/slot_equipment_priority = list( \ statpanel(S.panel,"[S.charge_counter]/[S.charge_max]",S) if("holdervar") statpanel(S.panel,"[S.holder_var_type] [S.holder_var_amount]",S) - /* // Why have a duplicate set of turfs in the stat panel? - if(listed_turf) - if(get_dist(listed_turf,src) > 1) - listed_turf = null - else - statpanel(listed_turf.name,listed_turf.name,listed_turf) - for(var/atom/A in listed_turf) - if(A.invisibility > see_invisible) - continue - statpanel(listed_turf.name,A.name,A) - */ // facing verbs @@ -1024,7 +1016,7 @@ var/list/slot_equipment_priority = list( \ return 1 //Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. -/mob/proc/update_canmove() +/mob/proc/update_canmove(delay_action_updates = 0) var/ko = weakened || paralysis || stat || (status_flags & FAKEDEATH) var/buckle_lying = !(buckled && !buckled.buckle_lying) if(ko || resting || stunned) @@ -1049,6 +1041,8 @@ var/list/slot_equipment_priority = list( \ layer = initial(layer) update_transform() + if(!delay_action_updates) + update_action_buttons_icon() return canmove /mob/proc/fall(var/forced) @@ -1244,7 +1238,7 @@ mob/proc/yank_out_object() affected.wounds += I H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) - if (ishuman(U)) + if(ishuman(U)) var/mob/living/carbon/human/human_user = U human_user.bloody_hands(H) @@ -1328,11 +1322,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() @@ -1344,7 +1338,7 @@ mob/proc/yank_out_object() if(stat==DEAD) return var/turf/location = loc - if (istype(location, /turf/simulated)) + if(istype(location, /turf/simulated)) if(green) if(!no_text) visible_message("[src] vomits up some green goo!","You vomit up some green goo!") @@ -1362,18 +1356,17 @@ mob/proc/yank_out_object() /mob/proc/setEarDamage() return -/mob/proc/AddSpell(var/obj/effect/proc_holder/spell/spell) - spell_list += spell - if(!spell.action) - spell.action = new/datum/action/spell_action - spell.action.target = spell - spell.action.name = spell.name - spell.action.button_icon = spell.action_icon - spell.action.button_icon_state = spell.action_icon_state - spell.action.background_icon_state = spell.action_background_icon_state - if(isliving(src)) - spell.action.Grant(src) - return +/mob/proc/AddSpell(obj/effect/proc_holder/spell/S) + mob_spell_list += S + S.action.Grant(src) + +/mob/proc/RemoveSpell(obj/effect/proc_holder/spell/spell) //To remove a specific spell from a mind + if(!spell) + return + for(var/obj/effect/proc_holder/spell/S in mob_spell_list) + if(istype(S, spell)) + qdel(S) + mob_spell_list -= S //override to avoid rotating pixel_xy on mobs /mob/shuttleRotate(rotation) diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index e9ee311db76..90f84b7fc74 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -26,7 +26,7 @@ plane = HUD_PLANE item_state = "nothing" icon = 'icons/mob/screen_gen.dmi' - w_class = 5.0 + w_class = 5 /obj/item/weapon/grab/New(var/mob/user, var/mob/victim) @@ -54,7 +54,7 @@ //check if assailant is grabbed by victim as well if(assailant.grabbed_by) - for (var/obj/item/weapon/grab/G in assailant.grabbed_by) + for(var/obj/item/weapon/grab/G in assailant.grabbed_by) if(G.assailant == affecting && G.affecting == assailant) G.dancing = 1 G.adjust_position() @@ -362,7 +362,7 @@ msg_admin_attack("[key_name(assailant)] has pressed his fingers into [key_name(affecting)]'s eyes.") var/obj/item/organ/internal/eyes/eyes = affected.get_int_organ(/obj/item/organ/internal/eyes) eyes.damage += rand(3,4) - if (eyes.damage >= eyes.min_broken_damage) + if(eyes.damage >= eyes.min_broken_damage) if(M.stat != 2) to_chat(M, "\red You go blind!")*///This is a demonstration of adding a new damaging type based on intent as well as hitzone. diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 7e6d1f6dcd3..86cadaa595f 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 @@ -63,7 +63,7 @@ proc/iscuffed(A) proc/isdeaf(A) if(istype(A, /mob)) var/mob/M = A - return (M.sdisabilities & DEAF) || M.ear_deaf + return (M.disabilities & DEAF) || M.ear_deaf return 0 proc/hassensorlevel(A, var/level) @@ -124,12 +124,12 @@ proc/getsensorlevel(A) return 0 /proc/stars(n, pr) - if (pr == null) + if(pr == null) pr = 25 - if (pr <= 0) + if(pr <= 0) return null else - if (pr >= 100) + if(pr >= 100) return n var/te = n var/t = "" @@ -137,7 +137,7 @@ proc/getsensorlevel(A) var/p = null p = 1 while(p <= n) - if ((copytext(te, p, p + 1) == " " || prob(pr))) + if((copytext(te, p, p + 1) == " " || prob(pr))) t = text("[][]", t, copytext(te, p, p + 1)) else t = text("[]*", t) @@ -176,14 +176,14 @@ proc/slur(phrase, var/list/slurletters = ("'"))//use a different list as an inpu p = 1//1 is the start of any word while(p <= n)//while P, which starts at 1 is less or equal to N which is the length. var/n_letter = copytext(te, p, p + 1)//copies text from a certain distance. In this case, only one letter at a time. - if (prob(80) && (ckey(n_letter) in list("b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"))) - if (prob(10)) + if(prob(80) && (ckey(n_letter) in list("b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"))) + if(prob(10)) n_letter = text("[n_letter]-[n_letter]-[n_letter]-[n_letter]")//replaces the current letter with this instead. else - if (prob(20)) + if(prob(20)) n_letter = text("[n_letter]-[n_letter]-[n_letter]") else - if (prob(5)) + if(prob(5)) n_letter = null else n_letter = text("[n_letter]-[n_letter]") @@ -200,14 +200,14 @@ proc/slur(phrase, var/list/slurletters = ("'"))//use a different list as an inpu while(p <= n)//while P, which starts at 1 is less or equal to N which is the length. var/robotletter = pick("@", "!", "#", "$", "%", "&", "?") //for beep boop var/n_letter = copytext(te, p, p + 1)//copies text from a certain distance. In this case, only one letter at a time. - if (prob(80) && (ckey(n_letter) in list("b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"))) - if (prob(10)) + if(prob(80) && (ckey(n_letter) in list("b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"))) + if(prob(10)) n_letter = text("[n_letter]-[robotletter]-[n_letter]-[n_letter]")//replaces the current letter with this instead. else - if (prob(20)) + if(prob(20)) n_letter = text("[n_letter]-[robotletter]-[n_letter]") else - if (prob(5)) + if(prob(5)) n_letter = robotletter else n_letter = text("[n_letter]-[n_letter]") @@ -276,7 +276,7 @@ proc/muffledspeech(phrase) /proc/findname(msg) for(var/mob/M in mob_list) - if (M.real_name == text("[msg]")) + if(M.real_name == text("[msg]")) return 1 return 0 @@ -358,7 +358,7 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM) /proc/is_blind(A) if(iscarbon(A)) var/mob/living/carbon/C = A - if(C.sdisabilities & BLIND || C.blinded) + if(C.disabilities & BLIND || C.blinded) return 1 return 0 @@ -448,7 +448,7 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM) A.overlays += alert_overlay /mob/proc/switch_to_camera(var/obj/machinery/camera/C) - if (!C.can_use() || stat || (get_dist(C, src) > 1 || machine != src || blinded || !canmove)) + if(!C.can_use() || stat || (get_dist(C, src) > 1 || machine != src || blinded || !canmove)) return 0 check_eye(src) return 1 diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 9cf0b902d35..7be09dbed18 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -9,9 +9,9 @@ return 1 if(ismob(mover)) var/mob/moving_mob = mover - if ((other_mobs && moving_mob.other_mobs)) + if((other_mobs && moving_mob.other_mobs)) return 1 - if (mover == buckled_mob) + if(mover == buckled_mob) return 1 return (!mover.density || !density || lying) @@ -107,7 +107,7 @@ set hidden = 1 if(!istype(mob, /mob/living/carbon)) return - if (!mob.stat && isturf(mob.loc) && !mob.restrained()) + if(!mob.stat && isturf(mob.loc) && !mob.restrained()) mob:toggle_throw_mode() else return @@ -122,9 +122,9 @@ /client/Center() /* No 3D movement in 2D spessman game. dir 16 is Z Up - if (isobj(mob.loc)) + if(isobj(mob.loc)) var/obj/O = mob.loc - if (mob.canmove) + if(mob.canmove) return O.relaymove(mob, 16) */ return @@ -251,14 +251,14 @@ L -= mob var/mob/M = L[1] if(M) - if ((get_dist(mob, M) <= 1 || M.loc == mob.loc)) + if((get_dist(mob, M) <= 1 || M.loc == mob.loc)) . = ..() - if (isturf(M.loc)) + if(isturf(M.loc)) var/diag = get_dir(mob, M) - if ((diag - 1) & diag) + if((diag - 1) & diag) else diag = null - if ((get_dist(mob, M) > 1 || diag)) + if((get_dist(mob, M) > 1 || diag)) step(M, get_dir(M.loc, T)) else for(var/mob/M in L) @@ -279,11 +279,11 @@ else . = ..() - for (var/obj/item/weapon/grab/G in mob) - if (G.state == GRAB_NECK) + for(var/obj/item/weapon/grab/G in mob) + if(G.state == GRAB_NECK) mob.set_dir(reverse_dir[direct]) G.adjust_position() - for (var/obj/item/weapon/grab/G in mob.grabbed_by) + for(var/obj/item/weapon/grab/G in mob.grabbed_by) G.adjust_position() moving = 0 @@ -449,17 +449,17 @@ return 0 /mob/proc/Move_Pulled(atom/A) - if (!canmove || restrained() || !pulling) + if(!canmove || restrained() || !pulling) return - if (pulling.anchored) + if(pulling.anchored) return - if (!pulling.Adjacent(src)) + if(!pulling.Adjacent(src)) return - if (A == loc && pulling.density) + if(A == loc && pulling.density) return - if (!Process_Spacemove(get_dir(pulling.loc, A))) + if(!Process_Spacemove(get_dir(pulling.loc, A))) return - if (ismob(pulling)) + if(ismob(pulling)) var/mob/M = pulling var/atom/movable/t = M.pulling M.stop_pulling() diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm index f7cff248519..c226f3a0176 100644 --- a/code/modules/mob/new_player/login.dm +++ b/code/modules/mob/new_player/login.dm @@ -27,7 +27,7 @@ loc = pick(watch_locations) */ - CallHook("Login", list("client" = src.client, "mob" = src)) + callHook("mob_login", list("client" = client, "mob" = src)) new_player_panel() if(ckey in deadmins) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index f752b1f4409..0dfa4ef64fe 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -70,8 +70,8 @@ ..() statpanel("Status") - if (client.statpanel == "Status" && ticker) - if (ticker.current_state != GAME_STATE_PREGAME) + if(client.statpanel == "Status" && ticker) + if(ticker.current_state != GAME_STATE_PREGAME) stat(null, "Station Time: [worldtime2text()]") statpanel("Lobby") if(client.statpanel=="Lobby" && ticker) @@ -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,9 +260,22 @@ 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) + if(src != usr) return 0 if(!ticker || ticker.current_state != GAME_STATE_PLAYING) to_chat(usr, "\red The round is either not ready, or has already finished...") @@ -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,23 +344,27 @@ 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) /mob/new_player/proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank, var/join_message) - if (ticker.current_state == GAME_STATE_PLAYING) + if(ticker.current_state == GAME_STATE_PLAYING) var/ailist[] = list() - for (var/mob/living/silicon/ai/A in living_mob_list) + for(var/mob/living/silicon/ai/A in living_mob_list) ailist += A - if (ailist.len) + if(ailist.len) var/mob/living/silicon/ai/announcer = pick(ailist) if(character.mind) if((character.mind.assigned_role != "Cyborg") && (character.mind.special_role != "MODE")) @@ -360,11 +385,11 @@ global_announcer.autosay("[character.real_name],[rank ? " [rank]," : " visitor," ] [join_message ? join_message : "has arrived on the station"].", "Arrivals Announcement Computer") /mob/new_player/proc/AnnounceCyborg(var/mob/living/character, var/rank, var/join_message) - if (ticker.current_state == GAME_STATE_PLAYING) + if(ticker.current_state == GAME_STATE_PLAYING) var/ailist[] = list() - for (var/mob/living/silicon/ai/A in living_mob_list) + for(var/mob/living/silicon/ai/A in living_mob_list) ailist += A - if (ailist.len) + if(ailist.len) var/mob/living/silicon/ai/announcer = pick(ailist) if(character.mind) if((character.mind.special_role != "MODE")) @@ -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 += "
        Resource depleted
        [obj]Activated
        [obj]Activate
        [module.emag]Activated
        " + 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/new_player/poll.dm b/code/modules/mob/new_player/poll.dm index 4ce44be1fd8..beb2c255308 100644 --- a/code/modules/mob/new_player/poll.dm +++ b/code/modules/mob/new_player/poll.dm @@ -209,12 +209,12 @@ output += "
        [optiontext]: ' + + '
        ' + + '' + + ''; + createPopup(popupContent, 250); + }); + + $('body').on('keyup', '#highlightColor', function() { + var color = $('#highlightColor').val(); + color = color.trim(); + if (!color || color.charAt(0) != '#') return; + $('#highlightColor').css('background-color', color); + }); + + $('body').on('submit', '#highlightTermForm', function(e) { + e.preventDefault(); + + var count = 0; + while (count < opts.highlightLimit) { + var term = $('#highlightTermInput'+count).val(); + if (term) { + term = term.trim(); + if (term === '') { + opts.highlightTerms[count] = null; + } else { + opts.highlightTerms[count] = term.toLowerCase(); + } + } else { + opts.highlightTerms[count] = null; + } + count++; + } + + var color = $('#highlightColor').val(); + color = color.trim(); + if (color == '' || color.charAt(0) != '#') { + opts.highlightColor = '#FFFF00'; + } else { + opts.highlightColor = color; + } + var $popup = $('#highlightPopup').closest('.popup'); + $popup.remove(); + + setCookie('highlightterms', JSON.stringify(opts.highlightTerms), 365); + setCookie('highlightcolor', opts.highlightColor, 365); + }); + + $('#clearMessages').click(function() { + $messages.empty(); + opts.messageCount = 0; + }); + + // Tell BYOND to give us a macro list. + // I don't know why but for some retarded reason, + // You need to activate hotkeymode before you can winget the macros in it. + runByond('byond://winset?id=mainwindow¯o=hotkeymode') + runByond('byond://winset?id=mainwindow¯o=macro') + + runByond('byond://winget?callback=wingetMacros&id=hotkeymode.*&property=command'); + + /***************************************** + * + * KICK EVERYTHING OFF + * + ******************************************/ + + runByond('?_src_=chat&proc=doneLoading'); + if ($('#loading').is(':visible')) { + $('#loading').remove(); + } + $('#userBar').show(); + opts.priorChatHeight = $(window).height(); +}); diff --git a/goon/browserassets/js/jquery.min.js b/goon/browserassets/js/jquery.min.js new file mode 100644 index 00000000000..c5c648255c1 --- /dev/null +++ b/goon/browserassets/js/jquery.min.js @@ -0,0 +1,9789 @@ +/*! + * jQuery JavaScript Library v1.10.2 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2013-07-03T13:48Z + */ +(function( window, undefined ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +//"use strict"; +var + // The deferred used on DOM ready + readyList, + + // A central reference to the root jQuery(document) + rootjQuery, + + // Support: IE<10 + // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined` + core_strundefined = typeof undefined, + + // Use the correct document accordingly with window argument (sandbox) + location = window.location, + document = window.document, + docElem = document.documentElement, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // [[Class]] -> type pairs + class2type = {}, + + // List of deleted data cache ids, so we can reuse them + core_deletedIds = [], + + core_version = "1.10.2", + + // Save a reference to some core methods + core_concat = core_deletedIds.concat, + core_push = core_deletedIds.push, + core_slice = core_deletedIds.slice, + core_indexOf = core_deletedIds.indexOf, + core_toString = class2type.toString, + core_hasOwn = class2type.hasOwnProperty, + core_trim = core_version.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + + // Used for splitting on whitespace + core_rnotwhite = /\S+/g, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }, + + // The ready event handler + completed = function( event ) { + + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } + }, + // Clean-up method for dom ready events + detach = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: core_version, + + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), + + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + if ( obj == null ) { + return String( obj ); + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ core_toString.call(obj) ] || "object" : + typeof obj; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( jQuery.support.ownLast ) { + for ( key in obj ) { + return core_hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ); + if ( scripts ) { + jQuery( scripts ).remove(); + } + return jQuery.merge( [], parsed.childNodes ); + }, + + parseJSON: function( data ) { + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + if ( data === null ) { + return data; + } + + if ( typeof data === "string" ) { + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + if ( data ) { + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + } + } + } + + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + core_push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return core_concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations. + // Note: this method belongs to the css module but it's needed here for the support module. + // If support gets modularized, this method should be moved back to the css module. + swap: function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || type !== "function" && + ( length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj ); +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +/*! + * Sizzle CSS Selector Engine v1.10.2 + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2013-07-03 + */ +(function( window, undefined ) { + +var i, + support, + cachedruns, + Expr, + getText, + isXML, + compile, + outermostContext, + sortInput, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + hasDuplicate = false, + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + return 0; + }, + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments quoted, + // then not containing pseudos/brackets, + // then attribute selectors/non-parenthetical expressions, + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rsibling = new RegExp( whitespace + "*[+~]" ), + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + // BMP codepoint + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key += " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Detect xml + * @param {Element|Object} elem An element or a document + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsHTML = !isXML( doc ); + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent.attachEvent && parent !== parent.top ) { + parent.attachEvent( "onbeforeunload", function() { + setDocument(); + }); + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if getElementsByClassName can be trusted + support.getElementsByClassName = assert(function( div ) { + div.innerHTML = "
        "; + + // Support: Safari<4 + // Catch class over-caching + div.firstChild.className = "i"; + // Support: Opera<10 + // Catch gEBCN failure to find non-leading classes + return div.getElementsByClassName("i").length === 2; + }); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Support: Opera 10-12/IE8 + // ^= $= *= and empty values + // Should not select anything + // Support: Windows 8 Native Apps + // The type attribute is restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "t", "" ); + + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b ); + + if ( compare ) { + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } + + // Not directly comparable, sort on existence of method + return a.compareDocumentPosition ? -1 : 1; + } : + function( a, b ) { + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Parentless nodes are either documents or disconnected + } else if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val === undefined ? + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null : + val; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var data, cache, outerCache, + dirkey = dirruns + " " + doneName; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { + if ( (data = cache[1]) === true || data === cachedruns ) { + return data === true; + } + } else { + cache = outerCache[ dir ] = [ dirkey ]; + cache[1] = matcher( elem, context, xml ) || cachedruns; + if ( cache[1] === true ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + // A counter to specify which element is currently being matched + var matcherCachedRuns = 0, + bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = matcherCachedRuns; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++matcherCachedRuns; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + match = tokenize( selector ); + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + } + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && context.parentNode || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) + ); + return results; +} + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome<14 +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + elem[ name ] === true ? name.toLowerCase() : null; + } + }); +} + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function( support ) { + + var all, a, input, select, fragment, opt, eventName, isSupported, i, + div = document.createElement("div"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = "
        a"; + + // Finish early in limited (non-browser) environments + all = div.getElementsByTagName("*") || []; + a = div.getElementsByTagName("a")[ 0 ]; + if ( !a || !a.style || !all.length ) { + return support; + } + + // First batch of tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + a.style.cssText = "top:1px;float:left;opacity:.5"; + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + support.getSetAttribute = div.className !== "t"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName("tbody").length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName("link").length; + + // Get the style information from getAttribute + // (IE uses .cssText instead) + support.style = /top/.test( a.getAttribute("style") ); + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + support.hrefNormalized = a.getAttribute("href") === "/a"; + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + support.opacity = /^0.5/.test( a.style.opacity ); + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + support.cssFloat = !!a.style.cssFloat; + + // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) + support.checkOn = !!input.value; + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + support.optSelected = opt.selected; + + // Tests for enctype support on a form (#6743) + support.enctype = !!document.createElement("form").enctype; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>"; + + // Will be defined later + support.inlineBlockNeedsLayout = false; + support.shrinkWrapBlocks = false; + support.pixelPosition = false; + support.deleteExpando = true; + support.noCloneEvent = true; + support.reliableMarginRight = true; + support.boxSizingReliable = true; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<9 + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + // Check if we can trust getAttribute("value") + input = document.createElement("input"); + input.setAttribute( "value", "" ); + support.input = input.getAttribute( "value" ) === ""; + + // Check if an input maintains its value after becoming a radio + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "checked", "t" ); + input.setAttribute( "name", "t" ); + + fragment = document.createDocumentFragment(); + fragment.appendChild( input ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + for ( i in { submit: true, change: true, focusin: true }) { + div.setAttribute( eventName = "on" + i, "t" ); + + support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; + } + + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + // Support: IE<9 + // Iteration over object's inherited properties before its own. + for ( i in jQuery( support ) ) { + break; + } + support.ownLast = i !== "0"; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, marginDiv, tds, + divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; + + body.appendChild( container ).appendChild( div ); + + // Support: IE8 + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + div.innerHTML = "
        t
        "; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Support: IE8 + // Check if empty table cells still have offsetWidth/Height + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior. + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + + // Workaround failing boxSizing test due to offsetWidth returning wrong value + // with some non-1 values of body zoom, ticket #13543 + jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() { + support.boxSizing = div.offsetWidth === 4; + }); + + // Use window.getComputedStyle because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = div.appendChild( document.createElement("div") ); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== core_strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Support: IE6 + // Check if elements with layout shrink-wrap their children + div.style.display = "block"; + div.innerHTML = "
        "; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + if ( support.inlineBlockNeedsLayout ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); + + // Null elements to avoid leaks in IE + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + all = select = fragment = opt = a = input = null; + + return support; +})({}); + +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +function internalData( elem, name, data, pvt /* Internal Use Only */ ){ + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "applet": true, + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + // Do not set data on non-element because it will not be cleared (#8335). + if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { + return false; + } + + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var attrs, name, + data = null, + i = 0, + elem = this[0]; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attrs = elem.attributes; + for ( ; i < attrs.length; i++ ) { + name = attrs[i].name; + + if ( name.indexOf("data-") === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return arguments.length > 1 ? + + // Sets one value + this.each(function() { + jQuery.data( this, key, value ); + }) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, + rclass = /[\t\r\n\f]/g, + rreturn = /\r/g, + rfocusable = /^(?:input|select|textarea|button|object)$/i, + rclickable = /^(?:a|area)$/i, + ruseDefault = /^(?:checked|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + getSetInput = jQuery.support.input; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, this.className ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + " " + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + elem.className = jQuery.trim( cur ); + + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = arguments.length === 0 || typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call( this, j, this.className ) ); + }); + } + if ( proceed ) { + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + "" + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + elem.className = value ? jQuery.trim( cur ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + classNames = value.match( core_rnotwhite ) || []; + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( type === core_strundefined || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // If the element has a class name or if we're passed "false", + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var ret, hooks, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // Use proper attribute retrieval(#6932, #12072) + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + elem.text; + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) { + optionSet = true; + } + } + + // force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attr: function( elem, name, value ) { + var hooks, ret, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === core_strundefined ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + + } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( core_rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( (name = attrNames[i++]) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + // Set corresponding property to false + if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { + elem[ propName ] = false; + // Support: IE<9 + // Also clear defaultChecked/defaultSelected (if appropriate) + } else { + elem[ jQuery.camelCase( "default-" + name ) ] = + elem[ propName ] = false; + } + + // See #9699 for explanation of this approach (setting first, then removal) + } else { + jQuery.attr( elem, name, "" ); + } + + elem.removeAttribute( getSetAttribute ? name : propName ); + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to default in case type is set after value during creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? + ret : + ( elem[ name ] = value ); + + } else { + return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? + ret : + elem[ name ]; + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + return tabindex ? + parseInt( tabindex, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + -1; + } + } + } +}); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { + // IE<8 needs the *property* name + elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); + + // Use defaultChecked and defaultSelected for oldIE + } else { + elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; + } + + return name; + } +}; +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr; + + jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ? + function( elem, name, isXML ) { + var fn = jQuery.expr.attrHandle[ name ], + ret = isXML ? + undefined : + /* jshint eqeqeq: false */ + (jQuery.expr.attrHandle[ name ] = undefined) != + getter( elem, name, isXML ) ? + + name.toLowerCase() : + null; + jQuery.expr.attrHandle[ name ] = fn; + return ret; + } : + function( elem, name, isXML ) { + return isXML ? + undefined : + elem[ jQuery.camelCase( "default-" + name ) ] ? + name.toLowerCase() : + null; + }; +}); + +// fix oldIE attroperties +if ( !getSetInput || !getSetAttribute ) { + jQuery.attrHooks.value = { + set: function( elem, value, name ) { + if ( jQuery.nodeName( elem, "input" ) ) { + // Does not return so that setAttribute is also used + elem.defaultValue = value; + } else { + // Use nodeHook if defined (#1954); otherwise setAttribute is fine + return nodeHook && nodeHook.set( elem, value, name ); + } + } + }; +} + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = { + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + elem.setAttributeNode( + (ret = elem.ownerDocument.createAttribute( name )) + ); + } + + ret.value = value += ""; + + // Break association with cloned elements by also using setAttribute (#9646) + return name === "value" || value === elem.getAttribute( name ) ? + value : + undefined; + } + }; + jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords = + // Some attributes are constructed with empty-string values when not defined + function( elem, name, isXML ) { + var ret; + return isXML ? + undefined : + (ret = elem.getAttributeNode( name )) && ret.value !== "" ? + ret.value : + null; + }; + jQuery.valHooks.button = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return ret && ret.specified ? + ret.value : + undefined; + }, + set: nodeHook.set + }; + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + set: function( elem, value, name ) { + nodeHook.set( elem, value === "" ? false : value, name ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }; + }); +} + + +// Some attributes require a special call on IE +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !jQuery.support.hrefNormalized ) { + // href/src property should get the full normalized URL (#10299/#12915) + jQuery.each([ "href", "src" ], function( i, name ) { + jQuery.propHooks[ name ] = { + get: function( elem ) { + return elem.getAttribute( name, 4 ); + } + }; + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Note: IE uppercases css property names, but if we were to .toLowerCase() + // .cssText, that would destroy case senstitivity in URL's, like in "background" + return elem.style.cssText || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }; +} + +jQuery.each([ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +}); + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }; + if ( !jQuery.support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + // Support: Webkit + // "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + }; + } +}); +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = core_hasOwn.call( event, "type" ) ? event.type : event, + namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = core_slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Even when returnValue equals to undefined Firefox will still show alert + if ( event.result !== undefined ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === core_strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); +var isSimple = /^.[^:#\[\.,]*$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + cur = ret.push( cur ); + break; + } + } + } + + return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( jQuery.unique(all) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.unique( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( isSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; + }); +} +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
        ", "
        " ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
        " ], + tr: [ 2, "", "
        " ], + col: [ 2, "", "
        " ], + td: [ 3, "", "
        " ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
        ", "
        " ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var + // Snapshot the DOM in case .domManip sweeps something relevant into its fragment + args = jQuery.map( this, function( elem ) { + return [ elem.nextSibling, elem.parentNode ]; + }), + i = 0; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + var next = args[ i++ ], + parent = args[ i++ ]; + + if ( parent ) { + // Don't use the snapshot next if it has moved (#13810) + if ( next && next.parentNode !== parent ) { + next = this.nextSibling; + } + jQuery( this ).remove(); + parent.insertBefore( elem, next ); + } + // Allow new content to include elements from the context set + }, true ); + + // Force removal if there was no new content (e.g., from empty arguments) + return i ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback, allowIntersection ) { + + // Flatten any nested arrays + args = core_concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, self.html() ); + } + self.domManip( args, callback, allowIntersection ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[i], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Hope ajax is available... + jQuery._evalUrl( node.src ); + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( manipulation_rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !jQuery.support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
        " && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== core_strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + core_deletedIds.push( id ); + } + } + } + } + }, + + _evalUrl: function( url ) { + return jQuery.ajax({ + url: url, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } +}); +jQuery.fn.extend({ + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + } +}); +var iframe, getStyles, curCSS, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity\s*=\s*([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), + elemdisplay = { BODY: "block" }, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = jQuery._data( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + + if ( !values[ index ] ) { + hidden = isHidden( elem ); + + if ( display && display !== "none" || !hidden ) { + jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); + } + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + var len, styles, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each(function() { + if ( isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "columnCount": true, + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, + // but it would mean to define eight (for every problematic property) identical functions + if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var num, val, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + } +}); + +// NOTE: we've included the "window" in window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + getStyles = function( elem ) { + return window.getComputedStyle( elem, null ); + }; + + curCSS = function( elem, name, _computed ) { + var width, minWidth, maxWidth, + computed = _computed || getStyles( elem ), + + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, + style = elem.style; + + if ( computed ) { + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + getStyles = function( elem ) { + return elem.currentStyle; + }; + + curCSS = function( elem, name, _computed ) { + var left, rs, rsLeft, + computed = _computed || getStyles( elem ), + ret = computed ? computed[ name ] : undefined, + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rs = elem.runtimeStyle; + rsLeft = rs && rs.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + rs.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + rs.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // at this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + // Use the already-created iframe if possible + iframe = ( iframe || + jQuery("