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/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/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index be38675aa71..553d98e3ebd 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -3941,9 +3941,9 @@ "bxO" = (/turf/simulated/wall,/area/medical/research{name = "Research Division"}) "bxP" = (/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bxQ" = (/obj/structure/sign/securearea,/turf/simulated/wall,/area/medical/research{name = "Research Division"}) -"bxR" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/clothing/glasses/welding,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/toxins/lab) +"bxR" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/clothing/glasses/welding,/obj/machinery/door_control{id = "rdlab"; name = "Research and Development Lab Shutters Control"; pixel_x = -24; pixel_y = 0; req_access_txt = "47"},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/toxins/lab) "bxS" = (/obj/structure/stool,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/toxins/lab) -"bxT" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/door_control{id = "rdlab"; name = "Research and Development Lab Shutters Control"; pixel_x = 24; pixel_y = 24; req_access_txt = "47"},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/toxins/lab) +"bxT" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/toxins/lab) "bxU" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "bxV" = (/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "bxW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -4670,7 +4670,7 @@ "bLP" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Head of Personnel"},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bLQ" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/folder/yellow,/obj/item/device/eftpos,/obj/item/weapon/book/manual/sop_supply,/turf/simulated/floor/plasteel,/area/quartermaster/office) "bLR" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) -"bLS" = (/obj/machinery/computer/guestpass,/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) +"bLS" = (/obj/machinery/computer/guestpass{pixel_y = 30},/obj/machinery/photocopier,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "bLT" = (/obj/machinery/computer/message_monitor,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/server) "bLU" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/server) "bLV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/server) @@ -4708,8 +4708,8 @@ "bMB" = (/obj/machinery/cell_charger,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/machinery/camera{c_tag = "Medbay Cryogenics"; network = list("SS13")},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cryo) "bMC" = (/obj/machinery/camera{c_tag = "Medbay Cloning"; network = list("SS13")},/obj/structure/closet/wardrobe/medic_white,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) "bMD" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) -"bME" = (/obj/machinery/disposal,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) -"bMF" = (/obj/machinery/light{dir = 8},/obj/structure/closet/secure_closet/medical1,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/medical/genetics) +"bME" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) +"bMF" = (/obj/machinery/light{dir = 8},/obj/structure/closet/secure_closet/medical1,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 27},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/medical/genetics) "bMG" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/camera{c_tag = "Research Genetics North"; network = list("Research","SS13")},/obj/machinery/power/apc{dir = 1; name = "Genetics APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/medical/genetics) "bMH" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bMI" = (/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/weapon/hand_labeler,/obj/structure/closet/walllocker/emerglocker/north,/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/medical/genetics) @@ -4864,7 +4864,7 @@ "bPB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cryo) "bPC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cryo) "bPD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cryo) -"bPE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Genetics Cloning"; req_access_txt = "0"; req_one_access_txt = "5;9"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) +"bPE" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/medical/genetics) "bPF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) "bPG" = (/obj/effect/landmark/start{name = "Geneticist"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) "bPH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) @@ -4872,7 +4872,7 @@ "bPJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) "bPK" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bPL" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) -"bPM" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) +"bPM" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) "bPN" = (/turf/simulated/wall/r_wall,/area/toxins/server_coldroom) "bPO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/toxins/server_coldroom) "bPP" = (/turf/simulated/wall/r_wall,/area/toxins/server) @@ -4953,9 +4953,9 @@ "bRm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/wall,/area/medical/genetics_cloning) "bRn" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable,/obj/item/roller,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) "bRo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) -"bRp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) -"bRq" = (/obj/machinery/light{dir = 8},/obj/item/device/radio/intercom{dir = 0; name = "station intercom (General)"; pixel_x = -28},/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/stokcubes,/obj/item/weapon/storage/box/neaeracubes,/obj/structure/table/glass,/obj/item/weapon/storage/box/wolpincubes,/obj/item/weapon/storage/box/farwacubes,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) -"bRr" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/roller,/obj/item/weapon/storage/box/disks,/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) +"bRp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Genetics Cloning"; req_access_txt = "0"; req_one_access_txt = "5;9"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) +"bRq" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) +"bRr" = (/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 28},/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/crew_quarters/hor) "bRs" = (/obj/machinery/r_n_d/server/robotics,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 250; oxygen = 0; temperature = 0},/area/toxins/server_coldroom) "bRt" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 250; oxygen = 0; temperature = 0},/area/toxins/server_coldroom) "bRu" = (/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 1; name = "Server Coldroom APC"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 250; oxygen = 0; temperature = 0},/area/toxins/server_coldroom) @@ -4974,7 +4974,7 @@ "bRH" = (/obj/machinery/computer/mecha,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bRI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/rack,/obj/item/device/taperecorder{pixel_x = -3},/obj/item/device/paicard{pixel_x = 4},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/crew_quarters/hor) "bRJ" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/crew_quarters/hor) -"bRK" = (/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/crew_quarters/hor) +"bRK" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bRL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bRM" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/requests_console{department = "Cargo Bay"; name = "Cargo Requests Console"; departmentType = 2; pixel_x = -30; pixel_y = 0},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "bRN" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Shaft Miner"},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) @@ -5021,9 +5021,9 @@ "bSC" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{dir = 1},/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cryo) "bSD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/medical/genetics_cloning) "bSE" = (/obj/machinery/clonepod/biomass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) -"bSF" = (/obj/machinery/computer/cloning,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) +"bSF" = (/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) "bSG" = (/obj/machinery/dna_scannernew,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) -"bSH" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) +"bSH" = (/obj/machinery/computer/cloning,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) "bSI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bSJ" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bSK" = (/obj/structure/stool/bed/chair/office/dark,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) @@ -5045,7 +5045,7 @@ "bTa" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bTb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bTc" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) -"bTd" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/photocopier,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) +"bTd" = (/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) "bTe" = (/obj/machinery/atmospherics/unary/outlet_injector/on,/turf/simulated/floor/plating/airless,/area/toxins/mixing) "bTf" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/shuttle/mining) "bTg" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/mining) @@ -5119,7 +5119,7 @@ "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) @@ -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) @@ -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) @@ -6599,7 +6599,6 @@ "cwU" = (/turf/simulated/wall,/area/engine/mechanic_workshop) "cwV" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/aft) "cwW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/aft) -"cwX" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating/airless,/area/assembly/assembly_line) "cwY" = (/obj/item/weapon/table_parts,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/assembly/assembly_line) "cwZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/assembly/assembly_line) "cxa" = (/obj/item/weapon/camera_assembly,/turf/simulated/floor/plasteel,/area/assembly/assembly_line) @@ -8850,6 +8849,7 @@ "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) @@ -8867,6 +8867,7 @@ "doB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "doC" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/maintenance/aft) "doD" = (/obj/item/stack/sheet/metal{amount = 10},/turf/simulated/floor/plating,/area/space) +"doE" = (/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/stokcubes,/obj/item/weapon/storage/box/neaeracubes,/obj/structure/table/glass,/obj/item/weapon/storage/box/wolpincubes,/obj/item/weapon/storage/box/farwacubes,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (SOUTHEAST)"; icon_state = "whitepurple"; dir = 6},/area/medical/genetics) (1,1,1) = {" bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -9008,20 +9009,20 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjCdjEdjDdjGdjFdjIdjHdjFdjJdjLdjKdjydjydjBbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbGWbmrbNkbmrbGXbGYbGZbGYbGYbGYbGYbHabyvbAfbHbbngbngbHcbpIbAibFvbHdbtLbHebHfbHfbHgbHhbHibHjbHkbHlbHmbHnbHobHpbHqbHrbHsbCpbCqbAEbvjbEibHubHvbHwbHxbvjbikbEkbHybHzbHybHybHybHybHybHAbHybKPbvwbKObucbHCbHDbHDbHEbHFbEybHGbHHbHIbHJbHKbHLbHMbHIbHNbHObHPbHQbHRbHSbHTbHTbHUbHVbHWbHXbHYbLibLCbLBbNdbNcbNebIfbIfbIgbIhbIibxGbIjbxJbxJbIkbIlbEUbImbInbIobIpbIqbIrbIsbItbIubIvbIubusbusbIwbEXbGxbLDbLDbLDbLDbLDbGxbFhbFkbFibFkbFkbGTbFhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjHdjHdjHdjMdjFdjNdjNdjFdjOdjHdjHdjQdjPdjydjBbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbLFbKmbIAbKmbIBbAebFqbFrbFrbFrbAebAebyvbAfbICbKobngbIEbpIbAibFvbIFbtLbIGbpIbrsbpIbIHbDXbvvbIIbHlbHmbIJbIKbILbIMbINbIObIPbIQbIRbISbISbITbIUbIVbvjbvjbikbEkbHybIWbIXbIYbIZbJabJbbJcbJdbMhbvwbKObCHbJfbJgbJhbJibJjbEybJkbJlbJmbJnbJobJpbJqbJrbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbGwchEbIecnfcjubvYbJIbJJbJKbJLbJLbxGbJMbJNbJObxGbJPbEUbJQbxGbJRbJSbJTbJUbJVbJWbJXbJYbJZbKabKbbKcbKdbKebKfbKfbIxbJFbJHbGzbKlbFfbDBbNhbDBbFfbLEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjSdjRdjUdjTdjVdjFdjWdjHdjXdjHdjHdjHdjHdjHdjMdjFbikbikbikbikbikbikbikbikbikbikdewdeCdevdevdevcOfdewbFnbBRbBRdezbAebFqbAebAebAebAebAebyvbAfbICbLwbngbLQbpIbKqbKrbpIbKsbpHbpIbpIbKtbtLbDXbvvbIIbHlbHmbCpbKubKvbqzbKxbKybKzbKAbKBbKCbKDbwXbKEbKFbwXbwYbwYbKGbHybKHbKIbKJbKKbKLbKLbKMbKNbMibvwbMjbucbEybKQbEubKRbKSbEybJkbKTbKUbKVbKWbKXbKYbKUbJkbKZbLabLbcchbLbbLcbLbbLdbLdbLebLfbLgbLhbLhcpLbLgbLgbLhbLhbLjbLkbLjbLjbxGbxGbxGbxGbxGbLlbLmbBobxGbLnbLobLpbLqbLqbLrbLsbLtbLubLvbLIbLxbLybLzbLAbLAbEObGAbHZbGxbGzbGzbGzbIabGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdjHdjHdkadkadkadjFdjHdjHdjFdkbdkddkcdkfdkedkgdjFbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbWobKmbIAbKmbFobLGbLHbAebAebAebLGbAebyvbAfbICbNrbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPdiNbLRcobbKzbLTbLUbLVbLWbLXbLYbLZbMabikbikbikbHybMbbMcbMdbMdbMebMfbMgbHybNSbNRbKObNTbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbLgbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbiTbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbGxbLDbLDbGxcnccndcnebOQbOSbUHbYdbGzbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdjHdjHdkadkadkadjFdjHdjHdjFdkbdkddkcdkfdkedkgdjFbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbWobKmbIAbKmbFobLGbLHbAebAebAebLGbAebyvbAfbICbNrbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPdiNbLRcobbKzbLTbLUbLVbLWbLXbLYbLZbMabikbikbikbHybMbbMcbMdbMdbMebMfbMgbHybNSbNRbKObNTbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbPEbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbiTbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbGxbLDbLDbGxcnccndcnebOQbOSbUHbYdbGzbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdjHdjHdjHdjHdjHdkidjHdjHdjFdjydjydjydjydjydjydkjbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdeEdeDdeGdeDbNlbNmbNnbNnbNnbNnbNnbNobNpbNqbICbWSbngbNsbNtbNubNvbNwbNxbNybNybNybNzbNzbNAbvvbNBbNCbHmbCpbNDbNEbNFbKvbNGbKzbNHbNIbNJbNKbNLbFNbNMbMabikbikbikbHybNNbNObNPbNQbMebMfbMgbHybPibNUbQObPjbNVbNWbNXbNYbNZbOabObbOcbKUbKUbOdbOebKUbKUbJkbKZbOfbOgbOhbOibOjbOkbLdbOlbOmbOnbOobOpbOqbOrbOrbOsbOtbOubOvbOwbJVbJVbOxbJVbOybJVbOzbJVbOAbOBbOBbOCbODbOEbOFbOGbOHcsjbOJbOKbOLbNabOMcxHbikbikbikbGxbORbJFbOPbOQbGzbOObNibGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkmdkldkodkndjHdjFdjHdjHdjFdjHdkqdkpdkrbikbikbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdewbFnbBRbBRbngbngbBRbBRbBRbBRbBRbngbngbBRbBRbBRbngbOVbOVbOVbOWbOVbNzbOXbOYbOZbPabNzbDXbvvbPbbPcbPcbCpbCpbCpbCpbCpbPdbKzbISbIRbPebNKbPgbPhbMabMabvjbvjbvjbHybHzbHybHybHybHybHybHybHybQPbvwbQQbPkbPlbPmbPnbPlbPlbPobPpbPqbPrbPsbPtbPubPvbPwbMqbPxbPybPzbPAbPBbPCbPDbPEbPFbPGbPHbPIbPJbPKbPLbMHbPMbLhbLhbPNbPObPNbPPbPQbPPbPPbPPbPRbPSbPTbPTbPUbPVbPWbPXbOFbPYbPZbQabQbbQcbQdbNabOMcxHbikbikbikbGxbNfbNgbGxbGzbGxbGxbGzbGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjydjydjydjydjydjydjFdjOdjHdksdjHdkudktdkvbikbikbikbikbikbikbikbikbikbikbikbikbikdeJdeIdevdeKdevdeLdeMbikbikbikbikbikbikbikbikbikbikbQgaabbikbikbikbikbOVbQhbQibQjbQkbNzbQlbQmbQnbQobNzbDXbvvbQpbQqbQrbQsbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbQEbQFbQGbQHbQIbQJbQKbQLbQMbQRbuabQSbvwbShbSgbSibvwbSjbPlbQTbQUbQVbQWbQXbJkbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibLbbRjbOibRkbRlbRmbRnbRobRpbLgbRqbMHbMHbMHbRrbLhbPNbRsbRtbRubRvbRwbRxbRybPPbRzbRAbRBbPTbPTbRCbPWbRDbREbWHbRGbRHbRIbRJbRKbNabRLbwobikbikbikbGxbGxbGxbGxbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydkxdkwdkydkxdkzdjFdjHdjHdjFdjHdkBdkAdkCbikbikbikbikbikbikbikbikbikbikbikbikbikdmideNdePdePdePdeNdmHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbOVbRMbRNbRObRPbNybRQbRRbRSbRTbNzbDXbRUbRVbvvbvvbFXbRWbubbQNbQMbRXbRYbRXbRZbSabSabSbbScbSdbSabSabSebSabSfbSabQMbQRbuabSlbSkbTJbTIbTLbTKbvwbPlbSmbQUbSnbSobSpbJkbSqbSrbSsbStbSubSvbSwbSxbJkbSybSzbLbbSAbSBbSBbSCbSDbSEbSFbSGbLgbSHbSIbMHbSJbSKbLhbPNbSLbSMbSNbSObSPbSQbSRbPPbSSbRAbSTbSTbPTbSUdnjbSWbSXbSYbSZbTabTbbTcbTdbNabOMbwobTebikbikbikbikbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdkDdkDdkDdkDdkDdkEdjHdjHdjFdjydjydjydjydjydjydjBbikbikbikbikbikbikbikbikbikbikbikdeRdeSdeSdeSdeTbikbikbikbikbikbikbikbikbOUbOTbQebOTbQfbikbikbikbOVbOVbTjbTkbRObTlbNybTmbQnbTnbTobNzbDXbTpbTqbTrbTsbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTCbTDbTEbTEbTEbTEbTEbTEbTFbTGbTHbTNbTMbTPbTOdlidjmdlkdljdllbPlbTQbQUbQVbTRbSpbJkbSqbSrbTSbTTbTUbTVbTWbTXbJsbTYbTZbLbbLbbUabUabLbbSDbLdbUbbUcbLgbUdbUebUfbUgbUhbLhbPNbUibUjbUkbUlbUmbUnbUobPPbUpbRAbSTbSTbPTbUqbUrbUsbUtbUubUvbUwbUxbUybUzbNabOMbUAbUBbUAbUCbUDbUCbUCbUCbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdkDdkDdkDdkFdkGdjFdjHdjHdjFdjHdjHdjHdkHdjHdkIdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbTfbTibThbTgbUIbUIbUIbOVbUJbUKbULbUMbUNbUObUPbUQbUQbURbNzbUSbUTbUUbUVbUVbUWbUXbUYbUVbUZbUZbVabVbbONbUZbUZbVdbQMbQMbVebVfbVfbVfbVgbVhbVfbVfbVibVjbVkbVkbVlbVkbVmbVnbVkbVobVpbVqbPlbVrbVsbSqbVtbVubVvbVwbVxbVybVubJkbSybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbVObLhbPNbPNbVPbVQbVRbVSbVRbVTbPPbVUbVVbVWbVWbPTbVXbVYbVZbNabNabNabNabNabNabNabNabOMbUAbWabWbbWcbWdbWdbWebUCbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikaabbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkKdkJdkDdkLdkMdjFdjHdjHdkNdjHdjHdjHdkOdjHdkPdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUEbUFbUEbQebUIbWmbWlbOVbWnbWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBbWCbUZdmbbWEbWFbWGcAzbUZbWIbWJbWKbVfbWLbWMbWObWNbWPbWQbWRceLbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAbXBbLhbXCbXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbPTbXNbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXWbXVbUCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkmdkldkodkndjHdjFdjHdjHdjFdjHdkqdkpdkrbikbikbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdewbFnbBRbBRbngbngbBRbBRbBRbBRbBRbngbngbBRbBRbBRbngbOVbOVbOVbOWbOVbNzbOXbOYbOZbPabNzbDXbvvbPbbPcbPcbCpbCpbCpbCpbCpbPdbKzbISbIRbPebNKbPgbPhbMabMabvjbvjbvjbHybHzbHybHybHybHybHybHybHybQPbvwbQQbPkbPlbPmbPnbPlbPlbPobPpbPqbPrbPsbPtbPubPvbPwbMqbPxbPybPzbPAbPBbPCbPDbRpbPFbPGbPHbPIbPJbPKbPLbTdbXBbLhbLhbPNbPObPNbPPbPQbPPbPPbPPbPRbPSbPTbPTbPUbPVbPWbPXbOFbPYbPZbQabQbbQcbQdbNabOMcxHbikbikbikbGxbNfbNgbGxbGzbGxbGxbGzbGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjydjydjydjydjydjydjFdjOdjHdksdjHdkudktdkvbikbikbikbikbikbikbikbikbikbikbikbikbikdeJdeIdevdeKdevdeLdeMbikbikbikbikbikbikbikbikbikbikbQgaabbikbikbikbikbOVbQhbQibQjbQkbNzbQlbQmbQnbQobNzbDXbvvbQpbQqbQrbQsbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbQEbQFbQGbQHbQIbQJbQKbQLbQMbQRbuabQSbvwbShbSgbSibvwbSjbPlbQTbQUbQVbQWbQXbJkbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibLbbRjbOibRkbRlbRmbRnbRobRqbPEbSFbMHbMHbMHbUzbLhbPNbRsbRtbRubRvbRwbRxbRybPPbRzbRAbRBbPTbPTbRCbPWbRDbREbWHbRGbRHbRIbRJbRrbNabRLbwobikbikbikbGxbGxbGxbGxbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydkxdkwdkydkxdkzdjFdjHdjHdjFdjHdkBdkAdkCbikbikbikbikbikbikbikbikbikbikbikbikbikdmideNdePdePdePdeNdmHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbOVbRMbRNbRObRPbNybRQbRRbRSbRTbNzbDXbRUbRVbvvbvvbFXbRWbubbQNbQMbRXbRYbRXbRZbSabSabSbbScbSdbSabSabSebSabSfbSabQMbQRbuabSlbSkbTJbTIbTLbTKbvwbPlbSmbQUbSnbSobSpbJkbSqbSrbSsbStbSubSvbSwbSxbJkbSybSzbLbbSAbSBbSBbSCbSDbSEbSHbSGbPEcgQbSIbMHbSJbSKbLhbPNbSLbSMbSNbSObSPbSQbSRbPPbSSbRAbSTbSTbPTbSUdnjbSWbSXbSYbSZbTabTbbTcbRKbNabOMbwobTebikbikbikbikbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdkDdkDdkDdkDdkDdkEdjHdjHdjFdjydjydjydjydjydjydjBbikbikbikbikbikbikbikbikbikbikbikdeRdeSdeSdeSdeTbikbikbikbikbikbikbikbikbOUbOTbQebOTbQfbikbikbikbOVbOVbTjbTkbRObTlbNybTmbQnbTnbTobNzbDXbTpbTqbTrbTsbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTCbTDbTEbTEbTEbTEbTEbTEbTFbTGbTHbTNbTMbTPbTOdlidjmdlkdljdllbPlbTQbQUbQVbTRbSpbJkbSqbSrbTSbTTbTUbTVbTWbTXbJsbTYbTZbLbbLbbUabUabLbbSDbLdbUbbUcbLgbUdbUebUfbUgbUhbLhbPNbUibUjbUkbUlbUmbUnbUobPPbUpbRAbSTbSTbPTbUqbUrbUsbUtbUubUvbUwbUxbUybVObNabOMbUAbUBbUAbUCbUDbUCbUCbUCbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdkDdkDdkDdkFdkGdjFdjHdjHdjFdjHdjHdjHdkHdjHdkIdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbTfbTibThbTgbUIbUIbUIbOVbUJbUKbULbUMbUNbUObUPbUQbUQbURbNzbUSbUTbUUbUVbUVbUWbUXbUYbUVbUZbUZbVabVbbONbUZbUZbVdbQMbQMbVebVfbVfbVfbVgbVhbVfbVfbVibVjbVkbVkbVlbVkbVmbVnbVkbVobVpbVqbPlbVrbVsbSqbVtbVubVvbVwbVxbVybVubJkbSybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbPMbLhbPNbPNbVPbVQbVRbVSbVRbVTbPPbVUbVVbVWbVWbPTbVXbVYbVZbNabNabNabNabNabNabNabNabOMbUAbWabWbbWcbWdbWdbWebUCbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikaabbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkKdkJdkDdkLdkMdjFdjHdjHdkNdjHdjHdjHdkOdjHdkPdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUEbUFbUEbQebUIbWmbWlbOVbWnbWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBbWCbUZdmbbWEbWFbWGcAzbUZbWIbWJbWKbVfbWLbWMbWObWNbWPbWQbWRceLbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAdoEbLhbXCbXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbPTbXNbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXWbXVbUCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkQdkDdkDdkRdjFdjHdjHdjFdkSdjHdjHdkUdkTdjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbUGbUEbUEdeycOWbTkbTkdeAbZAbTkbWqbYhbYibNzbNzbNzbNzbNzbNzbYjbUTbYkbYlbYmbYnbYnbYnbYobUZbYpbYqbYqbYqbYrbYsbYtbYubYvbYwbYxbYybYzbYAbYBbYCbVfbVibYDbVkbYEbYFbYGbYHbYIbVkbSmbQVbSnbSobYJbYKbYLbYMbYNbYObYPbYQbYRbVubYSbYTbYUbYVbYWbYXbYYbYZbZabZbbLgbLgbLgbLgbLgbZcbZdbZebLhbZfbXEbXEbZgbZhbXEbZibZjbZkbZlbRAbZmbZmbPTbPVbZnbPXbEXbUAbZobUAbUAbUAbUAbUAbUAbUAbZpbZqbUCbZrbZtbZsbUCaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbZubXXbXXbZvbWhbWhbXZbXZbZwbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkWdkVdkXdjFdjHdkYdjFdkZdladjHdjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUFbUFbUFbQebUIbYfbYebZzbZAbTkbZBbZCbZDbZEbZFbZFbZFbZGbUTbUTbUTbWxbUVbZHbYnbZIbYnbZJbUZbYpbYqbZKbYqbZLbUZbZMbZNbZObVfbZPbZQbZRbZSbZTbZUbZVbZWbZXbZYbZZcaacabcaccadbVkbTQbQVbQVcaebYJbYKcafcagcahbXjcaicajcElcalcamcancaocapcaqcarcIfcasbXscatbVAcaucavcawcaxcaycazcaAbZjbZfcaBbXEbXEbXEcaCcaDbZjbZkcaEbRAbZmbZmbPTcaFcaGbPXbEXcaHcaIcaJbUAcaKcaLcaMcaNcaOcaPcaQbUCcaRcaScaTbUCbUAbUAbUAbUAbUAbUAbUAbUAbikbikbikbikbikaabbikbikbikbikbikbikbikcaUbWhbZubWhbWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydjydjydjydjydjydjydjydjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaacbUTcjMcjMbUTcjMcjMbUTbikbikbikbTgbWjbYbbWkbTgbUIbUIbUIbOVcaYcaZcaZcaZbOVbOVbUTcbbcbaccAcbcbUTcbdcbebUVbZHbYnbYnbYncbfbUZbYpbYqbYqcbgcbhcbicbjcbkcblbVfbVfbVfbVfbVfcbmbVfbVfcbncbobVkbVkcbpbVkbVnbVkbVkbPlcbqcbqbPlccicbrcbscbtcbucbvcbwcbxcbycbzcbAcbBcaocapcbCcbDcbEcbFcbGcbHbVAcbIcbJcbKcbLcbMcbNcbOcbPcbQcbPcbRcbRcbRcbPcbScbPcbPcbTcbUbZmbZmbPTcbVbZnbPXcbWcbXcbYcbZccaccbccccccccdcceccfccgcckccjcdqcclcfeccmccnccoccpccqccrccscctaabaabaabaabaabaabaabaabbikbikbikbikbikbWgbWhccuccvccvbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbUTccBcqsbUTccBcqsbUTbikbikbikbYcbOTbYgbOTbZxbikaabbikbOVbOVbOVbOVbOVbOVclabUTcuRcsuccCccDbZFccEccFbUVccGccHdmcbYnccJccKccLccMccNccOccPbUZccQccRccSccTccUccUccUccUccVccWccXccYccYccZccZcdacdbcdcbVibPlcddcdecdfcdgcdhbYKcdicbtcdjcdkcdlcdmbSwcdncdocdpcffcdrcdrcdscdrcdrcdrcdtbVAcducdvcdwcdxcdycdzcdAcbPcdBcdCcdDcdEcdFcdCcdGcdHcdCcdIcdJbRBbPTbPTcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdUcdVcdWcdXcdYcdZceacebceaceccebcebcebcedceecefcegcehaabbikbikbikbikaabbikbikbikbikbikbikbikbWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaacbikaacbUTcfQcqsbUTcfQcqsbUTbikbikaabaabaabaabaabaabaabaabaabbUTcqscAjcwNbUTcEvcEwbUTcGJbUTbUTcekbUTbUTcelbUVcemcenceocepceqcercescetceucevcewccKcexceycezceAceBceBceBceBceCceDceEceFceGceFceHceIceJceKchvceMceNceOcePceQceRceSceTceUceVceWceXceYceZcfacfbcfccfgbMmbMmcfichOcgHceYchVcfjcfjcfkcfjcflcfmcfncfocbPcfpcfqcfrcfscfrcftcfucfvcdCbPTcfwbPTbPTcfxcfybZnbBxbEXbUAcfzbUAbUAcfAcfBcfCcfDcfEcebcfFcfGcfHcdUcfHcdUcfIcdUcdUbUAcfJcfKcfLcfMaabaabaabaabaabaabaabaabbikbikbikbikbikbWhbXZbXZbXZbXZbXZbXZcfNbXZcfObXZbXZbXZbXZbXZbWhbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabdnkaacaabaDDaDDaacbUTbUTcekbUTbUTcekbUTbUTbUTcjMcjMcjMbUTbUTbUTbUTbUTbUTbUTcqschodnmbUTdnnbUTbUTdnobUTcfPbVccqsbUTcfSbUVcfTcfUcfVbZHcfWcfXcfYbYpcfZcgacgbcfXcgccgdcgecgfcgfcggcghcgicgjcgkcglcgmbGycgnbVicgobGybGycgpcgqcgrcgscgtceQcgucgvcgwcgxcgycgzbMVcgBcgCcgzcgzcgDcgEcgEcgEcgEcgEcgGcgFciOcgJcgJcgKcgLcgMcgNcgOcgPcbPcgQcgRcgScgTcgScgUcgVcfrcgWcgXcgYbBxcgZbBxcfybZnbBxbEXchachbchcbUAbUAbUAbUAbUAchdcdUchechfcfIcdUchgcdUbZpcdUchhbUAchichjchkbUAaabbikbikbikbikaabbikbikbikbikbikbikbikbWhchlchlchlchlchlchlchmbXZchnchlcfObXZbXZbXZbXZbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabdnkaacaabaDDaDDaacbUTbUTcekbUTbUTcekbUTbUTbUTcjMcjMcjMbUTbUTbUTbUTbUTbUTbUTcqschodnmbUTdnnbUTbUTdnobUTcfPbVccqsbUTcfSbUVcfTcfUcfVbZHcfWcfXcfYbYpcfZcgacgbcfXcgccgdcgecgfcgfcggcghcgicgjcgkcglcgmbGycgnbVicgobGybGycgpcgqcgrcgscgtceQcgucgvcgwcgxcgycgzbMVcgBcgCcgzcgzcgDcgEcgEcgEcgEcgEcgGcgFciOcgJcgJcgKcgLcgMcgNcgOcgPcbPdomcgRcgScgTcgScgUcgVcfrcgWcgXcgYbBxcgZbBxcfybZnbBxbEXchachbchcbUAbUAbUAbUAbUAchdcdUchechfcfIcdUchgcdUbZpcdUchhbUAchichjchkbUAaabbikbikbikbikaabbikbikbikbikbikbikbikbWhchlchlchlchlchlchlchmbXZchnchlcfObXZbXZbXZbXZbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaaccjMcqscqscqscqsdoadnxcqscqscuRdnpdnpdowdnpdnpdnpdnpdnpdnpdnpdnpdnpdnpdnpdnpcsubUTchocfQchpbUTcfSchrchrchrchrchrchrbUZbUZbUZbUZbUZbUZbUZchschtchucWpchwchxchychychzchAcglbGybGychBchCchDbGybGybGycqOchFchGceOchHchIchJcgEchKchLchMbSqchLchNcfdcfdcfdcjncjlcjlcjlcjlckacgIbSqclPchPchQchRchSchTchUclQcbPchWchXcfrchYcfrchZciacibciccidciecifbBxcigcfybZncihbEXbFeciicijcikbwobxXbxXbUAcilcimcinciocipciqcirciscitciucivbUAciwciycixcizbikbikbikbikaahbikbikbikbikbikbikbikbikciAbXXbXXbXXbXXbXXbXXbXXciBciCbXZbXZbXZbXZciDbYabWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaabaabaaccjMdnrdnqdnscqscqsdoxcqscqsdnobUTbUTbUTbUTbUTbUTcekbUTbUTbUTbUTdntdntdntdntdntdntdntdntdntbUTcfScejbikbikbikbikciEbaTciGciHciIciJciKciLciMciNcmPciPciQciRciSciSciTciUciVciWciWciWciWciXciWbGybGybPlciYciZcjacjbcjccjdchScjecjfcjgcjhcjicjjcjkcjlcfdcnicjpcjpcjpcjpckNclSckUcnjcjqcjrcjscjtcbAcwncjvcbPcjwcjxcjycjzcjAcfrcjBcbPcbPbEXcjCbEXbEXbEXcjDcjEcjFbEXbxXciicjGcjHbwobwobwobUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbikbikbikbikbikaabbikbikbikbikbikbikbikbWhccvccvccvccvccvccvcjIbXZccuccvcjJbXZbXZbXZbXZbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbUTcjKcjKcjKcjKcjKcjKcjLcjKdnodnubUTcqsdoydnwdnycqsdnydnvdnzdnwdntdnAdnAdntdnBdntdnDdnCdntcqscelcjMbikcjNcjOcjPcjQcjRcjScjTcjUcjVcjWcjXcjYcjZcosckbckcckdckeckfckgckhciVckickjckjckjckkciWbGybGycklcklcklcklckmcklckncknckocklcklckpcklckqckrckscktcksclZaPKcmacmmcmlcmocmnckzckAckBckCckDckEckFcdccbPcbPckGcbPckHcbPckIckJckKcgnckLckMckvckOckPckQckRckSckPbxXciickTbxXbxXckVckWckXchabxXbxXbxXbxXbxXbxXbxXckYckZcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhbXZbXZbXZbXZbXZbXZcfNbXZcjJbXZbXZbXZbXZbXZbWhbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -9035,10 +9036,10 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSecsdctvctvctvdoBcsdctuctvctwctvctxctyctDctCdmedcYdmedmfcxnctEctFctEctEctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNctOctPctQctRctSctTctUctVctWctXciFctZcuacnqcubcuccudcuecufcugcuhcuicpFcujcqKcugcukcqKculcwrbikbikbikdbFcmkdbGdbJdbIdbCdbKdbMdbLdbOdbNceFceJdbPcoDcwpbikbikbikaabaabaabbikbikbikbikbikbikbikckPcurczQcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSedobctvdocctvdoBcuBdodcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQdoeceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcvmcvncqKcqJcqKcqKcvocpFcvpcqKcqKcqNcqKcyGcwrbikbikbikdbFdbRdbQdbTdbSdbVdbUdbXdbWdbybGychCcyHcuscoAbikbikbikbikbikaabckPckPckPckPckPckPckPckPckPcvucxScvwckPcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdogdofcrjcrjcrjcrjdnQcrjcrjcrjcrjdnXcrjcvFcvGcvGcvHctBdlXcrjcrmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvWcvWcvZcwacwbcwccwdcsObGycvrcwecwfcwgcwhcwicwjcwkcpFcwlcwjcwmcqNcqKcwocpMbikbikbikdbFdbZdbYdcadbIdccdcbdbUczRdbycyObVibVicuscoAbikbikbikbikbikbikckPcwtcwucwvcwwcwxcwycwzcwAcwBczScwDckPcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGacGafxafxacGafxafxaabagiaabaqZbikaqZaqZdoidoCdojdojdojdoldokcrjcwOcwPcwQcwRcwScwTcwUcwVcwWcwXcwYcwZcxacxbcxccxdcxecxfcxgcvKcxfcxhcxicxjcxjcxkcvKcxlcxmcxncxocbkcxpcxqcxrcxscxtcxucxtcxvcxwcxxcxycxzcxAcsOcsOcvrcwecpMcpMcxBcpMcpMcxCcxDcxEcxEcxEcxFcxEcyUcpMbikbikbikdbFdbFdbFdbFdbFdbydcedcgdcfdbybGybGyczhcuscoAbikbikbikbikbikbikckPcxOcxPcxOcxQcxRcqUcxScwAcxTczicxTckPcxOcxOcMpckPaabbikcwGcxWcxXcwJcwJcxYcwGczjbxXcvzbzNczMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikaabaabbikaabaabbikbikaabaabaabaabaabdoidoidohdoidoidoncEBcrjcrjcrjcrjcrjcrjcrjcrjcybcwWcwXcyccydcyecyfcyfcyfcyfcygcyhcyicxjcyjcxjcxjcykcxjcylcymcyncyocxocbkcypcyqcmScxscyscytcyucxscyvcywcyxcyycyzcyAcyBcyCcyDcyEcyEcAaczUcAdcAccAeczTcALceJcAhbGycAMcoAcoAcoAcoAcoAbikbikbikbikdcidchdckdcjdbydclbVibVicuscoAcoAcoAcoAcoAbikbikckPcxOcxOcxOcyZczaczbczcczdcAicAOcAvckPcAVcAYcAWckPbikbikcwGczkcwJczlcwJczmcwGbxXbxXcvzczMbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdoDbikacGbikczoczpczqbikczoczpczqbikczoczpczqbikbikdoidoocfRdopdoidoqcGKdojdojdojdojdojdojdojdojdojcEycwXcztcxjcykczucxjcxjcxjczvcxjcztcztcxjcxjcxjcxjczwczxcymczyctEczzcoacyqcyqczAcxsczBczCczDcxsczEctWczFczGczHczIczJczKbGyczLcdcczLbGycBacAZcBccBccBccBccBPcBNcBNcBNcBNcBNcBQcoAbikbikbikbikdcidchdckdcmcTabGyckObVicusbGybGybGycgmcoAbikbikckPcwAcwAcwAcwAczWcqUczXczYczZcCfcAbckPcCGcCYcCIckPbikbikcwGcAfcAgcDLcwJcDNcwGcEdbxXcvzbwoaabaabaabaabbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikczocAkczqbikczocAkczqbikczocAkczqbikaqZdoicfRcfRcfRdoidoidorczsdoidoiczsczsdoidoiczsczscwWcwXcztcAlcxjcAmcAncAocAocyjcxjcztcApcxjcxjcxjcxjcAqcArcAscAtbZNcAucAPcAwcAxcAycxsczBdlYcAAcxscABctWcsOcACcsLcADcAEcAFcAGcAHcAIcAJcAGcAKcAGcAGcAGcoAcoAcoAcoAcoAcoAcoAcoAcEhcoAbikbikbikbikdcicBTdcqcBUdbycgmcFdbVicFmcFlcFlcFnbGycoAbikbikckPcwtcwucwvcAQcARczbcAScATcAUcFrcIScAXcGscIScGtckPbikbikcwGcwGcBbcCrcBdcwGcwGbwobxXcGycyJcyJcyJbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGacGafxafxacGafxafxaabagiaabaqZbikaqZaqZdoidoCdojdojdojdoldokcrjcwOcwPcwQcwRcwScwTcwUcwVcwWcvOcwYcwZcxacxbcxccxdcxecxfcxgcvKcxfcxhcxicxjcxjcxkcvKcxlcxmcxncxocbkcxpcxqcxrcxscxtcxucxtcxvcxwcxxcxycxzcxAcsOcsOcvrcwecpMcpMcxBcpMcpMcxCcxDcxEcxEcxEcxFcxEcyUcpMbikbikbikdbFdbFdbFdbFdbFdbydcedcgdcfdbybGybGyczhcuscoAbikbikbikbikbikbikckPcxOcxPcxOcxQcxRcqUcxScwAcxTczicxTckPcxOcxOcMpckPaabbikcwGcxWcxXcwJcwJcxYcwGczjbxXcvzbzNczMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikaabaabbikaabaabbikbikaabaabaabaabaabdoidoidohdoidoidoncEBcrjcrjcrjcrjcrjcrjcrjcrjcybcwWcvOcyccydcyecyfcyfcyfcyfcygcyhcyicxjcyjcxjcxjcykcxjcylcymcyncyocxocbkcypcyqcmScxscyscytcyucxscyvcywcyxcyycyzcyAcyBcyCcyDcyEcyEcAaczUcAdcAccAeczTcALceJcAhbGycAMcoAcoAcoAcoAcoAbikbikbikbikdcidchdckdcjdbydclbVibVicuscoAcoAcoAcoAcoAbikbikckPcxOcxOcxOcyZczaczbczcczdcAicAOcAvckPcAVcAYcAWckPbikbikcwGczkcwJczlcwJczmcwGbxXbxXcvzczMbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdoDbikacGbikczoczpczqbikczoczpczqbikczoczpczqbikbikdoidoocfRdopdoidoqcGKdojdojdojdojdojdojdojdojdojcEycvOcztcxjcykczucxjcxjcxjczvcxjcztcztcxjcxjcxjcxjczwczxcymczyctEczzcoacyqcyqczAcxsczBczCczDcxsczEctWczFczGczHczIczJczKbGyczLcdcczLbGycBacAZcBccBccBccBccBPcBNcBNcBNcBNcBNcBQcoAbikbikbikbikdcidchdckdcmcTabGyckObVicusbGybGybGycgmcoAbikbikckPcwAcwAcwAcwAczWcqUczXczYczZcCfcAbckPcCGcCYcCIckPbikbikcwGcAfcAgcDLcwJcDNcwGcEdbxXcvzbwoaabaabaabaabbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikczocAkczqbikczocAkczqbikczocAkczqbikaqZdoicfRcfRcfRdoidoidorczsdoidoiczsczsdoidoiczsczscwWcvOcztcAlcxjcAmcAncAocAocyjcxjcztcApcxjcxjcxjcxjcAqcArcAscAtbZNcAucAPcAwcAxcAycxsczBdlYcAAcxscABctWcsOcACcsLcADcAEcAFcAGcAHcAIcAJcAGcAKcAGcAGcAGcoAcoAcoAcoAcoAcoAcoAcoAcEhcoAbikbikbikbikdcicBTdcqcBUdbycgmcFdbVicFmcFlcFlcFnbGycoAbikbikckPcwtcwucwvcAQcARczbcAScATcAUcFrcIScAXcGscIScGtckPbikbikcwGcwGcBbcCrcBdcwGcwGbwobxXcGycyJcyJcyJbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikaqZaabczocAkczqbikczocAkczqaabczocAkczqbikaabdoidondosdoqdoibikaabbikbikbikbikbikaabbikbikczscwWcvKcBecxjcBfcBgcBhcBicBjcBicBkcBicBlcBmcxfcBncztcztczxcBocBpcBqcBrcBscBtcBucBvcBwcBxcBycBzcBAcBBcBCcBDcBDcBEcBFcBGcBHcBIcBJcBKcBLcBMcrecBOcHucHtcDPcDPcDPcDPcDPcDPcHvcoAcEhclUclUclUclUclUclUcjmbEJcjmcFfclUclUcoAcoAcoAcoAcusbGycoAbikbikckPcxOcBZcxOcCacxRcqUcCbcCccCdcCecqUcqUcCgcqUcChckPbikaabaabcwGcwGcCscwGcwGbikbwobxXcvzcyJcHycHxbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikczocAkczqaabczocAkczqbikczocAkczqaabbikdoidoiczsdoidoibikaabaabbikaabbikaabaabbikbikcybcCicvKcCjcCkcCkcClcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcCmcCncCmcCocCmcrmcCpcCqcFbcCtcCtcCtcCucCvcBCcCwcCxcCycCzcCAcCBcBIcCCcCDcCEcCFcHzcCHcHAcCJaabcCKcCKcCKcCKcCKcHBcoAcHDcHCcIGcHHcIHctackycjocBWckuckycBXcCPcBYcCRcCQcoAcusbGycoAbikbikckPcxOcxOcxOcAQcCTczbcCUcCVcCWcCXcCZcCZcDacqUcDbckPaabaabbikbikbikcIKbikbikbikbwobxXcvzcyJbxXbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxaqZbikczocAkczqaabczocAkczqbikczocAkczqaabbikbikbikbikbikbikbikbikbikaabcDccDdcDdcDdcDdcybcDecwWcDfcDgcDhcDhcDicDjcDkcDlcDlcDlcDlcDmdotcDocDncDncDpcDpcDncDqcDrcDscDtcDtctYcDvcDwcDxcDycDzcDzcDAcDBcDCcDDcDEcDFcCAcDGcBIcDHcDIcDJcDKcILcDMcIMcDOcDPcDQcDRcDScDTcCKcHBcoDcEhclUcvscvqcIOcINcxLckxckwdcrclUcCSczVcuqczVcDUcoAcusbGycoAcoAbikckPcwAcwAcwAcwAcEkcqUcCbdlZcEmcCecqUcEncEocEocEpcEqcXYaabbikbikbikbikbikbikbikbwobxXcGybxXbxXcIPbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 7f5a03e58af..41715794c29 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -160,7 +160,7 @@ "dd" = (/obj/structure/rack,/obj/item/weapon/kitchen/knife/ritual,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station) "de" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space) "df" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/shard,/obj/item/weapon/kitchen/knife,/obj/item/weapon/storage/firstaid/tactical,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) -"dg" = (/obj/structure/table/holotable,/obj/item/clothing/suit/armor/riot/knight/red,/obj/item/clothing/head/helmet/knight/red,/obj/item/weapon/holo/claymore/red,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_knightarena) +"dg" = (/obj/structure/table/holotable,/obj/item/clothing/suit/armor/riot/knight/red,/obj/item/clothing/head/helmet/riot/knight/red,/obj/item/weapon/holo/claymore/red,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_knightarena) "dh" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_knightarena) "di" = (/obj/structure/table/holotable,/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/source_knightarena) "dj" = (/turf/simulated/floor/holofloor,/area/holodeck/source_knightarena) @@ -181,7 +181,7 @@ "dy" = (/obj/structure/holowindow{dir = 1},/turf/simulated/floor/holofloor{dir = 4; icon_state = "blue"},/area/holodeck/source_knightarena) "dz" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "blue"},/area/holodeck/source_knightarena) "dA" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "blue"},/area/holodeck/source_knightarena) -"dB" = (/obj/structure/table/holotable,/obj/item/clothing/suit/armor/riot/knight/blue,/obj/item/clothing/head/helmet/knight/blue,/obj/item/weapon/holo/claymore/blue,/turf/simulated/floor/holofloor{dir = 2; icon_state = "blue"},/area/holodeck/source_knightarena) +"dB" = (/obj/structure/table/holotable,/obj/item/clothing/suit/armor/riot/knight/blue,/obj/item/clothing/head/helmet/riot/knight/blue,/obj/item/weapon/holo/claymore/blue,/turf/simulated/floor/holofloor{dir = 2; icon_state = "blue"},/area/holodeck/source_knightarena) "dC" = (/obj/structure/table/holotable,/turf/simulated/floor/holofloor{dir = 10; icon_state = "blue"},/area/holodeck/source_knightarena) "dD" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/simulated/floor/holofloor{dir = 6; icon_state = "blue"},/area/holodeck/source_knightarena) "dE" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source) 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/z5.dmm b/_maps/map_files/cyberiad/z5.dmm index d84a5dfbf24..131fe41aea3 100644 --- a/_maps/map_files/cyberiad/z5.dmm +++ b/_maps/map_files/cyberiad/z5.dmm @@ -349,8 +349,8 @@ "gK" = (/obj/machinery/light{dir = 1},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/research_outpost/anomaly) "gL" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/research_outpost/anomaly) "gM" = (/obj/structure/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/color/latex,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/research_outpost/anomaly) -"gN" = (/mob/living/carbon/human/monkey,/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) -"gO" = (/obj/machinery/door/window/westleft{dir = 4; name = "Monkey Pen"; req_access_txt = "47"},/mob/living/carbon/human/monkey,/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) +"gN" = (/obj/machinery/door/window/westleft{dir = 4; name = "Monkey Pen"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) +"gO" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) "gP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) "gQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/power/apc{dir = 4; name = "Outpost Hallways APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) "gR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/wall/r_wall,/area/research_outpost/power) @@ -379,14 +379,15 @@ "ho" = (/obj/machinery/door/window/westleft{dir = 8; name = "Locker room"; opacity = 0; req_access_txt = "65"},/turf/simulated/floor/plasteel,/area/research_outpost/anomaly) "hp" = (/turf/simulated/floor/plasteel,/area/research_outpost/anomaly) "hq" = (/obj/structure/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/color/latex,/obj/machinery/camera{c_tag = "Research Outpost Anomaly Lab Storage"; dir = 8; network = list("Research Outpost")},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/research_outpost/anomaly) -"hr" = (/obj/machinery/alarm{dir = 4; pixel_x = -25; pixel_y = 0},/mob/living/carbon/human/monkey,/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) -"hs" = (/obj/structure/window/reinforced{dir = 4},/mob/living/carbon/human/monkey,/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) +"hr" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) +"hs" = (/obj/machinery/alarm{dir = 4; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) "ht" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) "hu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) "hv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/wall/r_wall,/area/research_outpost/power) "hw" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/light/small,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/firealarm{pixel_y = -24},/turf/simulated/floor/plating,/area/research_outpost/power) "hx" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/research_outpost/power) "hy" = (/obj/structure/sign/deathsposal{pixel_x = 32},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/turf/simulated/floor/plating,/area/research_outpost/power) +"hz" = (/obj/structure/rack,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "hA" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/research_outpost/power) "hB" = (/obj/effect/spawner/window/reinforced,/obj/structure/transit_tube{icon_state = "N-SE"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway) "hC" = (/obj/structure/transit_tube{icon_state = "D-SW"},/turf/simulated/wall/r_wall,/area/research_outpost/hallway) @@ -770,7 +771,6 @@ "oQ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/research_outpost/iso3) "oR" = (/obj/machinery/conveyor{dir = 1; id = "iso3"},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/research_outpost/iso3) "oS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1; pump_direction = 0},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/research_outpost/iso3) -"oT" = (/obj/structure/rack,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "oU" = (/obj/structure/rack,/obj/item/weapon/storage/box/lights/bulbs{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/box/lights/tubes{pixel_x = -5; pixel_y = 5},/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "oV" = (/turf/simulated/mineral/random/low_chance,/area/mine/explored) "oW" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/turf/simulated/mineral/random/low_chance,/area/mine/explored) @@ -1505,8 +1505,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagageOePeQekacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjacacacacacacaaaaaQaaaaaaaaaaaaaaaoeReSeSeUeVeWeXeYeZfafbfcfdfefffgfhfhfjfkflfmeHeCfieTfqeHfrafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagfsftfufvekacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacaaaaaaaaaQaaaaaaaaaaaaaaaofwenfxfyfzfAfBfCfDaLfEfFfGfHfIfJfKfLfMcZfNfOfPfQfQfRfSfTfUfVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagfWfXfYekfZgaekekekekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaaaQaaaaaaaaaaaaaaaofwenfxfygbgcfBgdgeaLgfggcZghcZcZcZcZgicZgjgkeHglgmgngogpgqgraeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggsgtgugvgwgxbPdLgyekgzgAekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaaaQaaaaaaelaaaaaaaLfwengBfygCfAfBgEgFaLgGgHgIgJgKgLgMcZgNgOgPgQgRgSgTfQgVgpefafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggWgXgtgYgZhahbhcgyhdgAgAgzekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaahehfhfhfadhfhfhffnhihjbahkhlaLaLaLaLaLhmhnhogJhpgLhqcZhrhshthuhvhwhxgUhyhAhBhCaLhDbzaAaAaAaAaAaAaBhEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggsgtgugvgwgxbPdLgyekgzgAekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaaaQaaaaaaelaaaaaaaLfwengBfygCfAfBgEgFaLgGgHgIgJgKgLgMcZgOgNgPgQgRgSgTfQgVgpefafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggWgXgtgYgZhahbhcgyhdgAgAgzekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaahehfhfhfadhfhfhffnhihjbahkhlaLaLaLaLaLhmhnhogJhpgLhqcZhshrhthuhvhwhxgUhyhAhBhCaLhDbzaAaAaAaAaAaAaBhEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFgWgXgWgugufZhGgZekfvhHekgAhIekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaahJhKhLhNhNhNhOhPhQhRhShThUhVhWhXfohZiaibicidieifigihcZiiijikileHeHimeHeHeHinioipiqirisisitisisisiubhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagiviwguixiygueQizhaiAiBiCekekekekekekbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacacaaaaaaaaaaiDiEhNhNhNhNiFiGiHiIiJiKiLiMhWfpiOiPiQiRiSiTiUiViWiXiYiZiWjajbjcjdjejfjcjgjciWjhjijjjkjljmjnjojpisbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagjqjrjsguiygAgYjtgZcrekjujvekjwgyjxjyekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacacacaaaaaaaaaajzjAhNhNjBhNjCjDjEjFjGjHjIjJhWjKjLjMjNjOjPjQjRjSjTjUjVjWjXjUjYjVjZjUjVkakbkckdkekfkgkhkikjkkkkklisbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1516,7 +1516,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceklGeQdLgYiAlLkmdLkmfudLdLmzgydLeQeQekcrmAeQdLekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacafafaeaeaeaeaeaeaeaeaeaeafafmBmCmDacaaaaaaaaaaaaagldlXmFmbmHmImJmcljmdmMhWkFkFkFkFkFmgmPkHmQmRmSkKmTmUmVkNmWmXmYkNmZnanbncndndnelCnfaiaAaAngnhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaceklGnieQeQiAeQlafZeQnjfulakpcreQnkfvekkmcrlLdLekbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafnlaeaeaeaeaeaeaeaeaeaeaenmafnnnoafafaaaaaaaaaaaaagldmenqnrmEnrntmGljljnvhWyuyumKyukFnAnBkHnCnDnEkKnFnGnHkNnInJnKkNnLnMlCnNnOnPnOlCnnnQafagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaceklGnRgYgweknSeknTfYekhaeknTfYekgZlLekmziCcrjuekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafnUaeaeaeaenVaeaeaeaeaeaenWnlnXnlafaaaaaaaaaaaaaaagldmNmLmOnZnuobnunphWodhWoeoeoeoekFnsmgkHogohoikKojokolkNomonookNopoqorlClClClCosotafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacekekekekekeknSekougyhajufvgZkogZiCgYeknTovowoxekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafnmaeaeaeaeaeaeaeaeaeaeaeaeoyozoAaaaaaaaaaaaaaaagagldnwnunxnZnynununzhWoHhWaeaeaeaekFoIoJkHoKoLoMkKoNoOoPkNoQoRoSkNoToUorafoVafoWmCoXafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacekekekekekeknSekougyhajufvgZkogZiCgYeknTovowoxekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafnmaeaeaeaeaeaeaeaeaeaeaeaeoyozoAaaaaaaaaaaaaaaagagldnwnunxnZnynununzhWoHhWaeaeaeaekFoIoJkHoKoLoMkKoNoOoPkNoQoRoSkNhzoUorafoVafoWmCoXafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacbjbjbjbjbjeknSekgyjuoYizdlgYgyekgZfvekoZpapapbekpcbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafafaeaeaeaeaeaeaeaeaeaeaeaepdpepfaaaaaaaaaaaaagagagldldpgpgldldnZnZldldnYhWaeaeaeaekFkFkFkHkHkHkHkKkKkKkKkNkNkNkNkNororpjlOakakpknQafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacbjbjbjbjbjbjeknSekjudLiCgygZfviCeknSekekjwcrpaplpmpcpcbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafafaeaeaeaeaeaeaeaeaeaeaeaepnpoppaaaaaaaaaaagpqprpsptpupvpwpxaeaeaeaeaeqCaeaeaeaeaepBpCpDafafafafafafafafafafafafafafpEpFnQpGafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbjbjbjbjbjbjbjbjeknSekekekekekekekekeknSekjwcrjxcrpbpHpcpcbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafaeaeaeaeaeaeaeaeaeaeaeaeaepIpJpKpLpLpLpLpLpLpMpNpOpPpPpQpRpRaeaeaeaeaeqCaeaeaeaeaepdpopWafafoVoVoVoVoVoVafafafafafpEpFnQpXaepXafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index adb9d60ab1f..4db227ab6f6 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -156,7 +156,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if(can_unwrench && istype(W, /obj/item/weapon/wrench)) var/turf/T = get_turf(src) - if (level == 1 && isturf(T) && T.intact) + if(level == 1 && isturf(T) && T.intact) to_chat(user, "You must remove the plating first.") return 1 var/datum/gas_mixture/int_air = return_air() @@ -168,11 +168,11 @@ Pipelines + Other Objects -> Pipe network playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, "You begin to unfasten \the [src]...") - if (internal_pressure > 2*ONE_ATMOSPHERE) + if(internal_pressure > 2*ONE_ATMOSPHERE) to_chat(user, "As you begin unwrenching \the [src] a gush of air blows in your face... maybe you should reconsider?") unsafe_wrenching = TRUE //Oh dear oh dear - if (do_after(user, 40, target = src) && isnull(gcDestroyed)) + if(do_after(user, 40, target = src) && isnull(gcDestroyed)) user.visible_message( \ "[user] unfastens \the [src].", \ "You have unfastened \the [src].", \ @@ -293,7 +293,7 @@ Pipelines + Other Objects -> Pipe network add_underlay_adapter(T, , node_dir, "") add_underlay_adapter(T, node, node_dir, "-supply") add_underlay_adapter(T, , node_dir, "-scrubbers") - else if (node.icon_connect_type == "-scrubbers") + else if(node.icon_connect_type == "-scrubbers") add_underlay_adapter(T, , node_dir, "") add_underlay_adapter(T, , node_dir, "-supply") add_underlay_adapter(T, node, node_dir, "-scrubbers") diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index f24623f9422..8951977d4db 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -49,7 +49,7 @@ for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) if(target.initialize_directions & get_dir(target,src)) var/c = check_connect_types(target,src) - if (c) + if(c) target.connected_to = c connected_to = c node1 = target @@ -58,7 +58,7 @@ for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) if(target.initialize_directions & get_dir(target,src)) var/c = check_connect_types(target,src) - if (c) + if(c) target.connected_to = c connected_to = c node2 = target diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index aff64bd8a10..06fe22de2ce 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -35,7 +35,7 @@ /obj/machinery/atmospherics/binary/dp_vent_pump/New() ..() - if (!id_tag) + if(!id_tag) assign_uid() id_tag = num2text(uid) icon = null @@ -93,11 +93,11 @@ if(T.intact && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe)) return else - if (node1) + if(node1) add_underlay(T, node1, turn(dir, -180), node1.icon_connect_type) else add_underlay(T, node1, turn(dir, -180)) - if (node2) + if(node2) add_underlay(T, node2, dir, node2.icon_connect_type) else add_underlay(T, node2, dir) diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 3e643565ac6..ae27f829621 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -155,9 +155,9 @@ return /obj/machinery/atmospherics/binary/passive_gate/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 (on) + if(on) to_chat(user, "You cannot unwrench this [src], turn it off first.") return 1 return ..() diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index a8d8c453706..6157c87115c 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -182,9 +182,9 @@ Thus, the two variables affect pump operation are set in New(): update_icon() /obj/machinery/atmospherics/binary/pump/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 (!(stat & NOPOWER) && on) + if(!(stat & NOPOWER) && on) to_chat(user, "You cannot unwrench this [src], turn it off first.") return 1 return ..() \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/binary_devices/valve.dm b/code/ATMOSPHERICS/components/binary_devices/valve.dm index 1c0f625e036..b9ab8a4272d 100644 --- a/code/ATMOSPHERICS/components/binary_devices/valve.dm +++ b/code/ATMOSPHERICS/components/binary_devices/valve.dm @@ -52,7 +52,7 @@ add_fingerprint(usr) update_icon(1) sleep(10) - if (open) + if(open) close() return open() diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 059cb25f080..875f09f6bda 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -173,9 +173,9 @@ Thus, the two variables affect pump operation are set in New(): update_icon() /obj/machinery/atmospherics/binary/volume_pump/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 (!(stat & NOPOWER) && on) + if(!(stat & NOPOWER) && on) to_chat(user, "You cannot unwrench this [src], turn it off first.") return 1 return ..() \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/omni_devices/filter.dm b/code/ATMOSPHERICS/components/omni_devices/filter.dm index 8570f92462a..94efade9b1a 100644 --- a/code/ATMOSPHERICS/components/omni_devices/filter.dm +++ b/code/ATMOSPHERICS/components/omni_devices/filter.dm @@ -117,7 +117,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "omni_filter.tmpl", "Omni Filter Control", 330, 330) ui.set_initial_data(data) ui.open() diff --git a/code/ATMOSPHERICS/components/omni_devices/mixer.dm b/code/ATMOSPHERICS/components/omni_devices/mixer.dm index 27bf6437c9e..c64703773d3 100644 --- a/code/ATMOSPHERICS/components/omni_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/omni_devices/mixer.dm @@ -141,7 +141,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) - if (!ui) + if(!ui) ui = new(user, src, ui_key, "omni_mixer.tmpl", "Omni Mixer Control", 360, 330) ui.set_initial_data(data) ui.open() diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index 77fd2328b08..beae30e55db 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -103,7 +103,7 @@ for(var/datum/omni_port/P in ports) int_pressure += P.air.return_pressure() var/datum/gas_mixture/env_air = loc.return_air() - if ((int_pressure - env_air.return_pressure()) > 2*ONE_ATMOSPHERE) + if((int_pressure - env_air.return_pressure()) > 2*ONE_ATMOSPHERE) to_chat(user, "You cannot unwrench [src], it is too exerted due to internal pressure.") add_fingerprint(user) return 1 diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 698753fa1be..612f51df80a 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -191,7 +191,7 @@ Filter types: onclose(user, "atmo_filter") return - if (src.temp) + if(src.temp) dat = text("[]

Clear Screen", src.temp, src) //else // src.on != src.on @@ -207,7 +207,7 @@ Filter types: src.add_fingerprint(usr) if(href_list["filterset"]) src.filter_type = text2num(href_list["filterset"]) - if (href_list["temp"]) + if(href_list["temp"]) src.temp = null if(href_list["set_press"]) var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num @@ -218,7 +218,7 @@ Filter types: src.updateUsrDialog() /* for(var/mob/M in viewers(1, src)) - if ((M.client && M.machine == src)) + if((M.client && M.machine == src)) src.attack_hand(M) */ return diff --git a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm index 2f6845a16c6..cdf11742ad8 100644 --- a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm @@ -172,7 +172,7 @@ interact(user) return 1 if(istype(W, /obj/item/weapon/wrench)) - if (!(stat & NOPOWER) && on) + if(!(stat & NOPOWER) && on) to_chat(user, "You cannot unwrench this [src], turn if off first.") return 1 return ..() diff --git a/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm b/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm index 94384f8ca3d..dc7da589017 100644 --- a/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm +++ b/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm @@ -28,10 +28,10 @@ var/transfer_moles = 0.25 * environment.total_moles() var/datum/gas_mixture/external_removed = environment.remove(transfer_moles) - if (!external_removed) + if(!external_removed) return radiate() - if (external_removed.total_moles() < 10) + if(external_removed.total_moles() < 10) return radiate() //Get same info from connected gas @@ -39,7 +39,7 @@ var/internal_transfer_moles = 0.25 * air_contents.total_moles() var/datum/gas_mixture/internal_removed = air_contents.remove(internal_transfer_moles) - if (!internal_removed) + if(!internal_removed) environment.merge(external_removed) return 1 @@ -63,7 +63,7 @@ var/internal_transfer_moles = 0.25 * air_contents.total_moles() var/datum/gas_mixture/internal_removed = air_contents.remove(internal_transfer_moles) - if (!internal_removed) + if(!internal_removed) return 1 var/combined_heat_capacity = internal_removed.heat_capacity() + RADIATION_CAPACITY diff --git a/code/ATMOSPHERICS/components/unary_devices/unary_base.dm b/code/ATMOSPHERICS/components/unary_devices/unary_base.dm index 3c993e26b0b..e61a62736c3 100644 --- a/code/ATMOSPHERICS/components/unary_devices/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary_devices/unary_base.dm @@ -27,7 +27,7 @@ for(var/obj/machinery/atmospherics/target in get_step(src, dir)) if(target.initialize_directions & get_dir(target,src)) var/c = check_connect_types(target,src) - if (c) + if(c) target.connected_to = c src.connected_to = c node = target diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 6fe6c646cf5..0a856fb047a 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -63,7 +63,7 @@ icon = null initial_loc = get_area(loc) area_uid = initial_loc.uid - if (!id_tag) + if(!id_tag) assign_uid() id_tag = num2text(uid) ..() @@ -121,7 +121,7 @@ /obj/machinery/atmospherics/unary/vent_pump/process() if(!..() || (stat & (NOPOWER|BROKEN))) return 0 - if (!node) + if(!node) on = 0 //broadcast_status() // from now air alarm/control computer should request update purposely --rastaf0 if(!on) @@ -164,7 +164,7 @@ var/transfer_moles = pressure_delta*air_contents.volume/(environment.temperature * R_IDEAL_GAS_EQUATION) var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) - if (isnull(removed)) //in space + if(isnull(removed)) //in space return air_contents.merge(removed) @@ -252,7 +252,7 @@ on = !on if(signal.data["checks"] != null) - if (signal.data["checks"] == "default") + if(signal.data["checks"] == "default") pressure_checks = pressure_checks_default else pressure_checks = text2num(signal.data["checks"]) @@ -264,7 +264,7 @@ pump_direction = text2num(signal.data["direction"]) if(signal.data["set_internal_pressure"] != null) - if (signal.data["set_internal_pressure"] == "default") + if(signal.data["set_internal_pressure"] == "default") internal_pressure_bound = internal_pressure_bound_default else internal_pressure_bound = between( @@ -274,7 +274,7 @@ ) if(signal.data["set_external_pressure"] != null) - if (signal.data["set_external_pressure"] == "default") + if(signal.data["set_external_pressure"] == "default") external_pressure_bound = external_pressure_bound_default else external_pressure_bound = between( @@ -320,7 +320,7 @@ /obj/machinery/atmospherics/unary/vent_pump/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W - if (WT.remove_fuel(0,user)) + if(WT.remove_fuel(0,user)) to_chat(user, "Now welding the vent.") if(do_after(user, 20, target = src)) if(!src || !WT.isOn()) return @@ -343,12 +343,12 @@ if(!welded) if(open) to_chat(user, " Now closing the vent.") - if (do_after(user, 20, target = src)) + if(do_after(user, 20, target = src)) open = 0 user.visible_message("[user] screwdrivers the vent shut.", "You screwdriver the vent shut.", "You hear a screwdriver.") else to_chat(user, " Now opening the vent.") - if (do_after(user, 20, target = src)) + if(do_after(user, 20, target = src)) open = 1 user.visible_message("[user] screwdrivers the vent shut.", "You screwdriver the vent shut.", "You hear a screwdriver.") return @@ -365,8 +365,8 @@ if(istype(W, /obj/item/device/multitool)) update_multitool_menu(user) return 1 - if (istype(W, /obj/item/weapon/wrench)) - if (!(stat & NOPOWER) && on) + if(istype(W, /obj/item/weapon/wrench)) + if(!(stat & NOPOWER) && on) to_chat(user, "You cannot unwrench this [src], turn it off first.") return 1 diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index d0b0c9eb693..a7829d9fc1c 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -44,7 +44,7 @@ icon = null initial_loc = get_area(loc) area_uid = initial_loc.uid - if (!id_tag) + if(!id_tag) assign_uid() id_tag = num2text(uid) ..() @@ -63,26 +63,26 @@ /obj/machinery/atmospherics/unary/vent_scrubber/auto_use_power() if(!powered(power_channel)) return 0 - if (!on || welded) + if(!on || welded) return 0 if(stat & (NOPOWER|BROKEN)) return 0 var/amount = idle_power_usage - if (scrubbing) - if (scrub_CO2) + if(scrubbing) + if(scrub_CO2) amount += idle_power_usage - if (scrub_Toxins) + if(scrub_Toxins) amount += idle_power_usage - if (scrub_N2) + if(scrub_N2) amount += idle_power_usage - if (scrub_N2O) + if(scrub_N2O) amount += idle_power_usage else amount = active_power_usage - if (widenet) + if(widenet) amount += amount*(adjacent_turfs.len*(adjacent_turfs.len/2)) use_power(amount, power_channel) return 1 @@ -178,13 +178,13 @@ if(!..()) return 0 - if (widenet) + if(widenet) check_turfs() if(stat & (NOPOWER|BROKEN)) return - if (!node) + if(!node) on = 0 if(welded) @@ -194,8 +194,8 @@ return 0 scrub(loc) - if (widenet) - for (var/turf/simulated/tile in adjacent_turfs) + if(widenet) + for(var/turf/simulated/tile in adjacent_turfs) scrub(tile) //we populate a list of turfs with nonatmos-blocked cardinal turfs AND @@ -203,11 +203,11 @@ /obj/machinery/atmospherics/unary/vent_scrubber/proc/check_turfs() adjacent_turfs.Cut() var/turf/T = loc - if (istype(T)) + if(istype(T)) adjacent_turfs = T.GetAtmosAdjacentTurfs(alldir=1) /obj/machinery/atmospherics/unary/vent_scrubber/proc/scrub(var/turf/simulated/tile) - if (!tile || !istype(tile)) + if(!tile || !istype(tile)) return 0 var/datum/gas_mixture/environment = tile.return_air() @@ -218,7 +218,7 @@ //Take a gas sample var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) - if (isnull(removed)) //in space + if(isnull(removed)) //in space return //Filter it @@ -253,7 +253,7 @@ tile.air_update_turf() else //Just siphoning all air - if (air_contents.return_pressure()>=50*ONE_ATMOSPHERE) + if(air_contents.return_pressure()>=50*ONE_ATMOSPHERE) return var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume) @@ -372,7 +372,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params) if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W - if (WT.remove_fuel(0,user)) + if(WT.remove_fuel(0,user)) to_chat(user, "Now welding the scrubber.") if(do_after(user, 20, target = src)) if(!src || !WT.isOn()) return @@ -394,8 +394,8 @@ if(istype(W, /obj/item/device/multitool)) update_multitool_menu(user) return 1 - if (istype(W, /obj/item/weapon/wrench)) - if (!(stat & NOPOWER) && on) + if(istype(W, /obj/item/weapon/wrench)) + if(!(stat & NOPOWER) && on) to_chat(user, "You cannot unwrench this [src], turn it off first.") return 1 diff --git a/code/ATMOSPHERICS/pipes/cap.dm b/code/ATMOSPHERICS/pipes/cap.dm index f20d71c2828..0504062eb09 100644 --- a/code/ATMOSPHERICS/pipes/cap.dm +++ b/code/ATMOSPHERICS/pipes/cap.dm @@ -67,7 +67,7 @@ for(var/obj/machinery/atmospherics/target in get_step(src, dir)) if(target.initialize_directions & get_dir(target,src)) var/c = check_connect_types(target,src) - if (c) + if(c) target.connected_to = c src.connected_to = c node = target diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/ATMOSPHERICS/pipes/manifold.dm index 8ba5db9fbd5..4b37036f96a 100644 --- a/code/ATMOSPHERICS/pipes/manifold.dm +++ b/code/ATMOSPHERICS/pipes/manifold.dm @@ -124,8 +124,8 @@ if(!node1 && !node2 && !node3) var/turf/T = get_turf(src) new /obj/item/pipe(loc, make_from=src) - for (var/obj/machinery/meter/meter in T) - if (meter.target == src) + for(var/obj/machinery/meter/meter in T) + if(meter.target == src) new /obj/item/pipe_meter(T) qdel(meter) qdel(src) diff --git a/code/ATMOSPHERICS/pipes/manifold4w.dm b/code/ATMOSPHERICS/pipes/manifold4w.dm index 5975ffce26b..b6cd15bc211 100644 --- a/code/ATMOSPHERICS/pipes/manifold4w.dm +++ b/code/ATMOSPHERICS/pipes/manifold4w.dm @@ -97,8 +97,8 @@ if(!node1 && !node2 && !node3 && !node4) var/turf/T = get_turf(src) new /obj/item/pipe(loc, make_from=src) - for (var/obj/machinery/meter/meter in T) - if (meter.target == src) + for(var/obj/machinery/meter/meter in T) + if(meter.target == src) new /obj/item/pipe_meter(T) qdel(meter) qdel(src) diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm index fbd5f85b6c5..5db391d4dd0 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm @@ -144,8 +144,8 @@ if(!node1 && !node2) var/turf/T = get_turf(src) new /obj/item/pipe(loc, make_from=src) - for (var/obj/machinery/meter/meter in T) - if (meter.target == src) + for(var/obj/machinery/meter/meter in T) + if(meter.target == src) new /obj/item/pipe_meter(T) qdel(meter) qdel(src) diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm index 5cde784c8ce..a771bdd6234 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm @@ -96,17 +96,17 @@ /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/New() .. () - switch (dir) - if (SOUTH) + switch(dir) + if(SOUTH) initialize_directions = NORTH initialize_directions_he = SOUTH - if (NORTH) + if(NORTH) initialize_directions = SOUTH initialize_directions_he = NORTH - if (EAST) + if(EAST) initialize_directions = WEST initialize_directions_he = EAST - if (WEST) + if(WEST) initialize_directions = EAST initialize_directions_he = WEST diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm index 7cf983e0e32..db62f8e51fe 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm @@ -37,14 +37,14 @@ overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") underlays.Cut() - if (node1) + if(node1) universal_underlays(node1) if(node2) universal_underlays(node2) else var/node2_dir = turn(get_dir(src,node1),-180) universal_underlays(,node2_dir) - else if (node2) + else if(node2) universal_underlays(node2) var/node1_dir = turn(get_dir(src,node2),-180) universal_underlays(,node1_dir) diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm index a93351b29c7..1fcb45e7959 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm @@ -48,14 +48,14 @@ overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") underlays.Cut() - if (node1) + if(node1) universal_underlays(node1) if(node2) universal_underlays(node2) else var/node1_dir = get_dir(node1,src) universal_underlays(,node1_dir) - else if (node2) + else if(node2) universal_underlays(node2) else universal_underlays(,dir) diff --git a/code/LINDA/LINDA_fire.dm b/code/LINDA/LINDA_fire.dm index afbeb0a0e45..14f8ab20998 100644 --- a/code/LINDA/LINDA_fire.dm +++ b/code/LINDA/LINDA_fire.dm @@ -165,7 +165,7 @@ var/turf/simulated/T = loc if(T.to_be_destroyed) var/chance_of_deletion - if (T.heat_capacity) //beware of division by zero + if(T.heat_capacity) //beware of division by zero chance_of_deletion = T.max_fire_temperature_sustained / T.heat_capacity * 8 //there is no problem with prob(23456), min() was redundant --rastaf0 else chance_of_deletion = 100 diff --git a/code/LINDA/LINDA_system.dm b/code/LINDA/LINDA_system.dm index 2584192e7b4..423356c4e8e 100644 --- a/code/LINDA/LINDA_system.dm +++ b/code/LINDA/LINDA_system.dm @@ -83,35 +83,35 @@ turf/CanPass(atom/movable/mover, turf/target, height=1.5,air_group=0) //alldir includes adjacent diagonal tiles that can share // air with both of the related adjacent cardinal tiles /turf/proc/GetAtmosAdjacentTurfs(alldir = 0) - if (!istype(src, /turf/simulated)) + if(!istype(src, /turf/simulated)) return list() var/adjacent_turfs = list() var/turf/simulated/curloc = src - for (var/direction in cardinal) + for(var/direction in cardinal) if(!(curloc.atmos_adjacent_turfs & direction)) continue var/turf/simulated/S = get_step(curloc, direction) - if (istype(S)) + if(istype(S)) adjacent_turfs += S - if (!alldir) + if(!alldir) return adjacent_turfs - for (var/direction in diagonals) + for(var/direction in diagonals) var/matchingDirections = 0 var/turf/simulated/S = get_step(curloc, direction) - for (var/checkDirection in cardinal) + for(var/checkDirection in cardinal) if(!(S.atmos_adjacent_turfs & checkDirection)) continue var/turf/simulated/checkTurf = get_step(S, checkDirection) - if (checkTurf in adjacent_turfs) + if(checkTurf in adjacent_turfs) matchingDirections++ - if (matchingDirections >= 2) + if(matchingDirections >= 2) adjacent_turfs += S break diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index 3aeacb942a7..b292e7664b2 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -246,14 +246,14 @@ overlays -= icemaster var/new_overlay_type = tile_graphic() - if (new_overlay_type == atmos_overlay_type) + if(new_overlay_type == atmos_overlay_type) return var/atmos_overlay = get_atmos_overlay_by_name(atmos_overlay_type) - if (atmos_overlay) + if(atmos_overlay) overlays -= atmos_overlay atmos_overlay = get_atmos_overlay_by_name(new_overlay_type) - if (atmos_overlay) + if(atmos_overlay) overlays += atmos_overlay atmos_overlay_type = new_overlay_type diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm index 83a6ac5b20a..ec9ad2f2128 100644 --- a/code/__DEFINES/clothing.dm +++ b/code/__DEFINES/clothing.dm @@ -78,3 +78,5 @@ #define BLOCKHEADHAIR 4 // temporarily removes the user's hair overlay. Leaves facial hair. #define BLOCKHAIR 32768 // temporarily removes the user's hair, facial and otherwise. + +#define ONESIZEFITSALL 1 // determines if something can be worn by a fatty or not. diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index ca293307099..a05575f575d 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -54,6 +54,13 @@ #define AI_IDLE 2 #define AI_OFF 3 +//Attack types for checking shields/hit reactions + +#define MELEE_ATTACK 1 +#define UNARMED_ATTACK 2 +#define PROJECTILE_ATTACK 3 +#define THROWN_PROJECTILE_ATTACK 4 + //Gun Stuff #define SAWN_INTACT 0 #define SAWN_OFF 1 diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 915cb8816e8..0562d7086ab 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -4,13 +4,9 @@ #define NOBLUDGEON 4 // when an item has this it produces no "X has been hit by Y with Z" message with the default handler #define AIRTIGHT 8 // mask allows internals #define HANDSLOW 16 // If an item has this flag, it will slow you to carry it -#define NOSHIELD 32 // weapon not affected by shield -#define CONDUCT 64 // conducts electricity (metal etc.) -#define ABSTRACT 128 // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way -#define ON_BORDER 512 // item has priority to check when entering or leaving -#define NODELAY 32768 // 1 second attackby delay skipped (Can be used once every 0.2s). Most objects have a 1s attackby delay, which doesn't require a flag. - -#define NOBLOODY 2048 // used to items if they don't want to get a blood overlay +#define CONDUCT 32 // conducts electricity (metal etc.) +#define ABSTRACT 64 // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way +#define ON_BORDER 128 // item has priority to check when entering or leaving #define GLASSESCOVERSEYES 1024 #define MASKCOVERSEYES 1024 // get rid of some of the other retardation in these flags @@ -21,14 +17,13 @@ #define HEADBANGPROTECT 4096 #define EARBANGPROTECT 1024 -#define THICKMATERIAL 1024 //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. (NOTE: flag shared with NOSLIP) #define NOSLIP 1024 //prevents from slipping on wet floors, in space etc #define OPENCONTAINER 4096 // is an open container for chemistry purposes -#define BLOCK_GAS_SMOKE_EFFECT 8192 // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY! (NOTE: flag shared with ONESIZEFITSALL) -#define ONESIZEFITSALL 8192 -#define PLASMAGUARD 16384 //Does not get contaminated by plasma. +#define BLOCK_GAS_SMOKE_EFFECT 8192 // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY! +#define THICKMATERIAL 8192 //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. (NOTE: flag shared with BLOCK_GAS_SMOKE_EFFECT) + #define NOREACT 16384 //Reagents dont' react inside this container. diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 482a25baf1b..fc874959cff 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -122,3 +122,12 @@ #define NUTRITION_LEVEL_FED 350 #define NUTRITION_LEVEL_HUNGRY 250 #define NUTRITION_LEVEL_STARVING 150 +<<<<<<< HEAD +======= + +//Used for calculations for negative effects of having genetics powers +#define DEFAULT_GENE_STABILITY 100 +#define GENE_INSTABILITY_MINOR 5 +#define GENE_INSTABILITY_MODERATE 10 +#define GENE_INSTABILITY_MAJOR 15 +>>>>>>> 26e13f270f62f6104106ed087a318469ad4d9d02 diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index d36405db5d1..5a6d0d0d595 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -66,6 +66,7 @@ #define COLOR_YELLOW "#FFFF00" #define COLOR_ORANGE "#FF9900" #define COLOR_WHITE "#FFFFFF" +#define COLOR_GRAY "#808080" //some arbitrary defines to be used by self-pruning global lists. (see master_controller) #define PROCESS_KILL 26 //Used to trigger removal from a processing list @@ -156,6 +157,8 @@ for(type in view(range, dview_mob)) #define END_FOR_DVIEW dview_mob.loc = null +#define get_turf(A) (get_step(A, 0)) + #define MIN_SUPPLIED_LAW_NUMBER 15 #define MAX_SUPPLIED_LAW_NUMBER 50 @@ -255,3 +258,6 @@ #define TRIGGER_GUARD_ALLOW_ALL -1 #define TRIGGER_GUARD_NONE 0 #define TRIGGER_GUARD_NORMAL 1 + +// Macro to get the current elapsed round time, rather than total world runtime +#define ROUND_TIME (round_start_time ? (world.time - round_start_time) : 0) diff --git a/code/__DEFINES/tick.dm b/code/__DEFINES/tick.dm index 0469a81a392..71a63af6289 100644 --- a/code/__DEFINES/tick.dm +++ b/code/__DEFINES/tick.dm @@ -2,4 +2,4 @@ #define TICK_LIMIT_TO_RUN 85 #define TICK_CHECK ( world.tick_usage > TICK_LIMIT_RUNNING ? stoplag() : 0 ) -#define CHECK_TICK if (world.tick_usage > TICK_LIMIT_RUNNING) stoplag() \ No newline at end of file +#define CHECK_TICK if(world.tick_usage > TICK_LIMIT_RUNNING) stoplag() \ No newline at end of file diff --git a/code/__HELPERS/AnimationLibrary.dm b/code/__HELPERS/AnimationLibrary.dm index 65225d37363..fcabe2e0a78 100644 --- a/code/__HELPERS/AnimationLibrary.dm +++ b/code/__HELPERS/AnimationLibrary.dm @@ -64,7 +64,7 @@ return var/matrix/M = matrix() var/do_loops = 15 - while (do_loops > 0) + while(do_loops > 0) do_loops-- animate(A, transform = M, pixel_z = A.pixel_z + 12, alpha = A.alpha - 17, time = 1, loop = 1, easing = LINEAR_EASING) M.Scale(1.2,1.2) diff --git a/code/__HELPERS/experimental.dm b/code/__HELPERS/experimental.dm index 27daccfc58c..533f67b68d9 100644 --- a/code/__HELPERS/experimental.dm +++ b/code/__HELPERS/experimental.dm @@ -16,18 +16,18 @@ * -2, parameter A is not a string */ /proc/strpos(const/A, const/B) - if (istext(A) == 0 || length(A) < 1) + if(istext(A) == 0 || length(A) < 1) return -2 - if (istext(B) == 0 || length(B) > 1) + if(istext(B) == 0 || length(B) > 1) return -1 var/i = findtext(A, B) - if (0 == i) + if(0 == i) return 0 - while (i) + while(i) . = i i = findtext(A, B, i + 1) @@ -35,8 +35,8 @@ var/prototype = Object.type Object = null - for (var/type in params2list(types)) - if (ispath(prototype, text2path(type))) + for(var/type in params2list(types)) + if(ispath(prototype, text2path(type))) return 1 return 0 @@ -45,7 +45,7 @@ /obj/machinery/proc/getArea() var/area/A = loc.loc - if (A != myArea) + if(A != myArea) myArea = A . = myArea \ No newline at end of file diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 47cee347876..f1498862540 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -10,7 +10,7 @@ /proc/get_area_master(const/O) var/area/A = get_area(O) - if (isarea(A)) + if(isarea(A)) return A /proc/get_area(atom/A) @@ -194,7 +194,7 @@ var/datum/robot_component/CO = borg.get_component("radio") if(!CO) continue //No radio component (Shouldn't happen) - if(!borg.is_component_functioning("radio") || !borg.use_power(CO.energy_consumption)) + if(!borg.is_component_functioning("radio")) continue //No power. var/turf/speaker = get_turf(R) @@ -440,7 +440,7 @@ proc/pollCandidates(var/Question, var/be_special_type, var/antag_age_check = 0, var/roletext = be_special_type ? get_roletext(be_special_type) : null var/list/mob/dead/observer/candidates = list() var/time_passed = world.time - if (!Question) + if(!Question) Question = "Would you like to be a special role?" for(var/mob/dead/observer/G in player_list) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index a8c548bdd7a..8a44c1b7cab 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -29,7 +29,7 @@ init_datum_subtypes(/datum/nations, all_nations, null, "default_name") init_datum_subtypes(/datum/language, all_languages, null, "name") - for (var/language_name in all_languages) + for(var/language_name in all_languages) var/datum/language/L = all_languages[language_name] if(!(L.flags & NONGLOBAL)) language_keys[":[lowertext(L.key)]"] = L @@ -46,21 +46,13 @@ if(S.flags & IS_WHITELISTED) whitelisted_species += S.name - paths = subtypesof(/datum/emote) - for(var/T in paths) - var/datum/emote/E = new T - if(istype(T, /datum/emote/custom)) - continue - emotes += E - - init_subtypes(/datum/table_recipe, table_recipes) return 1 /* // Uncomment to debug chemical reaction list. /client/verb/debug_chemical_list() - for (var/reaction in chemical_reactions_list) + for(var/reaction in chemical_reactions_list) . += "chemical_reactions_list\[\"[reaction]\"\] = \"[chemical_reactions_list[reaction]]\"\n" if(islist(chemical_reactions_list[reaction])) var/list/L = chemical_reactions_list[reaction] diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 6376ebb4215..5b51ad21187 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -747,7 +747,7 @@ The _flatIcons list is a cache for generated icon files. add = icon(I:icon, I:icon_state, I:dir) // This checks for a silent failure mode of the icon routine. If the requested dir // doesn't exist in this icon state it returns a 32x32 icon with 0 alpha. - if (I:dir != SOUTH && add.Width() == 32 && add.Height() == 32) + if(I:dir != SOUTH && add.Width() == 32 && add.Height() == 32) // Check every pixel for blank (computationally expensive, but the process is limited // by the amount of film on the station, only happens when we hit something that's // turned, and bails at the very first pixel it sees. @@ -760,7 +760,7 @@ The _flatIcons list is a cache for generated icon files. if(!blankpixel) break // If we ALWAYS returned a null (which happens when GetPixel encounters something with alpha 0) - if (blankpixel) + if(blankpixel) // Pull the default direction. add = icon(I:icon, I:icon_state) else // 'I' is an appearance object. @@ -830,8 +830,8 @@ The _flatIcons list is a cache for generated icon files. return composite proc/adjust_brightness(var/color, var/value) - if (!color) return "#FFFFFF" - if (!value) return color + if(!color) return "#FFFFFF" + if(!value) return color var/list/RGB = ReadRGB(color) RGB[1] = Clamp(RGB[1]+value,0,255) @@ -844,7 +844,7 @@ proc/sort_atoms_by_layer(var/list/atoms) var/list/result = atoms.Copy() var/gap = result.len var/swapped = 1 - while (gap > 1 || swapped) + while(gap > 1 || swapped) swapped = 0 if(gap > 1) gap = round(gap / 1.3) // 1.3 is the emperic comb sort coefficient diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index 948602def06..e749dab5fa8 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -12,17 +12,17 @@ //Returns a list in plain english as a string /proc/english_list(var/list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" ) var/total = input.len - if (!total) + if(!total) return "[nothing_text]" - else if (total == 1) + else if(total == 1) return "[input[1]]" - else if (total == 2) + else if(total == 2) return "[input[1]][and_text][input[2]]" else var/output = "" var/index = 1 - while (index < total) - if (index == total - 1) + while(index < total) + if(index == total - 1) comma_text = final_comma_text output += "[input[index]][comma_text]" @@ -107,22 +107,22 @@ /proc/pickweight(list/L) var/total = 0 var/item - for (item in L) - if (!L[item]) + for(item in L) + if(!L[item]) L[item] = 1 total += L[item] total = rand(1, total) - for (item in L) + for(item in L) total -=L [item] - if (total <= 0) + if(total <= 0) return item return null //Pick a random element from the list and remove it from the list. /proc/pick_n_take(list/listfrom) - if (listfrom.len > 0) + if(listfrom.len > 0) var/picked = pick(listfrom) listfrom -= picked return picked @@ -130,7 +130,7 @@ //Returns the top(last) element from the list and removes it from the list (typical stack function) /proc/pop(list/listfrom) - if (listfrom.len > 0) + if(listfrom.len > 0) var/picked = listfrom[listfrom.len] listfrom.len-- return picked @@ -459,22 +459,22 @@ proc/dd_sortedObjectList(list/incoming) var/list/list_bottom var/current_sort_object - for (current_sort_object in incoming) + for(current_sort_object in incoming) low_index = 1 high_index = sorted_list.len - while (low_index <= high_index) + while(low_index <= high_index) // Figure out the midpoint, rounding up for fractions. (BYOND rounds down, so add 1 if necessary.) midway_calc = (low_index + high_index) / 2 current_index = round(midway_calc) - if (midway_calc > current_index) + if(midway_calc > current_index) current_index++ current_item = sorted_list[current_index] current_item_value = current_item:dd_SortValue() current_sort_object_value = current_sort_object:dd_SortValue() - if (current_sort_object_value < current_item_value) + if(current_sort_object_value < current_item_value) high_index = current_index - 1 - else if (current_sort_object_value > current_item_value) + else if(current_sort_object_value > current_item_value) low_index = current_index + 1 else // current_sort_object == current_item @@ -485,7 +485,7 @@ proc/dd_sortedObjectList(list/incoming) insert_index = low_index // Special case adding to end of list. - if (insert_index > sorted_list.len) + if(insert_index > sorted_list.len) sorted_list += current_sort_object continue @@ -515,28 +515,28 @@ proc/dd_sortedObjectList(list/incoming) var/sort_result var/current_sort_text - for (current_sort_text in incoming) + for(current_sort_text in incoming) low_index = 1 high_index = sorted_text.len - while (low_index <= high_index) + while(low_index <= high_index) // Figure out the midpoint, rounding up for fractions. (BYOND rounds down, so add 1 if necessary.) midway_calc = (low_index + high_index) / 2 current_index = round(midway_calc) - if (midway_calc > current_index) + if(midway_calc > current_index) current_index++ current_item = sorted_text[current_index] - if (case_sensitive) + if(case_sensitive) sort_result = sorttextEx(current_sort_text, current_item) else sort_result = sorttext(current_sort_text, current_item) switch(sort_result) - if (1) + if(1) high_index = current_index - 1 // current_sort_text < current_item - if (-1) + if(-1) low_index = current_index + 1 // current_sort_text > current_item - if (0) + if(0) low_index = current_index // current_sort_text == current_item break @@ -544,7 +544,7 @@ proc/dd_sortedObjectList(list/incoming) insert_index = low_index // Special case adding to end of list. - if (insert_index > sorted_text.len) + if(insert_index > sorted_text.len) sorted_text += current_sort_text continue diff --git a/code/__HELPERS/logging.dm b/code/__HELPERS/logging.dm index 5d2427603c7..b2d81f9060d 100644 --- a/code/__HELPERS/logging.dm +++ b/code/__HELPERS/logging.dm @@ -21,12 +21,12 @@ /proc/log_admin(text) admin_log.Add(text) - if (config.log_admin) + if(config.log_admin) diary << "\[[time_stamp()]]ADMIN: [text]" /proc/log_debug(text) - if (config.log_debug) + if(config.log_debug) diary << "\[[time_stamp()]]DEBUG: [text]" for(var/client/C in admins) @@ -35,55 +35,55 @@ /proc/log_game(text) - if (config.log_game) + if(config.log_game) diary << "\[[time_stamp()]]GAME: [text]" /proc/log_vote(text) - if (config.log_vote) + if(config.log_vote) diary << "\[[time_stamp()]]VOTE: [text]" /proc/log_access(text) - if (config.log_access) + if(config.log_access) diary << "\[[time_stamp()]]ACCESS: [text]" /proc/log_say(text) - if (config.log_say) + if(config.log_say) diary << "\[[time_stamp()]]SAY: [text]" /proc/log_ooc(text) - if (config.log_ooc) + if(config.log_ooc) diary << "\[[time_stamp()]]OOC: [text]" /proc/log_whisper(text) - if (config.log_whisper) + if(config.log_whisper) diary << "\[[time_stamp()]]WHISPER: [text]" /proc/log_emote(text) - if (config.log_emote) + if(config.log_emote) diary << "\[[time_stamp()]]EMOTE: [text]" /proc/log_attack(text) - if (config.log_attack) + if(config.log_attack) diary << "\[[time_stamp()]]ATTACK: [text]" //Seperate attack logs? Why? /proc/log_adminsay(text) - if (config.log_adminchat) + if(config.log_adminchat) diary << "\[[time_stamp()]]ADMINSAY: [text]" /proc/log_adminwarn(text) - if (config.log_adminwarn) + if(config.log_adminwarn) diary << "\[[time_stamp()]]ADMINWARN: [text]" /proc/log_pda(text) - if (config.log_pda) + if(config.log_pda) diary << "\[[time_stamp()]]PDA: [text][log_end]" /proc/log_misc(text) diary << "\[[time_stamp()]]MISC: [text][log_end]" /proc/log_to_dd(text) - world.log << text //this comes before the config check because it can't possibly runtime - if(config.log_world_output) + world.log << text + if(config && config.log_world_output) diary << "\[[time_stamp()]]DD_OUTPUT: [text][log_end]" /** diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 9657f867b5a..4bc41808b96 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -116,7 +116,7 @@ proc/random_skin_tone(species = "Human") proc/skintone2racedescription(tone, species = "Human") if(species == "Human") - switch (tone) + switch(tone) if(30 to INFINITY) return "albino" if(20 to 30) return "pale" if(5 to 15) return "light skinned" @@ -171,7 +171,7 @@ proc/add_logs(mob/target, mob/user, what_done, var/object=null, var/addition=nul target.attack_log += text("\[[time_stamp()]\] Has been [what_done] by [key_name(user)][object ? " with [object]" : " "][addition]") if(admin) log_attack("[key_name(user)] [what_done] [key_name(target)][object ? " with [object]" : " "][addition]") - if(target.client) + if(istype(target) && target.client) if(what_done in ignore) return if(target == user)return if(!admin) return @@ -190,15 +190,15 @@ proc/add_logs(mob/target, mob/user, what_done, var/object=null, var/addition=nul var/holding = user.get_active_hand() var/datum/progressbar/progbar - if (progress) + if(progress) progbar = new(user, time, target) var/endtime = world.time+time var/starttime = world.time . = 1 - while (world.time < endtime) + while(world.time < endtime) sleep(1) - if (progress) + if(progress) progbar.update(world.time - starttime) if(!user || !target) . = 0 @@ -213,7 +213,7 @@ proc/add_logs(mob/target, mob/user, what_done, var/object=null, var/addition=nul if((!drifting && user.loc != user_loc) || target.loc != target_loc || user.get_active_hand() != holding || user.incapacitated() || user.lying ) . = 0 break - if (progress) + if(progress) qdel(progbar) /proc/do_after(mob/user, delay, needhand = 1, atom/target = null, progress = 1) @@ -236,15 +236,15 @@ proc/add_logs(mob/target, mob/user, what_done, var/object=null, var/addition=nul holdingnull = 0 //Users hand started holding something, check to see if it's still holding that var/datum/progressbar/progbar - if (progress) + if(progress) progbar = new(user, delay, target) var/endtime = world.time + delay var/starttime = world.time . = 1 - while (world.time < endtime) + while(world.time < endtime) sleep(1) - if (progress) + if(progress) progbar.update(world.time - starttime) if(drifting && !user.inertia_dir) @@ -269,5 +269,5 @@ proc/add_logs(mob/target, mob/user, what_done, var/object=null, var/addition=nul if(user.get_active_hand() != holding) . = 0 break - if (progress) + if(progress) qdel(progbar) \ No newline at end of file diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 0ac3da3a10a..0375b7aacea 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -1,13 +1,13 @@ var/church_name = null /proc/church_name() - if (church_name) + if(church_name) return church_name var/name = "" name += pick("Holy", "United", "First", "Second", "Last") - if (prob(20)) + if(prob(20)) name += " Space" name += " " + pick("Church", "Cathedral", "Body", "Worshippers", "Movement", "Witnesses") @@ -17,7 +17,7 @@ var/church_name = null var/command_name = null /proc/command_name() - if (command_name) + if(command_name) return command_name var/name = "Central Command" @@ -33,7 +33,7 @@ var/command_name = null var/religion_name = null /proc/religion_name() - if (religion_name) + if(religion_name) return religion_name var/name = "" @@ -47,12 +47,12 @@ var/religion_name = null return "Nyx" /proc/station_name() - if (station_name) + if(station_name) return station_name var/name = "" - if (config && config.server_name) + if(config && config.server_name) world.name = "[config.server_name]: [name]" else world.name = station_name @@ -65,7 +65,7 @@ var/religion_name = null var/new_station_name = "" //Rare: Pre-Prefix - if (prob(10)) + if(prob(10)) name = pick("Imperium", "Heretical", "Cuban", "Psychic", "Elegant", "Common", "Uncommon", "Rare", "Unique", "Houseruled", "Religious", "Atheist", "Traditional", "Houseruled", "Mad", "Super", "Ultra", "Secret", "Top Secret", "Deep", "Death", "Zybourne", "Central", "Main", "Government", "Uoi", "Fat", "Automated", "Experimental", "Augmented") new_station_name = name + " " name = "" @@ -107,7 +107,7 @@ var/religion_name = null station_name = name - if (config && config.server_name) + if(config && config.server_name) world.name = "[config.server_name]: [name]" else world.name = name @@ -116,7 +116,7 @@ var/religion_name = null var/syndicate_name = null /proc/syndicate_name() - if (syndicate_name) + if(syndicate_name) return syndicate_name var/name = "" @@ -125,11 +125,11 @@ var/syndicate_name = null name += pick("Clandestine", "Prima", "Blue", "Zero-G", "Max", "Blasto", "Waffle", "North", "Omni", "Newton", "Cyber", "Bonk", "Gene", "Gib") // Suffix - if (prob(80)) + if(prob(80)) name += " " // Full - if (prob(60)) + if(prob(60)) name += pick("Syndicate", "Consortium", "Collective", "Corporation", "Group", "Holdings", "Biotech", "Industries", "Systems", "Products", "Chemicals", "Enterprises", "Family", "Creations", "International", "Intergalactic", "Interplanetary", "Foundation", "Positronics", "Hive") // Broken else diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index f490f71df43..5020693a499 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -62,6 +62,6 @@ // Calls the above proc on each entry of a list to ensure its entries are clean /proc/sql_sanitize_text_list(var/list/l) var/list/new_list = l.Copy() - for (var/text in new_list) + for(var/text in new_list) sql_sanitize_text(text) return new_list \ No newline at end of file diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 0aa9589c510..b17cda4e560 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -154,15 +154,15 @@ proc/checkhtml(var/t) t = sanitize_simple(t, list("&#"=".")) var/p = findtext(t,"<",1) - while (p) //going through all the tags + while(p) //going through all the tags var/start = p++ var/tag = copytext(t,p, p+1) - if (tag != "/") - while (reject_bad_text(copytext(t, p, p+1), 1)) + if(tag != "/") + while(reject_bad_text(copytext(t, p, p+1), 1)) tag = copytext(t,start, p) p++ tag = copytext(t,start+1, p) - if (!(tag in paper_tag_whitelist)) //if it's unkown tag, disarming it + if(!(tag in paper_tag_whitelist)) //if it's unkown tag, disarming it t = copytext(t,1,start-1) + "<" + copytext(t,start+1) p = findtext(t,"<",p) return t @@ -218,7 +218,7 @@ proc/checkhtml(var/t) //Adds 'u' number of zeros ahead of the text 't' /proc/add_zero(t, u) - while (length(t) < u) + while(length(t) < u) t = "0[t]" return t @@ -236,15 +236,15 @@ proc/checkhtml(var/t) //Returns a string with reserved characters and spaces before the first letter removed /proc/trim_left(text) - for (var/i = 1 to length(text)) - if (text2ascii(text, i) > 32) + for(var/i = 1 to length(text)) + if(text2ascii(text, i) > 32) return copytext(text, i) return "" //Returns a string with reserved characters and spaces after the last letter removed /proc/trim_right(text) - for (var/i = length(text), i > 0, i--) - if (text2ascii(text, i) > 32) + for(var/i = length(text), i > 0, i--) + if(text2ascii(text, i) > 32) return copytext(text, 1, i + 1) return "" diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index 4973de14b81..872f299479c 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -24,6 +24,7 @@ //Returns the world time in english /proc/worldtime2text(time = world.time) + time = (round_start_time ? (time - round_start_time) : (time - world.time)) return "[round(time / 36000)+12]:[(time / 600 % 60) < 10 ? add_zero(time / 600 % 60, 1) : time / 600 % 60]" /proc/time_stamp() diff --git a/code/__HELPERS/timed_alerts.dm b/code/__HELPERS/timed_alerts.dm index 929341c3fc0..97e92900288 100644 --- a/code/__HELPERS/timed_alerts.dm +++ b/code/__HELPERS/timed_alerts.dm @@ -10,9 +10,9 @@ var/ref_result ref_result = ref_alert.timed_alert(src, question, title, time, choice1, choice2, choice3) - if (!ref_result) ref_result = default + if(!ref_result) ref_result = default - if (ref_alert) del(ref_alert) + if(ref_alert) del(ref_alert) return ref_result @@ -20,13 +20,13 @@ /mob/proc/timed_alert(question as text, title as text, default as text, time as num, \ choice1 as text, choice2 as text, choice3 as text) - if (client) return client.timed_alert(question, title, default, time, choice1, choice2, choice3) + if(client) return client.timed_alert(question, title, default, time, choice1, choice2, choice3) return /timed_alert/proc/timed_alert(client/ref_client, question, title, time, choice1, choice2, choice3) - if (!ref_client) return + if(!ref_client) return spawn (time) del(src) // When src is deleted, the proc ends immediately. The alert itself closes. var/ref_answer diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 0dd40091e1e..005ef4c2fc9 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -10,7 +10,7 @@ //Returns an integer given a hex input /proc/hex2num(hex) - if (!( istext(hex) )) + if(!( istext(hex) )) return var/num = 0 diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 5ef6646e8cc..6cd28a20a32 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -26,11 +26,11 @@ //Inverts the colour of an HTML string /proc/invertHTML(HTMLstring) - if (!( istext(HTMLstring) )) + if(!( istext(HTMLstring) )) CRASH("Given non-text argument!") return else - if (length(HTMLstring) != 7) + if(length(HTMLstring) != 7) CRASH("Given non-HTML argument!") return var/textr = copytext(HTMLstring, 2, 4) @@ -42,11 +42,11 @@ textr = num2hex(255 - r) textg = num2hex(255 - g) textb = num2hex(255 - b) - if (length(textr) < 2) + if(length(textr) < 2) textr = text("0[]", textr) - if (length(textg) < 2) + if(length(textg) < 2) textr = text("0[]", textg) - if (length(textb) < 2) + if(length(textb) < 2) textr = text("0[]", textb) return text("#[][][]", textr, textg, textb) return @@ -218,14 +218,14 @@ Turf and target are seperate in case you want to teleport some distance from a t //Returns whether or not a player is a guest using their ckey as an input /proc/IsGuestKey(key) - if (findtext(key, "Guest-", 1, 7) != 1) //was findtextEx + if(findtext(key, "Guest-", 1, 7) != 1) //was findtextEx return 0 var/i, ch, len = length(key) - for (i = 7, i <= len, ++i) + for(i = 7, i <= len, ++i) ch = text2ascii(key, i) - if (ch < 48 || ch > 57) + if(ch < 48 || ch > 57) return 0 return 1 @@ -234,7 +234,7 @@ Turf and target are seperate in case you want to teleport some distance from a t f = round(f) f = max(low, f) f = min(high, f) - if ((f % 2) == 0) //Ensure the last digit is an odd number + if((f % 2) == 0) //Ensure the last digit is an odd number f += 1 return f @@ -277,13 +277,13 @@ Turf and target are seperate in case you want to teleport some distance from a t /proc/freeborg() var/select = null var/list/borgs = list() - for (var/mob/living/silicon/robot/A in player_list) - if (A.stat == 2 || A.connected_ai || A.scrambledcodes || istype(A,/mob/living/silicon/robot/drone)) + for(var/mob/living/silicon/robot/A in player_list) + if(A.stat == 2 || A.connected_ai || A.scrambledcodes || istype(A,/mob/living/silicon/robot/drone)) continue var/name = "[A.real_name] ([A.modtype] [A.braintype])" borgs[name] = A - if (borgs.len) + if(borgs.len) select = input("Unshackled borg signals detected:", "Borg selection", null, null) as null|anything in borgs return borgs[select] @@ -352,15 +352,15 @@ Turf and target are seperate in case you want to teleport some distance from a t var/list/namecounts = list() for(var/mob/M in mobs) var/name = M.name - if (name in names) + if(name in names) namecounts[name]++ name = "[name] ([namecounts[name]])" else names.Add(name) namecounts[name] = 1 - if (M.real_name && M.real_name != M.name) + if(M.real_name && M.real_name != M.name) name += " \[[M.real_name]\]" - if (M.stat == 2) + if(M.stat == 2) if(istype(M, /mob/dead/observer/)) name += " \[ghost\]" else @@ -679,13 +679,13 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl var/src_min_x = 0 var/src_min_y = 0 - for (var/turf/T in turfs_src) + for(var/turf/T in turfs_src) if(T.x < src_min_x || !src_min_x) src_min_x = T.x if(T.y < src_min_y || !src_min_y) src_min_y = T.y var/trg_min_x = 0 var/trg_min_y = 0 - for (var/turf/T in turfs_trg) + for(var/turf/T in turfs_trg) if(T.x < trg_min_x || !trg_min_x) trg_min_x = T.x if(T.y < trg_min_y || !trg_min_y) trg_min_y = T.y @@ -709,9 +709,9 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl var/list/toupdate = new/list() moving: - for (var/turf/T in refined_src) + for(var/turf/T in refined_src) var/datum/coords/C_src = refined_src[T] - for (var/turf/B in refined_trg) + for(var/turf/B in refined_trg) var/datum/coords/C_trg = refined_trg[B] if(C_src.x_pos == C_trg.x_pos && C_src.y_pos == C_trg.y_pos) @@ -845,13 +845,13 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl var/src_min_x = 0 var/src_min_y = 0 - for (var/turf/T in turfs_src) + for(var/turf/T in turfs_src) if(T.x < src_min_x || !src_min_x) src_min_x = T.x if(T.y < src_min_y || !src_min_y) src_min_y = T.y var/trg_min_x = 0 var/trg_min_y = 0 - for (var/turf/T in turfs_trg) + for(var/turf/T in turfs_trg) if(T.x < trg_min_x || !trg_min_x) trg_min_x = T.x if(T.y < trg_min_y || !trg_min_y) trg_min_y = T.y @@ -877,9 +877,9 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl moving: - for (var/turf/T in refined_src) + for(var/turf/T in refined_src) var/datum/coords/C_src = refined_src[T] - for (var/turf/B in refined_trg) + for(var/turf/B in refined_trg) var/datum/coords/C_trg = refined_trg[B] if(C_src.x_pos == C_trg.x_pos && C_src.y_pos == C_trg.y_pos) @@ -990,33 +990,26 @@ proc/oview_or_orange(distance = world.view , center = usr , type) proc/get_mob_with_client_list() var/list/mobs = list() for(var/mob/M in mob_list) - if (M.client) + if(M.client) mobs += M return mobs /proc/parse_zone(zone) if(zone == "r_hand") return "right hand" - else if (zone == "l_hand") return "left hand" - else if (zone == "l_arm") return "left arm" - else if (zone == "r_arm") return "right arm" - else if (zone == "l_leg") return "left leg" - else if (zone == "r_leg") return "right leg" - else if (zone == "l_foot") return "left foot" - else if (zone == "r_foot") return "right foot" - else if (zone == "l_hand") return "left hand" - else if (zone == "r_hand") return "right hand" - else if (zone == "l_foot") return "left foot" - else if (zone == "r_foot") return "right foot" + else if(zone == "l_hand") return "left hand" + else if(zone == "l_arm") return "left arm" + else if(zone == "r_arm") return "right arm" + else if(zone == "l_leg") return "left leg" + else if(zone == "r_leg") return "right leg" + else if(zone == "l_foot") return "left foot" + else if(zone == "r_foot") return "right foot" + else if(zone == "l_hand") return "left hand" + else if(zone == "r_hand") return "right hand" + else if(zone == "l_foot") return "left foot" + else if(zone == "r_foot") return "right foot" else return zone - -/proc/get_turf(atom/A) - if (!istype(A)) - return - for(A, A && !isturf(A), A=A.loc); //semicolon is for the empty statement - return A - //Finds the distance between two atoms, in pixels //centered = 0 counts from turf edge to edge //centered = 1 counts from turf center to turf center @@ -1146,15 +1139,15 @@ var/global/list/common_tools = list( //Whether or not the given item counts as sharp in terms of dealing damage /proc/is_sharp(obj/O as obj) - if (!O) return 0 - if (O.sharp) return 1 - if (O.edge) return 1 + if(!O) return 0 + if(O.sharp) return 1 + if(O.edge) return 1 return 0 //Whether or not the given item counts as cutting with an edge in terms of removing limbs /proc/has_edge(obj/O as obj) - if (!O) return 0 - if (O.edge) return 1 + if(!O) return 0 + if(O.edge) return 1 return 0 //Returns 1 if the given item is capable of popping things like balloons, inflatable barriers, or cutting police tape. @@ -1528,7 +1521,7 @@ var/mob/dview/dview_mob = new lastloc = loc sleep(0.6) - if (orbiting == A) //make sure we haven't started orbiting something else. + if(orbiting == A) //make sure we haven't started orbiting something else. orbiting = null SpinAnimation(0,0) @@ -1679,7 +1672,7 @@ var/mob/dview/dview_mob = new /proc/pick_closest_path(value) var/list/matches = get_fancy_list_of_types() - if (!isnull(value) && value!="") + if(!isnull(value) && value!="") matches = filter_fancy_list(matches, value) if(matches.len==0) @@ -1713,13 +1706,13 @@ var/list/TYPES_SHORTCUTS = list( var/global/list/g_fancy_list_of_types = null /proc/get_fancy_list_of_types() - if (isnull(g_fancy_list_of_types)) //init + if(isnull(g_fancy_list_of_types)) //init var/list/temp = sortList(subtypesof(/atom) - typesof(/area) - /atom/movable) g_fancy_list_of_types = new(temp.len) for(var/type in temp) var/typename = "[type]" - for (var/tn in TYPES_SHORTCUTS) - if (copytext(typename,1, length("[tn]/")+1)=="[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ ) + for(var/tn in TYPES_SHORTCUTS) + if(copytext(typename,1, length("[tn]/")+1)=="[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ ) typename = TYPES_SHORTCUTS[tn]+copytext(typename,length("[tn]/")) break g_fancy_list_of_types[typename] = type @@ -1737,10 +1730,10 @@ var/global/list/g_fancy_list_of_types = null /proc/stoplag() . = 1 sleep(world.tick_lag) - if (world.tick_usage > TICK_LIMIT_TO_RUN) //woke up, still not enough tick, sleep for more. + if(world.tick_usage > TICK_LIMIT_TO_RUN) //woke up, still not enough tick, sleep for more. . += 2 sleep(world.tick_lag*2) - if (world.tick_usage > TICK_LIMIT_TO_RUN) //woke up, STILL not enough tick, sleep for more. + if(world.tick_usage > TICK_LIMIT_TO_RUN) //woke up, STILL not enough tick, sleep for more. . += 4 sleep(world.tick_lag*4) //you might be thinking of adding more steps to this, or making it use a loop and a counter var diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index e1e8b818356..b6dc1c58b8f 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -4,7 +4,6 @@ var/global/list/all_languages[0] var/global/list/language_keys[0] // Table of say codes for all languages var/global/list/all_superheroes[0] var/global/list/all_nations[0] -var/global/list/emotes[0] var/global/list/whitelisted_species = list() var/list/clients = list() //list of all clients diff --git a/code/_globalvars/lists/reagents.dm b/code/_globalvars/lists/reagents.dm index 8417275d780..23d310be857 100644 --- a/code/_globalvars/lists/reagents.dm +++ b/code/_globalvars/lists/reagents.dm @@ -58,4 +58,9 @@ var/global/list/blocked_chems = list("polonium", "initropidril", "concentrated_i "reagent", "life","dragonsbreath") //List of chems/mixtures that can't grow in plants (in addition to the global random chem blacklist) -var/global/list/plant_blocked_chems = list() //filled in /datum/reagents/New() with chems that have can_grow_in_plants = 0 \ No newline at end of file +var/global/list/plant_blocked_chems = list() //filled in /datum/reagents/New() with chems that have can_grow_in_plants = 0 + +var/global/list/safe_chem_list = list("antihol", "charcoal", "epinephrine", "insulin", "teporone","silver_sulfadiazine", "salbutamol", + "omnizine", "stimulants", "synaptizine", "potass_iodide", "oculine", "mannitol", "styptic_powder", + "spaceacillin", "salglu_solution", "sal_acid", "cryoxadone", "blood", "synthflesh", "hydrocodone", + "mitocholide", "rezadone") \ No newline at end of file diff --git a/code/_hooks/hooks.dm b/code/_hooks/hooks.dm index b78526bfc2b..ccd0eb04722 100644 --- a/code/_hooks/hooks.dm +++ b/code/_hooks/hooks.dm @@ -29,26 +29,26 @@ var/global/list/hooks = list() /proc/SetupHooks() - for (var/hook_path in typesof(/hook)) + for(var/hook_path in typesof(/hook)) var/hook/hook = new hook_path hooks[hook.name] = hook // log_to_dd("Found hook: " + hook.name) - for (var/hook_path in typesof(/hook_handler)) + for(var/hook_path in typesof(/hook_handler)) var/hook_handler/hook_handler = new hook_path - for (var/name in hooks) - if (hascall(hook_handler, "On" + name)) + for(var/name in hooks) + if(hascall(hook_handler, "On" + name)) var/hook/hook = hooks[name] hook.handlers += hook_handler // log_to_dd("Found hook handler for: " + name) - for (var/hook/hook in hooks) + for(var/hook/hook in hooks) hook.Setup() /proc/CallHook(var/name as text, var/list/args) var/hook/hook = hooks[name] - if (!hook) + if(!hook) //log_to_dd("WARNING: Hook with name " + name + " does not exist") return - if (hook.Called(args)) + if(hook.Called(args)) return - for (var/hook_handler/hook_handler in hook.handlers) + for(var/hook_handler/hook_handler in hook.handlers) call(hook_handler, "On" + hook.name)(args) \ No newline at end of file diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index b25c4d69b44..543f02e8a79 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -37,9 +37,12 @@ if(new_master) var/old_layer = new_master.layer + var/old_plane = new_master.plane new_master.layer = FLOAT_LAYER + new_master.plane = FLOAT_PLANE alert.overlays += new_master new_master.layer = old_layer + new_master.plane = old_plane alert.icon_state = "template" // We'll set the icon to the client's ui pref in reorganize_alerts() alert.master = new_master else diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 58fb139ce33..1b32a9201a3 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -143,7 +143,7 @@ for(var/i=1, i 0) + if(hitsound && force > 0) playsound(loc, hitsound, 50, 1, -1) ///////////////////////// user.lastattacked = M @@ -177,9 +177,9 @@ else M.take_organ_damage(power) - if (prob(33)) // Added blood for whacking non-humans too + if(prob(33)) // Added blood for whacking non-humans too var/turf/simulated/location = M.loc - if (istype(location, /turf/simulated)) + if(istype(location, /turf/simulated)) location.add_blood_floor(M) if("fire") M.take_organ_damage(0, power) diff --git a/code/_onclick/oldcode.dm b/code/_onclick/oldcode.dm index 89b1131a6f0..a68f9668e78 100644 --- a/code/_onclick/oldcode.dm +++ b/code/_onclick/oldcode.dm @@ -2,7 +2,7 @@ if(!usr) return // ------- TIME SINCE LAST CLICK ------- - if (world.time <= usr:lastDblClick+1) + if(world.time <= usr:lastDblClick+1) return else usr:lastDblClick = world.time @@ -38,15 +38,15 @@ // ------- AI ------- - else if (istype(usr, /mob/living/silicon/ai)) + else if(istype(usr, /mob/living/silicon/ai)) var/mob/living/silicon/ai/ai = usr - if (ai.control_disabled) + if(ai.control_disabled) return // ------- CYBORG ------- - else if (istype(usr, /mob/living/silicon/robot)) + else if(istype(usr, /mob/living/silicon/robot)) var/mob/living/silicon/robot/bot = usr - if (bot.lockcharge) return + if(bot.lockcharge) return ..() @@ -106,7 +106,7 @@ W = null */ // ------- ATTACK SELF ------- - if (W == src && usr.stat == 0) + if(W == src && usr.stat == 0) W.attack_self(usr) if(usr.hand) usr.update_inv_l_hand(0) //update in-hand overlays @@ -115,14 +115,14 @@ return // ------- PARALYSIS, STUN, WEAKENED, DEAD, (And not AI) ------- - if (((usr.paralysis || usr.stunned || usr.weakened) && !istype(usr, /mob/living/silicon/ai)) || usr.stat != 0) + if(((usr.paralysis || usr.stunned || usr.weakened) && !istype(usr, /mob/living/silicon/ai)) || usr.stat != 0) return // ------- CLICKING STUFF IN CONTAINERS ------- - if ((!( src in usr.contents ) && (((!( isturf(src) ) && (!( isturf(src.loc) ) && (src.loc && !( isturf(src.loc.loc) )))) || !( isturf(usr.loc) )) && (src.loc != usr.loc && (!( istype(src, /obj/screen) ) && !( usr.contents.Find(src.loc) )))))) - if (istype(usr, /mob/living/silicon/ai)) + if((!( src in usr.contents ) && (((!( isturf(src) ) && (!( isturf(src.loc) ) && (src.loc && !( isturf(src.loc.loc) )))) || !( isturf(usr.loc) )) && (src.loc != usr.loc && (!( istype(src, /obj/screen) ) && !( usr.contents.Find(src.loc) )))))) + if(istype(usr, /mob/living/silicon/ai)) var/mob/living/silicon/ai/ai = usr - if (ai.control_disabled || ai.malfhacking) + if(ai.control_disabled || ai.malfhacking) return else return @@ -141,11 +141,11 @@ // to_chat(world, "according to dblclick(), t5 is [t5]") // ------- ACTUALLY DETERMINING STUFF ------- - if (((t5 || (W && (W.flags & USEDELAY))) && !( istype(src, /obj/screen) ))) + if(((t5 || (W && (W.flags & USEDELAY))) && !( istype(src, /obj/screen) ))) // ------- ( CAN USE ITEM OR HAS 1 SECOND USE DELAY ) AND NOT CLICKING ON SCREEN ------- - if (usr.next_move < world.time) + if(usr.next_move < world.time) usr.prev_move = usr.next_move usr.next_move = world.time + 10 else @@ -154,14 +154,14 @@ // ------- DELAY CHECK PASSED ------- - if ((src.loc && (get_dist(src, usr) < 2 || src.loc == usr.loc))) + if((src.loc && (get_dist(src, usr) < 2 || src.loc == usr.loc))) // ------- CLICKED OBJECT EXISTS IN GAME WORLD, DISTANCE FROM PERSON TO OBJECT IS 1 SQUARE OR THEY'RE ON THE SAME SQUARE ------- var/direct = get_dir(usr, src) var/obj/item/weapon/dummy/D = new /obj/item/weapon/dummy( usr.loc ) var/ok = 0 - if ( (direct - 1) & direct) + if( (direct - 1) & direct) // ------- CLICKED OBJECT IS LOCATED IN A DIAGONAL POSITION FROM THE PERSON ------- @@ -259,39 +259,39 @@ D = null // ------- DUMMY OBJECT'S SERVED IT'S PURPOSE, IT'S REWARDED WITH A SWIFT DELETE ------- - if (!( ok )) + if(!( ok )) // ------- TESTS ABOVE DETERMINED YOU CANNOT REACH THE TILE ------- return 0 - if (!( usr.restrained() || (usr.lying && usr.buckled!=src) )) + if(!( usr.restrained() || (usr.lying && usr.buckled!=src) )) // ------- YOU ARE NOT REASTRAINED ------- - if (W) + if(W) // ------- YOU HAVE AN ITEM IN YOUR HAND - HANDLE ATTACKBY AND AFTERATTACK ------- var/ignoreAA = 0 //Ignore afterattack(). Surgery uses this. - if (t5) + if(t5) ignoreAA = src.attackby(W, usr, params) - if (W && !ignoreAA) + if(W && !ignoreAA) W.afterattack(src, usr, (t5 ? 1 : 0), params) else // ------- YOU DO NOT HAVE AN ITEM IN YOUR HAND ------- - if (istype(usr, /mob/living/carbon/human)) + if(istype(usr, /mob/living/carbon/human)) // ------- YOU ARE HUMAN ------- src.attack_hand(usr, usr.hand) else // ------- YOU ARE NOT HUMAN. WHAT ARE YOU - DETERMINED HERE AND PROPER ATTACK_MOBTYPE CALLED ------- - if (istype(usr, /mob/living/carbon/monkey)) + if(istype(usr, /mob/living/carbon/monkey)) src.attack_paw(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/alien/humanoid)) + else if(istype(usr, /mob/living/carbon/alien/humanoid)) if(usr.m_intent == "walk" && istype(usr, /mob/living/carbon/alien/humanoid/hunter)) usr.m_intent = "run" usr.hud_used.move_intent.icon_state = "running" usr.update_icons() src.attack_alien(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/alien/larva)) + else if(istype(usr, /mob/living/carbon/alien/larva)) src.attack_larva(usr) - else if (istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) + else if(istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) src.attack_ai(usr, usr.hand) else if(istype(usr, /mob/living/carbon/slime)) src.attack_slime(usr) @@ -299,51 +299,51 @@ src.attack_animal(usr) else // ------- YOU ARE RESTRAINED. DETERMINE WHAT YOU ARE AND ATTACK WITH THE PROPER HAND_X PROC ------- - if (istype(usr, /mob/living/carbon/human)) + if(istype(usr, /mob/living/carbon/human)) src.hand_h(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/monkey)) + else if(istype(usr, /mob/living/carbon/monkey)) src.hand_p(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/alien/humanoid)) + else if(istype(usr, /mob/living/carbon/alien/humanoid)) src.hand_al(usr, usr.hand) - else if (istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) + else if(istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) src.hand_a(usr, usr.hand) else // ------- ITEM INACESSIBLE OR CLICKING ON SCREEN ------- - if (istype(src, /obj/screen)) + if(istype(src, /obj/screen)) // ------- IT'S THE HUD YOU'RE CLICKING ON ------- usr.prev_move = usr.next_move usr:lastDblClick = world.time + 2 - if (usr.next_move < world.time) + if(usr.next_move < world.time) usr.next_move = world.time + 2 else return // ------- 2 DECISECOND DELAY FOR CLICKING PASSED ------- - if (!( usr.restrained() )) + if(!( usr.restrained() )) // ------- YOU ARE NOT RESTRAINED ------- - if ((W && !( istype(src, /obj/screen) ))) + if((W && !( istype(src, /obj/screen) ))) // ------- IT SHOULD NEVER GET TO HERE, DUE TO THE ISTYPE(SRC, /OBJ/SCREEN) FROM PREVIOUS IF-S - I TESTED IT WITH A DEBUG OUTPUT AND I COULDN'T GET THIST TO SHOW UP. ------- src.attackby(W, usr, params) - if (W) + if(W) W.afterattack(src, usr,, params) else // ------- YOU ARE NOT RESTRAINED, AND ARE CLICKING A HUD OBJECT ------- - if (istype(usr, /mob/living/carbon/human)) + if(istype(usr, /mob/living/carbon/human)) src.attack_hand(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/monkey)) + else if(istype(usr, /mob/living/carbon/monkey)) src.attack_paw(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/alien/humanoid)) + else if(istype(usr, /mob/living/carbon/alien/humanoid)) src.attack_alien(usr, usr.hand) else // ------- YOU ARE RESTRAINED CLICKING ON A HUD OBJECT ------- - if (istype(usr, /mob/living/carbon/human)) + if(istype(usr, /mob/living/carbon/human)) src.hand_h(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/monkey)) + else if(istype(usr, /mob/living/carbon/monkey)) src.hand_p(usr, usr.hand) - else if (istype(usr, /mob/living/carbon/alien/humanoid)) + else if(istype(usr, /mob/living/carbon/alien/humanoid)) src.hand_al(usr, usr.hand) else // ------- YOU ARE CLICKING ON AN OBJECT THAT'S INACCESSIBLE TO YOU AND IS NOT YOUR HUD ------- diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 50b6716c977..f32161b92a2 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -67,7 +67,7 @@ var/const/tk_maxrange = 15 icon_state = "2" flags = NOBLUDGEON | ABSTRACT //item_state = null - w_class = 10.0 + w_class = 10 layer = 20 plane = HUD_PLANE diff --git a/code/controllers/ProcessScheduler/core/process.dm b/code/controllers/ProcessScheduler/core/process.dm index 620dafca4ec..55e277b4d67 100644 --- a/code/controllers/ProcessScheduler/core/process.dm +++ b/code/controllers/ProcessScheduler/core/process.dm @@ -171,7 +171,7 @@ main.restartProcess(src.name) /datum/controller/process/proc/kill() - if (!killed) + if(!killed) var/msg = "[name] process was killed at tick #[ticks]." log_debug(msg) message_admins(msg) @@ -186,22 +186,22 @@ // Do not call this directly - use SHECK or SCHECK_EVERY /datum/controller/process/proc/sleepCheck(var/tickId = 0) calls_since_last_scheck = 0 - if (killed) + if(killed) // The kill proc is the only place where killed is set. // The kill proc should have deleted this datum, and all sleeping procs that are // owned by it. CRASH("A killed process is still running somehow...") - if (hung) + if(hung) // This will only really help if the doWork proc ends up in an infinite loop. handleHung() CRASH("Process [name] hung and was restarted.") - if (main.getCurrentTickElapsedTime() > main.timeAllowance) + if(main.getCurrentTickElapsedTime() > main.timeAllowance) sleep(world.tick_lag) cpu_defer_count++ last_slept = 0 else - if (TimeOfTick > last_slept + sleep_interval) + if(TimeOfTick > last_slept + sleep_interval) // If we haven't slept in sleep_interval deciseconds, sleep to allow other work to proceed. sleep(0) last_slept = TimeOfTick @@ -213,14 +213,14 @@ var/elapsedTime = getElapsedTime() - if (hung) + if(hung) handleHung() return - else if (elapsedTime > hang_restart_time) + else if(elapsedTime > hang_restart_time) hung() - else if (elapsedTime > hang_alert_time) + else if(elapsedTime > hang_alert_time) setStatus(PROCESS_STATUS_PROBABLY_HUNG) - else if (elapsedTime > hang_warning_time) + else if(elapsedTime > hang_warning_time) setStatus(PROCESS_STATUS_MAYBE_HUNG) diff --git a/code/controllers/ProcessScheduler/core/processScheduler.dm b/code/controllers/ProcessScheduler/core/processScheduler.dm index 86e1fc5bbe9..494e776650d 100644 --- a/code/controllers/ProcessScheduler/core/processScheduler.dm +++ b/code/controllers/ProcessScheduler/core/processScheduler.dm @@ -66,7 +66,7 @@ var/global/datum/controller/processScheduler/processScheduler * this treatment. */ /datum/controller/processScheduler/proc/deferSetupFor(var/processPath) - if (!(processPath in deferredSetupList)) + if(!(processPath in deferredSetupList)) deferredSetupList += processPath /datum/controller/processScheduler/proc/setup() @@ -77,11 +77,11 @@ var/global/datum/controller/processScheduler/processScheduler var/process // Add all the processes we can find, except for the ticker - for (process in subtypesof(/datum/controller/process)) - if (!(process in deferredSetupList)) + for(process in subtypesof(/datum/controller/process)) + if(!(process in deferredSetupList)) addProcess(new process(src)) - for (process in deferredSetupList) + for(process in deferredSetupList) addProcess(new process(src)) /datum/controller/processScheduler/proc/start() @@ -114,7 +114,7 @@ var/global/datum/controller/processScheduler/processScheduler for(var/datum/controller/process/p in running) p.update() - if (isnull(p)) // Process was killed + if(isnull(p)) // Process was killed continue var/status = p.getStatus() @@ -132,11 +132,11 @@ var/global/datum/controller/processScheduler/processScheduler /datum/controller/processScheduler/proc/queueProcesses() for(var/datum/controller/process/p in processes) // Don't double-queue, don't queue running processes - if (p.disabled || p.running || p.queued || !p.idle) + if(p.disabled || p.running || p.queued || !p.idle) continue // If the process should be running by now, go ahead and queue it - if (world.time >= last_queued[p] + p.schedule_interval) + if(world.time >= last_queued[p] + p.schedule_interval) setQueuedProcessState(p) /datum/controller/processScheduler/proc/runQueuedProcesses() @@ -217,34 +217,34 @@ var/global/datum/controller/processScheduler/processScheduler recordEnd(process) /datum/controller/processScheduler/proc/setIdleProcessState(var/datum/controller/process/process) - if (process in running) + if(process in running) running -= process - if (process in queued) + if(process in queued) queued -= process - if (!(process in idle)) + if(!(process in idle)) idle += process /datum/controller/processScheduler/proc/setQueuedProcessState(var/datum/controller/process/process) - if (process in running) + if(process in running) running -= process - if (process in idle) + if(process in idle) idle -= process - if (!(process in queued)) + if(!(process in queued)) queued += process // The other state transitions are handled internally by the process. process.queued() /datum/controller/processScheduler/proc/setRunningProcessState(var/datum/controller/process/process) - if (process in queued) + if(process in queued) queued -= process - if (process in idle) + if(process in idle) idle -= process - if (!(process in running)) + if(!(process in running)) running += process /datum/controller/processScheduler/proc/recordStart(var/datum/controller/process/process, var/time = null) - if (isnull(time)) + if(isnull(time)) time = TimeOfGame last_queued[process] = world.time last_start[process] = time @@ -253,7 +253,7 @@ var/global/datum/controller/processScheduler/processScheduler last_start[process] = time /datum/controller/processScheduler/proc/recordEnd(var/datum/controller/process/process, var/time = null) - if (isnull(time)) + if(isnull(time)) time = TimeOfGame var/lastRunTime = time - last_start[process] @@ -273,7 +273,7 @@ var/global/datum/controller/processScheduler/processScheduler highest_run_time[process] = time var/list/lastTwenty = last_twenty_run_times[process] - if (lastTwenty.len == 20) + if(lastTwenty.len == 20) lastTwenty.Cut(1, 2) lastTwenty.len++ lastTwenty[lastTwenty.len] = time @@ -304,7 +304,7 @@ var/global/datum/controller/processScheduler/processScheduler /datum/controller/processScheduler/proc/getStatusData() var/list/data = new - for (var/datum/controller/process/p in processes) + for(var/datum/controller/process/p in processes) data.len++ data[data.len] = p.getContextData() @@ -314,14 +314,14 @@ var/global/datum/controller/processScheduler/processScheduler return processes.len /datum/controller/processScheduler/proc/hasProcess(var/processName as text) - if (nameToProcessMap[processName]) + if(nameToProcessMap[processName]) return 1 /datum/controller/processScheduler/proc/killProcess(var/processName as text) restartProcess(processName) /datum/controller/processScheduler/proc/restartProcess(var/processName as text) - if (hasProcess(processName)) + if(hasProcess(processName)) var/datum/controller/process/oldInstance = nameToProcessMap[processName] var/datum/controller/process/newInstance = new oldInstance.type(src) newInstance._copyStateFrom(oldInstance) @@ -329,24 +329,24 @@ var/global/datum/controller/processScheduler/processScheduler oldInstance.kill() /datum/controller/processScheduler/proc/enableProcess(var/processName as text) - if (hasProcess(processName)) + if(hasProcess(processName)) var/datum/controller/process/process = nameToProcessMap[processName] process.enable() /datum/controller/processScheduler/proc/disableProcess(var/processName as text) - if (hasProcess(processName)) + if(hasProcess(processName)) var/datum/controller/process/process = nameToProcessMap[processName] process.disable() /datum/controller/processScheduler/proc/getCurrentTickElapsedTime() - if (world.time > currentTick) + if(world.time > currentTick) updateCurrentTickData() return 0 else return TimeOfTick /datum/controller/processScheduler/proc/updateCurrentTickData() - if (world.time > currentTick) + if(world.time > currentTick) // New tick! currentTick = world.time updateTimeAllowance() diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm index 43bee48f267..dc7cbe6a24d 100644 --- a/code/controllers/communications.dm +++ b/code/controllers/communications.dm @@ -153,7 +153,7 @@ var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI /proc/frequency_span_class(var/frequency) // Antags! - if (frequency in ANTAG_FREQS) + if(frequency in ANTAG_FREQS) return "syndradio" // centcomm channels (deathsquid and ert) if(frequency in CENT_FREQS) @@ -167,7 +167,7 @@ var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI // department radio formatting (poorly optimized, ugh) if(frequency == SEC_FREQ) return "secradio" - if (frequency == ENG_FREQ) + if(frequency == ENG_FREQ) return "engradio" if(frequency == SCI_FREQ) return "sciradio" @@ -265,17 +265,17 @@ var/global/datum/controller/radio/radio_controller if(!start_point) qdel(signal) return 0 - if (filter) + if(filter) send_to_filter(source, signal, filter, start_point, range) send_to_filter(source, signal, RADIO_DEFAULT, start_point, range) else //Broadcast the signal to everyone! - for (var/next_filter in devices) + for(var/next_filter in devices) send_to_filter(source, signal, next_filter, start_point, range) //Sends a signal to all machines belonging to a given filter. Should be called by post_signal() /datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, var/filter, var/turf/start_point = null, var/range = null) - if (range && !start_point) + if(range && !start_point) return for(var/obj/device in devices[filter]) @@ -291,11 +291,11 @@ var/global/datum/controller/radio/radio_controller device.receive_signal(signal, TRANSMISSION_RADIO, frequency) /datum/radio_frequency/proc/add_listener(obj/device as obj, var/filter as text|null) - if (!filter) + if(!filter) filter = RADIO_DEFAULT //log_admin("add_listener(device=[device],filter=[filter]) frequency=[frequency]") var/list/obj/devices_line = devices[filter] - if (!devices_line) + if(!devices_line) devices_line = new devices[filter] = devices_line devices_line+=device @@ -305,12 +305,12 @@ var/global/datum/controller/radio/radio_controller //log_admin("DEBUG: devices(filter_str).len=[l]") /datum/radio_frequency/proc/remove_listener(obj/device) - for (var/devices_filter in devices) + for(var/devices_filter in devices) var/list/devices_line = devices[devices_filter] devices_line-=device - while (null in devices_line) + while(null in devices_line) devices_line -= null - if (devices_line.len==0) + if(devices_line.len==0) devices -= devices_filter qdel(devices_line) @@ -335,11 +335,11 @@ var/global/datum/controller/radio/radio_controller frequency = model.frequency /datum/signal/proc/debug_print() - if (source) + if(source) . = "signal = {source = '[source]' ([source:x],[source:y],[source:z])\n" else . = "signal = {source = '[source]' ()\n" - for (var/i in data) + for(var/i in data) . += "data\[\"[i]\"\] = \"[data[i]]\"\n" if(islist(data[i])) var/list/L = data[i] diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index f4e795f6c77..d3da4ccf1c3 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -177,20 +177,22 @@ var/disable_lobby_music = 0 // Disables the lobby music var/disable_cid_warn_popup = 0 //disables the annoying "You have already logged in this round, disconnect or be banned" popup, because it annoys the shit out of me when testing. + var/max_loadout_points = 5 // How many points can be spent on extra items in character setup + /datum/configuration/New() var/list/L = subtypesof(/datum/game_mode) - for (var/T in L) + for(var/T in L) // I wish I didn't have to instance the game modes in order to look up // their information, but it is the only way (at least that I know of). var/datum/game_mode/M = new T() - if (M.config_tag) + if(M.config_tag) if(!(M.config_tag in modes)) // ensure each mode is added only once diary << "Adding game mode [M.name] ([M.config_tag]) to configuration." src.modes += M.config_tag src.mode_names[M.config_tag] = M.name src.probabilities[M.config_tag] = M.probability - if (M.votable) + if(M.votable) src.votable_modes += M.config_tag qdel(M) src.votable_modes += "secret" @@ -202,188 +204,188 @@ if(!t) continue t = trim(t) - if (length(t) == 0) + if(length(t) == 0) continue - else if (copytext(t, 1, 2) == "#") + else if(copytext(t, 1, 2) == "#") continue var/pos = findtext(t, " ") var/name = null var/value = null - if (pos) + if(pos) name = lowertext(copytext(t, 1, pos)) value = copytext(t, pos + 1) else name = lowertext(t) - if (!name) + if(!name) continue if(type == "config") - switch (name) - if ("resource_urls") + switch(name) + if("resource_urls") config.resource_urls = splittext(value, " ") - if ("admin_legacy_system") + if("admin_legacy_system") config.admin_legacy_system = 1 - if ("ban_legacy_system") + if("ban_legacy_system") config.ban_legacy_system = 1 - if ("use_age_restriction_for_jobs") + if("use_age_restriction_for_jobs") config.use_age_restriction_for_jobs = 1 - if ("use_age_restriction_for_antags") + if("use_age_restriction_for_antags") config.use_age_restriction_for_antags = 1 - if ("jobs_have_minimal_access") + if("jobs_have_minimal_access") config.jobs_have_minimal_access = 1 - if ("log_ooc") + if("log_ooc") config.log_ooc = 1 - if ("log_access") + if("log_access") config.log_access = 1 - if ("log_say") + if("log_say") config.log_say = 1 - if ("log_admin") + if("log_admin") config.log_admin = 1 - if ("log_debug") + if("log_debug") config.log_debug = text2num(value) - if ("log_game") + if("log_game") config.log_game = 1 - if ("log_vote") + if("log_vote") config.log_vote = 1 - if ("log_whisper") + if("log_whisper") config.log_whisper = 1 - if ("log_attack") + if("log_attack") config.log_attack = 1 - if ("log_emote") + if("log_emote") config.log_emote = 1 - if ("log_adminchat") + if("log_adminchat") config.log_adminchat = 1 - if ("log_adminwarn") + if("log_adminwarn") config.log_adminwarn = 1 - if ("log_pda") + if("log_pda") config.log_pda = 1 - if ("log_world_output") + if("log_world_output") config.log_world_output = 1 - if ("log_hrefs") + if("log_hrefs") config.log_hrefs = 1 - if ("log_runtime") + if("log_runtime") config.log_runtime = 1 - if ("mentors") + if("mentors") config.mods_are_mentors = 1 if("allow_admin_ooccolor") config.allow_admin_ooccolor = 1 - if ("allow_vote_restart") + if("allow_vote_restart") config.allow_vote_restart = 1 - if ("allow_vote_mode") + if("allow_vote_mode") config.allow_vote_mode = 1 if("no_dead_vote") config.vote_no_dead = 1 - if ("default_no_vote") + if("default_no_vote") config.vote_no_default = 1 - if ("vote_delay") + if("vote_delay") config.vote_delay = text2num(value) - if ("vote_period") + if("vote_period") config.vote_period = text2num(value) - if ("allow_ai") + if("allow_ai") config.allow_ai = 1 -// if ("authentication") +// if("authentication") // config.enable_authentication = 1 - if ("norespawn") + if("norespawn") config.respawn = 0 - if ("servername") + if("servername") config.server_name = value - if ("serversuffix") + if("serversuffix") config.server_suffix = 1 - if ("nudge_script_path") + if("nudge_script_path") config.nudge_script_path = value - if ("hostedby") + if("hostedby") config.hostedby = value - if ("server") + if("server") config.server = value - if ("banappeals") + if("banappeals") config.banappeals = value - if ("wikiurl") + if("wikiurl") config.wikiurl = value - if ("forumurl") + if("forumurl") config.forumurl = value - if ("rulesurl") + if("rulesurl") config.rulesurl = value - if ("donationsurl") + if("donationsurl") config.donationsurl = value - if ("repositoryurl") + if("repositoryurl") config.repositoryurl = value - if ("guest_jobban") + if("guest_jobban") config.guest_jobban = 1 - if ("guest_ban") + if("guest_ban") guests_allowed = 0 - if ("usewhitelist") + if("usewhitelist") config.usewhitelist = 1 - if ("feature_object_spell_system") + if("feature_object_spell_system") config.feature_object_spell_system = 1 - if ("allow_metadata") + if("allow_metadata") config.allow_Metadata = 1 - if ("traitor_scaling") + if("traitor_scaling") config.traitor_scaling = 1 if("protect_roles_from_antagonist") config.protect_roles_from_antagonist = 1 - if ("probability") + if("probability") var/prob_pos = findtext(value, " ") var/prob_name = null var/prob_value = null - if (prob_pos) + if(prob_pos) prob_name = lowertext(copytext(value, 1, prob_pos)) prob_value = copytext(value, prob_pos + 1) - if (prob_name in config.modes) + if(prob_name in config.modes) config.probabilities[prob_name] = text2num(prob_value) else diary << "Unknown game mode probability configuration definition: [prob_name]." @@ -552,6 +554,9 @@ if("disable_cid_warn_popup") config.disable_cid_warn_popup = 1 + if("max_loadout_points") + config.max_loadout_points = text2num(value) + else diary << "Unknown setting in configuration: '[name]'" @@ -606,11 +611,11 @@ config.reactionary_explosions = 1 if("bombcap") var/BombCap = text2num(value) - if (!BombCap) + if(!BombCap) continue - if (BombCap < 4) + if(BombCap < 4) BombCap = 4 - if (BombCap > 128) + if(BombCap > 128) BombCap = 128 MAX_EX_DEVESTATION_RANGE = round(BombCap/4) @@ -629,36 +634,36 @@ if(!t) continue t = trim(t) - if (length(t) == 0) + if(length(t) == 0) continue - else if (copytext(t, 1, 2) == "#") + else if(copytext(t, 1, 2) == "#") continue var/pos = findtext(t, " ") var/name = null var/value = null - if (pos) + if(pos) name = lowertext(copytext(t, 1, pos)) value = copytext(t, pos + 1) else name = lowertext(t) - if (!name) + if(!name) continue - switch (name) + switch(name) if("sql_enabled") config.sql_enabled = 1 - if ("address") + if("address") sqladdress = value - if ("port") + if("port") sqlport = value - if ("feedback_database") + if("feedback_database") sqlfdbkdb = value - if ("feedback_login") + if("feedback_login") sqlfdbklogin = value - if ("feedback_password") + if("feedback_password") sqlfdbkpass = value if("feedback_tableprefix") sqlfdbktableprefix = value @@ -671,9 +676,9 @@ if(!t) continue t = trim(t) - if (length(t) == 0) + if(length(t) == 0) continue - else if (copytext(t, 1, 2) == "#") + else if(copytext(t, 1, 2) == "#") continue config.overflow_whitelist += t @@ -681,25 +686,25 @@ /datum/configuration/proc/pick_mode(mode_name) // I wish I didn't have to instance the game modes in order to look up // their information, but it is the only way (at least that I know of). - for (var/T in subtypesof(/datum/game_mode)) + for(var/T in subtypesof(/datum/game_mode)) var/datum/game_mode/M = new T() - if (M.config_tag && M.config_tag == mode_name) + if(M.config_tag && M.config_tag == mode_name) return M qdel(M) return new /datum/game_mode/extended() /datum/configuration/proc/get_runnable_modes() var/list/datum/game_mode/runnable_modes = new - for (var/T in subtypesof(/datum/game_mode)) + for(var/T in subtypesof(/datum/game_mode)) var/datum/game_mode/M = new T() // to_chat(world, "DEBUG: [T], tag=[M.config_tag], prob=[probabilities[M.config_tag]]") - if (!(M.config_tag in modes)) + if(!(M.config_tag in modes)) qdel(M) continue - if (probabilities[M.config_tag]<=0) + if(probabilities[M.config_tag]<=0) qdel(M) continue - if (M.can_start()) + if(M.can_start()) runnable_modes[M] = probabilities[M.config_tag] // to_chat(world, "DEBUG: runnable_mode\[[runnable_modes.len]\] = [M.config_tag]") return runnable_modes diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 2775590dab6..afb0e68d83f 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -18,8 +18,8 @@ var/global/datum/controller/failsafe/failsafe . = ..() // There can be only one failsafe. Out with the old in with the new (that way we can restart the Failsafe by spawning a new one). - if (failsafe != src) - if (istype(failsafe)) + if(failsafe != src) + if(istype(failsafe)) recover() qdel(failsafe) diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 97c490852b6..25b038554cc 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -28,7 +28,7 @@ if("Master") debug_variables(master_controller) feedback_add_details("admin_verb","DMC") - if ("failsafe") + if("failsafe") debug_variables(failsafe) feedback_add_details("admin_verb", "dfailsafe") if("Ticker") diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index 7816e88e556..52c976ec470 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -200,7 +200,7 @@ datum/controller/vote return 0 choices.Add(config.votable_modes) if("crew_transfer") - if (check_rights(R_ADMIN|R_MOD)) + if(check_rights(R_ADMIN|R_MOD)) if(ticker.current_state <= 2) return 0 question = "End the shift?" diff --git a/code/datums/Emote_system/emote.dm b/code/datums/Emote_system/emote.dm deleted file mode 100644 index 84f444ef5f4..00000000000 --- a/code/datums/Emote_system/emote.dm +++ /dev/null @@ -1,590 +0,0 @@ -/******************************************************************************************************* - Emotes -Remember, only 1 instance of each emote is made, and used by all mobs that can access it. As such, the -ONLY place you can safely set object variables during runtime is in New(). Otherwise override the emote. -The only exception to this is custom emotes, which are created as needed and only last until they are finished -VampyrBytes - -*******************************************************************************************************/ -#define EMOTE_COOLDOWN 20 //Time in deciseconds that the cooldown lasts -#define HEARING_RANGE 7 -#define INVALID -1 //Using -1 as I can't see how a negative number could be a valid input - -/datum/emote - var/name = "" - var/desc = "" - var/list/commands[0] // list of commands that trigger the emote. - var/text = "" - var/selfText = "" // the version of text that you should see - eg, if text is screams, you want scream here, as You screams is bad grammer - var/startText = "" // if you need to put something in before [user] - var/selfStart = 1 // whether the start text is used in what you see - - var/audible = 0 - var/mimeText = "" - var/mimeSelf = "" //self version of mimeText - var/sound // sound file - var/vol = 50 - var/muzzleAffected = 0 // whether being muzzled affects this emote - var/muzzledNoise = "" // if the emote is audible and you're muzzled, this is what type of noise you make (eg weak, loud). - var/cooldown = 0 // How long the cooldown should be on this emote. Defaults to EMOTE_COOLDOWN if not set and the emote plays a sound - - var/restrained = 0 // 1 if being restrained prevents this emote - - var/canTarget = 0 // 1 if the emote accepts a target - var/targetMob = 0 // 0 if target can be any atom, 1 if it has to be a mob, - var/mustTarget = 0 // 1 if the emote needs a target to work (won't get None as an option) - var/targetText = "at" // what goes inbetween user and target - var/takesNumber = 0 // 1 if the emote uses a number parameter - - var/emoteSpanClass = "say" - var/userSpanClass = "bold" - var/baseLevel = 1 - var/allowParent = 0 // 1 if you want the parent available as well as this one - - -/datum/emote/New() - var/pathString = "[type]" - var/count = 0 - for(var/i in 1 to lentext(pathString)) - var/char = copytext(pathString, i, i+1) - if(char == "/") - count++ - if(count == 4) - baseLevel = 0 - break - - if(sound && !cooldown) - cooldown = EMOTE_COOLDOWN - - if(targetText) - if(!findtextEx(targetText, " ", lentext(targetText))) - targetText += " " - -/datum/emote/proc/doEmote(var/mob/user, var/command = "") - if(!istype(user)) - return - if(cooldown) - if(handle_emote_CD(user)) - return - - var/message = "" - var/list/params[0] - - params = getParams(user) - - for(var/p in params) - if(params[p] == INVALID) - return - - if(text) - message = createMessage(user, params) - - if(message) - message = addExtras(user, params, message) - . = processMessage(user, params, message) - - if(!doMime(user) && (!muzzleAffected || !isMuzzled(user))) - if(playSound(user, params)) - . = 2 - - doAction(user, params) - - for(var/obj/item/weapon/implant/I in user) - if(I.implanted) - I.trigger(command, user) - - return - -// for things that the emote does that aren't text or sound based -/datum/emote/proc/doAction(var/mob/user, var/list/params) - return - -/datum/emote/proc/getParams(var/mob/user) - var/list/params[0] - - if(takesNumber) - user.set_typing_indicator(1) - user.hud_typing = 1 - params["num"] = getNumber(user) - user.hud_typing = 0 - user.set_typing_indicator(0) - - if(canTarget) - user.set_typing_indicator(1) - user.hud_typing = 1 - params["target"] = getTarget(user) - user.hud_typing = 0 - user.set_typing_indicator(0) - return params - -// return INVALID from either of these getters if you've tested the input and it's failed -/datum/emote/proc/getNumber(var/mob/user) - var/number = input("How many?", "Enter number") as null|num - return number - -/datum/emote/proc/getTarget(var/mob/user) - if(user.sdisabilities & BLIND || user.blinded || user.paralysis) - return - var/list/targets = list() - if(!mustTarget) - targets += "None" - var/target - if(targetMob) - target = getMobTarget(user, targets) - else - target = getAtomTarget(user, targets) - if(!target) - return INVALID - if(target == "None") - return - return target - -/datum/emote/proc/getMobTarget(var/mob/user, var/list/targets) - for(var/mob/M in view(getLoc(user))) - targets += M - var/mob/target = input("Select target", "Target Mob") as null|anything in targets - return target - - -/datum/emote/proc/getAtomTarget(var/mob/user, var/list/targets) - for(var/A in oview(getLoc(user))) - if(ismob(A) || isobj(A) || isturf(A)) - targets += A - var/atom/target = input("Select target", "Target") as null|anything in targets - return target - -// returns the reason the user can't currently do the emote -/datum/emote/proc/prevented(var/mob/user) - if(user.stat == DEAD) - return "you are dead" - if(user.stat == UNCONSCIOUS) - return "you are unconscious" - if(restrained && user.restrained()) - return "you are restrained" - if(isbrain(user)) - var/mob/living/carbon/brain/brain = user - if(!(brain.container && istype(brain.container, /obj/item/device/mmi))) - return "you need to be in an mmi to do this" - -// return 1 if this emote can be used by this type of user -/datum/emote/proc/available(var/mob/user) - return - -/datum/emote/proc/createMessage(var/mob/user, var/list/params) - if(!text) - return - var/message = "" - - if(doMime(user)) - message = mimeMessage(user, params) - if(message) - return message - - if(muzzleAffected && isMuzzled(user)) - message = muzzleMessage(user, params) - return message - - if(checkForParams(params)) - message = paramMessage(user, params) - return message - - message = standardMessage(user, params) - - return message - -/datum/emote/proc/isMuzzled(var/mob/user) - if(user.sdisabilities & MUTE || user.is_muzzled()) - return 1 - if(!isliving(user)) - return - var/mob/living/L = user - if(L.silent) - return 1 - -/datum/emote/proc/checkForParams(var/list/params) - for(var/p in params) - if(p == "target") - continue - return 1 - -/datum/emote/proc/addExtras(var/mob/user, var/list/params, var/message = "") - if(!message) - return - if(startText) - message = "[startText] [message]" - message = addPunc(message) - message = "[message]" - return message - -/datum/emote/proc/addPunc(var/message = "") - var/regex/endingPunc = new("\[\\.!\\?\"]$") - if(!endingPunc.Find(message)) - message += "." - return message - -/datum/emote/proc/standardMessage(var/mob/user, var/list/params) - var/message = "\The [user] [text]" - if("target" in params) - message = addTarget(user, params, message) - return message - -/datum/emote/proc/mimeMessage(var/mob/user, var/list/params) - if(!mimeText) - return - if(checkForParams(params)) - return paramMimeMessage(user, params) - var/message = "\The [user] [mimeText]" - if(message && "target" in params) - message = addTarget(user, params, message) - return message - -/datum/emote/proc/muzzleMessage(var/mob/user, var/list/params) - var/message = "\The [user] makes a " - if(muzzledNoise) - message += "[muzzledNoise] " - message += "noise" - return message - -// if the emote takes a non target parameter, set up and return the with parameter version in here -/datum/emote/proc/paramMessage(var/mob/user, var/list/params) - return - -// as above, but for mimes when there is mimeText -/datum/emote/proc/paramMimeMessage(var/mob/user, var/list/params) - return - -/datum/emote/proc/addTarget(var/mob/user, var/list/params, var/message = "") - if(!canTarget) - return message - if(!params["target"]) - return message - if(params["target"] == user) - message += " [targetText][getHimself(user)]" - return message - message += " [targetText]\the [params["target"]]" - return message - - -// What you should see when you perform the emote -/datum/emote/proc/createSelfMessage(var/mob/user, var/list/params, var/message = "") - if(!selfText) - return message - - message = replacetext(message, text, selfText) - message = changeTextMacros(user, message) - - if(mimeSelf) - message = replacetext(message, mimeText, mimeSelf) - - if(startText && !selfStart) - var/start = findtextEx(message, startText) - var/end = start + lentext(startText) + 1 - message = copytext(message, 1, start) + copytext(message, end, lentext(message) + 1) - - message = replaceMobWithYou(user, message, user) - - return message - -/datum/emote/proc/replaceMobWithYou(var/mob/M, var/message = "", var/mob/user) // user passed in in case an override needs to do something different if M != user (see johnny) VB - - message = replacetext(message, "\The [M]", "You") - message = replacetext(message, "\the [M]", "you") - - return message - -/datum/emote/proc/processMessage(var/mob/user, var/list/params, var/message = "") - var/visualOrAudible = audible + 1 - if(doMime(user)) - visualOrAudible = 1 - - log_emote("[user.name]/[user.key] : [message]") - sendToDead(user, message) - for(var/mob/M in getRecipients(getLoc(user, message), visualOrAudible)) - var/msg = "" - - if(M==user) - msg = createSelfMessage(user, params, message) - if(msg) - outputMessage(M, msg, user) - continue - - if(M.stat == UNCONSCIOUS || (M.sleeping && M.stat != DEAD)) - if(!visualOrAudible == 2) - continue - msg = "... You can almost hear someone talking ..." - outputMessage(M, msg, user) - continue - - if(M.sdisabilities & DEAF || M.ear_deaf) - if(M.sdisabilities & BLIND || M.blinded || M.paralysis) - continue - if(!(M in getRecipients(user, 1)) || M.see_invisible < user.invisibility) - continue - - msg = createDeafMessage(user, params, message) - if(!msg && visualOrAudible == 2) - continue - if(msg) - outputMessage(M, msg, user) - continue - - if(M.sdisabilities & BLIND || M.blinded || M.paralysis || (M.see_invisible < user.invisibility && visualOrAudible == 2)) - if(!(M in getRecipients(user, 2))) - continue - - msg = createBlindMessage(user, params, message) - if(!msg && visualOrAudible == 1) - continue - if(msg) - outputMessage(M, msg, user) - continue - - if(M.see_invisible < user.invisibility && visualOrAudible == 1) - continue - - msg = message - outputMessage(M, msg, user) - - if(visualOrAudible == 2) - handleListeningObjects(user, message) - - return visualOrAudible - -/datum/emote/proc/outputMessage(var/mob/M, var/msg = "", var/mob/user) - msg = replaceMobWithYou(M, msg, user) - to_chat(M, msg) - -/datum/emote/proc/getLoc(var/mob/user, var/message = "") - var/loc = checkForHolopad(user, message) - if(loc) - return loc - return user - -/datum/emote/proc/checkForHolopad(var/mob/user, var/message = "") - if(!isAI(user)) - return - var/mob/living/silicon/ai/AI = user - var/obj/machinery/hologram/holopad/T = AI.holo - if(!(T && T.hologram && T.master == AI)) - return - if(message) - to_chat(AI, "Holopad action relayed, [message]") - return T - -/datum/emote/proc/handleListeningObjects(var/mob/user, var/message = "") - // based on say code - var/omsg = replacetext(message, "[user] ", "") - var/list/listening_obj = new - for(var/atom/movable/A in view(HEARING_RANGE, user)) - if(istype(A, /mob)) - var/mob/M = A - for(var/obj/O in M.contents) - listening_obj |= O - else if(istype(A, /obj)) - var/obj/O = A - listening_obj |= O - for(var/obj/O in listening_obj) - O.hear_message(user, omsg) - -/datum/emote/proc/getRecipients(var/location, var/visualOrAudible) - if(visualOrAudible == 1) - return viewers(location) - return get_mobs_in_view(HEARING_RANGE, location) - -// set up different messages for blind people here. Empty will mean no message for -//non-audible emotes and the standard message for audible ones -/datum/emote/proc/createBlindMessage(var/mob/user, var/list/params, var/message) - if(audible && selfText) - message = "You hear someone [selfText]" - message = addExtras(message) - return message - -// set up different messages for deaf people here. Empty will mean no message for -// audible emotes and standard for non-audible ones -/datum/emote/proc/createDeafMessage(var/mob/user, var/list/params, var/message) - message = mimeMessage(user, params) - message = addExtras(message) - return message - -/datum/emote/proc/sendToDead(var/mob/user, var/message = "", var/ghostEmote) - for(var/mob/M in dead_mob_list) - if(!M.client || istype(M, /mob/new_player)) - continue //skip monkeys, leavers and new players - if(M.stat == DEAD) - if(ghostEmote && ((M.client.prefs.toggles & CHAT_GHOSTSIGHT) || (M in viewers(user)))) - M.show_message(message) - else if((M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(user))) - M.show_message(message) - -/datum/emote/proc/playSound(var/mob/user, var/list/params) - if(!sound) - return - playsound(user, sound, vol) - return 1 - -/datum/emote/proc/doMime(var/mob/user) - if(mimeText && user.mind && user.mind.miming) - return 1 - -//Emote Cooldown System (it's so simple!) -/datum/emote/proc/handle_emote_CD(var/mob/user) - if(user.emote_cd == 2) // Cooldown emotes were disabled by an admin, prevent use - return 1 - if(user.emote_cd == 1) // Already on CD, prevent use - return 1 - - user.emote_cd = 1 // Starting cooldown - - spawn(cooldown) - if(!user || user.emote_cd == 2) // Don't reset if cooldown emotes were disabled by an admin during the cooldown - return 1 - user.emote_cd = 0 // Cooldown complete, ready for more! - - return 0 // Proceed with emote -//--FalseIncarnate - -/datum/emote/proc/changeTextMacros(var/mob/user, var/message = "") - message = swapHisToYour(user, message) - message = swapHimselfToYourself(user, message) - return message - -/datum/emote/proc/getHis(var/mob/user) - var/his = "[user]\his" - his = copytext(his, lentext("[user]") + 1) - return his - -/datum/emote/proc/swapHisToYour(var/mob/user, var/message = "") - var/his = getHis(user) - message = replacetext(message, " [his] ", " your ") - return message - -/datum/emote/proc/getHimself(var/mob/user) - var/himself = "[user]\himself" - himself = copytext(himself, lentext("[user]") + 1) - return himself - -/datum/emote/proc/swapHimselfToYourself(var/mob/user, var/message) - var/himself = getHimself(user) - message = replacetext(message, "[himself]", "yourself") - return message - -/****************************************************************************************** - Emote Verbs -******************************************************************************************/ - -/datum/emote/proc/addVerbs(var/mob/user) - if(!istype(user)) - return - new /obj/emoteVerb(user, src, commands) - -// Dummy object to allow access to the verb, needed as verbs require a valid loc for setting the src -/obj/emoteVerb - var/datum/emote/emote - var/mob/owner - -/obj/emoteVerb/New(var/mob/user, var/datum/emote/toAccess) - if(!(istype(user))) - return - if(!(istype(toAccess))) - return - if(!toAccess.commands) - return - owner = user - emote = toAccess - name = "[emote]" - loc = user - user.verbs += new/obj/emoteVerb/proc/runEmote(src, emote.commands[1], emote.desc) - -/obj/emoteVerb/proc/runEmote() - set src = usr.contents - set category = "Emotes" - return usr.emoteHandler.runEmote(emote.commands[1]) - -/obj/emoteVerb/Destroy() - owner.verbs -= new/obj/emoteVerb/proc/runEmote(src, emote.commands[1]) - ..() - -/obj/emoteVerb/custom - -obj/emoteVerb/custom/New(var/mob/user) - if(!(istype(user))) - return - owner = user - name = "custom" - user.verbs += new/obj/emoteVerb/proc/runEmote(src, "custom", "Make your own emote") - -/obj/emoteVerb/custom/runEmote() - set src = usr.contents - set category = "Emotes" - return usr.emoteHandler.runEmote("me") - - - -/************************************************************************************************************************** - Custom Emotes -As these are made as needed, they aren't searched for the appropriate one. As such, you need to specify conditions for which -one is used in /datum/emote_handler/customEmote(). - -***************************************************************************************************************************/ - -/datum/emote/custom - name = "Custom emote" - baseLevel = 0 - -/datum/emote/custom/New(var/mob/user, var/message = "", var/isAudible) - if(!message) - message = getMessage(user) - text = message - audible = isAudible - -/datum/emote/custom/proc/getMessage(var/mob/user) -// user.set_typing_indicator(1) -// user.hud_typing = 1 - var/input = copytext(input(user,"What do you want to emote?", "Custom emote") as text|null,1,MAX_MESSAGE_LEN) -// user.hud_typing = 0 -// user.set_typing_indicator(0) - input = trim_strip_html_properly(input) - return input - -/datum/emote/custom/available(var/mob/user) - return 1 - -/datum/emote/custom/prevented(var/mob/user) - if(!user.use_me) - return "you are prevented from using custom emotes" - return ..() - -// Yeah, no -/datum/emote/custom/createSelfMessage(var/mob/user, var/list/params, var/message = "") - return - -/datum/emote/custom/replaceMobWithYou(var/mob/M, var/message = "", var/mob/user) - return message - -/datum/emote/custom/ghost - name = "Ghost emote" - startText = "DEAD: " - emoteSpanClass = "game deadsay" - -/datum/emote/custom/ghost/prevented(var/mob/user) - if(!user.use_me) - return "you are prevented from using custom emotes" - if(user.client.prefs.muted & MUTE_DEADCHAT) - return "you are muted from deadchat" - if(!(user.client.prefs.toggles & CHAT_DEAD)) - return "you have deadchat muted" - if(!user.client.holder) - if(!config.dsay_allowed) - return "deadchat is globally muted" - -/datum/emote/custom/ghost/getMessage(var/mob/user) - var/input = copytext(input(user,"What do you want to emote?", "Custom emote") as text|null,1,MAX_MESSAGE_LEN) - input = trim_strip_html_properly(input) - return input - -/datum/emote/custom/ghost/processMessage(var/mob/user, var/list/params, var/message = "") - if(!message) - return - log_emote("Ghost/[user.key] : [message]") - sendToDead(user, message, ghostEmote = 1) - diff --git a/code/datums/Emote_system/emote_handler.dm b/code/datums/Emote_system/emote_handler.dm deleted file mode 100644 index be962a72dc7..00000000000 --- a/code/datums/Emote_system/emote_handler.dm +++ /dev/null @@ -1,90 +0,0 @@ -/datum/emoteHandler - var/mob/owner - var/list/commands - -/datum/emoteHandler/New(var/mob/user) - owner = user - setupCommands() - -/datum/emoteHandler/proc/setupCommands(var/reset = 0) - spawn(0) // needed so at mob creation species is set before emotes are allocated - if(reset) - deleteEmoteVerbs() - commands = new/list() - for(var/e in emotes) - var/datum/emote/emote = e - if(emote.baseLevel || emote.allowParent) - var/datum/emote/found = searchTree(emote) - if(found) - for(var/command in found.commands) - commands[lowertext(command)] = found - found.addVerbs(owner) - -/datum/emoteHandler/proc/deleteEmoteVerbs() - for(var/obj/emoteVerb/E in owner.contents) - qdel(E) - -/datum/emoteHandler/proc/runEmote(var/command = "", var/message = "", var/audible = 0) // message and audible only used in custom emotes - if(!command) - return 0 - if(command == "help") - showCommands() - return 1 - - var/datum/emote/emote - - if(copytext(command, 1, 3) == "me" && !message && lentext(command) >= 4) - message = copytext(command, 4) - command = "me" - - if(command == "me") - emote = customEmote(message, audible) - if(!emote) - return 0 - - if(!commands[command] && !(command == "me")) - to_chat(owner, "Unknown emote, please check *help for emotes available to your character") - return 0 - - if(!emote) - emote = commands[command] - - if(!emote.available(owner)) // something's changed, remake the commands list, then try again to see if they've got a different version - setupCommands() - return runEmote(command, message, audible) - - var/prevented = emote.prevented(owner) - if(prevented) - to_chat(owner, "You can't do that because [prevented]!") - return 0 - return emote.doEmote(owner, command) - -/datum/emoteHandler/proc/showCommands() - var/emoteList = "Available emotes are " - var/commandAdded = 0 - for(var/c in commands) - if(commandAdded) - emoteList += ", " - emoteList += c - commandAdded = 1 - - to_chat(owner, emoteList) - -// recursive search of subtypes - starts checking at the lowest level and breaks out if it finds one that can be done -/datum/emoteHandler/proc/searchTree(var/datum/emote/emote) - var/list/subtypes = subtypesof(emote.type) - var/datum/emote/found - for(var/t in subtypes) - var/datum/emote/em = new t - if(em.allowParent) - continue - found = searchTree(em) - if(found) - return (found) - if(emote.available(owner)) - return emote - -/datum/emoteHandler/proc/customEmote(var/custom, var/audible) - if(isobserver(owner)) - return new /datum/emote/custom/ghost(owner, custom, audible) - return new /datum/emote/custom(owner, custom, audible) diff --git a/code/datums/Emote_system/emotes.dm b/code/datums/Emote_system/emotes.dm deleted file mode 100644 index 35303e84ea6..00000000000 --- a/code/datums/Emote_system/emotes.dm +++ /dev/null @@ -1,1739 +0,0 @@ - -/datum/emote/airguitar - name = "airguitar" - desc = "Makes the mob play an air guitar" - commands = list("airguitar") - text = "is strumming the air and headbanging like a safari chimp" - selfText = "are strumming the air and headbanging like a safari chimp" - restrained = 1 - -/datum/emote/airguitar/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/alarm - name = "alarm" - desc = "makes the mob sound an alarm" - commands = list("alarm") - text = "sounds an alarm" - selfText = "sound an alarm" - audible = 1 - -/datum/emote/alarm/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/alarm/createBlindMessage(var/mob/user, var/params, var/messaage) - return "You hear an alarm" - -/datum/emote/alert - name = "alert" - desc = "Makes the mob sound an alert" - commands = list("alert") - text = "lets out a distressed noise" - selfText = "let out a distressed noise" - audible = 1 - -/datum/emote/alert/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/beep - name = "beep" - desc = "makes the mob let out a beep" - commands = list("beep") - text = "beeps" - selfText = "beep" - audible = 1 - -/datum/emote/beep/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/beep/targetted - sound = 'sound/machines/twobeep.ogg' - cooldown = 50 - canTarget = 1 - targetMob = 1 - -/datum/emote/beep/targetted/available(var/mob/user) - if(user.is_mechanical()) - return 1 - -/datum/emote/blink - name = "blink" - desc = "Makes the mob blink" - commands = list("blink", "blinks") - text = "blinks" - selfText = "blink" - -/datum/emote/blink/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isbrain(user)) - return 1 - -/datum/emote/blink/rapid - name = "rapid blink" - desc = "Makes the mob blink rapidly" - commands = list("blink_r", "blinks_r") - allowParent = 1 - -/datum/emote/blink/rapid/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/blink/rapid/standardMessage(var/mob/user) - var/message = ..() - message += " rapidly" - return message - -/datum/emote/blush - name = "blush" - desc = "Makes the mob blush" - commands = list("blush", "blushes") - text = "blushes" - selfText = "blush" - -/datum/emote/blush/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/boop - name = "boop" - desc = "Makes the mob boop" - commands = list("boop", "boops") - text = "boops" - selfText = "boop" - -/datum/emote/boop/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/bounce - name = "bounce" - desc = "Makes the mob bounce" - commands = list("bounce", "bounces") - text = "bounces in place" - selfText = "bounce in place" - -/datum/emote/bounce/available(var/mob/user) - if(isslime(user)) - return 1 - -/datum/emote/bow - name = "bow" - desc = "Makes the mob bow" - commands = list("bow", "bows") - text = "bows" - selfText = "bow" - canTarget = 1 - targetMob = 1 - targetText = "to" - -/datum/emote/bow/available(var/mob/user) - if(isrobot(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/bow/prevented(var/mob/user) - . = ..() - if(!. && user.buckled) - return "you are buckled to something" - -/datum/emote/burp - name = "burp" - desc = "Makes the mob burp" - commands = list("burp", "burps") - text = "burps" - selfText = "burp" - audible = 1 - mimeText = "opens their mouth rather obnoxiously" - mimeSelf = "open your mouth rather obnoxiously" - muzzleAffected = 1 - muzzledNoise = "peculiar" - -/datum/emote/burp/available(var/mob/user) - if(ishuman(user)) - return 1 - if(islarva(user) || isalienadult(user)) - return 1 - -/datum/emote/buzz - name = "buzz" - desc = "Makes the mob buzz" - commands = list("buzz", "buzzes", "buzzs") - text = "buzzes" - selfText = "buzz" - audible = 1 - sound = 'sound/machines/buzz-sigh.ogg' - canTarget = 1 - targetMob = 1 - -/datum/emote/buzz/available(var/mob/user) - if(user.is_mechanical()) - return 1 - -/datum/emote/buzz/buzz2 - name = "buzz 2" - desc = "makes the mob buzz in an irritated way" - commands = list("buzz2") - text = "makes an irritated buzzing sound" - selfText = "make an irritated buzzing sound" - sound = "sound/machines/buzz-two.ogg" - allowParent = 1 - -/datum/emote/chirp - name = "chirp" - desc = "Makes the mob chirp" - commands = list("chirp", "chirps") - text = "chirps" - selfText = "chirp" - audible = 1 - sound = 'sound/misc/nymphchirp.ogg' - vol = 40 - cooldown = 50 - -/datum/emote/chirp/available(var/mob/user) - if(istype(user, /mob/living/simple_animal/diona)) - return 1 - -/datum/emote/choke - name = "choke" - desc = "Makes the mob choke" - commands = list("choke", "chokes") - text = "chokes" - selfText = "choke" - audible = 1 - mimeText = "clutches" - mimeSelf = "clutch" - muzzleAffected = 1 - muzzledNoise = "strong" - -/datum/emote/choke/available(var/mob/user) - if(ishuman(user)) - return 1 - if(islarva(user) || isalienadult(user)) - return 1 - -// This has to be done here not mimeText because \his will throw a compile error -// instead of a runtime if there's not a valid target in the string *frown VB -/datum/emote/choke/mimeMessage(var/mob/user, var/list/params) - var/message = "[user] [mimeText] \his throat desperately" - return message - -/datum/emote/chuckle - name = "chuckle" - desc = "chuckle" - commands = list("chuckle", "chuckles") - text = "chuckles" - selfText = "chuckle" - audible = 1 - mimeText = "appears to chuckle" - mimeSelf = "appear to chuckle" - muzzleAffected = 1 - -/datum/emote/chuckle/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/clap - name = "clap" - desc = "clap" - commands = list("clap", "claps") - text = "claps" - selfText = "clap" - audible = 1 - mimeText = "claps silently" - restrained = 1 - -/datum/emote/clap/available(var/mob/user) - if(isrobot(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/collapse - name = "collapse" - desc = "Makes the mob collapse" - commands = list("collapse", "collapses") - text = "collapses" - selfText = "collapse" - audible = 1 - mimeText = "collapses without a sound" - -/datum/emote/collapse/available(var/mob/user) - if(islarva(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/collapse/doAction(var/mob/user, var/list/params) - user.Paralyse(2) - -/datum/emote/cough - name = "cough" - desc = "Makes the mob cough" - commands = list("cough", "coughs") - text = "coughs" - selfText = "cough" - audible = 1 - mimeText = "appears to cough" - mimeSelf = "appear to cough" - muzzleAffected = 1 - muzzledNoise = "strong" - -/datum/emote/cough/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/cry - name = "cry" - desc = "Makes the mob cry" - commands = list("cry", "cries") - text = "cries" - selfText = "cry" - audible = 1 - mimeText = "cries silently" - muzzleAffected = 1 - muzzledNoise = "weak" - -/datum/emote/cry/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/dance - name = "dance" - desc = "makes the mob dance around happily" - commands = list("dance", "dances") - text = "dances around happily" - selfText = "dance around happily" - restrained = 1 - -/datum/emote/dance/available(var/mob/user) - if(islarva(user)) - return 1 - -/datum/emote/dap - name = "dap" - desc = "Makes the mob give daps" - commands = list("dap", "daps") - text = "gives daps" - selfText = "give daps" - restrained = 1 - canTarget = 1 - targetMob = 1 - targetText = "to" - -/datum/emote/dap/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/dap/addTarget(var/mob/user, var/list/params, var/message = "") - if(!params["target"] || params["target"] == user) - message = "[user] sadly can't find anybody to give daps to, and daps \himself. Shameful" - return message - return ..() - -/datum/emote/deathgasp - name = "deathgasp" - desc = "Makes the mob let out it's final gasp" - commands = list("deathgasp", "deathgasps") - audible = 1 - -/datum/emote/deathgasp/prevented(var/mob/user) - if(user.stat == DEAD) - return "you are already dead!" - -/datum/emote/deathgasp/alien - text = "lets out a waning guttural screech, green blood bubbling from its maw..." - selfText = "let out a waning guttural screech, green blood bubbling from your maw..." - -/datum/emote/deathgasp/alien/available(var/mob/user) - if(isalienadult(user)) - return 1 - -// sorry, no selftext for humans as we'd have to add a var to species for it and that's yuk - VB -/datum/emote/deathgasp/human - text = "dummytext" - -/datum/emote/deathgasp/human/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/deathgasp/human/standardMessage(var/mob/user, var/list/params) - var/mob/living/carbon/human/U = user - var/message = "\The [user] [U.species.death_message]" - return message - -/datum/emote/deathgasp/human/createSelfMessage(var/mob/user, var/list/params, var/message) - return message - -/datum/emote/deathgasp/human/replaceMobWithYou(var/mob/user, var/message) - return message - -/datum/emote/deathgasp/robot - text = "shudders violently for a moment, then becomes motionless, its eyes slowly darkening" - selfText = "shudder violently for a moment, then become motionless, your eyes slowly darkening" - audible = 0 - -/datum/emote/deathgasp/robot/available(var/mob/user) - if(isrobot(user)) - return 1 - -/datum/emote/drone - name = "drone" - desc = "Makes the mob drone and rumble" - commands = list("drone", "drones", "rumble", "rumbles", "hum", "hums") - text = "rumbles" - selfText = "rumble" - audible = 1 - sound = 'sound/voice/DraskTalk.ogg' - canTarget = 1 - targetMob = 1 - -/datum/emote/drone/available(var/mob/user) - if(user.get_species() == "Drask") - return 1 - -/datum/emote/drone/addTarget(var/mob/user, var/list/params, var/message) - if(!params["target"]) - return message - message = replacetext(message, "rumbles", "drones") - return ..() - -/datum/emote/drone/createSelfMessage(var/mob/user, var/list/params, var/message) - message = ..() - message = replacetext(message, "drones", "drone") - return message - -/datum/emote/drool - name = "drool" - desc = "Makes the mob drool" - commands = list("drool", "drools") - text = "drools" - selfText = "drool" - -/datum/emote/drool/available(var/mob/user) - if(isalienadult(user) || islarva(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/eyebrow - name = "eyebrow" - desc = "Makes the mob raise an eyebrow" - commands = list("eyebrow") - text = "raises an eyebrow" - selfText = "raise an eyebrow" - -/datum/emote/eyebrow/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/faint - name = "faint" - desc = "makes the mob faint" - commands = list("faint", "faints") - text = "faints" - selfText = "faint" - -/datum/emote/faint/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/faint/doAction(var/mob/user, var/list/params) - if(!user.sleeping) - user.sleeping += 1 - -/datum/emote/fart - name = "fart" - desc = "makes the mob fart" - commands = list("fart", "farts") - text = "farts" - selfText = "fart" - cooldown = 50 - audible = 1 - -/datum/emote/fart/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/fart/standardMessage(var/mob/user) - var/message - - if(TOXIC_FARTS in user.mutations) - message = "\The [user] unleashes a [pick("horrible","terrible","foul","disgusting","awful")] fart" - return message - message = "\The [user] [pick("passes wind","farts")]" - return message - -/datum/emote/fart/createSelfMessage(var/mob/user, var/list/params, var/message) - message = ..() - message = replacetext(message, "unleashes", "unleash") - message = replacetext(message, "passes", "pass") - return message - -/datum/emote/fart/doAction(var/mob/user) - if(TOXIC_FARTS in user.mutations) - for(var/mob/M in range(get_turf(user),2)) - if(M.internal != null && M.wear_mask && (M.wear_mask.flags & AIRTIGHT)) - continue - if(M == user) - continue - M.reagents.add_reagent("jenkem", 1) - - if(locate(/obj/item/weapon/storage/bible) in get_turf(user)) - to_chat(viewers(user), "[user] farted on the Bible!") - to_chat(viewers(user), "A mysterious force smites [user]!") - var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread - s.set_up(3, 1, user) - s.start() - user.gib() - -/datum/emote/flap - name = "flap" - desc = "Makes the mob flap their wings" - commands = list("flap", "flaps") - text = "flaps" - selfText = "flap" - restrained = 1 - audible = 1 - -/datum/emote/flap/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/flap/standardMessage(var/mob/user, var/list/params) - var/message = "\The [user] [text] \his wings" - return message - -/datum/emote/flap/angry - name = "angry flap" - desc = "makes the mob flap their wings angrily" - commands = list("a_flap", "a_flaps") - allowParent = 1 - -/datum/emote/flap/angry/standardMessage(var/mob/user) - var/message = ..() - message += " angrily" - return message - -/datum/emote/flash - name = "flash" - desc = "Makes the lights on the mob flash quickly" - commands = list("flash", "flashes") - text = "flash quickly" - selfText = "flash quickly" - startText = "The lights on" - -/datum/emote/flash/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/flip - name = "flip" - desc = "Makes the mob flip, possibly in the direction of someone" - commands = list("flip", "flips") - text = "flips" - selfText = "flip" - canTarget = 1 - targetMob = 1 - targetText = "in" - -/datum/emote/flip/available(var/mob/user) - if(isrobot(user)) - return 1 - -/datum/emote/flip/prevented(var/mob/user) - . = ..() - if(!. && user.buckled) - return "you are buckled to something" - -/datum/emote/flip/createMessage(var/mob/user, var/list/params) - var/message = "" - if(user.lying || user.weakened) - message = "\The [user] flops and flails around on the floor" - else - message = ..() - return message - -/datum/emote/flip/addTarget(var/mob/user, var/list/params, var/message) - message = ..() - if(params["target"]) - message += "'s general direction" - return message - -/datum/emote/flip/createSelfMessage(var/mob/user, var/list/params, var/message) - message = ..() - message = replacetext(message, "flops", "flop") - message = replacetext(message, "flails", "flail") - return message - -/datum/emote/flip/doAction(var/mob/user, var/list/params, var/message) - if(user.lying || user.weakened) - return - user.SpinAnimation(5,1) - -/datum/emote/flip/flipOver - desc = "Makes the mob flip, possibly in the direction of, or even over someone" - -/datum/emote/flip/flipOver/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/flip/flipOver/createMessage(var/mob/user, var/params) - var/message = "" - var/obj/item/weapon/grab/G = user.get_active_hand() - if(istype(G) && G.affecting && !G.affecting.buckled) - params["target"] = G.affecting - message = "\The [user] [text] over [params["target"]]!" - return message - return ..() - -/datum/emote/flip/flipOver/doAction(var/mob/user, var/params, var/message) - var/obj/item/weapon/grab/G = user.get_active_hand() - if(istype(G) && (G.affecting == params["target"]) && !G.affecting.buckled) - var/turf/oldloc = user.loc - var/turf/newloc = G.affecting.loc - if(isturf(oldloc) && isturf(newloc)) - user.SpinAnimation(5,1) - user.forceMove(newloc) - G.affecting.forceMove(oldloc) - return - ..() - -/datum/emote/frown - name = "frown" - desc = "Makes the mob frown" - commands = list("frown", "frowns") - text = "frowns" - selfText = "frown" - -/datum/emote/frown/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/gasp - name = "gasp" - desc = "Makes the mob gasp" - commands = list("gasp", "gasps") - text = "gasps" - selfText = "gasp" - audible = 1 - mimeText = "appears to be gasping" - mimeSelf = "appear to be gasping" - muzzleAffected = 1 - muzzledNoise = "weak" - -/datum/emote/gasp/available(var/mob/user) - if(isalienadult(user) || islarva(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/giggle - name = "giggle" - desc = "Makes the mob giggle" - commands = list("giggle", "giggles") - text = "giggles" - selfText = "giggle" - audible = 1 - mimeText = "giggles silently" - muzzleAffected = 1 - -/datum/emote/giggle/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/glare - name = "glare" - desc = "Makes the mob glare" - commands = list("glare", "glares") - text = "glares" - selfText = "glare" - canTarget = 1 - targetMob = 1 - -/datum/emote/glare/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/gnarl - name = "gnarl" - desc = "Makes the mob gnarl and show its teeth" - commands = list("gnarl", "gnarls") - text = "gnarls and shows its teeth" - selfText = "gnarl and show your teeth" - audible = 1 - muzzleAffected = 1 - -/datum/emote/gnarl/available(var/mob/user) - if(islarva(user)) - return 1 - -/datum/emote/grin - name = "grin" - desc = "Makes the mob grin" - commands = list("grin", "grins") - text = "grins" - selfText = "grin" - -/datum/emote/grin/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/groan - name = "groan" - desc = "Makes the mob groan" - commands = list("groan", "groans") - text = "groans" - selfText = "groan" - audible = 1 - mimeText = "appears to groan" - mimeSelf = "appear to groan" - muzzleAffected = 1 - -/datum/emote/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/grumble - name = "grumble" - desc = "Makes the mob grumble" - commands = list("grumble", "grumbles") - text = "grumbles" - selfText = "grumble" - audible = 1 - mimeText = "grumbles" - muzzleAffected = 1 - -/datum/emote/grumble/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/halt - name = "halt" - desc = "Makes the mob sound a halt warning. Only available with a security module" - commands = list("halt") - text = "'s speakers skreech, \"Halt! Security!\"" - selfText = " speakers skreech, \"Halt! Security!\"" - audible = 1 - sound = 'sound/voice/halt.ogg' - -/datum/emote/halt/available(var/mob/user) - if(isrobot(user)) - return 1 - -/datum/emote/halt/prevented(var/mob/user) - . = ..() - if(.) - return - var/mob/living/silicon/robot/U = user - if(!(istype(U.module, /obj/item/weapon/robot_module/security))) - return "you are not security" - -/datum/emote/handshake - name = "handshake" - desc = "Makes the mob shake hands with a target" - commands = list("handshake") - text = "shakes hands" - selfText = "shake hands" - canTarget = 1 - targetMob = 1 - mustTarget = 1 - targetText = "with" - restrained = 1 - -/datum/emote/handshake/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/handshake/prevented(var/mob/user) - . = ..() - if(!. && user.r_hand) - return "you need your right hand free" - -/datum/emote/handshake/addTarget(var/mob/user, var/list/params, var/message) - var/mob/target = params["target"] - if(target.r_hand) - message = "\The [user] holds out his hand to [params["target"]]" - return message - return ..() - -/datum/emote/hiss - name = "hiss" - desc = "Makes the mob hiss" - commands = list("hiss", "hisses") - text = "hisses" - selfText = "hiss" - audible = 1 - -/datum/emote/hiss/available(var/mob/user) - if(isalienadult(user) || islarva(user)) - return 1 - -/datum/emote/hug - name = "hug" - desc = "Makes the mob hug a target or themselves" - commands = list("hug", "hugs") - text = "hugs" - selfText = "hug" - canTarget = 1 - targetMob = 1 - targetText = "" - -/datum/emote/hug/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/hug/getTarget(var/mob/user) - var/mob/target = ..() - if(target) - return target - return user - -/datum/emote/jiggle - name = "jiggle" - desc = "Makes the mob jiggle" - commands = list("jiggle", "jiggles") - text = "jiggles" - selfText = "jiggle" - -/datum/emote/jiggle/available(var/mob/user) - if(isslime(user)) - return 1 - -/datum/emote/johnny - name = "johnny" - desc = "Yeah, just try it" - commands = list("johnny") - text = "takes a drag from a cigarette and blows their name out in smoke" - selfText = "take a drag from a cigarette and blow their name out in smoke" - audible = 1 - mimeText = "takes a drag from a cigarette and blows" - mimeSelf = "take a drag from a cigarette and blow" - canTarget = 1 - targetMob = 1 - mustTarget = 1 - targetText = "" - -/datum/emote/johnny/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/johnny/getTarget(var/mob/user) - var/mob/target = ..() - if(target != user) - return target - to_chat(user, "You need a target that isn't yourself") - return INVALID - -/datum/emote/johnny/createMessage(var/mob/user, var/params) - if(doMime(user)) - return ..() - var/message = "\The [user] says \"[params["target"]], please. They had a family.\" [user] [text]" - return message - -/datum/emote/johnny/createSelfMessage(var/mob/user, var/list/params, var/message = "") - message = ..() - message = replacetext(message, "says", "say") - return message - -/datum/emote/johnny/createDeafMessage(var/mob/user, vap/list/params, var/message) - message = "\The [user] says something, then [text]" - return message - -/datum/emote/johnny/replaceMobWithYou(var/mob/M, var/message, var/mob/user) - if(user && M != user) - return message - return ..() - -/datum/emote/johnny/createBlindMessage(var/mob/user, var/list/params, var/message) - message = "You hear someone say \"[params["target"]], please, They had a family\"" - return message - -/datum/emote/jump - name = "jump" - desc = "Makes the mob jump" - commands = list("jump", "jumps") - text = "jumps" - selfText = "jump" - -/datum/emote/jump/available(var/mob/user) - if(islarva(user) || isalienadult(user)) - return 1 - if(issmall(user)) - return 1 - -/datum/emote/laugh - name = "laugh" - desc = "Makes the mob laugh" - commands = list("laugh", "laughs") - text = "laughs" - selfText = "laugh" - audible = 1 - mimeText = "acts out a laugh" - mimeSelf = "act out a laugh" - muzzleAffected = 1 - -/datum/emote/laugh/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/law - name = "law" - desc = "Makes the mob prove it is the law" - commands = list("law") - text = "shows its legal authorization barcode" - selfText = "show your legal authorization barcode" - audible = 1 - sound = 'sound/voice/biamthelaw.ogg' - -/datum/emote/law/available(var/mob/user) - if(isrobot(user)) - return 1 - -/datum/emote/law/prevented(var/mob/user) - . = ..() - if(.) - return - var/mob/living/silicon/robot/U = user - if(!(istype(U.module, /obj/item/weapon/robot_module/security))) - return "You are not THE LAW, pal" - -/datum/emote/light - name = "light" - desc = "makes the mob light up" - commands = list("light", "lights") - text = "lights up for a bit, then stops" - selfText = "light up for a bit, then stop" - -/datum/emote/light/available(var/mob/user) - if(isslime(user)) - return 1 - -/datum/emote/look - name = "look" - desc = "Makes the mob look" - commands = list("look", "looks") - text = "looks" - selfText = "look" - canTarget = 1 - targetMob = 1 - -/datum/emote/look/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/look/addTarget(var/mob/user, var/list/params, var/message) - if(!params["target"]) - message += " around" - return message - return ..() - -/datum/emote/moan - name = "moan" - desc = "Makes the mob moan" - commands = list("moan", "moans") - text = "moans" - selfText = "moan" - audible = 1 - -/datum/emote/moan/available(var/mob/user) - if(isslime(user)) - return 1 - if(islarva(user)) - return 1 - -/datum/emote/mumble - name = "mumble" - desc = "Makes the mob mumble" - commands = list("mumble", "mumbles") - text = "mumbles" - selfText = "mumble" - audible = 1 - mimeText = "mumbles" - -/datum/emote/mumble/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/no - name = "no" - desc = "Makes the mob let out a negative blip" - commands = list("no") - text = "emits a negative blip" - selfText = "emit a negative blip" - audible = 1 - sound = 'sound/machines/synth_no.ogg' - -/datum/emote/no/New() - ..() - commands += "no" - -/datum/emote/no/available(var/mob/user) - if(user.is_mechanical()) - return 1 - -/datum/emote/nod - name = "nod" - desc = "Makes the mob nod" - commands = list("nod", "nods") - text = "nods" - selfText = "nod" - -/datum/emote/nod/available(var/mob/user) - if(islarva(user)) - return 1 - if(isrobot(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/notice - name = "notice" - desc = "Makes the mob play a loud tone" - commands = list("notice") - text = "plays a loud tone" - selfText = "play a loud tone" - audible = 1 - -/datum/emote/notice/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/pale - name = "pale" - desc = "Makes the mob go pale" - commands = list("pale", "pales") - text = "goes pale for a second" - selfText = "go pale for a second" - -/datum/emote/pale/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/ping - name = "ping" - desc = "Makes the mob ping" - commands = list("ping", "pings") - text = "pings" - selfText = "ping" - audible = 1 - sound = 'sound/machines/ping.ogg' - canTarget = 1 - targetMob = 1 - -/datum/emote/ping/available(var/mob/user) - if(user.is_mechanical()) - return 1 - -/datum/emote/point - name = "point" - desc = "Makes the mob point" - commands = list("point", "points") - text = "points" - selfText = "point" - canTarget = 1 - -/datum/emote/point/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/point/createMessage(var/mob/user, var/list/params) - if(params["target"]) - return - return ..() - -/datum/emote/point/doAction(var/mob/user, var/list/params) - if(!params["target"]) - return - user.pointed(params["target"]) - -/datum/emote/quiver - name = "quiver" - desc = "Makes the mob quiver" - commands = list("quiver", "quivers") - text = "quivers" - selfText = "quiver" - -/datum/emote/quiver/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/raise - name = "raise" - desc = "Makes the mob raise a hand" - commands = list("raise", "raises") - text = "raises a hand" - selfText = "raise a hand" - restrained = 1 - -/datum/emote/raise/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/roar - name = "roar" - desc = "Makes the mob roar" - commands = list("roar", "roars") - text = "roars" - selfText = "roar" - audible = 1 - muzzleAffected = 1 - muzzledNoise = "loud" - -/datum/emote/roar/available(var/mob/user) - if(isalienadult(user)) - return 1 - -/datum/emote/roll - name = "roll" - desc = "Makes the mob roll" - commands = list("roll", "rolls") - text = "rolls" - selfText = "roll" - -/datum/emote/roll/available(var/mob/user) - if(islarva(user)) - return 1 - if(issmall(user)) - return 1 - -/datum/emote/salute - name = "salute" - desc = "Makes the mob salute" - commands = list("salute", "salutes") - text = "salutes" - selfText = "salute" - canTarget = 1 - targetMob = 1 - targetText = "to" - -/datum/emote/salute/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/salute/prevented(var/mob/user) - . = ..() - if(!. && user.buckled) - return "you are buckled to something" - -/datum/emote/salute/getMobTarget(var/mob/user, var/list/targets) - var/mob/target = ..() - if(target != user) - return target - -/datum/emote/scratch - name = "scratch" - desc = "Makes the mob scratch" - commands = list("scratch", "scratches") - text = "scratches" - selfText = "scratch" - restrained = 1 - -/datum/emote/scratch/available(var/mob/user) - if(islarva(user) || isalienadult(user)) - return 1 - if(issmall(user)) - return 1 - -/datum/emote/scream - name = "scream" - desc = "makes the mob scream" - commands = list("scream", "screams") - text = "screams!" - selfText = "scream!" - audible = 1 - mimeText = "acts out a scream" - muzzledNoise = "very loud" - cooldown = 50 - vol = 80 - -/datum/emote/scream/createMessage(var/mob/user, var/list/params) - var/mob/living/carbon/human/H = user - - if(istype(H)) - return "\The [user] [H.species.scream_verb]!" - else - return ..() - -/datum/emote/scream/replaceMobWithYou(var/mob/M, var/message = "", var/mob/user) - var/mob/living/carbon/human/H = user - - if(istype(H) && (H.species.scream_verb != "screams")) - return message - return ..() - -/datum/emote/scream/machine - name = "machine scream" - sound = 'sound/goonstation/voice/robot_scream.ogg' - -/datum/emote/scream/machine/available(var/mob/user) - if(user.is_mechanical()) - return 1 - -/datum/emote/scream/human - name = "human scream" - -/datum/emote/scream/human/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/scream/human/playSound(var/mob/user) - var/mob/living/carbon/human/H = user - - if(H.gender == FEMALE) - playsound(H, "[H.species.female_scream_sound]", vol, 1, 0, pitch = H.get_age_pitch()) - else - playsound(H, "[H.species.male_scream_sound]", vol, 1, 0, pitch = H.get_age_pitch()) - return 1 - -/datum/emote/scretch - name = "scretch" - desc = "makes the mob scretch" //whatever that is! - commands = list("scretch", "scretches") - text = "scretches" - selfText = "scretch" - audible = 1 - muzzleAffected = 1 - -/datum/emote/scretch/available(var/mob/user) - if(isalienadult(user) || islarva(user)) - return 1 - -/datum/emote/shake - name = "shake" - desc = "Makes the mob shake its head" - commands = list("shake", "shakes") - text = "shakes" - selfText = "shake" - -/datum/emote/shake/available(var/mob/user) - if(islarva(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/shake/standardMessage(var/mob/user) - var/message = ..() - message += " [getHis(user)] head" - return message - -/datum/emote/shiver - name = "shiver" - desc = "Makes the mob shiver" - commands = list("shiver", "shivers") - text = "shivers" - selfText = "shiver" - audible = 1 - mimeText = "shivers" - -/datum/emote/shiver/available(var/mob/user) - if(isalienadult(user) || islarva(user)) - return 1 - if(isslime(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/shiver/createBlindMessage(var/mob/user, var/list/params, var/message) - message = "you hear someone's teeth chattering together" - -/datum/emote/shrug - name = "shrug" - desc = "Makes the mob shrug" - commands = list("shrug", "shrugs") - text = "shrugs" - selfText = "shrug" - -/datum/emote/shrug/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/sigh - name = "sigh" - desc = "Makes the mob sigh" - commands = list("sigh", "sighs") - text = "sighs" - selfText = "sigh" - audible = 1 - mimeText = "sighs" - muzzleAffected = 1 - muzzledNoise = "weak" - -/datum/emote/sigh/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/sign - name = "sign" - desc = "Makes the mob sign a number" - commands = list("sign", "signs") - text = "signs" - selfText = "sign" - restrained = 1 - takesNumber = 1 - -/datum/emote/sign/available(var/mob/user) - if(isalienadult(user) || islarva(user)) - return 1 - -/datum/emote/sign/getNumber(var/mob/user) - var/number = ..() - if(number == null) - to_chat(user, "You need a number to sign") - return INVALID - return number - -/datum/emote/sign/paramMessage(var/mob/user, var/list/params) - var/message = "\The [user] [text] [params["num"]]" - return message - -/datum/emote/sign/fingers - desc = "Makes the mob raise a number of fingers" - text = "raises" - selfText = "raise" - -/datum/emote/sign/fingers/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/sign/fingers/getNumber(var/mob/user) - var/number = ..() - if(number == INVALID) - return INVALID - var/fingersAvailable = 0 - if(!user.r_hand) - fingersAvailable += 5 - if(!user.l_hand) - fingersAvailable += 5 - if(fingersAvailable < number) - to_chat(user, "You don't have enough fingers free") - return INVALID - return number - -/datum/emote/sign/fingers/paramMessage(var/mob/user, var/list/params) - var/message = "\The [user] [text] [params["num"]] finger\s" // no, we can't just add " finger\s" to the parent version because the text macro won't work then :( VB - return message - -/datum/emote/slap - name = "slap" - desc = "makes the mob slap someone" - commands = list("slap", "slaps") - text = "slaps" - selfText = "slap" - audible = 1 - sound = 'sound/effects/snap.ogg' - canTarget = 1 - targetMob = 1 - targetText = "" - -/datum/emote/slap/New() - ..() - cooldown = 0 - -/datum/emote/slap/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/slap/getMobTarget(var/mob/user, var/list/targets) - for(var/mob/M in view(getLoc(user), 1)) - targets += M - var/mob/target = input("Select target", "Target Mob") as null|anything in targets - if(target == "None") - target = user - return target - -/datum/emote/slap/createBlindMessage(var/mob/user, var/list/params, var/message) - message = ..() - message = replacetext(message, "someone", "a") - return message - -/datum/emote/slap/doAction(var/mob/user, var/list/params) - if(user == params["target"]) - var/mob/living/U = user - U.adjustFireLoss(4) - -/datum/emote/smile - name = "smile" - desc = "Makes the mob smile" - commands = list("smile", "smiles") - text = "smiles" - selfText = "smile" - -/datum/emote/smile/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/snap - name = "snap" - desc = "Makes the mob snap it's fingers" - commands = list("snap", "snaps") - text = "snaps" - selfText = "snap" - audible = 1 - sound = 'sound/effects/fingersnap.ogg' - -/datum/emote/snap/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/snap/prevented(var/mob/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user - var/obj/item/organ/external/L = H.get_organ("l_hand") - var/obj/item/organ/external/R = H.get_organ("r_hand") - var/left_hand_good = 0 - var/right_hand_good = 0 - if(L && (!(L.status & ORGAN_DESTROYED)) && (!(L.status & ORGAN_SPLINTED)) && (!(L.status & ORGAN_BROKEN))) - left_hand_good = 1 - if(R && (!(R.status & ORGAN_DESTROYED)) && (!(R.status & ORGAN_SPLINTED)) && (!(R.status & ORGAN_BROKEN))) - right_hand_good = 1 - - if(!left_hand_good && !right_hand_good) - return "You need at least one hand in good working order to snap your fingers" - -/datum/emote/snap/standardMessage(var/mob/user, var/list/params) - var/message = ..() - message += " [getHis(user)] fingers" - params["prob"] = prob(5) - if(!params["prob"]) - return message - message += " right off!" - return message - -/datum/emote/snap/playSound(var/mob/user, var/list/params) - if(params["prob"]) - playsound(user.loc, 'sound/effects/snap.ogg', 50, 1) - return 1 - return ..() - -/datum/emote/snap/createBlindMessage(var/mob/user, var/list/params, var/message) - message = ..() - message += " their fingers" - return message - -/datum/emote/snap/createDeafMessage(var/mob/user, var/list/params, var/message) - return message - -/datum/emote/sneeze - name = "sneeze" - desc = "Makes the mob sneeze" - commands = list("sneeze", "sneezes") - text = "sneezes" - selfText = "sneeze" - audible = 1 - mimeText = "sneeze" - muzzleAffected = 1 - muzzledNoise = "strange" - -/datum/emote/sneeze/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/sniff - name = "sniff" - desc = "Makes the mob sniff" - commands = list("sniff", "sniffs") - text = "sniffs" - selfText = "sniff" - audible = 1 - mimeText = "sniffs" - -/datum/emote/sniff/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/snore - name = "snore" - desc = "Makes the mob snore" - commands = list("snore", "snores") - text = "snores" - selfText = "snore" - audible = 1 - mimeText = "sleeps soundly" - mimeSelf = "sleep soundly" - muzzleAffected = 1 - -/datum/emote/snore/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/squish - name = "squish" - desc = "Makes the mob squish" - commands = list("squish", "squishes") - text = "squishes" - selfText = "squish" - audible = 1 - sound = 'sound/effects/slime_squish.ogg' - canTarget = 1 - targetMob = 1 - -/datum/emote/squish/available(var/mob/user) - if(isslime(user)) - return 1 - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.species.name == "Slime People") //Only Slime People can squish - return 1 - for(var/obj/item/organ/external/L in H.organs) // if your limbs are squishy you can squish too! - if(L.dna.species =="Slime People") - return 1 - -/datum/emote/stare - name = "stare" - desc = "Makes the mob stare" - commands = list("stare", "stares") - text = "stares" - selfText = "stare" - canTarget = 1 - targetMob = 1 - -/datum/emote/stare/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/sulk - name = "sulk" - desc = "Makes the mob sulk" - commands = list("sulk", "sulks") - text = "sulks down sadly" - selfText = "sulk down sadly" - -/datum/emote/sulk/available(var/mob/user) - if(islarva(user)) - return 1 - -/datum/emote/sway - name = "sway" - desc = "Makes the mob sway" - commands = list("sway", "sways") - text = "sways around dizzily" - selfText = "sway around dizzily" - -/datum/emote/sway/available(var/mob/user) - if(islarva(user)) - return 1 - if(isslime(user)) - return 1 - -/datum/emote/tail - name = "tail" - desc = "Makes the mob wave it's tail" - commands = list("tail") - text = "waves it's tail" - selfText = "wave your tail" - -/datum/emote/tail/available(var/mob/user) - if(islarva(user) || isalienadult(user)) - return 1 - if(issmall(user)) - return 1 - -/datum/emote/tail/wag - name = "wag" - desc = "Makes the mob start wagging its tail" - commands = list("wag", "wags") - text = "starts" - selfText = "start" - -/datum/emote/tail/wag/available(var/mob/user) - if(issmall(user)) - return - if(ishuman(user)) - return 1 - -/datum/emote/tail/wag/prevented(var/mob/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user - if(H.species.bodyflags & TAIL_WAGGING) - if(H.wear_suit && (H.wear_suit.flags_inv & HIDETAIL || istype(H.wear_suit, /obj/item/clothing/suit/space))) - return "your clothing is stopping you wag your tail" - return - if(!H.body_accessory) - return "you have no tail to wag!" - if(!H.body_accessory.try_restrictions()) - return "your clothing is stopping you wag your tail" - -/datum/emote/tail/wag/standardMessage(var/mob/user, var/list/params) - var/message = ..() - message += " wagging [getHis(user)] tail" - return message - -/datum/emote/tail/wag/doAction(var/mob/user, var/list/params) - var/mob/living/carbon/human/H = user - H.start_tail_wagging(1) - -/datum/emote/tail/wag/stop - name = "swag" - desc = "Makes the mob stop wagging its tail" - commands = list("swag", "swags") - text = "stops" - selfText = "stop" - allowParent = 1 - -// seemingly no way to tell if a mob is wagging it's tail! VB -/datum/emote/tail/wag/stop/prevented(var/mob/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user - if(!(H.species.bodyflags & TAIL_WAGGING) && !H.body_accessory) - return "you can't stop wagging a tail you don't have!" - -/datum/emote/tail/wag/stop/doAction(var/mob/user, var/list/params) - var/mob/living/carbon/human/H = user - H.stop_tail_wagging(1) - -/datum/emote/tremble - name = "tremble" - desc = "Makes the mob tremble" - commands = list("tremble", "trembles") - text = "trembles" - selfText = "tremble" - -/datum/emote/tremble/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/twitch_s - name = "twitch_s" - desc = "Makes the mob twitch" - commands = list("twitch_s", "twitches_s") - text = "twitches" - selfText = "twitch" - -/datum/emote/twitch_s/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/twitch_s/twitch - name = "twitch" - desc = "Makes the mob twitch violently" - commands = list("twitch", "twitches") - allowParent = 1 - -/datum/emote/twitch_s/twitch/available(var/mob/user) - if(isslime(user)) - return 1 - if(islarva(user)) - return 1 - return ..() - -/datum/emote/twitch_s/twitch/standardMessage(var/mob/user, var/list/params) - var/message = ..() - message += " violently" - return message - -/datum/emote/vibrate - name = "vibrate" - desc = "Makes the mob vibrate" - commands = list("vibrate", "vibrates") - text = "vibrates" - selfText = "vibrate" - -/datum/emote/vibrate/available(var/mob/user) - if(isslime(user)) - return 1 - -/datum/emote/wave - name = "wave" - desc = "Makes the mob wave" - commands = list ("wave", "waves") - text = "waves" - selfText = "wave" - -/datum/emote/wave/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/whimper - name = "whimper" - desc = "Makes the mob whimper" - commands = list("whimper", "whimpers") - text = "whimpers" - selfText = "whimper" - audible = 1 - mimeText = "appears hurt" - mimeSelf = "appear hurt" - muzzleAffected = 1 - -/datum/emote/whimper/available(var/mob/user) - if(islarva(user) || isalienadult(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/whistle - name = "whistle" - desc = "Makes the mob whistle" - commands = list("whistle", "whistles") - text = "whistles" - selfText = "whistle" - audible = 1 - -/datum/emote/whistle/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/wink - name = "wink" - desc = "Makes the mob wink" - commands = list("wink", "winks") - text = "winks" - selfText = "wink" - -/datum/emote/wink/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/yawn - name = "yawn" - desc = "makes the mob yawn" - commands = list("yawn", "yawns") - text = "yawns" - selfText = "yawn" - audible = 1 - mimeText = "yawns" - muzzleAffected = 1 - -/datum/emote/yawn/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/yes - name = "yes" - desc = "Makes the mob let out an affirmative beep" - commands = list("yes") - text = "lets out an affirmative beep" - selfText = "let out an affirmative beep" - audible = 1 - sound = 'sound/machines/synth_yes.ogg' - canTarget = 1 - targetMob = 1 - -/datum/emote/yes/available(var/mob/user) - if(user.is_mechanical()) - return 1 \ No newline at end of file diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 4af13e256fd..0f796798d26 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -83,17 +83,17 @@ var/global/const/base_law_type = /datum/ai_laws/nanotrasen if(full_sync || supplied_laws.len) S.laws.clear_supplied_laws() - for (var/datum/ai_law/law in ion_laws) + for(var/datum/ai_law/law in ion_laws) S.laws.add_ion_law(law.law) - for (var/datum/ai_law/law in inherent_laws) + for(var/datum/ai_law/law in inherent_laws) S.laws.add_inherent_law(law.law) - for (var/datum/ai_law/law in supplied_laws) + for(var/datum/ai_law/law in supplied_laws) if(law) S.laws.add_supplied_law(law.index, law.law) /mob/living/silicon/proc/sync_zeroth(var/datum/ai_law/zeroth_law, var/datum/ai_law/zeroth_law_borg) - if (!is_special_character(src) || mind.original != src) + if(!is_special_character(src) || mind.original != src) if(zeroth_law_borg) laws.set_zeroth_law(zeroth_law_borg.law) else if(zeroth_law) @@ -159,7 +159,7 @@ var/global/const/base_law_type = /datum/ai_laws/nanotrasen if(supplied_laws.len >= number && supplied_laws[number]) delete_law(supplied_laws[number]) - while (src.supplied_laws.len < number) + while(src.supplied_laws.len < number) src.supplied_laws += "" if(state_supplied.len < supplied_laws.len) state_supplied += 1 diff --git a/code/datums/browser.dm b/code/datums/browser.dm index e8f17f17ad0..85f8e52e89d 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -20,13 +20,13 @@ user = nuser window_id = nwindow_id - if (ntitle) + if(ntitle) title = format_text(ntitle) - if (nwidth) + if(nwidth) width = nwidth - if (nheight) + if(nheight) height = nheight - if (nref) + if(nref) ref = nref add_stylesheet("common", 'html/browser/common.css') // this CSS sheet is common to all UIs @@ -60,18 +60,18 @@ /datum/browser/proc/get_header() var/key var/filename - for (key in stylesheets) + for(key in stylesheets) filename = "[ckey(key)].css" user << browse_rsc(stylesheets[key], filename) head_content += "" - for (key in scripts) + for(key in scripts) filename = "[ckey(key)].js" user << browse_rsc(scripts[key], filename) head_content += "" var/title_attributes = "class='uiTitle'" - if (title_image) + if(title_image) title_attributes = "class='uiTitle icon' style='background-image: url([title_image]);'" return {" @@ -103,10 +103,10 @@ /datum/browser/proc/open(var/use_onclose = 1) var/window_size = "" - if (width && height) + if(width && height) window_size = "size=[width]x[height];" user << browse(get_content(), "window=[window_id];[window_size][window_options]") - if (use_onclose) + if(use_onclose) onclose(user, window_id, ref) /datum/browser/proc/close() @@ -118,7 +118,7 @@ /mob/proc/browse_rsc_icon(icon, icon_state, dir = -1) /* var/icon/I - if (dir >= 0) + if(dir >= 0) I = new /icon(icon, icon_state, dir) else I = new /icon(icon, icon_state) diff --git a/code/datums/cache/apc.dm b/code/datums/cache/apc.dm index f50b0a8e121..4271886ac4b 100644 --- a/code/datums/cache/apc.dm +++ b/code/datums/cache/apc.dm @@ -11,7 +11,7 @@ var/global/datum/repository/apc/apc_repository = new() if(world.time < cache_entry.timestamp) return cache_entry.data - if (powermonitor && !isnull(powermonitor.powernet)) + if(powermonitor && !isnull(powermonitor.powernet)) var/list/L = list() for(var/obj/machinery/power/terminal/term in powermonitor.powernet.nodes) if(istype(term.master, /obj/machinery/power/apc)) diff --git a/code/datums/cache/crew.dm b/code/datums/cache/crew.dm index 0afb70a4404..2912b8c6753 100644 --- a/code/datums/cache/crew.dm +++ b/code/datums/cache/crew.dm @@ -62,6 +62,6 @@ var/global/datum/repository/crew/crew_repository = new() for(var/mob/living/carbon/human/H in mob_list) if(istype(H.w_uniform, /obj/item/clothing/under)) var/obj/item/clothing/under/C = H.w_uniform - if (C.has_sensor) + if(C.has_sensor) tracked |= C return tracked diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index d07b6e3eb73..f9c3ce39b08 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -17,7 +17,7 @@ var/real_title = assignment for(var/datum/data/record/t in data_core.general) - if (t) + if(t) if(t.fields["name"] == name) foundrecord = t break @@ -66,6 +66,8 @@ G.fields["sex"] = capitalize(H.gender) G.fields["species"] = H.get_species() G.fields["photo"] = get_id_photo(H) + G.fields["photo-south"] = "'data:image/png;base64,[icon2base64(icon(G.fields["photo"], dir = SOUTH))]'" + G.fields["photo-west"] = "'data:image/png;base64,[icon2base64(icon(G.fields["photo"], dir = WEST))]'" if(H.gen_record && !jobban_isbanned(H, "Records")) G.fields["notes"] = H.gen_record else @@ -129,7 +131,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H) var/obj/item/organ/external/head/head_organ = H.get_organ("head") var/g = "m" - if (H.gender == FEMALE) + if(H.gender == FEMALE) g = "f" var/icon/icobase = H.species.icobase @@ -151,7 +153,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H) // Skin tone if(H.species.bodyflags & HAS_SKIN_TONE) - if (H.s_tone >= 0) + if(H.s_tone >= 0) preview_icon.Blend(rgb(H.s_tone, H.s_tone, H.s_tone), ICON_ADD) else preview_icon.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index eeb26f5f6f2..1413b5c7dc9 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -20,7 +20,7 @@ title = "[A.name] (\ref[A]) = [A.type]" #ifdef VARSICON - if (A.icon) + if(A.icon) body += debug_variable("icon", new/icon(A.icon, A.icon_state, A.dir), 0) #endif @@ -43,11 +43,11 @@ if(event.keyCode == 13){ //Enter / return var vars_ol = document.getElementById('vars'); var lis = vars_ol.getElementsByTagName("li"); - for ( var i = 0; i < lis.length; ++i ) + for( var i = 0; i < lis.length; ++i ) { try{ var li = lis\[i\]; - if ( li.style.backgroundColor == "#ffee88" ) + if( li.style.backgroundColor == "#ffee88" ) { alist = lis\[i\].getElementsByTagName("a") if(alist.length > 0){ @@ -62,11 +62,11 @@ if(event.keyCode == 38){ //Up arrow var vars_ol = document.getElementById('vars'); var lis = vars_ol.getElementsByTagName("li"); - for ( var i = 0; i < lis.length; ++i ) + for( var i = 0; i < lis.length; ++i ) { try{ var li = lis\[i\]; - if ( li.style.backgroundColor == "#ffee88" ) + if( li.style.backgroundColor == "#ffee88" ) { if( (i-1) >= 0){ var li_new = lis\[i-1\]; @@ -83,11 +83,11 @@ if(event.keyCode == 40){ //Down arrow var vars_ol = document.getElementById('vars'); var lis = vars_ol.getElementsByTagName("li"); - for ( var i = 0; i < lis.length; ++i ) + for( var i = 0; i < lis.length; ++i ) { try{ var li = lis\[i\]; - if ( li.style.backgroundColor == "#ffee88" ) + if( li.style.backgroundColor == "#ffee88" ) { if( (i+1) < lis.length){ var li_new = lis\[i+1\]; @@ -113,11 +113,11 @@ var vars_ol = document.getElementById('vars'); var lis = vars_ol.getElementsByTagName("li"); - for ( var i = 0; i < lis.length; ++i ) + for( var i = 0; i < lis.length; ++i ) { try{ var li = lis\[i\]; - if ( li.innerText.toLowerCase().indexOf(filter) == -1 ) + if( li.innerText.toLowerCase().indexOf(filter) == -1 ) { vars_ol.removeChild(li); i--; @@ -126,10 +126,10 @@ } } var lis_new = vars_ol.getElementsByTagName("li"); - for ( var j = 0; j < lis_new.length; ++j ) + for( var j = 0; j < lis_new.length; ++j ) { var li1 = lis\[j\]; - if (j == 0){ + if(j == 0){ li1.style.backgroundColor = "#ffee88"; }else{ li1.style.backgroundColor = "white"; @@ -293,18 +293,18 @@ body += "
    " var/list/names = list() - for (var/V in D.vars) + for(var/V in D.vars) names += V names = sortList(names) - for (var/V in names) + for(var/V in names) body += debug_variable(V, D.vars[V], 0, D) body += "
" var/html = "" - if (title) + if(title) html += "[title]" html += {"