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 += {"