diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 70f34eff6cb..cc17a9975c7 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -38,7 +38,7 @@ actual development.
and why it changes it. We do not want to have to read all of you commit names to figure
out what your pull request is about.
- Any pull request that is not solely composed of fixes or non gameplay-affecting
- refactors must have a changelog. Inline changelogs are supported through the format
+ refactors must have a changelog. Inline changelogs are supported through the format
described [here](https://github.com/ParadiseSS13/Paradise/pull/3291#issuecomment-172950466)
and should be used rather than manually edited .yml file changelogs.
- Pull requests should not have any merge commits except in the case of fixing merge
@@ -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 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"`.
- Do not use one-line control statements (if, else, for, while, etc). The space saved
is not worth the decreased readability.
- Control statements comparing a variable to a constant should be formatted `variable`,
diff --git a/.gitignore b/.gitignore
index f784b30d80e..47ad360a40e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,5 @@ data/
/_maps/map_files/**/*.dmm.backup
/nano/debug.html
*.db
+stddef.dm
+.atom-build.json
diff --git a/.travis.yml b/.travis.yml
index b79cb5e0db3..27dae76378e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -7,8 +7,8 @@ git:
env:
global:
- - BYOND_MAJOR="509"
- - BYOND_MINOR="1315"
+ - BYOND_MAJOR="510"
+ - BYOND_MINOR="1336"
matrix:
- DM_MAPFILE="cyberiad"
- DM_MAPFILE="metastation"
diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
index d1d713fcf26..6324c5fb02d 100644
--- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
@@ -378,7 +378,7 @@
"ahn" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
"aho" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
"ahp" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weed_extract,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
-"ahq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/machinery/bot/floorbot{on = 0},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
+"ahq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/mob/living/simple_animal/bot/floorbot{on = 0},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
"ahr" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/broken_device,/obj/item/robot_parts/chest,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
"ahs" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
"aht" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
@@ -511,7 +511,7 @@
"ajQ" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/prison)
"ajR" = (/obj/machinery/flasher/portable,/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/obj/machinery/flasher/portable,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/security/warden)
"ajS" = (/obj/structure/rack,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/gun/projectile/shotgun/riot{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/projectile/shotgun/riot{pixel_x = 2; pixel_y = -1},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/security/warden)
-"ajT" = (/obj/machinery/bot/secbot{health = 35; name = "Securitron #359"; on = 0},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/warden)
+"ajT" = (/mob/living/simple_animal/bot/secbot{health = 35; name = "Securitron #359"; on = 0},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/warden)
"ajU" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plasteel{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/security/warden)
"ajV" = (/obj/structure/rack,/obj/item/clothing/suit/armor/bulletproof,/obj/item/clothing/head/helmet/alt,/obj/item/clothing/suit/armor/bulletproof,/obj/item/clothing/head/helmet/alt,/obj/item/clothing/suit/armor/bulletproof,/obj/item/clothing/head/helmet/alt,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden)
"ajW" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow,/obj/machinery/door/poddoor/preopen{id_tag = "hosprivacy"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/security/hos)
@@ -951,7 +951,7 @@
"aso" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/obj/item/stack/packageWrap,/turf/simulated/floor/plasteel,/area/security/main)
"asp" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/main)
"asq" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Security Delivery"; req_access_txt = "1"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/security/main)
-"asr" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Security"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/main)
+"asr" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "Security"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/main)
"ass" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/maintenance/fore)
"ast" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore)
"asu" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/fore)
@@ -987,7 +987,7 @@
"asY" = (/obj/structure/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/air,/obj/item/clothing/mask/breath,/obj/item/clothing/shoes/magboots,/obj/machinery/camera{c_tag = "Engineering Secure Storage South"; dir = 4; network = list("SS13")},/obj/item/clothing/suit/space/rig/security,/obj/item/clothing/head/helmet/space/rig/security,/turf/simulated/floor/plasteel,/area/security/podbay)
"asZ" = (/turf/simulated/floor/engine,/area/security/podbay)
"ata" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating/airless,/area/space)
-"atb" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; freq = 1400; location = "Disposals"},/obj/structure/plasticflaps{opacity = 0},/obj/machinery/conveyor{dir = 2; id = "garbage"},/obj/machinery/door/window/northright{dir = 2; name = "delivery door"; pixel_y = 0; req_access_txt = "31"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/disposal)
+"atb" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 1; location = "Disposals"},/obj/structure/plasticflaps{opacity = 0},/obj/machinery/conveyor{dir = 2; id = "garbage"},/obj/machinery/door/window/northright{dir = 2; name = "delivery door"; pixel_y = 0; req_access_txt = "31"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/disposal)
"atc" = (/obj/machinery/door/airlock/maintenance{name = "Disposal Conveyor Access"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/disposal)
"atd" = (/obj/structure/sign/securearea{name = "\improper STAY CLEAR HEAVY MACHINERY"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/disposal)
"ate" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
@@ -999,7 +999,7 @@
"atk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
"atl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/fore)
"atm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/fore)
-"atn" = (/obj/machinery/bot/cleanbot{name = "Mopfficer Sweepsky"; on = 0},/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/fore)
+"atn" = (/mob/living/simple_animal/bot/cleanbot{name = "Mopfficer Sweepsky"; on = 0},/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/fore)
"ato" = (/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore)
"atp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/brig)
"atq" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/brig)
@@ -1455,7 +1455,7 @@
"aBY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/starboard)
"aBZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/spawner/lootdrop{loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/weapon/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "maint grille or trash spawner"},/turf/simulated/floor/plating,/area/maintenance/starboard)
"aCa" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plating,/area/maintenance/starboard)
-"aCb" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Engineering"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/maintenance/starboard)
+"aCb" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 4; location = "Engineering"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/maintenance/starboard)
"aCc" = (/obj/machinery/door/window/southright{dir = 4; name = "Engineering Deliveries"; req_access_txt = "10"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/engineering)
"aCd" = (/obj/structure/sign/securearea{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/engine/engineering)
"aCe" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/engine/engineering)
@@ -1830,7 +1830,7 @@
"aJj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"aJk" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"aJl" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
-"aJm" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=1-BrigCells"; location = "0-SecurityDesk"},/obj/machinery/bot/secbot/beepsky{desc = "It's Officer Beepsky! Powered by a potato and a shot of whiskey, and with a sturdier reinforced chassis, too. "; health = 45; maxhealth = 45; name = "Officer Beepsky"},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
+"aJm" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=1-BrigCells"; location = "0-SecurityDesk"},/mob/living/simple_animal/bot/secbot/beepsky,/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"aJn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"aJo" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Outer Window"; req_access_txt = "0"},/obj/machinery/door/window/brigdoor{dir = 4; name = "Security Desk"; req_access_txt = "1"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/item/device/radio/off,/obj/machinery/door/poddoor/shutters/preopen{id_tag = "briglockdown"; name = "brig shutters"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig)
"aJp" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig)
@@ -2101,7 +2101,7 @@
"aOu" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"aOv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/quartermaster/storage)
"aOw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/window/reinforced{dir = 1; pixel_y = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "loadingarea"; tag = "loading"},/area/quartermaster/storage)
-"aOx" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #1"},/obj/machinery/bot/mulebot{beacon_freq = 1400; home_destination = "QM #1"; suffix = "#1"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/window/northleft,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage)
+"aOx" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "QM #1"},/mob/living/simple_animal/bot/mulebot{home_destination = "QM #1"; suffix = "#1"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/window/northleft,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage)
"aOy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;63;48;50"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
"aOz" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;63;48;50"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
"aOA" = (/turf/simulated/wall,/area/storage/primary)
@@ -2172,7 +2172,7 @@
"aPN" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
"aPO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"aPP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 8; icon_state = "loadingarea"; tag = "loading"},/area/quartermaster/storage)
-"aPQ" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #2"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage)
+"aPQ" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "QM #2"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage)
"aPR" = (/obj/machinery/door/window/northleft{dir = 8; name = "MuleBot Supply Access"; req_access_txt = "50"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
"aPS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTHWEST)"; icon_state = "warnplate"; dir = 9},/area/maintenance/fpmaint2{name = "Port Maintenance"})
"aPT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
@@ -2252,7 +2252,7 @@
"aRp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"aRq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/landmark/start{name = "Cargo Technician"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"aRr" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "loadingarea"; tag = "loading"},/area/quartermaster/storage)
-"aRs" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #3"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/bot/mulebot{home_destination = "QM #3"; suffix = "#3"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage)
+"aRs" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "QM #3"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_animal/bot/mulebot{home_destination = "QM #3"; suffix = "#3"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage)
"aRt" = (/obj/structure/mirror{pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/structure/curtain/open/shower,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"})
"aRu" = (/turf/simulated/floor/plasteel,/area/storage/primary)
"aRv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plasteel,/area/storage/primary)
@@ -2318,7 +2318,7 @@
"aSD" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
"aSE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warningcorner"; tag = "icon-warningcorner (EAST)"},/area/quartermaster/storage)
"aSF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 8; icon_state = "loadingarea"; tag = "loading"},/area/quartermaster/storage)
-"aSG" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/window/southleft,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage)
+"aSG" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "QM #4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/window/southleft,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage)
"aSH" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/qm)
"aSI" = (/obj/structure/closet/secure_closet/quartermaster,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "brown"},/area/quartermaster/qm)
"aSJ" = (/obj/machinery/camera/autoname{dir = 2; network = list("SS13")},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/power/apc{dir = 1; name = "Quartermaster's Office APC"; pixel_x = 0; pixel_y = 30},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/quartermaster/qm)
@@ -2392,7 +2392,7 @@
"aTZ" = (/obj/effect/landmark/start{name = "Quartermaster"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/qm)
"aUa" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/item/weapon/pen/red,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/quartermaster/qm)
"aUb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/fpmaint2{name = "Port Maintenance"})
-"aUc" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Tool Storage"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/storage/primary)
+"aUc" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 4; location = "Tool Storage"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/storage/primary)
"aUd" = (/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/storage/primary)
"aUe" = (/obj/structure/table,/obj/item/weapon/weldingtool,/obj/item/weapon/crowbar,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "browncorner"},/area/storage/primary)
"aUf" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 30},/obj/item/weapon/cartridge/lawyer,/obj/item/weapon/pen/multi,/turf/simulated/floor/wood,/area/lawoffice)
@@ -3633,7 +3633,7 @@
"brS" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"})
"brT" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"})
"brU" = (/obj/item/device/radio/off,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/maintcentral{name = "Central Maintenance"})
-"brV" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Bridge"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/maintenance/maintcentral{name = "Central Maintenance"})
+"brV" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 4; location = "Bridge"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/maintenance/maintcentral{name = "Central Maintenance"})
"brW" = (/obj/machinery/door/window/westleft{dir = 4; name = "Bridge Deliveries"; req_access_txt = "19"},/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; name = "bridge blast door"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/bridge)
"brX" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/hallway/primary/port)
"brY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge)
@@ -3762,7 +3762,7 @@
"bur" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge)
"bus" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"but" = (/obj/machinery/door/window/southleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Bar Delivery"; req_access_txt = "25"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/crew_quarters/bar)
-"buu" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; freq = 1400; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/crew_quarters/bar)
+"buu" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 1; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/crew_quarters/bar)
"buv" = (/obj/item/weapon/storage/box/lights/mixed,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/starboard)
"buw" = (/obj/effect/spawner/lootdrop{loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/weapon/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "maint grille or trash spawner"},/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/starboard)
"bux" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/starboard)
@@ -4669,7 +4669,7 @@
"bLO" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/scrubber,/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 8; icon_state = "escape"},/area/hallway/primary/starboard)
"bLP" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/starboard)
"bLQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 4},/area/hallway/primary/starboard)
-"bLR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Atmospherics"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/atmos)
+"bLR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 4; location = "Atmospherics"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/atmos)
"bLS" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/atmos)
"bLT" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/atmos)
"bLU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/atmos)
@@ -5452,7 +5452,7 @@
"caR" = (/obj/structure/closet/crate/hydroponics,/obj/item/weapon/shovel/spade,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/minihoe,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hydroponics)
"caS" = (/obj/structure/closet{name = "spare parts locker"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/item/weapon/rack_parts,/obj/item/weapon/rack_parts,/obj/item/weapon/wrench,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/crew_quarters/kitchen)
"caT" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/window/eastright{dir = 1; name = "Kitchen Delivery"; req_access_txt = "28"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/crew_quarters/kitchen)
-"caU" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Kitchen"},/obj/structure/plasticflaps{opacity = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/crew_quarters/kitchen)
+"caU" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "Kitchen"},/obj/structure/plasticflaps{opacity = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/crew_quarters/kitchen)
"caV" = (/obj/structure/disposalpipe/sortjunction{dir = 2; sortType = 20},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/maintenance/starboard)
"caW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/starboard)
"caX" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/starboard)
@@ -5721,7 +5721,7 @@
"cga" = (/obj/machinery/light/small{dir = 1},/obj/structure/mopbucket,/obj/item/weapon/mop,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
"cgb" = (/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/hand_labeler,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
"cgc" = (/obj/item/weapon/cigbutt,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/aft{name = "Aft Maintenance"})
-"cgd" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Medbay"},/obj/structure/plasticflaps{opacity = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/window/northleft{dir = 8; name = "MuleBot Access"; req_access_txt = "50"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/medbay2{name = "Medbay Storage"})
+"cgd" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 4; location = "Medbay"},/obj/structure/plasticflaps{opacity = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/window/northleft{dir = 8; name = "MuleBot Access"; req_access_txt = "50"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/medbay2{name = "Medbay Storage"})
"cge" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"cgf" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2{name = "Medbay Storage"})
"cgg" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2{name = "Medbay Storage"})
@@ -5849,7 +5849,7 @@
"ciy" = (/obj/item/weapon/wrench,/obj/item/clothing/suit/apron,/obj/item/clothing/accessory/armband/hydro,/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hydroponics)
"ciz" = (/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 0; pixel_y = 3},/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 8; pixel_y = 8},/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 13; pixel_y = 5},/obj/item/weapon/watertank,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/item/weapon/grenade/chem_grenade/antiweed,/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hydroponics)
"ciA" = (/obj/machinery/door/window/eastright{dir = 1; name = "Hydroponics Delivery"; req_access_txt = "35"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hydroponics)
-"ciB" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Hydroponics"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/hydroponics)
+"ciB" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "Hydroponics"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/hydroponics)
"ciC" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/maintenance/starboard)
"ciD" = (/obj/effect/decal/cleanable/cobweb,/obj/machinery/atmospherics/unary/tank/toxins{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"ciE" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "plasma tank pump"},/obj/structure/sign/nosmoking_2{pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
@@ -6027,7 +6027,7 @@
"clU" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 4},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 23},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/sleeper{name = "Sleepers"})
"clV" = (/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = -3},/obj/item/weapon/storage/firstaid/brute{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/brute,/obj/item/weapon/storage/firstaid/brute{pixel_x = -3; pixel_y = -3},/obj/machinery/power/apc{dir = 2; name = "Medbay Storage APC"; pixel_y = -24},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/light_switch{pixel_x = -26; pixel_y = 0},/obj/machinery/light/small,/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 10; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"clW" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
-"clX" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/bot/cleanbot{name = "Scrubs, MD"; on = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
+"clX" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_animal/bot/cleanbot{name = "Scrubs, MD"; on = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"clY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"clZ" = (/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = -3},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/o2{pixel_x = -3; pixel_y = -3},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whiteblue"},/area/medical/medbay2{name = "Medbay Storage"})
"cma" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 10; icon_state = "whiteblue"},/area/medical/medbay{name = "Medbay Central"})
@@ -6335,7 +6335,7 @@
"crQ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/research{name = "Research Division"})
"crR" = (/obj/machinery/shower{tag = "icon-shower (WEST)"; icon_state = "shower"; dir = 8},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warnwhite"},/area/medical/research{name = "Research Division"})
"crS" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"})
-"crT" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Research Division"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/maintenance/aft{name = "Aft Maintenance"})
+"crT" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 2; location = "Research Division"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/maintenance/aft{name = "Aft Maintenance"})
"crU" = (/turf/simulated/wall/r_wall,/area/maintenance/aft{name = "Aft Maintenance"})
"crV" = (/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/hand_labeler,/obj/structure/table/glass,/obj/item/weapon/folder/white{pixel_y = 2},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellowfull"; tag = "icon-whitehall (WEST)"},/area/medical/chemistry)
"crW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/aft)
@@ -6640,7 +6640,7 @@
"cxJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = -29},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellowcorner"},/area/hallway/primary/aft)
"cxK" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/aft)
"cxL" = (/obj/machinery/power/apc{cell_type = 5000; dir = 4; name = "Aft Hallway APC"; pixel_x = 24; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "purplecorner"},/area/hallway/primary/aft)
-"cxM" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; freq = 1400; location = "Research and Development"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/toxins/lab)
+"cxM" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 1; location = "Research and Development"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/toxins/lab)
"cxN" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/maintenance{name = "Research Lab Maintenance"; req_access_txt = "7"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/toxins/lab)
"cxO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
"cxP" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
@@ -7265,7 +7265,7 @@
"cJK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/mob/living/carbon/human/monkey,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/virology)
"cJL" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/medical/virology)
"cJM" = (/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Virology APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitegreen"},/area/medical/virology)
-"cJN" = (/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 9},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitegreen"},/area/medical/virology)
+"cJN" = (/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitegreen"},/area/medical/virology)
"cJO" = (/obj/machinery/smartfridge/medbay,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "whitegreenfull"},/area/medical/virology)
"cJP" = (/obj/machinery/reagentgrinder{pixel_y = 8},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitegreen"},/area/medical/virology)
"cJQ" = (/obj/item/clothing/gloves/color/latex,/obj/item/device/healthanalyzer,/obj/item/clothing/glasses/hud/health,/obj/structure/reagent_dispensers/virusfood{density = 0; pixel_x = 0; pixel_y = 30},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitegreen"},/area/medical/virology)
@@ -7320,7 +7320,7 @@
"cKN" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/medical/virology)
"cKO" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Test Subject Cell"; req_access_txt = "39"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/virology)
"cKP" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/medical/virology)
-"cKQ" = (/obj/item/device/radio/intercom{pixel_x = -28; pixel_y = 0},/obj/machinery/light/small{dir = 8},/obj/machinery/computer/centrifuge,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"},/area/medical/virology)
+"cKQ" = (/obj/item/device/radio/intercom{pixel_x = -28; pixel_y = 0},/obj/machinery/light/small{dir = 8},/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 9},/obj/structure/sign/deathsposal{pixel_x = -30; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"},/area/medical/virology)
"cKR" = (/obj/structure/stool/bed/chair/office/light{dir = 1; pixel_y = 3},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreencorner"},/area/medical/virology)
"cKS" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreen"},/area/medical/virology)
"cKT" = (/obj/structure/stool/bed/chair/office/light{dir = 4},/obj/effect/landmark/start{name = "Virologist"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreencorner"},/area/medical/virology)
@@ -7363,16 +7363,16 @@
"cLE" = (/obj/item/device/flashlight/lamp,/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/toxins/test_area)
"cLF" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plating/airless{dir = 6; icon_state = "warnplate"},/area/toxins/test_area)
"cLG" = (/obj/item/device/radio/intercom{pixel_x = -28; pixel_y = 0},/obj/structure/table/glass,/obj/item/weapon/hand_labeler,/obj/item/device/radio/headset/headset_med,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/camera{c_tag = "Virology - Cells"; dir = 4; network = list("SS13","Medbay")},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitegreen"},/area/medical/virology)
-"cLH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/computer/diseasesplicer,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreen"},/area/medical/virology)
+"cLH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreen"},/area/medical/virology)
"cLI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreen"},/area/medical/virology)
-"cLJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 2},/obj/machinery/disease2/diseaseanalyser,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreen"},/area/medical/virology)
+"cLJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 2},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreen"},/area/medical/virology)
"cLK" = (/obj/structure/rack,/obj/item/weapon/crowbar/red,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 26},/obj/item/weapon/wrench,/obj/item/weapon/restraints/handcuffs,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitegreen"},/area/medical/virology)
"cLL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/spawner/window{useFull = 1; tag = "fullWin"},/turf/simulated/floor/plating,/area/medical/virology)
-"cLM" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty{pixel_x = -3; pixel_y = -3},/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/BMinus{pixel_x = -4; pixel_y = 4},/obj/item/weapon/reagent_containers/blood/BPlus{pixel_x = 1; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"},/area/medical/virology)
+"cLM" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"},/area/medical/virology)
"cLN" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"cLO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 2},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"cLP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
-"cLQ" = (/obj/machinery/light_switch{pixel_x = 26; pixel_y = 0},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/disease2/isolator,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreen"},/area/medical/virology)
+"cLQ" = (/obj/machinery/light_switch{pixel_x = 26; pixel_y = 0},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/computer/pandemic,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreen"},/area/medical/virology)
"cLR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/medical/virology)
"cLS" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/medical/virology)
"cLT" = (/obj/structure/sign/biohazard{pixel_y = 32},/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/medical/virology)
@@ -7413,7 +7413,7 @@
"cMC" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"cMD" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreen"},/area/medical/virology)
"cME" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Containment Cells"; req_access_txt = "39"},/turf/simulated/floor/plasteel{icon_state = "whitegreenfull"},/area/medical/virology)
-"cMF" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"},/area/medical/virology)
+"cMF" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"},/area/medical/virology)
"cMG" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"cMH" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/effect/landmark{name = "lightsout"},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"cMI" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
@@ -7460,7 +7460,7 @@
"cNx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/plasteel{icon_state = "whitegreen"},/area/medical/virology)
"cNy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitegreen"},/area/medical/virology)
"cNz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11},/obj/effect/spawner/window{useFull = 1; tag = "fullWin"},/turf/simulated/floor/plating,/area/medical/virology)
-"cNA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/disease2/incubator,/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitegreen"},/area/medical/virology)
+"cNA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitegreen"},/area/medical/virology)
"cNB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whitegreen"},/area/medical/virology)
"cNC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "whitegreen"},/area/medical/virology)
"cND" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 2; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "whitegreen"},/area/medical/virology)
@@ -7514,8 +7514,8 @@
"cOz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Isolation B"; req_access_txt = "39"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/virology)
"cOA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Isolation A"; req_access_txt = "39"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/virology)
"cOB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall,/area/medical/virology)
-"cOC" = (/obj/machinery/disposal,/obj/structure/sign/deathsposal{pixel_x = -30; pixel_y = 0},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/virology)
-"cOD" = (/obj/structure/closet/wardrobe/virology_white,/obj/item/weapon/storage/backpack/satchel_vir,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/virology)
+"cOC" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty{pixel_x = -3; pixel_y = -3},/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/BMinus{pixel_x = -4; pixel_y = 4},/obj/item/weapon/reagent_containers/blood/BPlus{pixel_x = 1; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/virology)
+"cOD" = (/obj/structure/closet/wardrobe/virology_white,/obj/item/weapon/storage/backpack/satchel_vir,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/virology)
"cOE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/virology)
"cOF" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/virology)
"cOG" = (/obj/structure/closet/l3closet/virology,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/virology)
@@ -7630,7 +7630,7 @@
"cQL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"})
"cQM" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"})
"cQN" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"})
-"cQO" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; freq = 1400; location = "Robotics"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/assembly/robotics)
+"cQO" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 1; location = "Robotics"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/assembly/robotics)
"cQP" = (/obj/machinery/door/airlock/maintenance{name = "Robotics Maintenance"; req_access_txt = "29"},/turf/simulated/floor/plating,/area/assembly/robotics)
"cQQ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/research{name = "Research Shuttle and Xenobiology"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"cQR" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/aft{name = "Aft Maintenance"})
@@ -7906,7 +7906,7 @@
"cWb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/hallway/secondary/exit{name = "\improper Departure Lounge"})
"cWc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/beacon,/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{id_tag = "escape_dock_north_airlock"; master_tag = "escape_dock"; pixel_y = 30; req_one_access_txt = "13"; tag_airpump = "escape_dock_north_pump"; tag_chamber_sensor = "escape_dock_north_sensor"; tag_exterior_door = "escape_dock_north_outer"; tag_interior_door = "escape_dock_north_inner"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"})
"cWd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/hallway/secondary/exit{name = "\improper Departure Lounge"})
-"cWe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=9.5-Escape2"; location = "9-Escape"},/obj/machinery/bot/secbot{auto_patrol = 1; health = 35; maxhealth = 35; name = "Inspector Johnson"},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"})
+"cWe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=9.5-Escape2"; location = "9-Escape"},/mob/living/simple_animal/bot/secbot{auto_patrol = 1; health = 35; maxHealth = 35; name = "Inspector Johnson"},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"})
"cWf" = (/obj/machinery/camera{c_tag = "Departure Lounge - Starboard Aft"; dir = 8; network = list("SS13")},/obj/machinery/light{dir = 4},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/structure/flora/kirbyplants{icon_state = "plant-16"; layer = 4.1; tag = "icon-plant-16"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"})
"cWg" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/toxins/xenobiology{name = "\improper Secure Lab"})
"cWh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology{name = "\improper Secure Lab"})
@@ -8106,7 +8106,7 @@
"cZT" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape)
"cZU" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape)
"cZV" = (/obj/item/weapon/cigbutt,/turf/simulated/shuttle/plating{icon_state = "floorgrime"},/area/shuttle/escape)
-"cZW" = (/obj/machinery/bot/medbot{name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2},/obj/structure/closet/crate/medical{name = "medical crate"},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/toxin{pixel_x = -4; pixel_y = 3},/obj/item/device/healthanalyzer{pixel_x = 3; pixel_y = 3},/obj/item/weapon/lazarus_injector,/turf/simulated/shuttle/plating{icon_state = "bot"},/area/shuttle/escape)
+"cZW" = (/mob/living/simple_animal/bot/medbot{name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2},/obj/structure/closet/crate/medical{name = "medical crate"},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/toxin{pixel_x = -4; pixel_y = 3},/obj/item/device/healthanalyzer{pixel_x = 3; pixel_y = 3},/obj/item/weapon/lazarus_injector,/turf/simulated/shuttle/plating{icon_state = "bot"},/area/shuttle/escape)
"cZX" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #1"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id_tag = "xenobio3"; name = "containment blast door"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"})
"cZY" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #1"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology{name = "\improper Secure Lab"})
"cZZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology{name = "\improper Secure Lab"})
@@ -8642,7 +8642,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupaaaaaaaaaaaaaaaaaaaaacKLaaaaaaaaaaaaabqaaaaaaaupaaaaaaaaaarBabqcHZcLGcLHcLIcLJcLKcLLcLMcLNcLOcLPcLQcLRcLScLScLScLRcLTcLUcLVcHZcLWcLXcDUcLYcLZcMacSBcRUcRUcRUcRUcImcIncIocIncMccIncMdcMecMfcImcMgcMhcgxcmmcIxcMicMjcMkcLocLocMlcMmcMncJpcMocMpcMqcEKcKxcKycLvcMrcKBcMscKBcMtcMucMvcEKcMwchyceNchycMxbZUabqaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcFOcFNcMycFNcFOabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabearBarBarBaaaaaaaaacKLaaaaaaaaaarBarBarBauparBabqabqaaaarBaaacIacMzcMAcMBcMCcMDcMEcMFcMGcMHcMIcMJcMKcMLcMMcMNcMOcMPcMBcMQcMRcMScMTcMUcMScMVcMWcWGcSCcWIcWHcYocRUcImcImcImcImcImcImcNccImcImbZUcNdcgxcmmcIxcNecMjcLocLpcLocNfcNgcNhcNicNjcNkcNlcNmcNncNncNncNncNncNocNncNpcNqcNrcEKchychycNschybZUbZUbZUabqabqaaaaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcFNcFOcFNabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaarBabqcNtabqarBaaaaaaabqaaaaaaabqaaaabqabqabqaaacHZcNucNvcNwcNxcNycNzcNAcNBcNCcNDcNEcHZcIacIacIacHZcNFcNGcNHcHZcNIcNJcDUcNKcNLcNMcNNdegdeidehdejcRUcNRcmVcNScmWcmVcNTcNUcDJcmZcNVcNWcNXcBIcIxcNYcNZcOacOacOacObcOccOdcOecOfcOgcOhcOicOjcOkcOlcOmcOncOocOpcOqcOrcOscOtcmYcmYcOucOvcOwcOxbZUbZUbZUcksaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaarBaaaabqaaaarBaaaaaaabqabqabqabqaaaaaaaaaabqabqcHZcOycOzcKMcOAcOycOBcOCcODcOEcOFcOGcHZcOHaaaaaacrUcrUcrUcrUcrUbZUcOIcDUcDUcDUcDUcDUcRUdeldekdemcRUcOMbZUbZUbZUbZUbZUbZUbZUbZUczIcONcOOcOPcOQcORcOScOTcOUcOVcOWcLpcOXcOYcOZcPacPbcPccPdcPecPfcPgcPhcPicOpclNcPjbZUbZUbZUbZUbZUdencPlcPmclJcPnclJcPoabqabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaarBaaaabqaaaarBaaaaaaabqabqabqabqaaaaaaaaaabqabqcHZcOycOzcKMcOAcOycOBcODcOCcOEcOFcOGcHZcOHaaaaaacrUcrUcrUcrUcrUbZUcOIcDUcDUcDUcDUcDUcRUdeldekdemcRUcOMbZUbZUbZUbZUbZUbZUbZUbZUczIcONcOOcOPcOQcORcOScOTcOUcOVcOWcLpcOXcOYcOZcPacPbcPccPdcPecPfcPgcPhcPicOpclNcPjbZUbZUbZUbZUbZUdencPlcPmclJcPnclJcPoabqabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBarBarBarBarBaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaacHZcPpcPqcKMcPqcPrcPscKMcKMcPtcKMcKMcHZabqabqabqbZUcjncfZcPucPvcPwcPxcmYcPycPzcPAcPBcRUdepdeodeqcRUcOMbZUcPHcPIcPJbZUcPKcPLcPMbZUcPNcPOcPPcIxcPQcPRcPScPTcPUcPVcLpcPWcIxcPXcPYciccPccPZcQacQbcQccQdcQecOpchycQfbZUcQgcQhcQibZUcQjcQkcQlbZUbZUbZUcksaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeaaacHZcQmcQncKMcQocQpcPscQqcQrcQscQtcQucHZaaaabqaaabZUcQvcQwcQxcQycQzcQAcQBcQAcQAcQCcQfcRUcRUdercRUcRUcOMbZUcQDcQEcQFcQGcQHcQIcQJdescQLcQMcQNcIxcIxcIxcIxcIxcQOcIxcQPcrUcrUcfwcQQcfwcOpcOpcOpcOpcOpcOpcOpcOpchycQRcQScQTcQUcQVcQWcQWcQXcQYcQWaaaaaaaaaaaaabqabqaaaaaaabqaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaacHZcQZcRacKMcRacQZcRbcRccRdcRecRfcRgcIaaaaaaacRhbZUcRibZUbZUbZUcRjbZUbZUbZUbZUcRkcRlcRmcRndetcRmcRpcRqcRrcRscRtcRucRvcRwcRxcRycRycRzcRAcRBcRCcRDcREcmYcmYcRFcmYcRGcmZcRHcRIcRJcRIcRKcjNcjNcRLcRMcOtcmYcmYcmYcRNbZUcnOcROcRPcQWcRQcRRcRScQWabqabqabqabqabqabqabqabqabqabqabqabqaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/MetaStation/z5.dmm b/_maps/map_files/MetaStation/z5.dmm
index d4ec96886f7..aaf53a80095 100644
--- a/_maps/map_files/MetaStation/z5.dmm
+++ b/_maps/map_files/MetaStation/z5.dmm
@@ -938,7 +938,7 @@
"sb" = (/obj/machinery/light/small{dir = 4},/obj/structure/stool/bed/roller,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp)
"sc" = (/obj/structure/closet/crate/internals,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
"sd" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
-"se" = (/obj/machinery/bot/secbot/beepsky{desc = "Powered by tears and swet of laborer."; name = "Prison Ofitser"},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=2-NMine"; location = "1-Storage"},/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"; temperature = 273.15},/area/mine/laborcamp)
+"se" = (/mob/living/simple_animal/bot/secbot/beepsky{desc = "Powered by tears and swet of laborer."; name = "Prison Ofitser"},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=2-NMine"; location = "1-Storage"},/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"; temperature = 273.15},/area/mine/laborcamp)
"sf" = (/obj/structure/plasticflaps/mining,/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"; temperature = 273.15},/area/mine/laborcamp)
"sg" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=3-SMine"; location = "2-NMine"},/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"; temperature = 273.15},/area/mine/laborcamp)
"sh" = (/turf/simulated/floor/plating{icon_plating = "asteroidplating"; icon_state = "asteroidplating"; temperature = 273.15},/area/mine/explored)
diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm
index 534726b6487..9258caf0cfb 100644
--- a/_maps/map_files/RandomZLevels/academy.dmm
+++ b/_maps/map_files/RandomZLevels/academy.dmm
@@ -160,7 +160,7 @@
"dd" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
"de" = (/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
"df" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
-"dg" = (/obj/structure/table/woodentable,/obj/item/weapon/gun/magic/wand/fireball,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"dg" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: A+ Educator's Notes: Excellent form."; name = "Summoning Midterm Exam"},/obj/item/toy/crossbow/tommygun,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
"dh" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "green"},/area/awaymission/academy/classrooms)
"di" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms)
"dj" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms)
@@ -340,8 +340,7 @@
"gB" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"gC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
"gD" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
-"gE" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: A+ Educator's Notes: Excellent form."; name = "Summoning Midterm Exam"},/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
-"gF" = (/obj/structure/table,/obj/item/weapon/gun/projectile/revolver/russian,/obj/item/weapon/paper{info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."; name = "Summoning Midterm Exam"},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gE" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."; name = "Summoning Midterm Exam"},/obj/item/toy/crossbow,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
"gG" = (/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
"gH" = (/obj/structure/window/reinforced,/obj/item/ammo_casing,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/awaymission/academy/classrooms)
"gI" = (/mob/living/simple_animal/hostile/bear,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
@@ -593,7 +592,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabscIdvbBbBcJbBdvbVbEcAcKcKcKcKcKcKcCasbrcLbrbrahapbrbrbrbrabcdclcdclcdcfcgbTchabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabscMdvcNbBbBcOdvbVbEcPcQcQcQcQcQcQcRascSbxbybrahapbrbxbybLascTcdclcUcVcWbTbTababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabscXcYcZcZcZcZdadvbEdbdcdcdcdcdcdcddasbrbJbKbrahapbrbJbKbrasasasasasasasasasabbsbsbsbsbsbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsdededebVbVdvcMdvbEdcdcdfdcdfdcdgdcasbrbrbrbrahapbrbrbrbrasdhdidjdkdidididjdidlbEdmdmdnbsbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsdededebVbVdvcMdvbEdcdcdfdcdfdcdfdcasbrbrbrbrahapbrbrbrbrasdhdidjdkdidididjdidlbEdmdmdnbsbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsdodpdqbVdvdvcMdrbEdcdcdsdcdsdcdsdcasaFaFaFaFahapaFaFaFaFasdtdudvdvdudvdvdvdvdwbEdmdmdmdmbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsdxdydzcYcYcYdAdvbEdcdcdcdcdfdcdfdcasaFdBdBaFahapaFdBdBaFasdtdvdvdvdvdvdvdCdDdwdEdmdmdmdFbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsdGdpdHbVdvdvcMdvbEdcdcdcdcdsdcdsdcasaFdBdBaFahapaFdBdBaFasdtdudvdvdudIdvdJdKdwbEdmdmdmdmbsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -612,7 +611,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsfVfWbBfXfYdvdvdvfZgabEdcgbdcgcgcdcgdgegffDfLfLfDfDfLbEggghgigjggcAdvgkdvdvdvdvbsbsaPaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaabsglbBbBgmfYdvgndvdvgobEdcdfdcdcdcdcgpfLfDfDfLfLfDfDfLbEgggqggggggcAfQfRdvdvfUbsbsaPaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaSaaaaaaaaaaaaaaaaaabsgrgrgrfXfYdvdudvkwgsbEgtdsdcgcgudcgpfLfDfDfLfLfDfDgvbEgwgqggggggcAdvgxdvgybsbsaPaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaSaaaaaaaaaaaaaaaaaabsgzgzgzfXfYdvgAdvgngobEdcgbdcdcdcdcgBgegCgDfLfLfDfDfLbEgggqgEgFgGcAgHfRfUbsbsaPaaaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaSaaaaaaaaaaaaaaaaaabsgzgzgzfXfYdvgAdvgngobEdcgbdcdcdcdcgBgegCgDfLfLfDfDfLbEgggqdggEgGcAgHfRfUbsbsaPaaaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaSaSaaaaaaaaaaaaaaaaaaaabsbBgIbBgmfYkwdudvdugobEdcdfdcgJgKdcbEfLfDfCfLfLfDfDfLbEgggqgLgLgLcAdvgMbsbsaPaaaaaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaSaaaaaaaaaaaaaaaaaaaaaabsgNbBbBfXfYdvgndvgngobEdcdsdcdcdcdcgOfDfDgPgegegCgCgCgQgRgSgGgGgTcAgUbsbsaPaaaaaaaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbBbBgIgVgWgXgYgXgYdmbEdcdcdcdcdcdcbEfLfDfCfLfLfDfDfLbEgggggLgLgLcAbsbsaPaaaaaaaaaaaaaPaaaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/RandomZLevels/evil_santa.dmm b/_maps/map_files/RandomZLevels/evil_santa.dmm
index f144c50064a..7d56e430210 100644
--- a/_maps/map_files/RandomZLevels/evil_santa.dmm
+++ b/_maps/map_files/RandomZLevels/evil_santa.dmm
@@ -67,7 +67,7 @@
"bo" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/wood,/area/awaymission/challenge/main)
"bp" = (/turf/simulated/floor/wood,/area/awaymission/challenge/main)
"bq" = (/obj/structure/mineral_door/wood{tag = "icon-wood"; icon_state = "wood"},/turf/simulated/floor/wood,/area/awaymission/challenge/main)
-"br" = (/obj/machinery/bot/medbot/mysterious,/turf/simulated/floor/wood,/area/awaymission/challenge/main)
+"br" = (/mob/living/simple_animal/bot/medbot/mysterious,/turf/simulated/floor/wood,/area/awaymission/challenge/main)
"bs" = (/obj/machinery/space_heater,/turf/simulated/floor/wood,/area/awaymission/challenge/main)
"bt" = (/obj/structure/table,/obj/item/clothing/accessory/stethoscope,/obj/item/bodybag,/obj/item/weapon/storage/box/beakers,/turf/simulated/floor/wood,/area/awaymission/challenge/main)
"bu" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel,/area/awaymission/challenge/main)
diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm
index 1ee6d09dfd8..62503cc3dd1 100644
--- a/_maps/map_files/RandomZLevels/spacehotel.dmm
+++ b/_maps/map_files/RandomZLevels/spacehotel.dmm
@@ -4,7 +4,7 @@
"ad" = (/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/wall,/area/awaymission)
"ae" = (/obj/machinery/power/terminal,/turf/simulated/floor/plating,/area/awaymission)
"af" = (/obj/machinery/power/apc/noalarm{dir = 1; pixel_y = 32},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission)
-"ag" = (/mob/living/carbon/alien/humanoid/queen{bodytemperature = 31000.1; maxHealth = 0; stat = 2; suiciding = 0},/turf/simulated/floor/carpet,/area/awaymission)
+"ag" = (/mob/living/simple_animal/hostile/alien/queen,/turf/simulated/floor/carpet,/area/awaymission)
"ah" = (/obj/item/stack/cable_coil/random,/obj/effect/decal/remains/human,/turf/simulated/floor/plating,/area/awaymission)
"ai" = (/turf/simulated/floor/plating,/area/awaymission)
"aj" = (/obj/machinery/power/smes/magical,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission)
@@ -295,7 +295,7 @@ aaaaaaaaboaHbpaHaHaHbpaHaHaHbpaHaHaHbpaHaHaHbpaHaHaHaHbtaobuaobvaHaHaobvaHaHaHaH
aaaaaaaabsaHaHaHaHaHbqaHaHaHaHaHbqaHaHaHaHaHaHaHaHaHaHaHbnaHbnaHaHaHaHaHcDcDcDcDcDcDcDcDcDcDcDcDcDcDcDcDcDbtaoabaaaaaaaa
aaaaaaabaoaoaocEaoaoaoaoaocFaoaoaoaoaocGaoaoaoaHaHaHaHaHbpaHbpaHaHaHaHcBcBcBcBcBcBcBcBcBcBcBcBcBcBcBcBcBcBcBaoabaaaaaaaa
aaaaaaabaoaHcHcIaHcJaoaHcKcLaHavaocMcNcOaHavaoaHaHaHaHaHaHaHaHaHaHaHaHcBcPcPcPcQcPcPcPcPcPcPcPcPcPcPcPcQcPcPaoabaaaaaaaa
-aaaaaaabaoaHagaHcScTaobvaHaHaHcUaocVcWcWaHcXaoaHaHaHaHaHaHaHaHaHaHaHaHaocYcPcZdadbdbcPcPcPcPcPdadadadadacPcYaoabaaaaaaaa
+aaaaaaabaoaHaHagcScTaobvaHaHaHcUaocVcWcWaHcXaoaHaHaHaHaHaHaHaHaHaHaHaHaocYcPcZdadbdbcPcPcPcPcPdadadadadacPcYaoabaaaaaaaa
aaaaaaaabRaHdcddcSdeaoaHaHaHaHcUaocWdfcWaHdgaoaHaHaHaHaHbpaHbpaHaHaHaHaodhcPdadidjdkcPcPcPcQcPdadadldadacPdhaoabaaaaaaaa
aaaaaaabaodmdndodndpaobTbTbUbTbVaodqdrdsdrbVaoaHaHaHaHaHaHaHaHaHaHaHaHaodtcPcQcPcPcPcPcPcPcPcPcPcPcPcPcPcPdtaoabaaaaaaaa
aaaaaaabbWduakdwalaobWbXaYaZbYaobWbXaYaZbYaoaoaHaHaHaHaHbqaHbqaHaHaHaHaocPdydzdAdBdCcQdycPdycPcPdDdEdFcPdycQaoabaaaaaaaa
diff --git a/_maps/map_files/RandomZLevels/stationCollision.dmm b/_maps/map_files/RandomZLevels/stationCollision.dmm
index 7fdd6dff7ea..d91ef330c60 100644
--- a/_maps/map_files/RandomZLevels/stationCollision.dmm
+++ b/_maps/map_files/RandomZLevels/stationCollision.dmm
@@ -82,9 +82,9 @@
"bD" = (/turf/simulated/floor/plasteel/airless{tag = "icon-blue (NORTH)"; icon_state = "blue"; dir = 1},/area/awaymission/northblock)
"bE" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/syndishuttle)
"bF" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/research)
-"bG" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/awaymission/research)
+"bG" = (/obj/machinery/light{dir = 4},/obj/structure/window/reinforced,/obj/structure/sign/securearea{pixel_x = 32},/obj/item/clothing/under/rank/security,/obj/effect/decal/remains/human,/obj/item/weapon/gun/energy/laser/practice/sc_laser,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"bH" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/awaymission/research)
-"bI" = (/obj/item/weapon/shard,/mob/living/carbon/alien/larva{bruteloss = 25; fireloss = 175; stat = 2},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/awaymission/research)
+"bI" = (/obj/structure/sign/securearea{pixel_x = 32},/obj/item/clothing/under/rank/security,/obj/effect/decal/remains/human,/obj/item/weapon/gun/energy/laser/practice/sc_laser,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research)
"bJ" = (/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"bK" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"bL" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/awaymission/research)
@@ -104,7 +104,7 @@
"bZ" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/awaymission/research)
"ca" = (/turf/simulated/floor/plasteel,/area/awaymission/research)
"cb" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/research)
-"cc" = (/mob/living/carbon/alien/humanoid/sentinel{fireloss = 200; stat = 2},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
+"cc" = (/obj/structure/table/holotable,/obj/item/weapon/gun/energy/floragun{pixel_x = 2; pixel_y = 3},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"cd" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/awaymission/research)
"ce" = (/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/simulated/floor/plasteel,/area/awaymission/research)
"cf" = (/obj/machinery/dna_scannernew,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
@@ -112,7 +112,7 @@
"ch" = (/obj/machinery/power/emitter{anchored = 1; state = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research)
"ci" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/northblock)
"cj" = (/obj/machinery/door/window/southleft,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/awaymission/research)
-"ck" = (/obj/item/weapon/shard{icon_state = "small"},/mob/living/carbon/alien/larva{bruteloss = 50; fireloss = 150; stat = 2},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/awaymission/research)
+"ck" = (/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/under/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/effect/decal/cleanable/blood/splatter,/obj/item/clothing/shoes/brown,/obj/item/toy/sword,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock)
"cl" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/item/weapon/shard{icon_state = "small"},/obj/structure/alien/weeds/node,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/awaymission/research)
"cm" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/paper,/obj/item/weapon/paper,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"cn" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/mob/living/simple_animal/hostile/hivebot,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/awaymission/research)
@@ -135,7 +135,7 @@
"cE" = (/obj/machinery/portable_atmospherics/canister/toxins{destroyed = 1},/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/awaymission/northblock)
"cF" = (/obj/machinery/door/window/eastleft,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"cG" = (/obj/machinery/power/emitter{anchored = 1; dir = 1; icon_state = "emitter"; state = 2},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
-"cH" = (/obj/item/clothing/mask/facehugger,/mob/living/carbon/alien/humanoid/queen{fireloss = 300; stat = 2},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
+"cH" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/obj/item/clothing/under/rank/captain,/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/energy/laser/practice/sc_laser,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock)
"cI" = (/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"cJ" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"cK" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/research)
@@ -161,9 +161,9 @@
"de" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"df" = (/obj/machinery/door/window/northleft{name = "Windoor"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"dg" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
-"dh" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/securearea{pixel_x = 32},/obj/item/clothing/under/rank/security,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/swat,/obj/effect/decal/remains/human,/obj/item/weapon/gun/energy/laser/practice/sc_laser,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
+"dh" = (/obj/machinery/power/apc/noalarm{cell_type = 5000; dir = 8; name = "Mid Block APC"; pixel_x = -28},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"di" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research)
-"dj" = (/obj/structure/sign/securearea{pixel_x = 32},/obj/item/clothing/under/rank/security,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/swat,/obj/effect/decal/remains/human,/obj/item/weapon/gun/energy/laser/practice/sc_laser,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research)
+"dj" = (/obj/effect/decal/remains/human,/obj/item/clothing/under/rank/bartender,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/decal/cleanable/blood/splatter,/obj/item/toy/russian_revolver,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"dk" = (/obj/machinery/door_control{id = "Narsiedoor"; name = "Blast Door Control"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research)
"dl" = (/obj/machinery/door/poddoor{id_tag = "Narsiedoor"; name = "Blast Doors"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research)
"dm" = (/obj/singularity/narsie/sc_Narsie,/turf/space,/area/awaymission/research)
@@ -188,7 +188,7 @@
"dF" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"dG" = (/obj/machinery/door/window/southright{name = "Windoor"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"dH" = (/obj/structure/window/reinforced,/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
-"dI" = (/obj/machinery/light{dir = 4},/obj/structure/window/reinforced,/obj/structure/sign/securearea{pixel_x = 32},/obj/item/clothing/under/rank/security,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/swat,/obj/effect/decal/remains/human,/obj/item/weapon/gun/energy/laser/practice/sc_laser,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
+"dI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"dJ" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research)
"dK" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research)
"dL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research)
@@ -226,7 +226,7 @@
"er" = (/obj/machinery/vending/cola,/turf/simulated/shuttle/floor{icon_state = "floor4"; nitrogen = 0.01; oxygen = 0.01; temperature = 2.7},/area/awaymission/syndishuttle)
"es" = (/obj/machinery/door/airlock/command,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/northblock)
"et" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/northblock)
-"eu" = (/obj/structure/closet/syndicate,/obj/item/clothing/suit/space/rig/syndi,/turf/simulated/shuttle/floor{icon_state = "floor4"; nitrogen = 0.01; oxygen = 0.01; temperature = 2.7},/area/awaymission/syndishuttle)
+"eu" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/clothing/suit/space/syndicate,/obj/item/weapon/paper/sc_safehint_paper_prison,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock)
"ev" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/northblock)
"ew" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/northblock)
"ex" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor{icon_state = "floor4"; nitrogen = 0.01; oxygen = 0.01; temperature = 2.7},/area/awaymission/syndishuttle)
@@ -254,7 +254,7 @@
"eT" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 120; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"eU" = (/obj/machinery/r_n_d/server{stat = 1},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"eV" = (/obj/machinery/power/emitter{anchored = 1; dir = 1; icon_state = "emitter"; state = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/research)
-"eW" = (/obj/machinery/bot/medbot/mysterious{desc = "A dark little medical robot. She looks somewhat underwhelmed."; name = "Nightingale"},/turf/simulated/shuttle/floor{icon_state = "floor4"; nitrogen = 0.01; oxygen = 0.01; temperature = 2.7},/area/awaymission/syndishuttle)
+"eW" = (/mob/living/simple_animal/bot/medbot/mysterious{desc = "A dark little medical robot. She looks somewhat underwhelmed."; name = "Nightingale"},/turf/simulated/shuttle/floor{icon_state = "floor4"; nitrogen = 0.01; oxygen = 0.01; temperature = 2.7},/area/awaymission/syndishuttle)
"eX" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor4"; nitrogen = 0.01; oxygen = 0.01; temperature = 2.7},/area/awaymission/syndishuttle)
"eY" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/northblock)
"eZ" = (/turf/simulated/floor/plasteel,/area/awaymission/northblock)
@@ -284,10 +284,10 @@
"fx" = (/obj/machinery/r_n_d/protolathe,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"fy" = (/obj/machinery/r_n_d/destructive_analyzer,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"fz" = (/obj/structure/table,/obj/item/device/analyzer,/obj/item/device/mass_spectrometer{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
-"fA" = (/obj/structure/table/holotable,/obj/item/weapon/gun/energy/floragun{pixel_x = 2; pixel_y = 3},/obj/machinery/light,/obj/item/weapon/gun/energy/taser{pixel_x = -2; pixel_y = -2},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
+"fA" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/weapon/paper/sc_safehint_paper_caf,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"fB" = (/obj/structure/target_stake,/obj/item/weapon/grown/sunflower,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
-"fC" = (/obj/item/ammo_casing/c45,/obj/item/ammo_casing/c45{pixel_x = 7},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock)
-"fD" = (/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/under/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/clothing/shoes/syndigaloshes,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/pistol,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock)
+"fC" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/toy/crossbow/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
+"fD" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/toy/crossbow/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"fE" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/airless,/area/awaymission/midblock)
"fF" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/midblock)
"fG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/awaymission/midblock)
@@ -315,7 +315,7 @@
"gc" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/arrivalblock)
"gd" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock)
"ge" = (/obj/item/weapon/storage/secure/safe/sc_ssafe{pixel_x = 4; pixel_y = -26},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock)
-"gf" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/obj/item/clothing/under/rank/captain,/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/energy/laser/retro/sc_retro,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock)
+"gf" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/toy/crossbow/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"gg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/awaymission/midblock)
"gh" = (/obj/structure/closet/wardrobe/generic,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"gi" = (/turf/simulated/floor/plasteel,/area/awaymission/midblock)
@@ -326,7 +326,7 @@
"gn" = (/obj/machinery/gibber,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"go" = (/obj/machinery/vending/boozeomat,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"gp" = (/obj/structure/table,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
-"gq" = (/obj/item/ammo_casing/shotgun,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
+"gq" = (/mob/living/simple_animal/hostile/alien/sentinel,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/awaymission/research)
"gr" = (/obj/structure/table,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"gs" = (/obj/structure/stool,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"gt" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
@@ -339,9 +339,9 @@
"gA" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"gB" = (/obj/machinery/door/window/eastleft{name = "Windoor"},/obj/machinery/door/window/westleft{name = "Windoor"},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"gC" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
-"gD" = (/obj/item/ammo_casing/shotgun,/obj/machinery/power/apc/noalarm{cell_type = 5000; dir = 8; name = "Mid Block APC"; pixel_x = -28},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
-"gE" = (/obj/item/ammo_casing/shotgun,/obj/item/ammo_casing/shotgun,/obj/item/ammo_casing/shotgun,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
-"gF" = (/obj/item/ammo_casing/shotgun,/obj/effect/decal/remains/human,/obj/item/clothing/under/rank/bartender,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/shotgun/sc_pump,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
+"gD" = (/obj/item/weapon/shard,/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/awaymission/research)
+"gE" = (/obj/structure/window/reinforced{dir = 4},/mob/living/simple_animal/hostile/alien,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/research)
+"gF" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/awaymission/research)
"gG" = (/obj/structure/table,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"gH" = (/obj/structure/stool,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"gI" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
@@ -369,8 +369,8 @@
"he" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/purple,/obj/structure/window/reinforced/tinted{dir = 1},/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"hf" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/purple,/obj/structure/window/reinforced/tinted{dir = 1},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"hg" = (/obj/machinery/door/airlock,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
-"hh" = (/obj/structure/table,/obj/item/ammo_casing/shotgun,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
-"hi" = (/obj/structure/table,/obj/item/ammo_casing/shotgun,/obj/item/ammo_casing/shotgun,/obj/item/ammo_casing/shotgun,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
+"hh" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/paper,/obj/item/weapon/paper,/mob/living/simple_animal/hostile/alien/queen,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
+"hi" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/securearea{pixel_x = 32},/obj/item/clothing/under/rank/security,/obj/effect/decal/remains/human,/obj/item/weapon/gun/energy/laser/practice/sc_laser,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research)
"hj" = (/obj/structure/stool,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"hk" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"hl" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/awaymission/midblock)
@@ -383,7 +383,6 @@
"hs" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock)
"ht" = (/obj/structure/stool/bed/chair{dir = 1},/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/awaymission/arrivalblock)
"hu" = (/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock)
-"hv" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/clothing/suit/space/syndicate,/obj/item/weapon/paper/sc_safehint_paper_prison,/obj/item/weapon/gun/projectile/shotgun/sc_pump,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock)
"hw" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock)
"hx" = (/obj/machinery/door/window/southleft{name = "Windoor"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/awaymission/arrivalblock)
"hy" = (/obj/item/ammo_casing/c10mm{pixel_x = 2; pixel_y = 5},/obj/item/ammo_casing/c10mm{pixel_x = -4; pixel_y = -5},/obj/item/ammo_casing/c10mm,/turf/simulated/floor/plasteel/airless,/area/awaymission/midblock)
@@ -405,7 +404,6 @@
"hO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"hP" = (/obj/effect/decal/remains/human,/obj/item/weapon/kitchen/knife/butcher,/obj/item/weapon/kitchen/knife,/obj/item/clothing/head/chefhat,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"hQ" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
-"hR" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/weapon/paper/sc_safehint_paper_caf,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"hS" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/midblock)
"hT" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/midblock)
"hU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/midblock)
@@ -421,7 +419,6 @@
"ie" = (/obj/machinery/microwave{pixel_x = -2; pixel_y = 7},/obj/structure/table,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"if" = (/obj/structure/stool,/obj/item/ammo_casing/c10mm,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"ig" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
-"ih" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"ii" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/ammo_casing/c10mm,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"ij" = (/obj/structure/table,/obj/item/ammo_casing/c10mm,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"ik" = (/obj/structure/stool/bed/chair{dir = 8},/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
@@ -437,9 +434,7 @@
"iu" = (/obj/structure/closet/secure_closet/freezer/kitchen,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"iv" = (/obj/machinery/door/window/eastright{name = "Windoor"},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"iw" = (/obj/item/ammo_casing/c10mm,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
-"ix" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"iy" = (/obj/item/ammo_casing/c10mm,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
-"iz" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"iA" = (/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"iB" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel,/area/awaymission/midblock)
"iC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "medium"},/obj/item/stack/rods,/turf/simulated/floor/plating,/area/awaymission/arrivalblock)
@@ -651,33 +646,33 @@ aaaaaaaaaaaaaaaaaaaaaaaCaDafafagagagagagagaEafaFaGamafaHapaBaqafanamaBaEagagagag
aaaaaaaaaaaaaaaDaaaaaaaIaJaKaaaaaaaaaaakakajaFaFamaGaFamamaBaLamaBaMaNajakakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aCaCaDaaaaaaaaaCaDaaaaaOaPaQaDaaaaaaaaaaakafafafaGaRaSaFaFaTaUaBamaVaWajakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aCaXaYaDaaaaaaaCaCaCaCaCaCaCaCaCaCaZaabaaaafajajajajajbbbcajajajajajajajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-bdbebfaYaDaaaaaCeheheierepexeueKeJaCaCaaaGajamaGaqamamapaGajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+bdbebfaYaDaaaaaCeheheierepexeJeKeJaCaCaaaGajamaGaqamamapaGajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bobpbqbraCaCaCaCeKeKeKeKeKeKeKeKeJaCaCaKaKaCaCbsamaqaqamapajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bobpbqbfbteKeKeKeKeKeKeKeKeKeKeKeKeLeKeKeKeKeKeLbvbwbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-bobpbqbyaCaCaCaCeKeKeWffeXfhfgeKeuaCaCaCaCaCaKbEbFbGbHbIbJbKbLbHbMbJbNbHbObPbKbQbRbSbSbTbxakakaaaaaaaaaaaaaaaabxbxbxbxbxaaaaaaaa
-bUbVbfbWbEaaaaaCfifieKffeXeKfgeKeJaCaCbEafajaqaFbYbZcacbccbJcdcacbbJcdcecbbJbJcfcgbSbSbSbxakakakakakakakbxbxbxbxchchchbxbxbxaaaa
-aCbfbWbEaaaaaaaCaCaCaCaCaCaCaCaCaCaCbEafciajaFaFbxcjckclcmbJcncocpcqcrcocpbJcsctcucvcwcxbxakakaaaaaaaacyczcAcAcAcAcBcAcAcAbxbxaa
-aCaCbEaaaaaaaaaCbEaaaacCaPcDafafafafafaqaGajancEbxbJbJcFbJbJbJcGcmcHbJcGcmcIbJcJbJbJbJbJbxakaaaaaaaacycKcAcLcAcBcMcNcOcBcAcPbxaa
+bobpbqbyaCaCaCaCeKeKeWffeXfhfgeKeJaCaCaCaCaCaKbEbFgqbHgDbJbKbLbHbMbJbNbHbObPbKbQbRbSbSbTbxakakaaaaaaaaaaaaaaaabxbxbxbxbxaaaaaaaa
+bUbVbfbWbEaaaaaCfifieKffeXeKfgeKeJaCaCbEafajaqaFbYbZcagEbJbJcdcacbbJcdcecbbJbJcfcgbSbSbSbxakakakakakakakbxbxbxbxchchchbxbxbxaaaa
+aCbfbWbEaaaaaaaCaCaCaCaCaCaCaCaCaCaCbEafciajaFaFbxcjgFclcmbJcncocpcqcrcocpbJcsctcucvcwcxbxakakaaaaaaaacyczcAcAcAcAcBcAcAcAbxbxaa
+aCaCbEaaaaaaaaaCbEaaaacCaPcDafafafafafaqaGajancEbxbJbJcFbJbJbJcGhhbJbJcGcmcIbJcJbJbJbJbJbxakaaaaaaaacycKcAcLcAcBcMcNcOcBcAcPbxaa
aaaaaaaaaaaaaabEaaaaaaaKaJafafafafafcQafcRajaFaqbxbxbxbxbxcScTcUbJbJbJbJcTbJbJbJbJbJbJbJbxbxbxbxbxcVbxbxcWcAcXcYcYcYcYcYcZcAbxbx
-aaaaaaaaaaaaaaaaaaaaaaaCafafaeaqafaeaqanandaamaqbxdbdcddbxdedfdgdgdgdgdgdgdgdfdgdgdgdgdhbxdidjbxbxdkcAdlcAcAcMcYcYcYdmcYcOcAdnbx
+aaaaaaaaaaaaaaaaaaaaaaaCafafaeaqafaeaqanandaamaqbxdbdcddbxdedfdgdgdgdgdgdgdgdfdgdgdgdghibxdibIbxbxdkcAdlcAcAcMcYcYcYdmcYcOcAdnbx
aaaaaaaaaaaaafafafafafafajajajaFdoaGaGandpajamdqdrdsdsdsdtdubJbJbJbJbJbJcIbJbJbJbJbJbJbJdvcAcAdvcAcAcAdlcAcXcNcYcYcYcYcYcNcZdnbx
-aaaaaaaaaaaaafafafafbgbibhbjajafajajajajajajamdAbxdBdCddbxdDdEdFdGdFdFdFdFdFdGdHdFdFdFdIbxcAdjbxbxcAdJdlcAcAdKcYcYcYcYcYdLcAdnbx
+aaaaaaaaaaaaafafafafbgbibhbjajafajajajajajajamdAbxdBdCddbxdDdEdFdGdFdFdFdFdFdGdHdFdFdFbGbxcAbIbxbxcAdJdlcAcAdKcYcYcYcYcYdLcAdnbx
aaaaaaaaaaaaajafbkafdNaFblbmafbnafdRdSdTamajaqdUbxbxbxbxbxcSdVbJbJbJdWdXdYdZbJbJeaeaeaeabxbxbxbxbxcVbxbxcWcAcXcYcYcYcYcYcZcAbxbx
aaaaaaaaaaaaebbzbuaGaeaeaFbAafbCbBbDbDbDbXajejdUbxdFdFdFekbJdVbJbJbJbJbJbJdZbJbJeaelbJembxakaaaaaaaacycKcAcAcAendKcNdLencAcPbxaa
aaaaaaaaaaaaeodweqaFaeaFaGdxesetdyetevewdzeseyezbxeAeBeCeDbJdVbJbJbJbJbJbJdZbJbJeaeEeFeGbxakakaaaaaaaacyeHcAcAcAcAencAcAcAbxbxaa
aaaaaaaaaaaaeIdMafaGafaGaGdOajdPbAbgbgbgbuajaFeMbxeCeCeCeDbJdVeNbJeOePePeQeRbJbJeSeTbJeUbxakakakakakakakbxbxbxbxeVeVeVbxbxbxaaaa
aaaaaaaaaaaaajajdQbXecaFecbmajbneYapfaeZapajaGfbbxeAeBeCeDbJdVfcbJbJfdbJfedZbJbJeaeaeaeabxakakaaaaaaaaaaaaaaaabxbxbxbxbxaaaaaaaa
aaaaaaaaaaaaafajajeeedefbDegajajajfjajajajajaBfbbxeCeCeCeDbJdVfkbJbJbJbJfldZbJfmbJbJbJfnbxakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaajajajajajajajfofpfpajfqfqfrfsftbxeAeBeCeDbJdVfufvfwfxfyfzdZbJfAbJbJbJfBbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaajfpfCfDajfEfFfGfGfHbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxfIfIfIfIfIfIfIfJfKaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaajajajajajajajfofpfpajfqfqfrfsftbxeAeBeCeDbJdVfufvfwfxfyfzdZbJccbJbJbJfBbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaajfpfpckajfEfFfGfGfHbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxfIfIfIfIfIfIfIfJfKaaaaaaaaaaaaaaaaaaaa
aafLfMfNfOfPfMfQaaaaaaaaaaaaajfRfpfSajfqfTfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfIfVfWfVfXfVfXfWfXfYfKaaaaaaaaaaaaaaaaaa
-aafZgagbgcgbgafZaaaaaaaaaaaaajgdgegfajfqggfUghgigjgigkfUglgmgnfUgogpgqgrgsgigigtgifUfqfqfIfVfXfVfXfVfXgufXfXgvaaaaaaaaaaaaaaaaaa
-aagwgxgbgbgbgxgygzgzgzgzgzgzgzgzgzgzgzfqfTfUgAgigBgigCfUgigigCfUgDgEgFgGgHgigIgrgJfUfqfqgKgLgLgMgLgLgLgNgOgPgvaaaaaaaaaaaaaaaaaa
-aagQgbgbgbgbgbgRgSgTgUgzgVgWgXgYgZhagzhbfTfUhchchdhehffUhgfUfUfUgihhhigrhjgigigihkfUfqfqgKgLgLgLgLgLgLfXhlhmgvaaaaaaaaaaaaaaaaaa
-aahngcgcgbgcgchohphqhrhshthuhuhvhwhxgzhyhzfUgAgihdgigCfUgihAhBhCgigrgsgihDgigIgrgJfUfEfqfIfVfXfVfXfVfXgufXfXgvaaaaaaaaaaaaaaaaaa
-aafZgbgbgbgbgbfZhEhuhqgzhFhuhGhHhIhJgzfrfTfUhKgigBgihLfUhMgigihNgigrgsgihOhPhQgihRfUfqfqfIfVhSfVfXfVfXhSfXhThUaaaaaaaaaaaaaaaaaa
-aafZgcgcgbgcgcfZhVhWhugzhXhYhYhZhZiaibicidfUgigihdgigifUiegigigigigrifigihigiiijikfUfqfqfIfIfIfIfIfIfIfIfJhUaaaaaaaaaaaaaaaaaaaa
-aafZgbgbgbgbgbfZhVilimgzinioioioioipgzfqfTfUiqhKhdhLhLfUirisitiugiiviwixiyiziAiBgifUfqfqfUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aafZgagbgcgbgafZaaaaaaaaaaaaajgdgecHajfqggfUghgigjgigkfUglgmgnfUgogpgigrgsgigigtgifUfqfqfIfVfXfVfXfVfXgufXfXgvaaaaaaaaaaaaaaaaaa
+aagwgxgbgbgbgxgygzgzgzgzgzgzgzgzgzgzgzfqfTfUgAgigBgigCfUgigigCfUdhdIdjgGgHgigIgrgJfUfqfqgKgLgLgMgLgLgLgNgOgPgvaaaaaaaaaaaaaaaaaa
+aagQgbgbgbgbgbgRgSgTgUgzgVgWgXgYgZhagzhbfTfUhchchdhehffUhgfUfUfUgigrgrgrhjgigigihkfUfqfqgKgLgLgLgLgLgLfXhlhmgvaaaaaaaaaaaaaaaaaa
+aahngcgcgbgcgchohphqhrhshthuhueuhwhxgzhyhzfUgAgihdgigCfUgihAhBhCgigrgsgihDgigIgrgJfUfEfqfIfVfXfVfXfVfXgufXfXgvaaaaaaaaaaaaaaaaaa
+aafZgbgbgbgbgbfZhEhuhqgzhFhuhGhHhIhJgzfrfTfUhKgigBgihLfUhMgigihNgigrgsgihOhPhQgifAfUfqfqfIfVhSfVfXfVfXhSfXhThUaaaaaaaaaaaaaaaaaa
+aafZgcgcgbgcgcfZhVhWhugzhXhYhYhZhZiaibicidfUgigihdgigifUiegigigigigrifigfCigiiijikfUfqfqfIfIfIfIfIfIfIfIfJhUaaaaaaaaaaaaaaaaaaaa
+aafZgbgbgbgbgbfZhVilimgzinioioioioipgzfqfTfUiqhKhdhLhLfUirisitiugiiviwfDiygfiAiBgifUfqfqfUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aagwgcgcgbgcgcgwiCiDhugzgziEiFiGgziHgzfqfTfUfUfUhgfUfUfUfUfUfUfUfUfUfUfUiIiJfUfUfUfUfqfqfUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aagQgbgbgbgbgbiKiLhqiMgziNiOiOiOiPiQgziRiSiTiTiUiViTiTiTiTiTiWiTiTiTiTiTiSiTiTiTiTiTiTiXiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aahngcgcgbgcgchniZhuilgzjajbjbjcjdjejfjgjhjijijijjjkjijijijijijijijijijljmiTjniTiTiTiTiTiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/RandomZLevels/wildwest.dmm b/_maps/map_files/RandomZLevels/wildwest.dmm
index cbd9660e13c..4cc4825b777 100644
--- a/_maps/map_files/RandomZLevels/wildwest.dmm
+++ b/_maps/map_files/RandomZLevels/wildwest.dmm
@@ -106,7 +106,7 @@
"cb" = (/obj/structure/window/reinforced{tag = "icon-fwindow (WEST)"; icon_state = "fwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-fwindow (EAST)"; icon_state = "fwindow"; dir = 4},/obj/structure/grille,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwgov)
"cc" = (/obj/structure/window/reinforced{tag = "icon-fwindow (EAST)"; icon_state = "fwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-fwindow (WEST)"; icon_state = "fwindow"; dir = 8},/obj/structure/grille,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwgov)
"cd" = (/obj/item/weapon/paper{info = " The miners in the town have become sick and almost all production has stopped. They, in a fit of delusion, tossed all of their mining equipment into the furnaces. They all claimed the same thing. A voice beckoning them to lay down their arms. Stupid miners."; name = "Planer Saul's Journal: Page 4"},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/wwmines)
-"ce" = (/obj/item/weapon/gun/projectile,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/wwmines)
+"ce" = (/obj/structure/table/woodentable,/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/obj/item/weapon/kitchen/knife/butcher,/turf/simulated/floor/wood,/area/awaymission/wwmines)
"cf" = (/obj/structure/mineral_door/wood{tag = "icon-woodopening"; icon_state = "woodopening"},/turf/simulated/floor/wood,/area/awaymission/wwmines)
"cg" = (/obj/structure/stool,/turf/simulated/floor/carpet,/area/awaymission/wwmines)
"ch" = (/obj/item/ammo_box/c10mm,/turf/simulated/floor/carpet,/area/awaymission/wwmines)
@@ -134,7 +134,7 @@
"cD" = (/obj/structure/bookcase{tag = "icon-book-5"; icon_state = "book-5"},/turf/simulated/floor/wood,/area/awaymission/wwmines)
"cE" = (/obj/item/weapon/reagent_containers/food/condiment/peppermill,/turf/simulated/floor/wood,/area/awaymission/wwmines)
"cF" = (/obj/item/weapon/reagent_containers/food/condiment/saltshaker,/turf/simulated/floor/wood,/area/awaymission/wwmines)
-"cG" = (/obj/item/weapon/twohanded/dualsaber,/turf/simulated/floor/wood,/area/awaymission/wwgov)
+"cG" = (/obj/item/toy/sword,/turf/simulated/floor/wood,/area/awaymission/wwgov)
"cH" = (/obj/effect/landmark/corpse/miner/rig,/turf/simulated/floor/wood,/area/awaymission/wwgov)
"cI" = (/mob/living/simple_animal/hostile/creature,/turf/simulated/floor/wood,/area/awaymission/wwgov)
"cJ" = (/obj/structure/mineral_door/wood{tag = "icon-woodopening"; icon_state = "woodopening"},/turf/simulated/floor/wood,/area/awaymission/wwgov)
@@ -145,7 +145,7 @@
"cO" = (/obj/effect/decal/remains/human,/mob/living/simple_animal/hostile/syndicate/ranged/space{name = "Syndicate Commander"},/turf/simulated/floor/plating,/area/awaymission/wwrefine)
"cP" = (/obj/item/weapon/paper{info = "We've discovered something floating in space. We can't really tell how old it is, but it is scraped and bent to hell. There object is the size of about a room with double doors that we have yet to break into. It is a lot sturdier than we could have imagined. We have decided to call it 'The Vault' "; name = "Planer Saul's Journal: Page 1"},/turf/simulated/floor/carpet,/area/awaymission/wwgov)
"cQ" = (/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight,/turf/simulated/floor/plasteel{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov)
-"cR" = (/obj/item/weapon/kitchen/knife/butcher,/turf/simulated/floor/plasteel{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov)
+"cR" = (/obj/item/weapon/kitchen/knife,/turf/simulated/floor/plasteel{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov)
"cS" = (/obj/item/weapon/reagent_containers/food/snacks/stew,/turf/simulated/floor/plasteel{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov)
"cT" = (/obj/structure/stool/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/wood,/area/awaymission/wwmines)
"cU" = (/obj/structure/stool/bed/chair/comfy/teal{dir = 8},/turf/simulated/floor/wood,/area/awaymission/wwmines)
@@ -301,7 +301,7 @@
"fO" = (/obj/effect/decal/cleanable/blood/gibs/core,/turf/simulated/floor/wood,/area/awaymission/wwmines)
"fP" = (/mob/living/simple_animal/hostile/syndicate,/turf/simulated/floor/wood,/area/awaymission/wwmines)
"fQ" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor/carpet,/area/awaymission/wwmines)
-"fR" = (/obj/item/weapon/gun/projectile,/turf/simulated/floor/wood,/area/awaymission/wwmines)
+"fR" = (/obj/item/weapon/pickaxe/gold,/turf/simulated/floor/wood,/area/awaymission/wwmines)
"fS" = (/mob/living/simple_animal/hostile/creature,/turf/simulated/floor/grass,/area/awaymission/wwgov)
"fT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/grass,/area/awaymission/wwgov)
"fU" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/simulated/mineral,/area/awaymission/wwmines)
@@ -311,8 +311,6 @@
"fY" = (/obj/machinery/washing_machine,/turf/simulated/floor/wood,/area/awaymission/wwmines)
"fZ" = (/obj/effect/decal/cleanable/blood/gibs/body{tag = "icon-gibup1"; icon_state = "gibup1"},/obj/structure/stool/bed/chair/wood/normal,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/awaymission/wwmines)
"ga" = (/obj/item/weapon/hatchet,/turf/simulated/floor/wood,/area/awaymission/wwmines)
-"gb" = (/obj/item/weapon/gun/projectile/automatic/pistol,/turf/simulated/floor/wood,/area/awaymission/wwmines)
-"gc" = (/obj/item/weapon/gun/projectile/shotgun,/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines)
"gd" = (/obj/effect/landmark/corpse/syndicatecommando{mobname = "Syndicate Commando"},/turf/simulated/floor/grass,/area/awaymission/wwgov)
"ge" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-fwindow (NORTH)"; icon_state = "fwindow"; dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-fwindow (WEST)"; icon_state = "fwindow"; dir = 8},/turf/simulated/floor/plasteel,/area/awaymission/wwrefine)
"gf" = (/obj/structure/window/reinforced{tag = "icon-fwindow (WEST)"; icon_state = "fwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-fwindow (NORTH)"; icon_state = "fwindow"; dir = 1},/obj/structure/grille,/turf/simulated/floor/plasteel,/area/awaymission/wwrefine)
@@ -585,10 +583,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaUbababobababfaUaLaRaRaRaRaRbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbkbhbhbhbhbhbhbibhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaUaUbabababfbabaaUaLaRaRaRaRaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbqbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpaaaaaaaabpbpbpbpbpbpbpbpbpbpaabpaabpbpbpbpaaaaaabpbpbpbpbpbpbpbpbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaUbrbabababababaaUaLaRaRaRaRaRbkbhbhbhaRbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsaRbhbhbhbhaRbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaLaLaGaGaGaGaGaaaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaabpbtbububububububtbtbtbtbtbububtbtbtbubtbtbtbtbubububububtbtbtbtbtaabpaabpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaUbababababababaaUaLaRaRaRaRaRbhbhbhbhaRbsbvbwbwbxbwbwbwbsbybzeSbzbBbsaRbhbhbCbhaRbsbDbDbDfQbDbDbDgEbBbBbEgFbFbGbBgFbhbhbhbhgGbwbwbHgHbJbwbKbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaabpbtbububububububtbtbtbtbtbububtbtbtbubtbtbtbtbubububububtbtbtbtbtaabpaabpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaUbababababababaaUaLaRaRaRaRaRbhbhbhbhaRbsbvbwbwbxbwbwbwbsbybzeSbzbBbsaRbhbhbCbhaRbsbDbDbDfQbDbDbDgEbBbBbEcebFbGbBgFbhbhbhbhgGbwbwbHgHbJbwbKbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaabpbLbMbNbObObObObObObObObObObObObObObObObObObObObObObObObObObObObPbMbQaaaaaabpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaUbabababfbababaaUaLaRaRaRaRaRbhbhbhbhaRbsgIbRbwbwbwbSgJbsbhbhbhbhbhbsaRbhbhbhbhaRbsbDbDbDbDbDbDbDbhbhbhbhbhbhbhbhbhbhbhbhbhbhbwbwbwbwbwbwbwbsaRbhbhbhbhaRaXaRaRaRaRaRaRaRaRaRaRaRaLaLaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaabpbTbUbVbVbVbVbVbVbVbVbVbWbVbVbVbVbVbVbVbVbVbVbWbVbVbVbVbVbVbVbVbVbXbQaaaaaaaabpbpaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaUbfbababababfbaaUaLaRaWaRaRbdbhbhbhbhaRbsbwbwbwbwbwbwbwbsbhbhbhbhbhbsaRbhbkbhbhaRbsbDbDbDbDbDbDbDbBbBbBbBbBbBbBbAbBbYbBbBbBbZbwbwbwbwcabwbwbsaRbhbhbhbhaRaRaRaRaRaRaRaXaRaRaRaRaRaRaLaNaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaabpbTcbbVbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbVccbQaaaaaaaaaabpbpaaaaaaaaaaaaaaaaaaaaaaaGaGaGaUbababababababaaUaLaRaRaRaRaRbhbhbkbhaRbsgIbRcdcebwbSgJbsbsbsbsbscfbsaRbhbnbhbhaRbsgKcgbDbDchcgbDbBcicicicicicicicibhbhbhbhbBbwbwbwbwbwbwgJbsaRbhbhbCbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaabpbTcbbVbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbVccbQaaaaaaaaaabpbpaaaaaaaaaaaaaaaaaaaaaaaGaGaGaUbababababababaaUaLaRaRaRaRaRbhbhbkbhaRbsgIbRcdbwbwbSgJbsbsbsbsbscfbsaRbhbnbhbhaRbsgKcgbDbDchcgbDbBcicicicicicicicibhbhbhbhbBbwbwbwbwbwbwgJbsaRbhbhbCbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaabpbTcbbVbMcjcjcjcjcjcjbMckclgLclclckgMclckckgLckclbMcmcngNcncpbMbVcccqaaaaaaaaaaaabpcrbpaaaaaaaaaaaaaaaaaaaGaGaGaUbababababababmaUaLaRaRaRaRaRbibhbhbhaRbsbwbwbwbwbwbwbwcfbhbhbhbhbhbsaRbhbhbhbhaRbsbDbDbDcsbDbDbDbBbhbhbhbhbhbhbhbhbhbhbhbhbBbwbwbwbwbwbwbwbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaLaLaRaLaIaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaabpbTcbbVbMckckckclckckbMckctctctctcuctcuckcvcvclckbMcncncncncnbMbWcccqaaaaaaaaaabpbpbpbpbpbpaaaaaaaaaaaaaaaGaGaGaUbabmbabmbababaaUaLaRaRaRaRaRbhbhbhbhaRbsbsbsbsbsbsbsbsbsbhbhbhbhgObsaRbhcwbhbhaRbsbDbDbDbDbDbDbDbBbhbhbhbhgPbhbhgPbhbhbhbhbBbwbwbwbwbwbwbwbsaRbhbhbhbhaRaRcxaRaRaRaRaRaRaRaRaLaLaLaLaIaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaabpbpbLcbbVbMgQczckckckgRbMgScuctctctctctctcAckckckgRbMgTcncBcCgUbMbVcccqbpbpaabpbpbpaaaaaabpbpbpbpaaaaaaaaaGaGaGaGaUbababababababaaUaLaRaRaRaRaRbhbhbhbhaRbscDbhgVbhbhbhgVbhbhbhbhbhbhbsaRbhbhbhbhaRbsbBbBbBbBbBbBbBbBbhbhbhgWbsgXgObsgXbhbhbhbBbBbBcEcFbBbBbBbsaRbkbhbnbhaRaRaRaRaRaRaRaRaRaRaRaRaLaLaLaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -606,7 +604,7 @@ aaaaaaaaaaaaaaaaaaaaaabpaaaadfcbbVbVbVbMdsbMbVbVbVdrbVbVbVbVbVbVbVbVbVbVbVbVbVbV
aaaaaaaaaaaaaaaaaaaaaabpbpaadfcbdrbVbVbMdubMbVbVbVbVbVbVbVbVbVbVbVbVbVbVbVbVdobVbVdrbVbVbWbVccbQbpbpbpaaaaaGaGaGaGaGaGaUbabababababababababfbabaaUaNaNaLaLaRaRaRaRaRaRaRaWaRaRaRaRaRaRbsbsbsbsbsbsbsbscfbsbsbsbsbsbsbsaRaRbsbsbsbsbsbsbsbsbsbsbsbsbsaRbjbhbhbhbsbhbhbhgVbhbhgVbibhbhbsdvhhdvdvdvbhdvbsbhbhgVbhbhbhgVbhbhbsaNaNaNaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaabpbpdfcLbVbVbVbVbVhfbVbVbVbVbVbVbVbVbVbVbVdwbVbVbVbVbVbVbVbVbVbVbVbVcNbQbpaabpbpbpaGaGaGaGaGaGaUbmbabababfbabababaaUaUaUaUaNaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsbwhibwbwhibwbsbhbshjbwbwbwbwbsaRaRbsbhdygVdybhdybhdygVdybhbsaRbhbhbhbhbsbhbDdzbDdAdBbDbDbDbhdCbhbhbhbhbhbhbhbsdDcwdEbhbjbhdFdGbhdHaNaNaNaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaabpdfbMdIdJdJdJdJdJdJdJdJdJdJdKdLdLdIdJdJdJdJdJdJdJdJdJdJdJdJdJdJdKbMbQbpaaaabpaGaGaGaGaGaGaGaUbababababababmbabaaUaNaNaNaLaLaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsdMbwbwbwbwdNbsbhbsdxbwbwbwbwbsaRaRbsbhbhbhbhbhbhbhbhbhbhbhbsaRbkbhbhbhbsbhbDdOdPdQdRdSdTbDbhbsbhbhbhbhdGbhbhbsbBbhdEbhbhbhdFbhbhbsaNaNaNaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaabpbpaadUdUdUdUdUdUdUdUdUdUdUdVdWdXdYdZdUdUdUdUdUdUdVdUdUdUdUdUdUdVdUdUbpcraaaabpbpbpaGaGaGaGaGaUbbbbaUaUaUaUbabmaUaUaNaNaLaLaRaRaRaRaXaRaRaRaRaReaaRaRaXaRaRaRbsdMbxebbwbwdNbsgObsecbwebbwbwbsaRaRbsbhdybhdybhdybhedbhdybhbsaRbhbhbhbhbsgXbDeedQbDbDdQefdzgObsdvegbhbhbhbhbhbsdDbhdEbhbhcwdFbhbhdHaNaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaabpbpaadUdUdUdUdUdUdUdUdUdUdUdVdWdXdYdZdUdUdUdUdUdUdVdUdUdUdUdUdUdVdUdUbpcraaaabpbpbpaGaGaGaGaGaUbbbbaUaUaUaUbabmaUaUaNaNaLaLaRaRaRaRaXaRaRaRaRaReaaRaRaXaRaRaRbsdMbxebbwbwdNbsgObsecbwebbwbwbsaRaRbsbhdybhdybhdybhedbhdybhbsaRbhbhbhbhbsgXbDeedQbDbDdQefdzgObsdvbhbhbhbhbhbhbsdDbhdEbhbhcwdFbhbhdHaNaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaabpbpaaaaaaaaaaaaaaaaaabpbpbpbpdfeheibQaaaaaaaaaaaabpbpbpbpbpbpbpbpbpbpbpbpbpaaaaaacraGaGejejejejekekejejejaUaUaUaUaNaNaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsdMbwbwelbwdNbsbhbsdxbwbwbxbwbsaRaRbsgXbhbibhbhbhbhbhbhbhgObsaRbhbhbhbhbsbhbDdOdSbDbDdSdTembhbsdvdvbhbhbhhkbhdCbhbhbhdGbhbhdFbhbhbsaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpaaaaaaaaaaaabpbpaaaaaadfeneobQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpbpbpejejejepeqerekekekekejejejejaNaNaLaLaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsdMhlbwbwhldNbsbhbshjbwbwbwbwbsaRaRbsbhbhbhbhbhbCbhbhbhbhbhcfaRbhbhbnbhbsbhbDeedRbDbDdRefbDbhbsbsbsbsbsbsbsbsbsbhesesesesbhdFbhbhdHaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpbpbpbpbpbpaaaaaaaadfdXetbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejekekekekekekekekekekekekejaNaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaXaRaRaRaRbsbsbsbwbwbsbsbscfbsbsbwbwbsbsbsaWaRbsbheubhdybhdybhevbhdybhbshmbhbhbhbhbshnbDdOdQbDbDewexbDgObsbyhobybybyhobybsbhdDhpbBdDbhgPbhbhbsaNaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -616,13 +614,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfdXeQbQaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfendYbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeDeEeEeWekekekekekekekekekekekekejaNaNaNaLaRaRaRaRaRaRaRaRaRaRaRaNaNaNaRaRaRaRaRbsbhbhbhgPdpbibhbhbhbhgPbhbhbhbsdkaRbsbhbhgPbhbhbhbhbhgPbhbhbsaRbhbhbhbhbsbsbsbsbseXeXbsbsbsbsbsbsbsbsbsbsbsbsbseLeLeYeLeLeVeLeLhtbsaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfdXeibQaaaaaaaaaaaaaaaaaaaaaabpbpaaaaaaaaaaaaaaaaaaaaeZekekekekekekekekekekekekejaNaNaNaLaRaRaRaRaRaRaRaRbdaRaRaRaNaNaNaRaRaRaRbsfabsfabsfabsfabsbsfabsfabsfbbsaRaXfcbsbsbseBbsbsbsbsbsbsbsbsaRbhbhcwbhfdfebhgVbBbhbhbsbhbhgVbhbhbsbhbhgVbhbhbsffeLfgeLffeLfgeLeLbsaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaabtbtbtbtbtbtbtbtbtbtbtbtbtbtfhdLdLfibtbtbtbtbtbtaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaafjekekekekekekekekekekekekejaNaNaLaLaRaRaRaRaRaRaRaRaRaRaRaRaRaNaNaNaRaRaRbsbsbsbsbsbsbsbsbsbsbsfcbsbsbsbsaRaRfkaRaWaRaRaRaRflaRaWaRaRaRaRbhbhbhgObshubhbhbBfmbhbsbhfnbBfmbhbsbhfobBfpbhbseLeLeLfqeLeLeLfqeLbsaNaNaNaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaabTfrfsfsfsfsfsfsfsfsfsfsfsfsfsfsftftfsfsfsfsfsfsfufvbpbpbpbpbpaaaaaaaaaaaaaaaaaaaaaaejekekekekekekfwekekekekekejaNaLaLaPaRaRaRaRaRaRaRaRaRaRaRaRaRaRaNaNaNaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaReaaWfxfcbsbsbsbsbseBbsbsbsbsbsbsaRbjbhbhfycfbhbhbhbBbhbhbsbhbhegbhbCbsbjbhbZbhbhbsdcdcdcbsdCbseLfzeLbsaNaNaNaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaabTfrfsfsfsfsfsfsfsfsfsfsfsfsfsfsftftfsfsfsfsfsfsfufvbpbpbpbpbpaaaaaaaaaaaaaaaaaaaaaaejekekekekekekfwekekekekekejaNaLaLaPaRaRaRaRaRaRaRaRaRaRaRaRaRaRaNaNaNaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaReaaWfxfcbsbsbsbsbseBbsbsbsbsbsbsaRbjbhbhfycfbhbhbhbBbhbhbsbhbhegbhbCbsbjbhbhbhbhbsdcdcdcbsdCbseLfzeLbsaNaNaNaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBfvbpbpbpbpaaaaaaaaaaaaaaaaaaaaaaaafCekekekekekekekekekekekekejaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaNaNaRaRaRaRaRaRbsbsbsbsbsbsbsbsbsbsbsbsfcdkbsfDbhbhbhbhgVbhbhbhbhbhbsaRbhfEbhbhcfbhbhbhbBfmgObsbhfnbBfmbjbsbhfobBfpbhbsbhbhbhbhbhdceLeLhtbsaNaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftfFfFfGfHfIfIbpbpbpaaaaaaaaaaaaaaaaaaaaaaeZekekekekekekfJekekekekekejaNaLaRaRaRaRaRaRaRaRaRaRaPaRaNaNaNaNaNaNaNaRaRaRaRaRaRbsfKbhbhbhbhgVbhbhbhbhbhbsdkeBbhbhbhbhdpcwbhbhbhbhbhddaRbhbjbhgObshubjbhbBbhbhbsgXbhbBbhgObsgXcwfLbhgObsbsbsbsbhbhdceLfMeLbsaNaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftfNftfNfIfIfIbpbpaaaaaaaaaaaaaaaaaaaaaaaafjekekekekekekekekekekekekejaNaLaRaRaRaRaRaRaNaNaNaNaNaNaNaNaNaNaNaNaNaRaRaRaRaRaRbsbhbhbhbhbjbhfObhbjdGbhbsflbsbhbhdGbhbhbhbhbhbhcwbhbshmbhfPbhbhbsfebhbhbBbhbhbsbhfnbBfmbhbsbhfobBfpbhbshvfRbshnbhdceLeLeLbsaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaabTfAftftfSftftftftftftftftftftftftftftftftftfsfsfTfHfIbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaejekekekekekekekekekekekekejaLaLaRaRaRaRaLaLaLaLaLaLaLaLaLaLaLaLaLfUaLaLaRaRaRaRaRbsbhbhbhbhbhfPfVdpbhfWbhcfaRbsgXbhbhbhbhbhbhbhbhbhgObsdnbhbhbhbheBfXbhbhbBfmgObsbhbhbhbhbhbsbhbhbhbhbhbsfYbhcfbhbhdceLfZeLbsaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBfvbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaafCekekekekekekekekekekekekejaLaPaRaRaLaLaLaLaRaRaRaRaRaRaRaRdnaRaRaRaLaLaLaRaRaRaRbsgXdpbhbhbhbhbhbhgabhgOeBhmbsbhbhbhbhgbbhdpbhbhdGbheBaRbhbhbhbhbsfebhbhbBbhbhbsbsbscfbseBbsbsbscfbsbsbsbseBbsbhbhdceLeLhtbsaNaNaNaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZekekekekekekekekekekekekejaLaLaLaLaLaLaRaRaRaRaRaRgcaRaRaRaRaRaReaaRaLaLaLaRaRaRbsbhbhbjbhbnbhbhdpbhbhbhbsaWbsbhbhcwbhbhbhbibhbhbhbhbsaRaRaRaRaRbsgXbhcwbBbBbhbsbhbhbjbhbhcwbhbhbhbhbhbhbhbhbhbjbhbseLfMeLbsaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftfNftfNfIfIfIbpbpaaaaaaaaaaaaaaaaaaaaaaaafjekekekekekekekekekekekekejaNaLaRaRaRaRaRaRaNaNaNaNaNaNaNaNaNaNaNaNaNaRaRaRaRaRaRbsbhbhbhbhbjbhfObhbjdGbhbsflbsbhbhdGbhbhbhbhbhbhcwbhbshmbhfPbhbhbsfebhbhbBbhbhbsbhfnbBfmbhbsbhfobBfpbhbshvbhbshnbhdceLeLeLbsaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaabTfAftftfSftftftftftftftftftftftftftftftftftfsfsfTfHfIbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaejekekekekekekekekekekekekejaLaLaRaRaRaRaLaLaLaLaLaLaLaLaLaLaLaLaLfUaLaLaRaRaRaRaRbsbhbhbhbhbhfPfVdpbhfWbhcfaRbsgXbhbhbhbhbhfRbhbhbhgObsdnbhbhbhbheBfXbhbhbBfmgObsbhbhbhbhbhbsbhbhbhbhbhbsfYbhcfbhbhdceLfZeLbsaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBfvbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaafCekekekekekekekekekekekekejaLaPaRaRaLaLaLaLaRaRaRaRaRaRaRaRdnaRaRaRaLaLaLaRaRaRaRbsgXdpbhbhbhbhbhbhgabhgOeBhmbsbhbhbhbhbhbhdpbhbhdGbheBaRbhbhbhbhbsfebhbhbBbhbhbsbsbscfbseBbsbsbscfbsbsbsbseBbsbhbhdceLeLhtbsaNaNaNaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZekekekekekekekekekekekekejaLaLaLaLaLaLaRaRaRaRaRaRaRaRaRaRaRaRaReaaRaLaLaLaRaRaRbsbhbhbjbhbnbhbhdpbhbhbhbsaWbsbhbhcwbhbhbhbibhbhbhbhbsaRaRaRaRaRbsgXbhcwbBbBbhbsbhbhbjbhbhcwbhbhbhbhbhbhbhbhbhbjbhbseLfMeLbsaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafjekekekekekekekekekekekekejaGaNaNaLaLaRaRaRaRaRaLaLaLfUaRaRaRaRaRaRaRaRaRaLaLaRaRbsbhbhbhbhbhbhbhbhdGbhbhbsaRbsbhbhbhgPbhbhgPbhbhbhbhfcaRaXaRaRaRbsbhbhgPbhbhcwcfbhbhgPbhdGbhbhbhgPbhbhfPcwbhgPbhbhbseLeLeLbsaNaNaNaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftgdftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejgeeEeWeRgfggezgeeEghejejejaGaNaNaLaRaRaRaRaRaRaLaLaLaLaLaLaLaRaRaReaaRaRaRaLaLaLbsbsbsbsbsfcaRbsbsbsbsbsbsaRbsbsbsbseBdcdcbsbsbsbsbsbsaRaRaRaRaRbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsaNaNaNaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZekeZaaaaaaaaaaaGaGaGaGaNaLaLaRaRaRaRaRaRaRaRaRaRaLaLaLaLaLaLaRaRaRaRaRfUaLaLaRaRaRaRaRaRfcbsbsaRaRaRaRaRaRaRaRheaRaRheaRaRaRaRaRaRaRaRaRaRaLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index a4bdd72dbe3..1ed7089ef1b 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -66,8 +66,8 @@
"abn" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig)
"abo" = (/obj/machinery/camera{c_tag = "Prison Recreation Room"; dir = 1; network = list("Prison","SS13"); pixel_x = 22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig)
"abp" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig)
-"abq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig)
-"abr" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig)
+"abq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig)
+"abr" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/power/treadmill,/obj/machinery/treadmill_monitor{on = 1; pixel_x = 32; redeem_immediately = 1},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig)
"abs" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/security/permabrig)
"abt" = (/obj/machinery/door/airlock{name = "Toilet"; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/permabrig)
"abu" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/security/permabrig)
@@ -690,7 +690,7 @@
"ann" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/security/main)
"ano" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Office"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/main)
"anp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Office"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/main)
-"anq" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; dir = 1; freq = 1400; location = "Security"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
+"anq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/mob/living/simple_animal/bot/floorbot{on = 0},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
"anr" = (/obj/machinery/light/small{dir = 1},/obj/structure/closet/emcloset,/obj/machinery/camera{c_tag = "Security Pod"; dir = 2; network = list("SS13")},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"ans" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/shuttle/pod_3)
"ant" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/shuttle/pod_3)
@@ -936,20 +936,20 @@
"arZ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle)
"asa" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/prisonershuttle)
"asb" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prisonershuttle)
-"asc" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/B)
-"asd" = (/obj/machinery/flasher{id = "Cell 6"; pixel_x = 0; pixel_y = -28},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B)
+"asc" = (/obj/structure/stool/bed,/obj/machinery/flasher{id = "Cell 6"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/B)
+"asd" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/power/treadmill{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/treadmill_monitor{id = "Cell 6"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B)
"ase" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/prison/cell_block/B)
"asf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"asg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"ash" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/prison/cell_block/A)
-"asi" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/A)
-"asj" = (/obj/machinery/flasher{id = "Cell 3"; pixel_x = 0; pixel_y = -28},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A)
+"asi" = (/obj/structure/stool/bed,/obj/machinery/flasher{id = "Cell 3"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/A)
+"asj" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/power/treadmill{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/treadmill_monitor{id = "Cell 3"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A)
"ask" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/security/prison/cell_block/A)
"asl" = (/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"asm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/device/radio/intercom{pixel_x = 28},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"asn" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/security/prison/cell_block/A)
-"aso" = (/obj/machinery/flasher{id = "Cell 1"; pixel_x = 0; pixel_y = -28},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
-"asp" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison/cell_block/A)
+"aso" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/power/treadmill{dir = 8},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/treadmill_monitor{id = "Cell 1"; pixel_y = -32},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
+"asp" = (/obj/structure/stool/bed,/obj/machinery/flasher{id = "Cell 1"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison/cell_block/A)
"asq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby)
"asr" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/brig)
"ass" = (/obj/machinery/computer/security{network = list("SS13","Research Outpost","Mining Outpost")},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/brig)
@@ -1029,11 +1029,11 @@
"atO" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prisonershuttle)
"atP" = (/obj/structure/closet/secure_closet/brig{id = "Cell 5"; name = "Cell 5 Locker"},/obj/machinery/camera{c_tag = "Brig Cell 5"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/B)
"atQ" = (/obj/structure/closet/secure_closet/brig{id = "Cell 4"; name = "Cell 4 Locker"},/obj/machinery/camera{c_tag = "Brig Cell 4"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/A)
-"atR" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/security/prison/cell_block/A)
-"atS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
-"atT" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
-"atU" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/prison/cell_block/A)
-"atV" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; layer = 2.4; on = 1},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
+"atR" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/security/prison/cell_block/B)
+"atS" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/security/prison/cell_block/A)
+"atT" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/prison/cell_block/B)
+"atU" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B)
+"atV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"atW" = (/obj/structure/closet/secure_closet/brig{id = "Cell 2"; name = "Cell 2 Locker"},/obj/machinery/camera{c_tag = "Brig Cell 2"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison/cell_block/A)
"atX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby)
"atY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/lobby)
@@ -1062,18 +1062,18 @@
"auv" = (/turf/simulated/floor/plating/airless,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_tool_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = -25; req_access_txt = "13"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxport)
"auw" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prisonershuttle)
"aux" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prisonershuttle)
-"auy" = (/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
+"auy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"auz" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 5"; name = "Cell 5"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"auA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"auB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"auC" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/security/prison/cell_block/A)
"auD" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/A)
-"auE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
+"auE" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/prison/cell_block/A)
"auF" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 4"; name = "Cell 4"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"auG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"auH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"auI" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 2"; name = "Cell 2"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
-"auJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A)
+"auJ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A)
"auK" = (/obj/machinery/light/small{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison/cell_block/A)
"auL" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/security/prison/cell_block/A)
"auM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby)
@@ -1083,7 +1083,7 @@
"auQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/lobby)
"auR" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/C)
"auS" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C)
-"auT" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C)
+"auT" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"auU" = (/obj/machinery/door/airlock{name = "Toilet"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C)
"auV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/window/basic,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
"auW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/window/southright,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
@@ -1113,19 +1113,19 @@
"avu" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"avv" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/prisonershuttle)
"avw" = (/obj/machinery/door_control{id = "laborexit"; name = "Exit Door"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/prisonershuttle)
-"avx" = (/obj/machinery/flasher{id = "Cell 5"; pixel_x = 0; pixel_y = -28},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B)
+"avx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"avy" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/security/prison/cell_block/B)
"avz" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/door_timer/cell_5,/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"avA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable,/obj/machinery/power/apc{name = "Prison Cell Block B APC"; pixel_y = -24},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
-"avB" = (/obj/machinery/flasher{id = "Cell 4"; pixel_x = 0; pixel_y = -28},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A)
+"avB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; layer = 2.4; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"avC" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_x = -28; pixel_y = -22},/obj/machinery/door_timer/cell_4{pixel_y = -30},/obj/item/device/radio/intercom{pixel_x = -28},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"avD" = (/obj/structure/cable,/obj/machinery/door_timer/cell_2{pixel_x = 0; pixel_y = -30},/obj/machinery/power/apc{dir = 2; name = "Prison Cell Block A APC"; pixel_x = 24; pixel_y = -24},/obj/item/device/radio/intercom{pixel_x = 28},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
-"avE" = (/obj/machinery/flasher{id = "Cell 2"; pass_flags = 0; pixel_x = 0; pixel_y = -26},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
+"avE" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/prison/cell_block/A)
"avF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/lobby)
"avG" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/lobby)
"avH" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/lobby)
"avI" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/lobby)
-"avJ" = (/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C)
+"avJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"avK" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/prison/cell_block/C)
"avL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/closet{name = "Evidence Closet"},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/security/detectives_office)
"avM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/security/detectives_office)
@@ -1255,7 +1255,7 @@
"ayg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"ayh" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"ayi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
-"ayj" = (/obj/machinery/bot/secbot/beepsky{name = "Officer Beepsky"},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
+"ayj" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 1; location = "Security"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"ayk" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"ayl" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"aym" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
@@ -2334,7 +2334,7 @@
"aST" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/sign/securearea{desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; pixel_x = -28; pixel_y = 4},/obj/structure/reagent_dispensers/beerkeg,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aSU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aSV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/door/window/southleft{tag = "icon-left (WEST)"; name = "Bar Delivery"; icon_state = "left"; dir = 8; req_access_txt = "25"; base_state = "left"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel,/area/crew_quarters/bar)
-"aSW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/plasteel,/area/maintenance/fsmaint2)
+"aSW" = (/obj/machinery/hologram/holopad,/mob/living/simple_animal/bot/secbot/beepsky{name = "Officer Beepsky"},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"aSX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aSY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aSZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
@@ -2342,7 +2342,7 @@
"aTb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/wall,/area/crew_quarters/kitchen)
"aTc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/wall,/area/crew_quarters/kitchen)
"aTd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/maintenance{name = "Kitchen Maintenance"; req_access_txt = "28"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
-"aTe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Kitchen"},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/maintenance/fsmaint2)
+"aTe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/plasteel,/area/maintenance/fsmaint2)
"aTf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aTg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aTh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
@@ -2399,7 +2399,7 @@
"aUg" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel,/area/storage/primary)
"aUh" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plasteel,/area/storage/primary)
"aUi" = (/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/storage/primary)
-"aUj" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Tool Storage"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/storage/primary)
+"aUj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery"; location = "Kitchen"},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/maintenance/fsmaint2)
"aUk" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/plasteel,/area/storage/primary)
"aUl" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/hallway/primary/port)
"aUm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/hallway/primary/port)
@@ -2441,7 +2441,7 @@
"aUW" = (/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/obj/structure/closet/chefcloset,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
"aUX" = (/obj/machinery/camera{c_tag = "Kitchen Freezer"; network = list("SS13")},/obj/machinery/chem_master/condimaster{name = "CondiMaster Neo"; pixel_x = -5},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
"aUY" = (/obj/machinery/door/window/southleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Kitchen Delivery"; req_access_txt = "28"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
-"aUZ" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Hydroponics"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/maintenance/fsmaint2)
+"aUZ" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "Tool Storage"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/storage/primary)
"aVa" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/hydroponics)
"aVb" = (/turf/simulated/wall,/area/hydroponics)
"aVc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/turf/simulated/wall,/area/hydroponics)
@@ -3885,7 +3885,7 @@
"bwK" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 4},/area/quartermaster/office)
"bwL" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central/west)
"bwM" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "bluecorner"},/area/hallway/primary/central/west)
-"bwN" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; dir = 1; freq = 1400; location = "Bridge"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/bridge/meeting_room)
+"bwN" = (/obj/machinery/navbeacon{codes_txt = "delivery"; location = "Hydroponics"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/maintenance/fsmaint2)
"bwO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "Conference Room"; req_access = null; req_access_txt = "19"},/turf/simulated/floor/wood,/area/bridge/meeting_room)
"bwP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/lattice,/turf/space,/area/space)
"bwQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/space,/area/space)
@@ -4499,7 +4499,7 @@
"bIA" = (/turf/simulated/floor/plating,/area/quartermaster/storage)
"bIB" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/quartermaster/storage)
"bIC" = (/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage)
-"bID" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #1"},/obj/machinery/bot/mulebot{beacon_freq = 1400; home_destination = "QM #1"; suffix = "#1"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
+"bID" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 1; location = "Bridge"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/bridge/meeting_room)
"bIE" = (/obj/structure/table,/obj/machinery/requests_console{department = "Cargo Bay"; name = "Cargo Requests Console"; departmentType = 2; pixel_x = -30; pixel_y = 0},/obj/machinery/camera{c_tag = "Cargo Office"; dir = 4; network = list("SS13")},/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/device/multitool,/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bIF" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bIG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/office)
@@ -4588,7 +4588,7 @@
"bKl" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/research)
"bKm" = (/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/airlock/external{id_tag = "supply_home"; name = "Cargo Docking Hatch"; req_access_txt = "31"},/turf/simulated/floor/plating,/area/quartermaster/storage)
"bKn" = (/obj/effect/decal/warning_stripes/southeastcorner,/obj/effect/decal/warning_stripes/northeastcorner,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
-"bKo" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #2"},/obj/machinery/bot/mulebot{home_destination = "QM #2"; suffix = "#2"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
+"bKo" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "QM #1"},/mob/living/simple_animal/bot/mulebot{home_destination = "QM #1"; suffix = "#1"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
"bKp" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/folder/yellow,/obj/item/device/eftpos,/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bKq" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bKr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/quartermaster/office)
@@ -4648,7 +4648,7 @@
"bLt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bLu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bLv" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Research Division Delivery"; req_access_txt = "47"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"})
-"bLw" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Research Division"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/medical/research{name = "Research Division"})
+"bLw" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "QM #2"},/mob/living/simple_animal/bot/mulebot{home_destination = "QM #2"; suffix = "#2"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
"bLx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"})
"bLy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"})
"bLz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/glass_research{name = "Research Shuttle Dock"; req_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research_shuttle_dock)
@@ -4660,7 +4660,7 @@
"bLF" = (/obj/machinery/door/airlock/external{id_tag = "s_docking_airlock"; name = "Shuttle Hatch"; req_access_txt = "31"},/turf/simulated/shuttle/floor,/area/shuttle/supply)
"bLG" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "QMLoad"},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"bLH" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
-"bLI" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #3"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
+"bLI" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "Research Division"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/medical/research{name = "Research Division"})
"bLJ" = (/obj/structure/table,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bLK" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bLL" = (/obj/machinery/light,/obj/machinery/computer/merch,/turf/simulated/floor/plasteel,/area/quartermaster/office)
@@ -4747,7 +4747,7 @@
"bNo" = (/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 8; icon_state = "loadingarea"},/area/quartermaster/storage)
"bNp" = (/obj/machinery/camera{c_tag = "Cargo Bay South"; dir = 1},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"bNq" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
-"bNr" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #4"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
+"bNr" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "QM #3"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
"bNs" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 6; pixel_y = -5},/obj/machinery/newscaster{pixel_x = -27; pixel_y = 1},/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bNt" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bNu" = (/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/computer/guestpass{pixel_y = -28},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "browncorner"},/area/quartermaster/office)
@@ -5242,7 +5242,7 @@
"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)
-"bWS" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Janitor"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/maintenance/asmaint)
+"bWS" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "QM #4"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
"bWT" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bWU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/medical/paramedic)
"bWV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 8},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/paramedic)
@@ -5651,7 +5651,7 @@
"ceI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"ceJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"ceK" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"ceL" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Medbay"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/maintenance/asmaint)
+"ceL" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "Janitor"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/maintenance/asmaint)
"ceM" = (/obj/machinery/door/window/eastleft{name = "Medical Delivery"; req_access_txt = "5"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel,/area/medical/sleeper)
"ceN" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/medical/sleeper)
"ceO" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor/plasteel,/area/medical/sleeper)
@@ -5791,7 +5791,7 @@
"chs" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/obj/structure/disposalpipe/junction{tag = "icon-pipe-j2"; icon_state = "pipe-j2"; dir = 2},/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft)
"cht" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/aft)
"chu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft)
-"chv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Engineering"},/obj/machinery/door/firedoor{dir = 8; name = "Firelock West"},/obj/machinery/door/window/westright{name = "Engineering Monitoring Station"; req_access = null; req_access_txt = "0"; req_one_access_txt = "11;24"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/engine/controlroom)
+"chv" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 4; location = "Medbay"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/maintenance/asmaint)
"chw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/window/northleft{dir = 4; icon_state = "left"; name = "Engineering Monitoring Station"; req_access_txt = "0"; req_one_access_txt = "11;24"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/engine/controlroom)
"chx" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/engine/controlroom)
"chy" = (/turf/simulated/floor/plasteel,/area/engine/controlroom)
@@ -6096,7 +6096,7 @@
"cnl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/light{dir = 1; in_use = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cnm" = (/obj/structure/rack,/obj/item/clothing/suit/radiation,/obj/item/clothing/head/radiation,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/medical/biostorage)
"cnn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/medical/biostorage)
-"cno" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/device/antibody_scanner,/turf/simulated/floor/plasteel{dir = 4; icon_state = "blue"},/area/medical/biostorage)
+"cno" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{dir = 4; icon_state = "blue"},/area/medical/biostorage)
"cnp" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cnq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cnr" = (/obj/structure/rack,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -6977,8 +6977,8 @@
"cEi" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 4; icon_state = "blue"},/area/medical/patients_rooms)
"cEj" = (/turf/simulated/wall/r_wall,/area/medical/patient_b)
"cEk" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology)
-"cEl" = (/obj/structure/table,/obj/item/weapon/storage/box/monkeycubes,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
-"cEm" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/stack/sheet/mineral/plasma{amount = 8; layer = 2.9},/obj/machinery/media/receiver/boombox,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
+"cEl" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
+"cEm" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/stack/sheet/mineral/plasma{pixel_x = -2; pixel_y = -2},/obj/item/stack/sheet/mineral/plasma,/obj/item/stack/sheet/mineral/plasma{pixel_x = 2; pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cEn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cEo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cEp" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
@@ -7018,13 +7018,13 @@
"cEX" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"cEY" = (/obj/structure/stool/bed,/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitered"},/area/medical/patient_b)
"cEZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/wall/r_wall,/area/medical/virology)
-"cFa" = (/obj/machinery/atmospherics/binary/valve{dir = 4},/obj/effect/decal/warning_stripes/northwest,/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"cFa" = (/obj/machinery/smartfridge/secure/chemistry/virology,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/medical/virology)
"cFb" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/equipmentstorage)
"cFc" = (/obj/machinery/atmospherics/unary/tank/air{dir = 8},/obj/effect/decal/warning_stripes/northeast,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cFd" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"cFe" = (/obj/machinery/atmospherics/binary/valve{dir = 4},/obj/effect/decal/warning_stripes/south,/obj/effect/decal/warning_stripes/northwestcorner,/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"cFe" = (/obj/machinery/computer/pandemic,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/medical/virology)
"cFf" = (/turf/simulated/wall,/area/medical/virology)
-"cFg" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/obj/item/weapon/wrench,/obj/effect/decal/warning_stripes/northwestsouth,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"cFg" = (/obj/structure/table/glass,/obj/machinery/requests_console{department = "Virology"; departmentType = 3; name = "Virology Requests Console"; pixel_x = -30},/obj/item/weapon/storage/belt/medical,/obj/item/clothing/gloves/color/latex,/obj/item/device/healthanalyzer{pixel_x = 2; pixel_y = 2},/obj/item/clothing/glasses/hud/health,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/medical/virology)
"cFh" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air,/obj/effect/decal/warning_stripes/southeast,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cFi" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cFj" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology)
@@ -7098,7 +7098,7 @@
"cGz" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cGA" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/engine,/area/toxins/xenobiology)
"cGB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
-"cGC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
+"cGC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/computer/camera_advanced/xenobio,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cGD" = (/obj/machinery/camera{c_tag = "Xenobiology Module East"; dir = 8; network = list("Research","SS13"); pixel_y = -22},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cGE" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/starboard)
"cGF" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/port)
@@ -7260,14 +7260,14 @@
"cJF" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos)
"cJG" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller{valve_open = 0; volume = 1e+006},/turf/simulated/floor/engine/n20,/area/atmos)
"cJH" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos)
-"cJI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
-"cJJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
+"cJI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/computer/camera_advanced/xenobio,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
+"cJJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/stool/bed/chair/comfy/blue{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cJK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cJL" = (/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher{pixel_x = 4; pixel_y = 4},/obj/structure/table/glass,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/sign/deathsposal{pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cJM" = (/obj/structure/rack,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cJN" = (/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk0"; icon_state = "catwalk0"},/area/space)
"cJO" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"cJP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
+"cJP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/structure/stool/bed/chair/comfy/blue{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cJQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitegreencorner"},/area/medical/virology)
"cJR" = (/obj/structure/table,/obj/item/device/healthanalyzer,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cJS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
@@ -7463,8 +7463,8 @@
"cNA" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/engine/engineering)
"cNB" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_engineering{name = "Engine Room"; req_access_txt = "10"; req_one_access_txt = null},/turf/simulated/floor/plating,/area/engine/engineering)
"cNC" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
-"cND" = (/obj/machinery/smartfridge/secure/virology,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/medical/virology)
-"cNE" = (/obj/machinery/disease2/isolator,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/medical/virology)
+"cND" = (/obj/structure/table,/obj/item/weapon/hand_labeler{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/medical/virology)
+"cNE" = (/obj/structure/table/glass,/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/medical/virology)
"cNF" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/smes/engineering,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/engine/engineering)
"cNG" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/wall/r_wall,/area/engine/engineering)
"cNH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/engine/engineering)
@@ -7505,7 +7505,7 @@
"cOq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel,/area/engine/engineering)
"cOr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/engine/engineering)
"cOs" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/engine/engineering)
-"cOt" = (/obj/structure/table/glass,/obj/machinery/requests_console{department = "Virology"; departmentType = 3; name = "Virology Requests Console"; pixel_x = -30},/obj/item/weapon/storage/belt/medical,/obj/item/clothing/gloves/color/latex,/obj/item/device/healthanalyzer{pixel_x = 2; pixel_y = 2},/obj/item/device/antibody_scanner,/obj/item/clothing/glasses/hud/health,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/medical/virology)
+"cOt" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/red,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/medical/virology)
"cOu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/engine/engineering)
"cOv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/engine/engineering)
"cOw" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101; on = 1; pressure_checks = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/engine/engineering)
@@ -7513,7 +7513,7 @@
"cOy" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/camera{c_tag = "Engineering Particle Accelerator"; dir = 2; pixel_x = 23; network = list("Singularity","SS13")},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/engine/engineering)
"cOz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/engine/engineering)
"cOA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/turf/simulated/wall/r_wall,/area/engine/engineering)
-"cOB" = (/obj/machinery/computer/centrifuge,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/medical/virology)
+"cOB" = (/obj/structure/table/glass,/obj/structure/reagent_dispensers/virusfood{pixel_x = -30},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper/precision,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/medical/virology)
"cOC" = (/turf/simulated/floor/plasteel{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/engine/engineering)
"cOD" = (/obj/machinery/camera{c_tag = "Engineering SMES"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/engine/engineering)
"cOE" = (/obj/machinery/light/small{dir = 1},/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/engine/engineering)
@@ -7588,7 +7588,7 @@
"cPV" = (/obj/structure/stool/bed,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreencorner"},/area/medical/virology)
"cPW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/engine/engineering)
"cPX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/engine/engineering)
-"cPY" = (/obj/structure/table/glass,/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/medical/virology)
+"cPY" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/sign/deathsposal{pixel_y = -32},/turf/simulated/floor/plasteel{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/medical/virology)
"cPZ" = (/obj/machinery/atmospherics/unary/portables_connector,/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/engine/engineering)
"cQa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering)
"cQb" = (/obj/machinery/space_heater,/turf/simulated/floor/plasteel,/area/atmos)
@@ -7596,7 +7596,7 @@
"cQd" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/plasteel,/area/atmos)
"cQe" = (/obj/machinery/atmospherics/unary/heat_reservoir/heater{dir = 8; icon_state = "freezer_0"; tag = ""},/turf/simulated/floor/plasteel,/area/atmos)
"cQf" = (/obj/machinery/atmospherics/pipe/simple/visible/green{level = 2},/obj/machinery/atmospherics/binary/pump{dir = 8; name = "CO2 to Pure"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
-"cQg" = (/obj/machinery/disease2/incubator{name = "Pathogenic incubator"},/turf/simulated/floor/plasteel{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/medical/virology)
+"cQg" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"cQh" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/space,/area/space)
"cQi" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "co2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
"cQj" = (/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
@@ -7917,17 +7917,17 @@
"cWm" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
"cWn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
"cWo" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
-"cWp" = (/obj/machinery/bot/secbot/pingsky,/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
+"cWp" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 4; location = "Engineering"},/obj/machinery/door/firedoor{dir = 8; name = "Firelock West"},/obj/machinery/door/window/westright{name = "Engineering Monitoring Station"; req_access = null; req_access_txt = "0"; req_one_access_txt = "11;24;34"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/engine/controlroom)
"cWq" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
"cWr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
"cWs" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "AI Satellite Antechamber APC"; pixel_x = 25},/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
"cWt" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light/small{dir = 4},/obj/machinery/camera/motion{c_tag = "Mini Satellite Exterior North-West"; dir = 8; network = list("SS13","MiniSat")},/turf/simulated/floor/plating,/area/aisat)
"cWu" = (/turf/simulated/wall,/area/aisat)
-"cWv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/bot/floorbot{on = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/turret_protected/aisat_interior)
+"cWv" = (/mob/living/simple_animal/bot/secbot/pingsky,/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
"cWw" = (/obj/machinery/ai_status_display{pixel_y = -32},/obj/machinery/porta_turret{dir = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
"cWx" = (/obj/machinery/camera/motion{c_tag = "Mini Satellite Antechamber"; dir = 1; network = list("SS13","MiniSat")},/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
"cWy" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/obj/machinery/porta_turret{dir = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
-"cWz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/bot/cleanbot{on = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/turret_protected/aisat_interior)
+"cWz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/mob/living/simple_animal/bot/floorbot{on = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/turret_protected/aisat_interior)
"cWA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light/small{dir = 8},/obj/machinery/camera/motion{c_tag = "Mini Satellite Exterior North-East"; dir = 4; network = list("SS13","MiniSat")},/turf/simulated/floor/plating,/area/aisat)
"cWB" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai)
"cWC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/turret_protected/ai)
@@ -8173,7 +8173,7 @@
"dbi" = (/obj/machinery/door/airlock/external{frequency = 1450; icon_state = "door_locked"; id_tag = "sci_outer"; locked = 1; name = "External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"dbj" = (/turf/space,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk0"; icon_state = "catwalk0"},/area/space)
"dbk" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreencorner"},/area/medical/virology)
-"dbl" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/wall/r_wall,/area/medical/virology)
+"dbl" = (/obj/machinery/camera{c_tag = "Virology Module South"; dir = 1; network = list("SS13")},/obj/structure/closet/l3closet,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology)
"dbm" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "medprivacyb"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/patient_b)
"dbn" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitered"},/area/medical/patient_b)
"dbo" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/patient_b)
@@ -8236,8 +8236,8 @@
"dct" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1},/turf/simulated/floor/plating/airless,/area/maintenance/asmaint)
"dcu" = (/obj/machinery/light{dir = 4},/obj/structure/dresser,/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/civilian/barber)
"dcv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/warning_stripes/southwestcorner,/turf/simulated/floor/plasteel,/area/engine/engineering)
-"dcw" = (/obj/structure/table/glass,/obj/structure/reagent_dispensers/virusfood{pixel_x = -30},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper/precision,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/storage/fancy/vials,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/medical/virology)
-"dcx" = (/obj/structure/table,/obj/item/weapon/storage/lockbox/vials,/obj/item/weapon/hand_labeler{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/medical/virology)
+"dcw" = (/obj/structure/disposalpipe/segment,/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology)
+"dcx" = (/obj/effect/spawner/lootdrop/maintenance,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/medical/virology)
"dcy" = (/obj/item/device/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreencorner"},/area/medical/virology)
"dcz" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitegreencorner"},/area/medical/virology)
"dcA" = (/obj/item/device/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreencorner"},/area/medical/virology)
@@ -8246,10 +8246,10 @@
"dcD" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plating,/area/engine/engineering)
"dcE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/engine/engineering)
"dcF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/engine/engineering)
-"dcG" = (/obj/machinery/computer/diseasesplicer,/obj/machinery/camera{c_tag = "Virology Module South"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology)
-"dcH" = (/obj/machinery/computer/med_data/laptop,/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (SOUTHWEST)"; icon_state = "whitegreen"; dir = 10},/area/medical/virology)
-"dcI" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/sign/deathsposal{pixel_y = -32},/turf/simulated/floor/plasteel{tag = "icon-whitegreen (SOUTHEAST)"; icon_state = "whitegreen"; dir = 6},/area/medical/virology)
-"dcJ" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/disease2/diseaseanalyser,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology)
+"dcG" = (/obj/machinery/atmospherics/binary/valve{dir = 4},/obj/effect/decal/warning_stripes/north,/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"dcH" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/effect/decal/warning_stripes/northwest,/turf/simulated/floor/plating,/area/medical/virology)
+"dcI" = (/obj/machinery/atmospherics/binary/valve{dir = 4},/obj/effect/decal/warning_stripes/south,/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"dcJ" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/obj/item/weapon/wrench,/obj/machinery/light/small{dir = 8},/obj/effect/decal/warning_stripes/southwest,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"dcK" = (/obj/structure/closet/radiation,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/effect/decal/warning_stripes/southeastcorner,/turf/simulated/floor/plasteel,/area/engine/engineering)
"dcL" = (/obj/structure/closet/radiation,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/light/small{dir = 8},/obj/effect/decal/warning_stripes/southwestcorner,/turf/simulated/floor/plasteel{dir = 9; icon_state = "yellow"},/area/engine/engineering)
"dcM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/plasteel,/area/engine/engineering)
@@ -8472,7 +8472,7 @@
"dgV" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox)
"dgW" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
"dgX" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
-"dgY" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/machinery/bot/floorbot{on = 0},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
+"dgY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/mob/living/simple_animal/bot/cleanbot{on = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/turret_protected/aisat_interior)
"dgZ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weed_extract,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
"dha" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/broken_device,/obj/item/robot_parts/chest,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
"dhb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
@@ -8719,6 +8719,18 @@
"dlI" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 8},/area/hydroponics)
"dlJ" = (/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hydroponics)
"dlK" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor/plasteel,/area/hydroponics)
+"dlL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
+"dlM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A)
+"dlN" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C)
+"dlO" = (/obj/machinery/door/airlock/engineering{name = "Electrical Maintenance"; req_access_txt = "0"; req_one_access_txt = "1;11"},/turf/simulated/floor/plating,/area/security/prisonershuttle)
+"dlP" = (/obj/structure/stool/bed,/obj/machinery/flasher{id = "Cell 5"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/B)
+"dlQ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/power/treadmill{dir = 4},/obj/structure/cable/yellow,/obj/machinery/treadmill_monitor{id = "Cell 5"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B)
+"dlR" = (/obj/structure/stool/bed,/obj/machinery/flasher{id = "Cell 4"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/A)
+"dlS" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/power/treadmill{dir = 4},/obj/structure/cable/yellow,/obj/machinery/treadmill_monitor{id = "Cell 4"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A)
+"dlT" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/power/treadmill{dir = 8},/obj/structure/cable/yellow,/obj/machinery/treadmill_monitor{id = "Cell 2"; pixel_y = -32},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
+"dlU" = (/obj/structure/stool/bed,/obj/machinery/flasher{id = "Cell 2"; pass_flags = 0; pixel_x = 0; pixel_y = -26},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison/cell_block/A)
+"dlV" = (/obj/machinery/power/treadmill{dir = 4},/obj/machinery/treadmill_monitor{on = 1; pixel_y = -32; redeem_immediately = 1},/obj/structure/cable/yellow,/turf/simulated/floor/plasteel,/area/security/prison/cell_block/C)
+"dlW" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
(1,1,1) = {"
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
@@ -8781,7 +8793,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiSdiUdiTbFlbikbFldiVdiVdiVbFlbikbFldiWdiYdiXbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalabXabYabZacaacbaccacdaceacfacfaalbikbikbikbikbikabKabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwbikbikdgOdgGdgydgPdgQdgydgydgGdgRbikbikdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiVdiVdiVbFlbikcVGdiZdjbdjadelbikbFldiVdiVdiVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgachaciacjackaclaalacmbikbikbikbikbikabKabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwdgwdgwdgwdgwdgwdgwdgSdgwdgwdgwdgwdgwdgwdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacnacoacpacqacracsacdaalaalaalaalbikbikbikbikbikbikbikabKabLabLabKactactactacuacvactactactabKabKabKabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgHdgNdgTdgTdgTdgTdgTdgTdgmdgUdgmdgTdgTdgTdgTdgTdgTdgNdgJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacwacxacyaczacAacBacCaalacDacEacEacEacEacEbikbikbikbikbikabKacFacGactacHacIacJacKacLacMactabLabLabLabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgVdgXdgWdgZdgYdhadgmdgSdgwdgSdgwdgSdgmdhcdhbdhedhddgXdhfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacwacxacyaczacAacBacCaalacDacEacEacEacEacEbikbikbikbikbikabKacFacGactacHacIacJacKacLacMactabLabLabLabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgVdgXdgWdgZanqdhadgmdgSdgwdgSdgwdgSdgmdhcdhbdhedhddgXdhfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikacgacNacOacPacQacRacSacCaalacEacEacUacTacVacEacEacEbikbikbikbikabKacGactacWacXacYacXacXacZactadaadaadaadaadaadaabLadbbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgOdgXdgydgydgydhgdgmdgydgydgydgydgydgmdgydgydhhdgydgXdgRbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgadcaddacEacEadeadgadfadiadhacEacEbikbikbikbikbikabKactadjadkadladmadnadoactadpadqadradsadtaduadvbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhjdhidhldhkdhmdgmdhndgydgydgydhodgmdhqdhpdhsdhrdhjdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikadwadxadyadzadAadwadBadCacEadEadDadGadFadIadHadJacEbikbikbikbikbikbikactadKadLadMadNacXadOactadPadtadtadtadtaduadvbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhtdhtdgwdgwdgwdgmdhudgydgydgydhvdgmdgwdgwdgwdhtdhtdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
@@ -8800,20 +8812,20 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikaabbikaabbikbikajQbikbikaabbikaabbikbikacGbikbikbikbikbikbikbikbikbikbikbikbikaeAakFafyakGakHakIakJakKakLajtakMakNakOakOakPakQakRajuakSakTakUakVakiakWakXakYakZalaalbalcaldaleakqalfalgalhalialjalkallalmaiCaiCaiCalnajOaieaieaieaieaieaieaieaieahAaabaloaabaabaabaloaabbikbikaabaloaabaabbikbikaloaabbikaabaabajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabalpalpalpalpalpbikalqbikalpalpalpalpalpaabacGbikbikbikbikbikbikbikbikbikbikbikbikaeAalralsakGafyaltakJalualvajtalwalxalyalzakQakQakRajualAalBalCalDalEajBalFalGaklalHalIajFajXalKalLalLalMajdalNalOalPalQaiCaiFaiGaiCalRahAahAahAahAahAahAahAahAahAahAaabaloaabbikajkajlajmbikbikajkajlajmbikbikajkajlajmaabaabbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamaalZaowanxambbikbikbikamcaeAaeAaeAamdamdameamfamgamdajuamhamiamjamkamlammamnajuamoampamqakVamrajGamsamtaXNamvamwajGamxamyamzamAamBamCamDamEamFamGaiCajhamHamIamJahAamKamKamKamKamKbikbikbikbikaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikamOamNamQamPamOamRamSamSamTamUamVamWamXamYamZanaanbancajuajuandaneajuajuajuajuajuanfanganhanianfajGajBajCanjajEajFajGankanlanmannahUahUahUahUannanoanpanmahUahAanqahAanrantansansanubikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikamOamNamQamPamOamRamSamSamTamUamVamWamXamYamZanaanbancajuajuandaneajuajuajuajuajuanfanganhanianfajGajBajCanjajEajFajGankanlanmannahUahUahUahUannanoanpanmahUahAayjahAanrantansansanubikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikaabbikbikbikaEEanwanzanyanBanAanDanCanAanGanGanHanIanJanKanLanManNanOanPanQanRanSanTanSanSanUanVanWanXanYanSanZaoaaobaocaodaoeaofaogaohanSaoiaojaokaolaomaonaooaopaoqaoraosaplaotaovaEHaouaoyaoxbikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabalpalpalpalpalpbikamMbikalpalpalpalpalpaabacGbikbikbikamOanEaoAanFamOamRamSamSamSaoBaoHaoIaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoWaoZapaaoTapbapcapdaoTaoTapdaoXapcapeaoTaoTapbapcaoVapfapgaphapiapjapkaplapmapnaovaozansansapobikaacapqaacbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikaabaabajkajPajmaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikajjbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamOaoCaoCaoDamObikbikbikapwapwapxapyapzapAapAapAapBapBapBapBapCapDapEapEapEapFapGapHapFapEapEapEapIapJapKapLapMapKapNapJapOapOapOapPapQapOapRapSapTapUapVapWapXapmapnapYapYamKapZapZapZamKaqaamKaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmaabaabbikaabaiIaabbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGaqbamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikaEEaoEaoCaoFamOamRamSamSamSaqgaqhaqiaqjaqkaqlaqmapBaqnaqoaqpaqqaqraqsaqtaquaqvaqwaqxaqyaqzaqAaqsaqBaqCaqDaqEaqFaqGaqHaqCapOaqIaqJaqKaqLapOaqMaqNaqOaqPaqQaqRapXapmaqSaqTaqUaqVaqWaqWaqXamKaqYamKaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikaabaloaabbikbikaqZbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikacGbikbikbikamOaoGaoCaoCaptanAapuanCanAapvanLarharianGanGarjapBarkarlarmarnaroarparqarrarsartaruarvarrarwarxaryarzarAarBarCarDarEarFarGarHarIarJarKapOarLarMarMarNarMarOapXapmaovaovaovaovarPaovarQarRarSamKakBarTakEbikbikaiIaabaabaabaabaiIaabaabaabaabaiIaabaabaabaabarUarVakEaabbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGaabalpalpalpalpalpbikamMbikalpalpalpalpalpaabacGbikbikbikamOaqcaqcaqcamOamRamSamSamSarXarYaoMarZasaanGasbapBascasdaseasfasgashasiasjaskaslasmasnasoaspashasqarFasrassastasrarEasuapOarGaswasxasyapOaszasAarMarNarMasBapXasCasDasEasFasEasGasHamKamKapnamKaloasIasJakCakCarTakCakCakCakCarTakCakCakCakCarTakCakCakCasKasLasIaloaabbikagQaabbikbikbikbikbikbikbikbikbikbikaabbikaabbikasMasMasNasNasNasNasNasNasMasMaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikaqeaqdaqdaqdaqfbikbikbikapwapwapwapwapwasSanGasTasUapBapBapBasVasWapEapEapEapEasXasYapEapEapEasZataatbatcatdateatfatgathapOatiatjatkatlatmatnatoatpatqarMatrapXatsattatuatvatwatxatyatzatAatBamKatCarTatDaabaabbikaabbikbikbikbikbikbikbikbikaabaabaabaabaabatEatFatDaabaabaabaabaabbikbikbikbikbikbikbikbikbikaabbikaabasMasMatGatHatIatJatKatLatMatIasMasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikaabatNamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapwatOanGasTasUatPaqoaqpaqqaqraqsatQaquatRatSatTatUatVatWaqsatXatYatZauaaubaubaucaudapOaueaufaugauhapOauiaujaukarNarMaulapXatsarPattattattaumaovaunauoaupamKbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikaabaabaabaabauqaabaabbikbikaabaabaabbikbikbikbikbikbikbikbikasMasMasMasMauratJausatJausautatJatJatJauuasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGbikbikaabbikaabbikbikauvbikbikaabbikaabbikbikacGbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikapwauwanGauxasUarkauyauzauAauBauCauDauEauFauGauHauIauJauKauLauMauNauNauOauNauNauPauQauRauSauTapOauUapOauVauWauXauYauZavaapXatsavbavcavcavcavdaveavfavgavhamKbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabbikbikbikaabaabaabaviaabaabbikbikaabbikaabaabbikbikbikbikbikbikbikasMavjavkavlavmavnavoavpatJatJavqavratJavsasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGacGacGaabaabaabaabavtavuavtaabaabaabaabacGacGacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapwavvanGavwasUascavxavyavzavAashasiavBashavCavDashavEaspashavFavGavHavGavGavHavGavIapOatiavJapOavKapOavLavMavNavOavPavQavRavSavTavUavUavUavVavWavXavYavYavYbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikaabaabavZawaavZaabaabbikaabbikbikaabaabbikbikbikbikbikbikasMawbawcawdaweawfawgatJatJatJawhawiatJawjasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikaqeaqdaqdaqdaqfbikbikbikapwapwapwapwapwasSanGasTasUapBatRapBasVasWapEapEatSapEasXasYapEatSapEasZataatbatcatdateatfatgathapOatiatjatkatlatmatnatoatpatqarMatrapXatsattatuatvatwatxatyatzatAatBamKatCarTatDaabaabbikaabbikbikbikbikbikbikbikbikaabaabaabaabaabatEatFatDaabaabaabaabaabbikbikbikbikbikbikbikbikbikaabbikaabasMasMatGatHatIatJatKatLatMatIasMasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikaabatNamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapwatOanGasTasUatPatUatTauyatVaqsatQauJauEavxauTavEavBatWaqsatXatYatZauaaubaubaucaudapOaueaufaugauhapOauiaujaukarNarMaulapXatsarPattattattaumaovaunauoaupamKbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikaabaabaabaabauqaabaabbikbikaabaabaabbikbikbikbikbikbikbikbikasMasMasMasMauratJausatJausautatJatJatJauuasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGbikbikaabbikaabbikbikauvbikbikaabbikaabbikbikacGbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikapwauwanGauxasUarkavJauzauAauBauCauDdlLauFauGauHauIdlMauKauLauMauNauNauOauNauNauPauQauRauSdlNapOauUapOauVauWauXauYauZavaapXatsavbavcavcavcavdaveavfavgavhamKbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabbikbikbikaabaabaabaviaabaabbikbikaabbikaabaabbikbikbikbikbikbikbikasMavjavkavlavmavnavoavpatJatJavqavratJavsasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikacGacGacGaabaabaabaabavtavuavtaabaabaabaabacGacGacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdlOavvanGavwasUdlPdlQavyavzavAashdlRdlSashavCavDashdlTdlUashavFavGavHavGavGavHavGavIapOatidlVapOavKapOavLavMavNavOavPavQavRavSavTavUavUavUavVavWavXavYavYavYbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikaabaabavZawaavZaabaabbikaabbikbikaabaabbikbikbikbikbikbikasMawbawcawdaweawfawgatJatJatJawhawiatJawjasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikaahbikbikbikbikaabbikaabbikbikaabbikavtawkawlbikbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikawmawmawmawmawmawmapwapwawnapwasUasUasUawoawpawqawrawrawsawrawsawrawrawtasZasZasvawvawwawuawvawwawuawyawzawzawzawzawzapOawAawBawCawCawDawCawEawFavUawGawHawIavVawJawKawLawMavWbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikaabbikavZawNavZbikaabbikaabbikbikbikaabaabbikbikbikbikbikasMawOawPavlawQawRawSawTatJawUawVawWawXasMawYaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsapsapsbikbikbikbikbikbikaabbikaabbikbikaabavtavtawZaxaavtbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikawmaxbaxcaxdaxeaxfaxgaxhaxiaxhaxjaxhaxhaxkaxlaxlaxlaxlaxlaxmaxnaxoaxlaxlaxlaxlaxpaxlaxlaxlaxlaxqaxraxsaxtaxuaxvaxwaxxapWaxyaxzaxAaxBaxCaxDaxEaxFavUaxGaxHaxIavVaxKaxLaxJaAZavWbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikaabavZavZaxMavZavZaabbikaabbikbikbikbikaabaabbikbikbikbikasMaxNaxOavlasMavlavlaxPaxQasMasMasMasMasMasMaabaabbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsbikbikbikbikbikbikaabaabbikaabbikbikaabaxRaxSaxTaxUaxRaxVaxVbikbikaabbikbikbikbikbikbikbikbikbikbikawmaxWaxXaxYaxZayaaybaycaydayeayfaxqaxqaygaxqaxqaxqaxqaxqayhaxqaxqaxqaxqaxqaxqayiaxqaxqaxqaxqayjaxqaykaxqaylaxqaymaynapWayoaypayqayraysaytaxEayuavUayvaywayxayyayzayAayBawMavWbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikaabayCayDayEayFayCaabbikaabbikbikaabbikbikaabaabbikbikayGasMavlasMavlayHayIayHayJayHayHayHayKayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsapsapsbikbikbikbikbikbikaabaabbikaabbikbikaabaxRaxSaxTaxUaxRaxVaxVbikbikaabbikbikbikbikbikbikbikbikbikbikawmaxWaxXaxYaxZayaaybaycaydayeayfaxqaxqaygaxqaxqaxqaxqaxqayhaxqaxqaxqaxqaxqaxqayiaxqaxqaxqaxqaSWaxqaykaxqaylaxqaymaynapWayoaypayqayraysaytaxEayuavUayvaywayxayyayzayAayBawMavWbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikaabayCayDayEayFayCaabbikaabbikbikaabbikbikaabaabbikbikayGasMavlasMavlayHayIayHayJayHayHayHayKayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaxVaxVaxVaxVaxVaabaabaxRayLayMayNaxRayOaxVbikbikaabbikbikbikbikbikbikbikbikbikbikawmayPayQayRaySayTawmayUayVayWayXayYayZazaazbazcayXayXayXazdayXayXayXayXayXayXazeazfazgazgazgazhaziazjaziazkazlazmaznapWazoazoazoazoazoazoaxEaxFavUazpaxHazqavVcscazraxJcvYavWbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikbikaabayCazsaztazuayCaabbikaabbikbikaabbikbikayGazvayGazvayGayKayHayHayHayHayHayHayHayHayHazwazxayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikazyazzazybikbikbikaxVaxVaxVaxVazAazBazCaxVbikbikaxRazDazEazFazGazHaxVbikbikaabbikbikbikbikbikbikbikbikbikbikawmawmawmawmawmawmawmazIazIazJazKazKazLazMazNazOazPazPazOazQazOazRazRazRazRazRazRazSazRazRazTazUazVazWazIazXazIazYazIazIaqVazZaovaovaovaovaAaaxFavUaAbaxHaAcavVaAdayAayBawMavWbikbikbikbikbikbikbikbikaabaabbikbikbikbikazyaAeazybikaabayCaAfaAgaAhayCaAiaAiaAiaAiaAiazvazvazvayGaAjayHazwazxayJayHayJayJayJayGaAkayGayGayGayGayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikaAlaAmaAlbikbikaabaxVaAnaAoaApazHaAqazHaxVaAlaAlaxRaxRaAraAsazGazHaxVaxVaAlaAlaAlaxVaxVbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikazJaAtaAuaAvazMaAwazOaAxaAyaAzaAAaABaACaADaAEaAFaAGaAHaAIaAJaAKaALaxqaxraAMaANaAOaAPaAQaAPaAPaAPaARaAPaAPaAPaAPaASaATaAUaAVaAWaAXaAYcNsaBaaUadcuavWaabaBbaBcaBcaBcaBcaBcaBdaabaabbikbikbikbikazvaBeazvbikaAiayCayCaBfaBgayCaBhayHayHayHayJaBiayHaBjayGayHayHayHaBkayJayHayGaBlaBmayGayHaBnayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
@@ -8831,8 +8843,8 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNhaNiaNjaNiaNiaNkaNlaNiaNiaNjaNmaNnaCuaKBaNoaMoaNpaNqaNraNsaNtaNuaKHaLHaMqaLJaNvaMqaMqaLHaKHaNwaNxaNyaNzaNAaNBaNCaNDaNEaNFaMvaabaLRaNGaNHaNIaNJaNKaLRaabaJGaJLaJMaNLaNMaNNaNOaNPaJMaGvaIKaJNaJOaNQaNRaLXaJOaNSaJOaLXaNTaNUaJOaJYaIKaJZaxqaNVazIaKbaEeaEfaCZaDaaDbaNWaNXaMcaNYaMQaMQaMQaNZaOaaObaOcaMeaOdaOeaOfaOgaOhazxbikbikbikbikbikbikbikbikbikayGaOiaOjaOkaOlaOmayGaEtayHaHVaDxayHayGbikayGayHayHayHayHaDxaOnaOoaOpaOpaOpaOpaOqaOraOsaOtaOuaOvaOuaOwaOxaOxaOyaOzaOAaOBaOCaOCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNhaNmaNiaODaOEaOFaOGaOHaOIaOJaOKaOLaOMaONaOOaKzaKBaOPaMoaOQaORaOSaOTaOSaOUaKHaOVaMqaOWaOXaOYaOXaOZaPaaPbaPcaPdaPdaPdaPdaPdaPdaPeaPfaMvbikaLRaPgaNHaPhaNJaPiaLRbikaJGaJLaJMaPjaPkaPlaPmaPnaJMaGvaIKaPoaPoaKPaPpaMHaKSaPqaKSaMHaPraKWaPsaPsaIKaPtazUaPuazIaKbaEeaPvaPvaPvaPvaPwaPxaPyaPzaPAaPBaPBaPBaPCaPBaPDaPEaPFaPGaPHaPEaPIaPJazxayGayGayGayGayGayGayGayGayGayGayGayGaBMayGayGayGayGayHaDxaOiazvaabazvayHaPLaPMaPNaPOaPPaPQaPRaPRaPRaPRaPSaPTaPUaPVaPWaPXaPWaPYaPWaPWaPZaQaaQbaQbaQcaQdaQeaQeaQeaQeaQeaQeaQeaQeaQeabLadbbikbikbikbikbikbikbikaaabdBaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaONaQgaQhaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaQmaMoaQnaQoaQpaQqaQraQsaKHaQtaMqaQuaQvaQwaQxaQyaKHaQzaPdaPdaPdaPdaPdaPdaPdaPeaQAaMvaabaLRaQBaQCaQDaQEaQFaLRaabaJGaJLaJMaQGaQHaQIaQJaQKaJMaGvaIKaIKaIKaIKaQLaLXaJOaLYaJOaLXaQMaIKaIKaIKaIKaQNaQOaQPazIaMKaQQaQRaQRaQRaQSaQTaQUaQVaQWaQXaQVaQYaQZaRaaQVaRbaRcaRdaReaRfaMeaRgaRhaRiaRjaRjaRhaRkaRlaRlaRlaRlaRlaRmaRnaRlaRoaRpaRqaRraRsaRvaRuaTkaRwaRxaRwaRyaRzayHayGaRAaRBaRCaRDaREaRFaRGaRHaRIaRJaRIaRKaRLaRMaRNaROaRPaRQaRRaRSaRTaRUaQdaRVaRWaRXaRYaRZaSaaSbaScaSdaprbikbikbikbikbikbikbikaaabfmbifbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSfaOFaOFaNjaOMaQjaOFaQjaSgaQjaOFaQjaOMaQkaQlaKzaKBaShaMoaMoaSiaSjaSkaSjaMoaKHaKHaKHaKHaSlaSmaSnaSoaKHaSpaSqaSraPdaPdaSsaPdaStaSuaSvaMvbikaLRaLRaSwaSxaSwaLRaLRbikaJGaJLaJMaSyaSzaSAaQJaSBaJMaGvaIKaJNaJOaSCaNRaLXaJOaLYaJOaLXaNTaSDaIKaIKaIKaSEaSFaSGaSHaSIaSJamKamKaSKaSLaSMaSNaMcaSOaMQaMcaSPaMcaSQaMcaSRaSSaSTaSUaSVaSWaSXaSYaSZaTaaTbaTcaTdaTbaTbaTeaTbaSYaTfaSYaOvaTgaSYaThaTiaTjaTmaTlaToaTnaTqaTpaWIaTraOuaTsaTtaTuaTvaTwaTxaTyaTzaRHaTAaTBaRIaTCaTDaTEaTFaROaTGaRQaRRaRSaTHaTIaQdaTJaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikaaabfmbigbijbihbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaONaTMaTNaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaTOaTPaTQaTRaTSaTSaJraTTaTUaTVaTWaTXaTYaTZaMqcoCaKHaUbaUcaUdaUeaUfaUgaUhaUiaUjaUkaMvbikaabbikaUlaUmaUlbikaabbikaCuaJLaJMaUnaUoaUpaUqaUraJMaGvaIKaUsaUtaKPaUuaUvaKSaUwaKSaUxaUyaUzaIKaUAaUBaUCaUDaUEaUFaUGaUHbikbikaSKaUIaUJaUKaMcaULaUMaMQaMQaUNaMQaMQaMQaUOaMeaUPaMeaUQaURaMeaUSaMeaUTaUUaUVaUWaUXaUYaUTaUZaVaaVbaVcaVbaVbaVbaVbaVdaWLaVbaVeaYEaVfaVgaVbaVhayHaRDaViaTvaVjaVkaVlaVmaVnaVoaVpaVqaRIaVraVsaVtaVuaVvaTGaRQaRRaRSaRTaVwaQdaVxaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikbdBblqbjMbmKbjMbqQbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSfaOFaOFaNjaOMaQjaOFaQjaSgaQjaOFaQjaOMaQkaQlaKzaKBaShaMoaMoaSiaSjaSkaSjaMoaKHaKHaKHaKHaSlaSmaSnaSoaKHaSpaSqaSraPdaPdaSsaPdaStaSuaSvaMvbikaLRaLRaSwaSxaSwaLRaLRbikaJGaJLaJMaSyaSzaSAaQJaSBaJMaGvaIKaJNaJOaSCaNRaLXaJOaLYaJOaLXaNTaSDaIKaIKaIKaSEaSFaSGaSHaSIaSJamKamKaSKaSLaSMaSNaMcaSOaMQaMcaSPaMcaSQaMcaSRaSSaSTaSUaSVaTeaSXaSYaSZaTaaTbaTcaTdaTbaTbaUjaTbaSYaTfaSYaOvaTgaSYaThaTiaTjaTmaTlaToaTnaTqaTpaWIaTraOuaTsaTtaTuaTvaTwaTxaTyaTzaRHaTAaTBaRIaTCaTDaTEaTFaROaTGaRQaRRaRSaTHaTIaQdaTJaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikaaabfmbigbijbihbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaONaTMaTNaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaTOaTPaTQaTRaTSaTSaJraTTaTUaTVaTWaTXaTYaTZaMqcoCaKHaUbaUcaUdaUeaUfaUgaUhaUiaUZaUkaMvbikaabbikaUlaUmaUlbikaabbikaCuaJLaJMaUnaUoaUpaUqaUraJMaGvaIKaUsaUtaKPaUuaUvaKSaUwaKSaUxaUyaUzaIKaUAaUBaUCaUDaUEaUFaUGaUHbikbikaSKaUIaUJaUKaMcaULaUMaMQaMQaUNaMQaMQaMQaUOaMeaUPaMeaUQaURaMeaUSaMeaUTaUUaUVaUWaUXaUYaUTbwNaVaaVbaVcaVbaVbaVbaVbaVdaWLaVbaVeaYEaVfaVgaVbaVhayHaRDaViaTvaVjaVkaVlaVmaVnaVoaVpaVqaRIaVraVsaVtaVuaVvaTGaRQaRRaRSaRTaVwaQdaVxaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikbdBblqbjMbmKbjMbqQbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVyaVzaNiaODaOMaOFaVAaVBaOFaOFaVCaVAaOMaONaVDaKzaKBaVEaVFaVGaVHaVGaVGaVGaVGaVGaVIaJraKHaVJaVKaVJaKHaKHaVLaVMaVLaMuaMuaMuaMuaVLaVNaVOaMvaVPaVQaVQaVRaVSaVRaVQaVQaVTaVUaVVaJMaVWaJMaVXaVYaVZaJMaWaaIKaIKaIKaIKaWbaWcaWdaWeaWdaWcaWbaIKaIKaWfaUDaUDaUDaUDaWgaWhaWiaWjaWkaSKaWlaUJaWmaMcaMcaMcaMcaMcaMcaMcaMeaMeaUOaWnaWoaWpaWqaWraWsaWuaWtaUTaWvaWwaWxaWyaWzaUTaWAaWBaWCaWDaWCaWEaWFaWGaWHaYFaWJaWKaYGaWMaWNaVbaWOaRtaWPaWQaWRaVjaWSaVlaVmaWTaRIaWUaWVaWWaWXaWYaTFaTFaRIaRIaRQaRRaRSaTHaWZaQdaXaaXbaXcaXdaXeaXfaScaScaXgaprbikbikbikbikbikaaabfmbqRbmKbmKbmKbqSbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVyaNiaNjaNiaNiaNkaNlaNiaNiaNjaVzaXhaCuaXiaVEaInaXjaXjaXkaXjaXlaDEaXmaXnaJraXoaXpaXqaXqaXraXsaXqaXtaXqaXqaXqaXuaXqaXqaXvaXwaXxaXyaXzaXAaXyaXBaXyaXyaXyaXyaXCaXDaXEaXqaXqaXFaXGaXHaXIaXJaXKaXLaXMaXRaXPaXPaXPaXPaXPaXPaXPaXQaXWaXXaXSaXTaXUaXVaXYaZHaXZaUDaUDaYaaYbaYcaYbaYcaYdaYeaYfaYgaYhaYiaMeaYkaYjaYmaYlaYnaYnaYoaYpaYqaYraUTaYsaYtaYuaYuaYvaUTaYwaYxaYyaYzaYAaYAaYBaYCaYDbbHaYHcIgbjrcYtcSNaVbaVhaKsaRDaYIaYJaYJaYKaYLaYJaYMaRIaYNaYOaRIaYPaYQaTFaYRaRIaYSaYTaYUaRSaQbaQbaQdaYVaQeaYWaYXaQeaQeaQeaQeaQeabLadbbikbikbikbikbqUbqTbqVbmKbmKbrUbthbmKbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaYYaKzaKzaKzaKzaKzaKzaYYaInaMlaCuaYZaZaaInaZbaZcaZdaZdaZeaDEaZfaXnaZgaZhaXpaZiaZjaZkaZlaZlaZmaZnaZnaZnaZoaZpaZpaZqaZraZsaZlaZlaZtaZpaZvaZwaZxaZxaZyaZzaZAaZuaZuaZuaZBaXGaXHaXIaXJaXJaXJaXJaZCaXJaXJaXJaXJaXJaXJaZDaZEaZNaZFaZGaZJaZIaZLaZKaZMaZNaZNaZNaZOaZPaZPaZPaZQaYiaYiaYiaZRaZSaYiaMebbsaZUaYnaYnaZVaYnaZWaZXaYqaZYaUTaZZbaababbacbadaUTbaebafbagbahbaibajaVbbakbalcZqaVbaVbaVbaVeaVbaVbaVhayHaRDbamaTvaTvaTvbanaTvbaoaRIaRIaRIaRIaRIaRIaRIbapaRIaRSaRSaRRaRSbaqbaraQbbasbatbaubavbawbaxbaybazbaAbikbikbikbikaaabtibtjbtibtibtibtkbtibtlbtibtjbtiaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
@@ -8851,30 +8863,30 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCbBHdjhbDDdjidjidjkdjjbtqbxZbjNaInaInaKBbrWbrXbrYbrXbrXbrXbrXbrZbsabsbbcsbcsbscbsdblCbmUbsebsfbpAblCbsgbshbsgbcobcobcobcobsibcobsjbskbngbslbsmbpFbsnbsobngboCbnmbspbpIbpIbpIbsqbnmbsrbpNboIbpObssbrwbrxbstbsubrAbpTbsvbmgbswbsxbnvbsybszbsAboSbsBbsCbsDbsEbsFbsGbsHbsIbsJbqbbsKbnAbsLbsMbqibqjbqkbqlbqnbsNbqnbqnbqnbqnbsObsPbsPbsPbsPbsQbqnbqnbqnbqnbsRbqnbsNbsSbqnbsTbsUbsVbqnbsWbsXbsXbsYbsZbtabtbbmFbmFbmFbmFbmFbmFbmFbtcbtdbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbtebtfbtfbtgddSddRddUddTddTddTddTddVddWbaAaabbikbikaabbqUddXddZddYdeabqUbikbqUdecdebdecdecbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjldjidjidjidjidjidjidjideHdjnaGddjnaJrbtrbrXbtsbttbtubtvbtwbrZbtxbtybtzbtzbtAbtBblCblCblCbosbtCborbcsbcsbcsbcsbtDbejbejbskbejbsjbskbngbtEbtFbtGbtHboAbngbtIbnmbtJbpIbpIbpIbtKbtLbtMbpNbtNbnqbtObtPbpRbpRbpRbpRbpTbtQbmgbtRbtSbmgbmgbmgbmgbmgbmgbmgbnzbnAbqrbtUbtVbtWbtXbtYbtZbnAbvubuabuabucbucbucbucbucbucbucbudbudbuebufbugbugbufbuebudbudbuhbuhbuhbuhbuhbuhbuibuibujbuibuibuibuibuibukafkbumbunbmFbmFbuobuobupbupbupbupbupbuqbtfbtfbtebtfbmFbtfbtfbtfbtfburbusbusbusbusdedbuubuubuubuubuubuubuubuubuubikbikbikbikbdBddYddYddYdeebqUbikbqUdefdebdebdegbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbBGbDCdjodjpdjpdjidjpdjpdjpbtqdjqaInaInaInaKBbuvbrXbuwbuxbuxbuxbuybrZbejbuzbuAbuBbuCbuDblCbmUbuEbosbuFborbuGbuHbuIbuJbuKbuLbuLbuMbuLbuNbuObngbuPbuQbuRbuSbuTbuUbuVbnmbuWbpIbpIbuXbuYbuZbtMbpNbvabnqbvbbvcbvdbvebvfbvgbvhbnqbnqbvibvjbvkbvlbvmbvlbvnbvjbikbvobnAbvpbvqbvrbvsbtXbqbbvtbnAbxebvwbxfbucbzcbvybvzbvAbvBbvCbvDbvEbvFbvGbvHbvHbvGbvIbvJbvKbuhbvLbvMbvNbvObuhbvPbvQbvRbvSbvTbvUbvUbvVbukafNbvXbvYbvZbvYbwabwabupbwbbwcbwdbupbwebwfbwebupbwgbtfburbusbwhbwibwhbusbwjbwkbusdeicngbxXbwobikbikbikbikbikbikbikbikbikbikbqUddXddZddYdejbqUbikbqUdekdekdekdekbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjrbtqbtqbtqbtqbtqbtqbtqbtqdjqbikbikaInbwqbdFbwrbrXbwsbrXbwtbuxbwubwvbrZbwwbwxbwybwzbuDblCblCblCblCblCblCbwAbwBbwCbwDbwEbngbngbngbngbngbngbngbwFbngbngbngbwGbngbwHbwIbwJbpIbpIbpIbwKbtLbwLbpNbwMbnqbwNbvcbnrbnrbnrbnqbwObnqbwPbwQbwRbwSbwTbwUbwVbwWbwXbwYbwZbnAbxabqbbxbbxcbtXbxdbqbbnAbzbbxgbANbucbxhbxibxjbxkbxlbxmbxnbvHbvHbvHbvHbvHbvHbvHbvHbxobxpbxqbxrbxsbxtbuhbxubxvbxwbxxbxybxzbxvbxAbukbDdbvXbxCbxDbxEbxFbxFbxGbxHbxIbxJbxKbxLbxMbxNbupbxObxPbxQbusbxRbxSbxTbxUbxUbxVbusbxWbxXbxYbwobikbikbikbikbikbikbikbikbikbikbDybtldemdemdemdenbikdeodepdepdepbtlbDzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjrbtqbtqbtqbtqbtqbtqbtqbtqdjqbikbikaInbwqbdFbwrbrXbwsbrXbwtbuxbwubwvbrZbwwbwxbwybwzbuDblCblCblCblCblCblCbwAbwBbwCbwDbwEbngbngbngbngbngbngbngbwFbngbngbngbwGbngbwHbwIbwJbpIbpIbpIbwKbtLbwLbpNbwMbnqbIDbvcbnrbnrbnrbnqbwObnqbwPbwQbwRbwSbwTbwUbwVbwWbwXbwYbwZbnAbxabqbbxbbxcbtXbxdbqbbnAbzbbxgbANbucbxhbxibxjbxkbxlbxmbxnbvHbvHbvHbvHbvHbvHbvHbvHbxobxpbxqbxrbxsbxtbuhbxubxvbxwbxxbxybxzbxvbxAbukbDdbvXbxCbxDbxEbxFbxFbxGbxHbxIbxJbxKbxLbxMbxNbupbxObxPbxQbusbxRbxSbxTbxUbxUbxVbusbxWbxXbxYbwobikbikbikbikbikbikbikbikbikbikbDybtldemdemdemdenbikdeodepdepdepbtlbDzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaInaInaInaInaInaInaInaKBaJrbyabrXbybbycbydbyebyebyfbygbyhbyibyibyjbykbtzbtzbtzbtzbtzbtzbylbymbymbynbyobngbypbyqbyrbysbytbyubyvbywbngbyxbyybyzbuVbtLbwJbpIbpIbyAbnmbnmbyBbyCbyDbyEbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObwXbyPbyQbyPbyQbyRbwXbwYbySbyTbyUbyVbyWbyXbyYbyZbzabyTbAObvwbvwbucbzebzdcSCbzfbzgbucbxnbvHbvHbvHbvHbvHbvHbvHbzhbzibzjbzkbzlbxqbzmbuhbznbzobzpbxxbxAbxzbzqbzrbukbIbbztbzubzvbzvbzwbzxbzybzzbzAbzAbzAbzBbzAbzCbzDbzEbzFbzGbzHbzIbzJbzKbzKbzKbzLbusbzMbxXbzNbwobikbikbikbikbikbikbikbikbikbikbikbDyderderderbDzbikbDyderderderbDzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjtdjsdjuaIoaIoaIobdFaJraJrbrXbzVbrXbzWbzXbzYbzZbrXbcsbAabAabAbbAcbAbbAbbAbbAcbAbbcsbcsbngbngbngbAdbngbAebAebAebAebAebAebyvbAfbAgbAhbAibAjbAkbAlbAmbAnbAobApbAqbArbAsbAtbAubAvbAwbAwbAxbAybAzbAAbABbACbADbAEbvjbAFbwVbAGbwTbAHbvjbikbAIbAJbAKbALbAJbAJbAJbAJbAMbnAbCBbvwbCCbAPbAQbARbASbATbAUbucbAVbAWbAXbAYbAZbBabBbbBcbvHbBdbuhbBebzlbBfbBgbuhbBhbBibxwbxxbxAbxzbxvbxAbukbDdbvXbBjbBkbBlbBmbBnbBobBpbBqbBrbBsbBtbBubBvbupbBwbBxbBybusbBzbBAbBBbxUbBCbBDbusbzMbxXbBEbwobikbikbikbikaabaabaabaabaabaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjwdjvdjuaJqaJqbBIbBJaJqbBKbrXbBLbycbBMbBNbBObBPbrXbikaabaabdetdesdesdesdesdesdeubikbikbBRbBSbBTbBUbBVbAebAebAebAebAebAebBWbBXbBYbBZbCabCbbCcbCdbnmbnmbCebCfbnmbnmbCgbChbCibCjbCkbClbClbCmbClbCnbCobCpbCqbAEbvjbCrbvlbvlbvlbCsbvjbikbAIbAJbCtbCubCvbCwbCxbCybCzbCAbEsbvwbEtbucbvxbCDbCEbCFbCGbCHbCIbCJbCKbCLbCMbCNbCObCPbCQbCRbCSbCTbzlbCUbCVbuhbCWbCXbCYbCZbDabDbbDcbvVbukbIcbDebDfbDgbDgbDhbDibDjbDkbDlbDmbDnbDobDpbDqbupbDrbBxbDsbusbDtbDubDvbxUbxUbDwbusbxWbxXbDxbwobikbikbikbikaabbDAbFfbDBbFfbDBbFfbFgaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjudjubDEaInaInaLyaCubDFbDGbrXbDHbycbycbycbrXbrXbrXbikbikbikdewdevdevdexdevdevdewbikbikbBRbDIbAebDJbDKbDKbDKbDKbDKbDLbDMbDKbDNbDObDPbDQbDRbDSbDTbnmbDUbpIbDVbDWbtLbDXbDYbDZbCjbCjbCpbEabEbbEcbEdbEebCpbvibAEbvjbEfbEgbEhbqtbEjbvjbikbEkbAJbElbEmbEnbEobEpbEobEqbErbFWbvwbHBbucbEubEubEvbEwbExbEybEzbEAbEBbECbEDbEDbEEbEFbEGbEHbuhbCTbEIaJSbuhbuhbuibEKbELbEMbuibukbukbukbENbIdbvXbEPbBkbBlbEQbDgbDjbERbESbESbETbxJbEUbEVbEWbEXbxPbEYbusbEZbFabxUbFbbFcbFdbusbzMbFebwobwobikbikbikbikaabbFhbFjbFibGSbFkbGTbFhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjydjydjydjAdjzdjydjydjydjydjBbikbikbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdewbFnbBRbBRbFobFpbFqbFrbFrbFrbFpbAebyvbAfbAebAebAgbFsbFtbFubFvbFwbFxbFybpIbpIbFzbtLbDXbDYbFAbFBbFCbFDbFEbFFbFGbFHbFIbCpbFJbFKbwRbFLbFMbFNbFObFPbwXbwYbFQbAJbFRbFSbFTbEobFUbEobFVbErbJebvwbKObucbFYbFZbGabGbbGcbGdbGebGfbGgbGgbGhbGibGgbGgbGjbGkbGlbGmbGnbGobGpbGqbGrbGsbGtbGubGvbGwbKhbIebKjbKibvXbGBbGCbGDbGEbGFbxGbGGbESbESbGHbGIbEUbGJbupbGKbGKbGLbusbGMbGNbGObGPbxUbGQbusbzMbGRbwobikbikbikbikbikaabbGUbIybFibFkbFibKkbDBaabbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjCdjEdjDdjGdjFdjIdjHdjFdjJdjLdjKdjydjydjBbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbGWbmrbNkbmrbGXbGYbGZbGYbGYbGYbGYbHabyvbAfbHbbngbngbHcbpIbAibFvbHdbtLbHebHfbHfbHgbHhbHibHjbHkbHlbHmbHnbHobHpbHqbHrbHsbCpbCqbAEbvjbEibHubHvbHwbHxbvjbikbEkbHybHzbHybHybHybHybHybHAbHybKPbvwbKObucbHCbHDbHDbHEbHFbEybHGbHHbHIbHJbHKbHLbHMbHIbHNbHObHPbHQbHRbHSbHTbHTbHUbHVbHWbHXbHYbLibLCbLBbNdbNcbNebIfbIfbIgbIhbIibxGbIjbxJbxJbIkbIlbEUbImbInbIobIpbIqbIrbIsbItbIubIvbIubusbusbIwbEXbGxbLDbLDbLDbLDbLDbGxbFhbFkbFibFkbFkbGTbFhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjHdjHdjHdjMdjFdjNdjNdjFdjOdjHdjHdjQdjPdjydjBbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbLFbKmbIAbKmbIBbAebFqbFrbFrbFrbAebAebyvbAfbICbIDbngbIEbpIbAibFvbIFbtLbIGbpIbrsbpIbIHbDXbvvbIIbHlbHmbIJbIKbILbIMbINbIObIPbIQbIRbISbISbITbIUbIVbvjbvjbikbEkbHybIWbIXbIYbIZbJabJbbJcbJdbMhbvwbKObCHbJfbJgbJhbJibJjbEybJkbJlbJmbJnbJobJpbJqbJrbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbGwchEbIecnfcjubvYbJIbJJbJKbJLbJLbxGbJMbJNbJObxGbJPbEUbJQbxGbJRbJSbJTbJUbJVbJWbJXbJYbJZbKabKbbKcbKdbKebKfbKfbIxbJFbJHbKgbKlbFfbDBbNhbDBbFfbLEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjSdjRdjUdjTdjVdjFdjWdjHdjXdjHdjHdjHdjHdjHdjMdjFbikbikbikbikbikbikbikbikbikbikdewdeCdevdevdevcOfdewbFnbBRbBRdezbAebFqbAebAebAebAebAebyvbAfbICbKobngbKpbpIbKqbKrbpIbKsbpHbpIbpIbKtbtLbDXbvvbIIbHlbHmbCpbKubKvbqzbKxbKybKzbKAbKBbKCbKDbwXbKEbKFbwXbwYbwYbKGbHybKHbKIbKJbKKbKLbKLbKMbKNbMibvwbMjbucbEybKQbEubKRbKSbEybJkbKTbKUbKVbKWbKXbKYbKUbJkbKZbLabLbcchbLbbLcbLbbLdbLdbLebLfbLgbLhbLhcpLbLgbLgbLhbLhbLjbLkbLjbLjbxGbxGbxGbxGbxGbLlbLmbBobxGbLnbLobLpbLqbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLAbEObGAbHZbGxbGzbGzbGzbIabGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdjHdjHdkadkadkadjFdjHdjHdjFdkbdkddkcdkfdkedkgdjFbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbWobKmbIAbKmbFobLGbLHbAebAebAebLGbAebyvbAfbICbLIbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPbLQbLRbLSbKzbLTbLUbLVbLWbLXbLYbLZbMabikbikbikbHybMbbMcbMdbMdbMebMfbMgbHybNSbNRbKObNTbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbLgbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbiTbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbGxbLDbLDbGxcnccndcnebOQbOSbUHbYdbGzbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdjHdjHdjHdjHdjHdkidjHdjHdjFdjydjydjydjydjydjydkjbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdeEdeDdeGdeDbNlbNmbNnbNnbNnbNnbNnbNobNpbNqbICbNrbngbNsbNtbNubNvbNwbNxbNybNybNybNzbNzbNAbvvbNBbNCbHmbCpbNDbNEbNFbKvbNGbKzbNHbNIbNJbNKbNLbFNbNMbMabikbikbikbHybNNbNObNPbNQbMebMfbMgbHybPibNUbQObPjbNVbNWbNXbNYbNZbOabObbOcbKUbKUbOdbOebKUbKUbJkbKZbOfbOgbOhbOibOjbOkbLdbOlbOmbOnbOobOpbOqbOrbOrbOsbOtbOubOvbOwbJVbJVbOxbJVbOybJVbOzbJVbOAbOBbOBbOCbODbOEbOFbOGbOHcsjbOJbOKbOLbNabOMbONbikbikbikbGxbORbJFbOPbOQbKgbOObNibGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjHdjHdjHdjMdjFdjNdjNdjFdjOdjHdjHdjQdjPdjydjBbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbLFbKmbIAbKmbIBbAebFqbFrbFrbFrbAebAebyvbAfbICbKobngbIEbpIbAibFvbIFbtLbIGbpIbrsbpIbIHbDXbvvbIIbHlbHmbIJbIKbILbIMbINbIObIPbIQbIRbISbISbITbIUbIVbvjbvjbikbEkbHybIWbIXbIYbIZbJabJbbJcbJdbMhbvwbKObCHbJfbJgbJhbJibJjbEybJkbJlbJmbJnbJobJpbJqbJrbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbGwchEbIecnfcjubvYbJIbJJbJKbJLbJLbxGbJMbJNbJObxGbJPbEUbJQbxGbJRbJSbJTbJUbJVbJWbJXbJYbJZbKabKbbKcbKdbKebKfbKfbIxbJFbJHbKgbKlbFfbDBbNhbDBbFfbLEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjSdjRdjUdjTdjVdjFdjWdjHdjXdjHdjHdjHdjHdjHdjMdjFbikbikbikbikbikbikbikbikbikbikdewdeCdevdevdevcOfdewbFnbBRbBRdezbAebFqbAebAebAebAebAebyvbAfbICbLwbngbKpbpIbKqbKrbpIbKsbpHbpIbpIbKtbtLbDXbvvbIIbHlbHmbCpbKubKvbqzbKxbKybKzbKAbKBbKCbKDbwXbKEbKFbwXbwYbwYbKGbHybKHbKIbKJbKKbKLbKLbKMbKNbMibvwbMjbucbEybKQbEubKRbKSbEybJkbKTbKUbKVbKWbKXbKYbKUbJkbKZbLabLbcchbLbbLcbLbbLdbLdbLebLfbLgbLhbLhcpLbLgbLgbLhbLhbLjbLkbLjbLjbxGbxGbxGbxGbxGbLlbLmbBobxGbLnbLobLpbLqbLqbLrbLsbLtbLubLvbLIbLxbLybLzbLAbLAbEObGAbHZbGxbGzbGzbGzbIabGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdjHdjHdkadkadkadjFdjHdjHdjFdkbdkddkcdkfdkedkgdjFbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbWobKmbIAbKmbFobLGbLHbAebAebAebLGbAebyvbAfbICbNrbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPbLQbLRbLSbKzbLTbLUbLVbLWbLXbLYbLZbMabikbikbikbHybMbbMcbMdbMdbMebMfbMgbHybNSbNRbKObNTbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbLgbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbiTbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbGxbLDbLDbGxcnccndcnebOQbOSbUHbYdbGzbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdjHdjHdjHdjHdjHdkidjHdjHdjFdjydjydjydjydjydjydkjbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdeEdeDdeGdeDbNlbNmbNnbNnbNnbNnbNnbNobNpbNqbICbWSbngbNsbNtbNubNvbNwbNxbNybNybNybNzbNzbNAbvvbNBbNCbHmbCpbNDbNEbNFbKvbNGbKzbNHbNIbNJbNKbNLbFNbNMbMabikbikbikbHybNNbNObNPbNQbMebMfbMgbHybPibNUbQObPjbNVbNWbNXbNYbNZbOabObbOcbKUbKUbOdbOebKUbKUbJkbKZbOfbOgbOhbOibOjbOkbLdbOlbOmbOnbOobOpbOqbOrbOrbOsbOtbOubOvbOwbJVbJVbOxbJVbOybJVbOzbJVbOAbOBbOBbOCbODbOEbOFbOGbOHcsjbOJbOKbOLbNabOMbONbikbikbikbGxbORbJFbOPbOQbKgbOObNibGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkmdkldkodkndjHdjFdjHdjHdjFdjHdkqdkpdkrbikbikbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdewbFnbBRbBRbngbngbBRbBRbBRbBRbBRbngbngbBRbBRbBRbngbOVbOVbOVbOWbOVbNzbOXbOYbOZbPabNzbDXbvvbPbbPcbPcbCpbCpbCpbCpbCpbPdbKzbISbIRbPebNKbPgbPhbMabMabvjbvjbvjbHybHzbHybHybHybHybHybHybHybQPbvwbQQbPkbPlbPmbPnbPlbPlbPobPpbPqbPrbPsbPtbPubPvbPwbMqbPxbPybPzbPAbPBbPCbPDbPEbPFbPGbPHbPIbPJbPKbPLbMHbPMbLhbLhbPNbPObPNbPPbPQbPPbPPbPPbPRbPSbPTbPTbPUbPVbPWbPXbOFbPYbPZbQabQbbQcbQdbNabOMbONbikbikbikbGxbNfbNgbGxbKgbGxbGxbKgbGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjydjydjydjydjydjydjFdjOdjHdksdjHdkudktdkvbikbikbikbikbikbikbikbikbikbikbikbikbikdeJdeIdevdeKdevdeLdeMbikbikbikbikbikbikbikbikbikbikbQgaabbikbikbikbikbOVbQhbQibQjbQkbNzbQlbQmbQnbQobNzbDXbvvbQpbQqbQrbQsbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbQEbQFbQGbQHbQIbQJbQKbQLbQMbQRbuabQSbvwbShbSgbSibvwbSjbPlbQTbQUbQVbQWbQXbJkbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibLbbRjbOibRkbRlbRmbRnbRobRpbLgbRqbMHbMHbMHbRrbLhbPNbRsbRtbRubRvbRwbRxbRybPPbRzbRAbRBbPTbPTbRCbPWbRDbREbtTbRGbRHbRIbRJbRKbNabRLbwobikbikbikbGxbGxbGxbGxbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydkxdkwdkydkxdkzdjFdjHdjHdjFdjHdkBdkAdkCbikbikbikbikbikbikbikbikbikbikbikbikbikdeOdeNdePdePdePdeNdeQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbOVbRMbRNbRObRPbNybRQbRRbRSbRTbNzbDXbRUbRVbvvbvvbFXbRWbubbQNbQMbRXbRYbRXbRZbSabSabSbbScbSdbSabSabSebSabSfbSabQMbQRbuabSlbSkbTJbTIbTLbTKbvwbPlbSmbQUbSnbSobSpbJkbSqbSrbSsbStbSubSvbSwbSxbJkbSybSzbLbbSAbSBbSBbSCbSDbSEbSFbSGbLgbSHbSIbMHbSJbSKbLhbPNbSLbSMbSNbSObSPbSQbSRbPPbSSbRAbSTbSTbPTbSUbSVbSWbSXbSYbSZbTabTbbTcbTdbNabOMbwobTebikbikbikbikbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdkDdkDdkDdkDdkDdkEdjHdjHdjFdjydjydjydjydjydjydjBbikbikbikbikbikbikbikbikbikbikbikdeRdeSdeSdeSdeTbikbikbikbikbikbikbikbikbOUbOTbQebOTbQfbikbikbikbOVbOVbTjbTkbRObTlbNybTmbQnbTnbTobNzbDXbTpbTqbTrbTsbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTCbTDbTEbTEbTEbTEbTEbTEbTFbTGbTHbTNbTMbTPbTOdlidjmdlkdljdllbPlbTQbQUbQVbTRbSpbJkbSqbSrbTSbTTbTUbTVbTWbTXbJsbTYbTZbLbbLbbUabUabLbbSDbLdbUbbUcbLgbUdbUebUfbUgbUhbLhbPNbUibUjbUkbUlbUmbUnbUobPPbUpbRAbSTbSTbPTbUqbUrbUsbUtbUubUvbUwbUxbUybUzbNabOMbUAbUBbUAbUCbUDbUCbUCbUCbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdkDdkDdkDdkFdkGdjFdjHdjHdjFdjHdjHdjHdkHdjHdkIdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbTfbTibThbTgbUIbUIbUIbOVbUJbUKbULbUMbUNbUObUPbUQbUQbURbNzbUSbUTbUUbUVbUVbUWbUXbUYbUVbUZbUZbVabVbbVcbUZbUZbVdbQMbQMbVebVfbVfbVfbVgbVhbVfbVfbVibVjbVkbVkbVlbVkbVmbVnbVkbVobVpbVqbPlbVrbVsbSqbVtbVubVvbVwbVxbVybVubJkbSybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbVObLhbPNbPNbVPbVQbVRbVSbVRbVTbPPbVUbVVbVWbVWbPTbVXbVYbVZbNabNabNabNabNabNabNabNabOMbUAbWabWbbWcbWdbWdbWebUCbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikaabbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkKdkJdkDdkLdkMdjFdjHdjHdkNdjHdjHdjHdkOdjHdkPdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUEbUFbUEbQebUIbWmbWlbOVbWnbWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBbWCbUZbWDbWEbWFbWGbWHbUZbWIbWJbWKbVfbWLbWMbWObWNbWPbWQbWRbWSbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAbXBbLhbXCbXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbPTbXNbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXWbXVbUCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkKdkJdkDdkLdkMdjFdjHdjHdkNdjHdjHdjHdkOdjHdkPdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUEbUFbUEbQebUIbWmbWlbOVbWnbWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBbWCbUZbWDbWEbWFbWGbWHbUZbWIbWJbWKbVfbWLbWMbWObWNbWPbWQbWRceLbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAbXBbLhbXCbXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbPTbXNbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXWbXVbUCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkQdkDdkDdkRdjFdjHdjHdjFdkSdjHdjHdkUdkTdjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbUGbUEbUEdeycOWbTkbTkdeAbZAbTkbWqbYhbYibNzbNzbNzbNzbNzbNzbYjbUTbYkbYlbYmbYnbYnbYnbYobUZbYpbYqbYqbYqbYrbYsbYtbYubYvbYwbYxbYybYzbYAbYBbYCbVfbVibYDbVkbYEbYFbYGbYHbYIbVkbSmbQVbSnbSobYJbYKbYLbYMbYNbYObYPbYQbYRbVubYSbYTbYUbYVbYWbYXbYYbYZbZabZbbLgbLgbLgbLgbLgbZcbZdbZebLhbZfbXEbXEbZgbZhbXEbZibZjbZkbZlbRAbZmbZmbPTbPVbZnbPXbEXbUAbZobUAbUAbUAbUAbUAbUAbUAbZpbZqbUCbZrbZtbZsbUCaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbZubXXbXXbZvbWhbWhbXZbXZbZwbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkWdkVdkXdjFdjHdkYdjFdkZdladjHdjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUFbUFbUFbQebUIbYfbYebZzbZAbTkbZBbZCbZDbZEbZFbZFbZFbZGbUTbUTbUTbWxbUVbZHbYnbZIbYnbZJbUZbYpbYqbZKbYqbZLbUZbZMbZNbZObVfbZPbZQbZRbZSbZTbZUbZVbZWbZXbZYbZZcaacabcaccadbVkbTQbQVbQVcaebYJbYKcafcagcahbXjcaicajbKwcalcamcancaocapcaqcarcascasbXscatbVAcaucavcawcaxcaycazcaAbZjbZfcaBbXEbXEbXEcaCcaDbZjbZkcaEbRAbZmbZmbPTcaFcaGbPXbEXcaHcaIcaJbUAcaKcaLcaMcaNcaOcaPcaQbUCcaRcaScaTbUCbUAbUAbUAbUAbUAbUAbUAbUAbikbikbikbikbikaabbikbikbikbikbikbikbikcaUbWhbZubWhbWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydjydjydjydjydjydjydjydjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbTgbWjbYbbWkbTgbUIbUIbUIbOVcaYcaZcaZcaZbOVbOVbUTcbacbacbbcbcbUTcbdcbebUVbZHbYnbYnbYncbfbUZbYpbYqbYqcbgcbhcbicbjcbkcblbVfbVfbVfbVfbVfcbmbVfbVfcbncbobVkbVkcbpbVkbVnbVkbVkbPlcbqcbqbPlccicbrcbscbtcbucbvcbwcbxcbycbzcbAcbBcaocapcbCcbDcbEcbFcbGcbHbVAcbIcbJcbKcbLcbMcbNcbOcbPcbQcbPcbRcbRcbRcbPcbScbPcbPcbTcbUbZmbZmbPTcbVbZnbPXcbWcbXcbYcbZccaccbccccccccdcceccfccgcckccjcdqcclcfeccmccnccoccpccqccrccscctaabaabaabaabaabaabaabaabbikbikbikbikbikbWgbWhccuccvccvbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbYcbOTbYgbOTbZxbikaabbikbOVbOVbUIbUIbUIbOVbikbUTccAccBccCccDbZFccEccFbUVccGccHccIbYnccJccKccLccMccNccOccPbUZccQccRccSccTccUccUccUccUccVccWccXccYccYccZccZcdacdbcdcbVibPlcddcdecdfcdgcdhbYKcdicbtcdjcdkcdlcdmbSwcdncdocdpcffcdrcdrcdscdrcdrcdrcdtbVAcducdvcdwcdxcdycdzcdAcbPcdBcdCcdDcdEcdFcdCcdGcdHcdCcdIcdJbRBbPTbPTcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdUcdVcdWcdXcdYcdZceacebceaceccebcebcebcedceecefcegcehaabbikbikbikbikaabbikbikbikbikbikbikbikbWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabcejbUTbUTbUTcekbUTbUTcelbUVcemcenceocepceqcercescetceucevcewccKcexceycezceAceBceBceBceBceCceDceEceFceGceFceHceIceJceKceLceMceNceOcePceQceRceSceTceUceVceWceXceYceZcfacfbcfccfgbMmbMmcfichOcgHceYchVcfjcfjcfkcfjcflcfmcfncfocbPcfpcfqcfrcfscfrcftcfucfvcdCbPTcfwbPTbPTcfxcfybZnbBxbEXbUAcfzbUAbUAcfAcfBcfCcfDcfEcebcfFcfGcfHcdUcfHcdUcfIcdUcdUbUAcfJcfKcfLcfMaabaabaabaabaabaabaabaabbikbikbikbikbikbWhbXZbXZbXZbXZbXZbXZcfNbXZcfObXZbXZbXZbXZbXZbWhbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabcejbUTbUTbUTcekbUTbUTcelbUVcemcenceocepceqcercescetceucevcewccKcexceycezceAceBceBceBceBceCceDceEceFceGceFceHceIceJceKchvceMceNceOcePceQceRceSceTceUceVceWceXceYceZcfacfbcfccfgbMmbMmcfichOcgHceYchVcfjcfjcfkcfjcflcfmcfncfocbPcfpcfqcfrcfscfrcftcfucfvcdCbPTcfwbPTbPTcfxcfybZnbBxbEXbUAcfzbUAbUAcfAcfBcfCcfDcfEcebcfFcfGcfHcdUcfHcdUcfIcdUcdUbUAcfJcfKcfLcfMaabaabaabaabaabaabaabaabbikbikbikbikbikbWhbXZbXZbXZbXZbXZbXZcfNbXZcfObXZbXZbXZbXZbXZbWhbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcejcfPcfQcfRbUTcfSbUVcfTcfUcfVbZHcfWcfXcfYbYpcfZcgacgbcfXcgccgdcgecgfcgfcggcghcgicgjcgkcglcgmbGycgnbVicgobGybGycgpcgqcgrcgscgtceQcgucgvcgwcgxcgycgzbMVcgBcgCcgzcgzcgDcgEcgEcgEcgEcgEcgGcgFciOcgJcgJcgKcgLcgMcgNcgOcgPcbPcgQcgRcgScgTcgScgUcgVcfrcgWcgXcgYbBxcgZbBxcfybZnbBxbEXchachbchcbUAbUAbUAbUAbUAchdcdUchechfcfIcdUchgcdUbZpcdUchhbUAchichjchkbUAaabbikbikbikbikaabbikbikbikbikbikbikbikbWhchlchlchlchlchlchlchmbXZchnchlcfObXZbXZbXZbXZbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcejchochpchqbUTcfSchrchrchrchrchrchrbUZbUZbUZbUZbUZbUZbUZchschtchuchvchwchxchychychzchAcglbGybGychBchCchDbGybGybGycqOchFchGceOchHchIchJcgEchKchLchMbSqchLchNcfdcfdcfdcjncjlcjlcjlcjlckacgIbSqclPchPchQchRchSchTchUclQcbPchWchXcfrchYcfrchZciacibciccidciecifbBxcigcfybZncihbEXbFeciicijcikbwobxXbxXbUAcilcimcinciocipciqcirciscitciucivbUAciwciycixcizbikbikbikbikaahbikbikbikbikbikbikbikbikciAbXXbXXbXXbXXbXXbXXbXXciBciCbXZbXZbXZbXZciDbYabWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcejchochpchqbUTcfSchrchrchrchrchrchrbUZbUZbUZbUZbUZbUZbUZchschtchucWpchwchxchychychzchAcglbGybGychBchCchDbGybGybGycqOchFchGceOchHchIchJcgEchKchLchMbSqchLchNcfdcfdcfdcjncjlcjlcjlcjlckacgIbSqclPchPchQchRchSchTchUclQcbPchWchXcfrchYcfrchZciacibciccidciecifbBxcigcfybZncihbEXbFeciicijcikbwobxXbxXbUAcilcimcinciocipciqcirciscitciucivbUAciwciycixcizbikbikbikbikaahbikbikbikbikbikbikbikbikciAbXXbXXbXXbXXbXXbXXbXXciBciCbXZbXZbXZbXZciDbYabWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcejcejcejcejbUTcfScejbikbikbikbikciEbaTciGciHciIciJciKciLciMciNcmPciPciQciRciSciSciTciUciVciWciWciWciWciXciWbGybGybPlciYciZcjacjbcjccjdchScjecjfcjgcjhcjicjjcjkcjlcfdcnicjpcjpcjpcjpckNclSckUcnjcjqcjrcjscjtcbAcwncjvcbPcjwcjxcjycjzcjAcfrcjBcbPcbPbEXcjCbEXbEXbEXcjDcjEcjFbEXbxXciicjGcjHbwobwobwobUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbikbikbikbikbikaabbikbikbikbikbikbikbikbWhccvccvccvccvccvccvcjIbXZccuccvcjJbXZbXZbXZbXZbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcAjbikaabaabcjKcjKcjKcjKcjKcjKcjLcjKbUTcelcjMbikcjNcjOcjPcjQcjRcjScjTcjUcjVcjWcjXcjYcjZcosckbckcckdckeckfckgckhciVckickjckjckjckkciWbGybGycklcklcklcklckmcklckncknckocklcklckpcklckqckrckscktcksclZaPKcmacmmcmlcmocmnckzckAckBckCckDckEckFcdccbPcbPckGcbPckHcbPckIckJckKcgnckLckMckvckOckPckQckRckSckPbxXciickTbxXbxXckVckWckXchabxXbxXbxXbxXbxXbxXbxXckYckZbONbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhbXZbXZbXZbXZbXZbXZcfNbXZcjJbXZbXZbXZbXZbXZbWhbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikclaclbclbclbclccldcleclfclgclhclicjLcljcelcjMbikclkcllclmclnclocjSclpclqclrclsciLcltcgdcoaciPcluchyclvchyclwclxclyclzclAclAclAclBciWbGybGycklclCclDclEclFclGclHclHclIclJclKclLclMclNclOcotcfhcpwcmpcmrcmqctbcsZcuoctcckDclVclWclXckzclYcmtcmscmbcmbcmccmdcmecmfcmgcmhcmfcmfcmfcmicmfcmfcmjcmucnpcnlcqRcoXcrGcqScrHcrHcrIcrHcrHcrHcrHcrJcrKcrHcrHcrHcrMcmvbxXbONbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
@@ -8894,17 +8906,17 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikafxaabczocAkczqbikczocAkczqaabczocAkczqaabbikbikaabaabaabaabaabbikbikbikbikbikaabbikbikczscwWcvKcBecxjcBfcBgcBhcBicBjcBicBkcBicBlcBmcxfcBncztcztczxcBocBpcBqcBrcBscBtcBucBvcBwcBxcBycBzcBAcBBcBCcBDcBDcBEcBFcBGcBHcBIcBJcBKcBLcBMcrecBOcHucHtcDPcDPcDPcDPcDPcDPcHvcoAcEhclUclUclUclUclUclUcjmbEJcjmcFfclUclUcoAcoAcoAcoAcusbGycoAbikbikckPcxOcBZcxOcCacxRcqUcCbcCccCdcCecqUcqUcCgcqUcChckPbikaabaabcwGcwGcCscwGcwGbikbwobxXcvzcyJcHycHxbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikczocAkczqaabczocAkczqbikczocAkczqbikbikbikbikbikbikaabaabaabbikaabbikaabaabbikbikcybcCicvKcCjcCkcCkcClcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcCmcCncCmcCocCmcrmcCpcCqcFbcCtcCtcCtcCucCvcBCcCwcCxcCycCzcCAcCBcBIcCCcCDcCEcCFcHzcCHcHAcCJaabcCKcCKcCKcCKcCKcHBcoAcHDcHCcIGcHHcIHctackycjocBWckuckycBXcCPcBYcCRcCQcoAcusbGycoAbikbikckPcxOcxOcxOcAQcCTczbcCUcCVcCWcCXcCZcCZcDacqUcDbckPaabaabbikbikbikcIKbikbikbikbwobxXcvzcyJbxXbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxaabbikczocAkczqaabczocAkczqbikczocAkczqaabbikbikbikbikbikbikbikbikaabcDccDdcDdcDdcDdcybcDecwWcDfcDgcDhcDhcDicDjcDkcDlcDlcDlcDlcDmcDncDocDncDncDpcDpcDncDqcDrcDscDtcDtctYcDvcDwcDxcDycDzcDzcDAcDBcDCcDDcDEcDFcCAcDGcBIcDHcDIcDJcDKcILcDMcIMcDOcDPcDQcDRcDScDTcCKcHBcoDcEhclUcvscvqcIOcINcxLckxckwdcrclUcCSczVcuqczVcDUcoAcusbGycoAcoAbikckPcwAcwAcwAcwAcEkcqUcCbcElcEmcCecqUcEncEocEocEpcEqcXYaabbikbikbikbikbikbikbikbwobxXcGybxXbxXcIPbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabaabcEraabaabaabcEraabbikaabcEraabbikbikbikbikbikbikbikbikcDccDccDccEscEtcEucEvcEwcExcEycDfcDfcEzcEAcvKcvKcEBcECcECcECcECcEDcEEcEFcEEcEEcEEcDtcDtcEGcEHcEIcEJcEKcDzcELcDwcDzcDzcDzcDzcEMcBCcENcEOcCycDFcCAcDFcBIcDHcDIcEPcEQcERcEScETcEUaabcEVcEWcDTcEXcCKcHBcoDcHDcHCcxKcxJczVcxMclUcIIcDVdcsclUcDWcDYczVcEbcEaclUcusbGycITcoAbikckPcwtcwucwvcFjcARczbcFkcJJcJIcJKcJKcFocFpcFqcJLckPaabaabaabbikbikbikbikbikbikbwocJMcvzbwobwobwobwobwoaabaabaabcJNcJNcJNcJNcJNcJNaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabcFscFtcFtcFucFvcFwcFwcFwcFvcFwcFwcFwcFvcFwcFwcFxcFtcFtcFtcFtcFtcFycFzcFAcFBcFCcFDcFEcFFcFGcfRcwWcFHcDfcvKcvKcvKcFIcEBcECcFJcFKcFLcyrcFNcDucFPcFOcFQcFScFTcSpcFVcFWcFXcFScFYcFZcDwcGacDzcDzcDzcGbcBCcGccGccDFcGdcGecGfcGgcGhcGicGjcGkcGlcGmcGncDOcGocDQcGpcDTcDTcCKcHBcoDcEhclUcyMcyLcyNcFfclUcnkclTcFfclUcyQcyScyRcyTcyTclUcusbGycJOcoAbikckPcxOcxPcxOcGAcxRcqUcGBcJPcGCcqUcqUcGDcwAcwAcwAckPbikbikaabaabbikbikbikbikbikbwocyKcvzbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabaabcEraabaabaabcEraabbikaabcEraabbikbikbikbikbikbikbikbikcDccDccDccEscEtcEucEvcEwcExcEycDfcDfcEzcEAcvKcvKcEBcECcECcECcECcEDcEEcEFcEEcEEcEEcDtcDtcEGcEHcEIcEJcEKcDzcELcDwcDzcDzcDzcDzcEMcBCcENcEOcCycDFcCAcDFcBIcDHcDIcEPcEQcERcEScETcEUaabcEVcEWcDTcEXcCKcHBcoDcHDcHCcxKcxJczVcxMclUcIIcDVdcsclUcDWcDYczVcEbcEaclUcusbGycITcoAbikckPcwtcwucwvcFjcARczbcFkcJIcGCcJKcJKcFocFpcFqcJLckPaabaabaabbikbikbikbikbikbikbwocJMcvzbwobwobwobwobwoaabaabaabcJNcJNcJNcJNcJNcJNaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabcFscFtcFtcFucFvcFwcFwcFwcFvcFwcFwcFwcFvcFwcFwcFxcFtcFtcFtcFtcFtcFycFzcFAcFBcFCcFDcFEcFFcFGcfRcwWcFHcDfcvKcvKcvKcFIcEBcECcFJcFKcFLcyrcFNcDucFPcFOcFQcFScFTcSpcFVcFWcFXcFScFYcFZcDwcGacDzcDzcDzcGbcBCcGccGccDFcGdcGecGfcGgcGhcGicGjcGkcGlcGmcGncDOcGocDQcGpcDTcDTcCKcHBcoDcEhclUcyMcyLcyNcFfclUcnkclTcFfclUcyQcyScyRcyTcyTclUcusbGycJOcoAbikckPcxOcxPcxOcGAcxRcqUcGBcJPcJJcqUdlWcGDcwAcwAcwAckPbikbikaabaabbikbikbikbikbikbwocyKcvzbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabaabcGFaabbikaabcGFaabbikaabcGFaabbikbikbikbikbikbikbikbikcDccDccDccGGcGHcFMcDdcGJcfRcGKcExcExcExcExcGLcExcFGcECcGMcGNcGOcGPcGQcGRcGScGTcGUcGVcGWcGXcGYcGZcHacHbcFYcELcDwcHccHdcDzcDzcHecBCcHfcHgcDFcHhcCAcHicHjcHkcHlcHmcHncHocHpcHocHqaabcCKcCKcCKcCKcCKcHBcoAcEhclUcIJcyVcyYcyXcEecEccEgcEfcHwcGucHZczVcIRcIQclUcusbGycJRcoAbikckPcxOcxOcxOcFjcHEcHFcHGcJScHIcCZcCZcCZcHJcHKcHLcHMbikbikbikaabaabbikbikbikbikbwobwocvzbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxaabaabczocHOczqbikczocHOczqbikczocHOczqaabbikbikbikbikbikbikbikaabaabcDccDdcDdcDdcDdcHPcHQcHRcfRcHScfRcfRcEBcHTcfRcECcHUcHVcGOcHWcFNcHXcHYcIacIacIbcIccIdcIecIfbRFcIbcIhcIicIjcIkcIlcImcIncIocIpcIqcGfcIrcIscItcIucIvcIwcIxcIycIzcIAcIBcICcIDcDPcDQcIEcIFcIFcCKcHBcoAcEhclUclUclUclUclUcJhcANcBRcJQcMccBScMecMdcMCcBVclUcuscGqcGrcGrcGrcJTcJTcJTcJTcJTcJUcKTcKbcKUcIUczbcIVczbcIWczbcIXcHMbikbikbikbikaabaabbikbikbikbikbwocvzbwoaabaabaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikczocHOczqaabczocHOczqbikczocHOczqbikbikbikaabbikbikbikbikaabaabaabbikbikaabaabcJbcJbcJbcJbcJbcJbcJbcJccJbcJbcECcJdcJecGOcHWcFNcJfcFNcJgcLhcDtcJicJjcFWcJkcFRcDtcJmcDzcDwcJncJocJpcIncJqcJrcJscJtcJucJvcJwcJtcJxcJycJzcJAcDFcJBcJCcJDcJEaabcEVcJFcJGcJHcCKcHBcoDcKWcKVcKVcKVcKXclUcNDcyLcCLcNEcyScCMcyTcyTcyScCNclUcuscGvbVibGycKYcKZcoAbikbikckPcJVcJWcJXcJYcJVcJWcJZcKacJVcJWcLackPaabaabaabaabaabaabaabaabaabaabbwocvzbwobwobwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjcbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabczocHOczqbikczocHOczqbikczocHOczqaabbikbikbikbikbikbikbikaabaabbikbikaabaabaabcJbcKjcKjcKkcGIcKmcKmcKncKocKocKpcKqcKrcGOcHWcGOcKscGOcGOcGOcDtcKtcKucKvcKwcKxcKycKzcKAcKBcKCcKCcKCcKDcKEcKFcKGcKHcKIcHhcCAcKJcKKcKLcKMcKNcDFcJBcKOcKPcKQcKRcDQcKScIFcIFcCKcHBcoDcEhbVibVibVibYDclUcOtcCOczVcOBcyScPocPMcyTcPVcPQclUcuscGvbVibGycyHbGycoAbikbikckPcLicLjcLkcwAcLlcLmcLncwAcLocLpcLqckPaabaabbikbikbikbikbikbikbikbikbwocvzbxXbxXbwoaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabczocHOczqbikczocHOczqaabczocHOczqaabaabaabbikaabbikbikaabaabbikbikbikaabbikbikcJbcKjcKjcKkcLscLscLscLtcLucLvcECcLwcLxcLycLzcLAcLBcLCcLDcLDcLEcLFcLGcGOcGOcGOcLHcLIcLJcLKcLLcLMcLNcLOcLPcECcLQcLQcLRcHhcCAcLScLTcLUcLVcLWcDFcLXcLYcLZcMacMbcCKcCKcCKcCKcCKcHBcoDcEhcLbbGybGybYDclUcPYczVcDXcQgcDZcQMcRwcyTdbkcYuclUcuscGvczhbGychCcITcoAbikbikckPcMpcxOcxOcwAcMpcxOcxOcwAcMpcxOcxOckPbikaabaabbikbikbikbikbikbikbikbwocLccyJbxXbwobwobwocJNcJNaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagiaabczocMqczqbikczocMqczqbikczocMqczqaabafxaabaabaabaabaabaabbikbikbikbikbikbikaabcJbcMrcMscLscLscLscMtcMucMucMucMucMucMucMucMvcMwcMxcMycMzcMzcMzcMAcMBdcpdcodcvcMzcMBcMDcMEcMFcLMcMGcLOcLPcMHcMIcMJcMKcMLcMMcMNcMOcKNcMPcMQcMRcMScMTcMUcIDcMVcDQcMWcMXcMXcCKcHBcoAcEhbVicozcLdbYDclUdcwczVczVdcxcySdcydczcyTdcBdcAclUcuscGvbVibGybVibVicoAaabaabckPcNncBZcxOcwAcNncBZcxOcwAcNncBZcxOckPbikbikaabaabbikbikbikbikbikbikbwocvzcyJcLecyJcLfbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxbikaabbikbikbikaabaabaabbikbikaabaabbikafxaabaabaabaabaabbikbikbikbikbikbikbikaabcJbcNocLscLscLscLscLscMubhGcNpcHscNrcNtcMucNucNvcNwcJecGOcGOcNxdcCcNzcNAcNBdcDcNCdcEcECdcFcMFcLMcNFcLOcNGcECcNHcLQcNIcNJcDFcMNcMOcNKcDFcMQcMRcJBcJCcNLcJEcNMcEVcNNcNOcNPcCKcHBcoAcEhbVicLgcLgbYDclUdcHdcGdcJdcIcEZclUclUclUclUclUclUcuscGvbVibGybGycMfcoAbikbikckPcOacxOcxOcwAcOacxOcxOcwAcOacxOcxOckPbikbikbikaabaabbikbikbikbikbikbwocvzcyJbxXbxXbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxacGacGagiafxafxafxafxacGafxafxacGcOcaabbikbikbikbikbikbikbikbikbikbikbikbikcJbcOdcLucLscLscLscOecMucNpcNqcOkcOlcOmcOncOocOpcOqcOrcGOcOsdcKcOucOvcOwcOxcOycOzcOAdcLcNwcJecOCcODcLKcOEcECcOFcLQcOGcOHcDFcMNcMOcKNcDFcOIcMRcJBcOJcOKcKQcOLcDQcOMcMXcMXcCKcHBcoDcEhcMgchCbJGbYDclUclUclUcMhclUdblcFacFcbVicMjcMibGycuscGvbVibGycMkcITcoAbikbikckPckPckPckPckPckPckPckPckPckPckPckPckPbikbikbikbikaabaabbikbikbwobwobwocvzcyJcMmcMlbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabcJbcJbcJbdeBcOXcOXcOXcMucOYcOZcPacPacPbcPccMzcPdcPecPfcPgcPhdcMcPicPjcPkcPlcPmcPncPidcNcPpcPqcPrcPscPtcPucPvcNHcLQcPwcPxcDFcMNcDFcPycDFcMQcMRcJBcJCcPzcJEcNMcCKcCKcCKcCKcCKcHBcoDcMncKXchCcITcMYcMocMocMocMZbVicFgcFecFhbVicNacKVcKVcNbcHrczhbGybGycoAcoAbikbikcONaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikaabaabbikbwocyKcNccNdcyJcNfcNebxXcxHbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikczocHOczqaabczocHOczqbikczocHOczqbikbikbikaabbikbikbikbikaabaabaabbikbikaabaabcJbcJbcJbcJbcJbcJbcJbcJccJbcJbcECcJdcJecGOcHWcFNcJfcFNcJgcLhcDtcJicJjcFWcJkcFRcDtcJmcDzcDwcJncJocJpcIncJqcJrcJscJtcJucJvcJwcJtcJxcJycJzcJAcDFcJBcJCcJDcJEaabcEVcJFcJGcJHcCKcHBcoDcKWcKVcKVcKVcKXclUcFacyLcCLcFecyScCMcyTcyTcyScCNclUcuscGvbVibGycKYcKZcoAbikbikckPcJVcJWcJXcJYcJVcJWcJZcKacJVcJWcLackPaabaabaabaabaabaabaabaabaabaabbwocvzbwobwobwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjcbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabczocHOczqbikczocHOczqbikczocHOczqaabbikbikbikbikbikbikbikaabaabbikbikaabaabaabcJbcKjcKjcKkcGIcKmcKmcKncKocKocKpcKqcKrcGOcHWcGOcKscGOcGOcGOcDtcKtcKucKvcKwcKxcKycKzcKAcKBcKCcKCcKCcKDcKEcKFcKGcKHcKIcHhcCAcKJcKKcKLcKMcKNcDFcJBcKOcKPcKQcKRcDQcKScIFcIFcCKcHBcoDcEhbVibVibVibYDclUcFgcCOcDXcNDcyScPocPMcyTcPVcPQclUcuscGvbVibGycyHbGycoAbikbikckPcLicLjcLkcwAcLlcLmcLncwAcLocLpcLqckPaabaabbikbikbikbikbikbikbikbikbwocvzbxXbxXbwoaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabczocHOczqbikczocHOczqaabczocHOczqaabaabaabbikaabbikbikaabaabbikbikbikaabbikbikcJbcKjcKjcKkcLscLscLscLtcLucLvcECcLwcLxcLycLzcLAcLBcLCcLDcLDcLEcLFcLGcGOcGOcGOcLHcLIcLJcLKcLLcLMcLNcLOcLPcECcLQcLQcLRcHhcCAcLScLTcLUcLVcLWcDFcLXcLYcLZcMacMbcCKcCKcCKcCKcCKcHBcoDcEhcLbbGybGybYDclUcNEczVczVcOtcDZcQMcRwcyTdbkcYuclUcuscGvczhbGychCcITcoAbikbikckPcMpcxOcxOcwAcMpcxOcxOcwAcMpcxOcxOckPbikaabaabbikbikbikbikbikbikbikbwocLccyJbxXbwobwobwocJNcJNaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagiaabczocMqczqbikczocMqczqbikczocMqczqaabafxaabaabaabaabaabaabbikbikbikbikbikbikaabcJbcMrcMscLscLscLscMtcMucMucMucMucMucMucMucMvcMwcMxcMycMzcMzcMzcMAcMBdcpdcodcvcMzcMBcMDcMEcMFcLMcMGcLOcLPcMHcMIcMJcMKcMLcMMcMNcMOcKNcMPcMQcMRcMScMTcMUcIDcMVcDQcMWcMXcMXcCKcHBcoAcEhbVicozcLdbYDclUcOBczVcQgcPYcySdcydczcyTdcBdcAclUcuscGvbVibGybVibVicoAaabaabckPcNncBZcxOcwAcNncBZcxOcwAcNncBZcxOckPbikbikaabaabbikbikbikbikbikbikbwocvzcyJcLecyJcLfbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxbikaabbikbikbikaabaabaabbikbikaabaabbikafxaabaabaabaabaabbikbikbikbikbikbikbikaabcJbcNocLscLscLscLscLscMubhGcNpcHscNrcNtcMucNucNvcNwcJecGOcGOcNxdcCcNzcNAcNBdcDcNCdcEcECdcFcMFcLMcNFcLOcNGcECcNHcLQcNIcNJcDFcMNcMOcNKcDFcMQcMRcJBcJCcNLcJEcNMcEVcNNcNOcNPcCKcHBcoAcEhbVicLgcLgbYDclUclUdbldcwclUcEZclUclUclUclUclUclUcuscGvbVibGybGycMfcoAbikbikckPcOacxOcxOcwAcOacxOcxOcwAcOacxOcxOckPbikbikbikaabaabbikbikbikbikbikbwocvzcyJbxXbxXbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxacGacGagiafxafxafxafxacGafxafxacGcOcaabbikbikbikbikbikbikbikbikbikbikbikbikcJbcOdcLucLscLscLscOecMucNpcNqcOkcOlcOmcOncOocOpcOqcOrcGOcOsdcKcOucOvcOwcOxcOycOzcOAdcLcNwcJecOCcODcLKcOEcECcOFcLQcOGcOHcDFcMNcMOcKNcDFcOIcMRcJBcOJcOKcKQcOLcDQcOMcMXcMXcCKcHBcoDcEhcMgchCbJGbYDdcxclUclUcMhclUdcHdcGcFcbVicMjcMibGycuscGvbVibGycMkcITcoAbikbikckPckPckPckPckPckPckPckPckPckPckPckPckPbikbikbikbikaabaabbikbikbwobwobwocvzcyJcMmcMlbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabcJbcJbcJbdeBcOXcOXcOXcMucOYcOZcPacPacPbcPccMzcPdcPecPfcPgcPhdcMcPicPjcPkcPlcPmcPncPidcNcPpcPqcPrcPscPtcPucPvcNHcLQcPwcPxcDFcMNcDFcPycDFcMQcMRcJBcJCcPzcJEcNMcCKcCKcCKcCKcCKcHBcoDcMncKXchCcITcMYcMocMocMocMZbVidcJdcIcFhbVicNacKVcKVcNbcHrczhbGybGycoAcoAbikbikcONaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikaabaabbikbwocyKcNccNdcyJcNfcNebxXcxHbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabcPEcLscLscOXaabaabcMucPHcPIcPacPacPJcMucPKcPLdcOcPNcPOcPPdcPcECcPRcPScPTcGOcPUcECdcQcPWcPXcPNcPNdcRcPZcECcQacLQcQbcQccDFcMNcDFcLScLTcQdcQecMScQfdcScIDcQhcDQcQicQjcQjcCKcHBcoDcNhcNgbVibVicEhbVibVibGycNibVibVicGwbVibVicNkcNjcNmcNlcNQcoAcoAcoAcoAbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikbikaabaabbwocNRcunbOMcyJcyJcyJbxXbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikaabaabcPEcLscLscOXaabbikcMucQscPIcPacPacQtcMucQucQvcECcQwcQxcQxdcTcECcQycQzcQAcQBdcUcECcQxcQxcQxcQwcECcQCcQucECcNHcLQcJlcQEcQFcQGcQHcQIcQJcQKcIAcQLcJCdcVcJEcNMcEVcQNcQOcQPcCKcHBcoAcoAcEhcdbcNScEhcNTbVibGycNVcNUcNXcNWcMocMocNYcGvbVicNZcoAcoAbikbikaabbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikbwobwobwobwobwocOObOMcyJcOQcOPbxXbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabcPEcOXdeBcPEbikbikcMucQVcQWcPacPacQXcMucQYcQZdcWcRacRbcRccRdcRecRfcRgcRhcRicPucRecRbcRbcRbcRjdcWcRkcRlcECcNHcRmcMNcRncRocQJcRpcRqcRrcRscRtcRucRvdcXcKQcOLcDQcRxcQjcQjcCKcHBcoAbGycORcOTcOScNYcgmbVibGybGybGycGvcOUbGycGqcFicHrbVicEhbwobikbikbikaabbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikbwobxXbxXbxXcyKcOOcOVcyJcPAbxXbxXbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
@@ -8941,8 +8953,8 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGcVucVvcVEcVHcVIcVJcVJcVKcVLcVJcVMcVNcVJcVJcVIcVOcVvcVEcVFacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQbikaabbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGcVucVPcVQcVRcVRcVScVTcVUcVVcVWcVWcVXcVYcVZcWacWacWbcWccVFacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQagQagQagQagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGcVucWdcWecWfcWfcVJcWgcWhcWhcWicWhcWhcWjcVJcWfcWfcWkcWlcVFacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGcVucWdcVFbikbikcVJcWmcWncWocWpcWqcWrcWscVJbikbikcVucWlcVFacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
-bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGcVucWtcWucWucWucVJcWvcWwcWhcWhcWxcWycWzcVJcWucWucWucWAcVFacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGcVucWdcVFbikbikcVJcWmcWncWocWvcWqcWrcWscVJbikbikcVucWlcVFacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGcVucWtcWucWucWucVJcWzcWwcWhcWhcWxcWydgYcVJcWucWucWucWAcVFacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGcVucWdcVFbikbikcWBcWCcWBcWDcWEcWBcWBcWFcWBbikbikcVucWlcVFacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikacGcVucWdcVFbikbikcWBcWGcWHcWIcWJcWKcWLcWMcWBbikbikcVucWlcVFacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGcVucWdcVFbikcWBcWBcWNcWLboSboSboScWLcWOcWBcWBbikcVucWlcVFacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm
index 914253e4ae2..d1aa08e97d4 100644
--- a/_maps/map_files/cyberiad/z2.dmm
+++ b/_maps/map_files/cyberiad/z2.dmm
@@ -192,7 +192,7 @@
"dJ" = (/obj/structure/rack,/obj/item/toy/sword,/obj/item/weapon/gun/projectile/revolver/capgun,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding)
"dK" = (/obj/structure/stool/bed,/turf/unsimulated/floor{icon_state = "panelscorched"},/area/prison/solitary)
"dL" = (/obj/structure/stool/bed,/obj/effect/decal/cleanable/cobweb,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary)
-"dM" = (/obj/machinery/prize_counter/upgraded,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding)
+"dM" = (/obj/machinery/prize_counter,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding)
"dN" = (/turf/simulated/floor/holofloor{tag = "icon-asteroid3 (EAST)"; icon_state = "asteroid3"; dir = 4},/area/holodeck/source_desert)
"dO" = (/turf/simulated/floor/holofloor{tag = "icon-carpet1-0 (EAST)"; icon_state = "carpet1-0"; dir = 4},/area/holodeck/source_theatre)
"dP" = (/obj/structure/stool,/turf/simulated/floor/holofloor{tag = "icon-carpet5-1 (EAST)"; icon_state = "carpet5-1"; dir = 4},/area/holodeck/source_theatre)
diff --git a/_maps/map_files/cyberiad/z5.dmm b/_maps/map_files/cyberiad/z5.dmm
index 02e4b76f929..861681ce06f 100644
--- a/_maps/map_files/cyberiad/z5.dmm
+++ b/_maps/map_files/cyberiad/z5.dmm
@@ -886,7 +886,7 @@
"rc" = (/obj/machinery/light/small{dir = 4},/obj/structure/stool/bed/roller,/obj/machinery/light_switch{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp)
"rd" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/closet/crate/internals,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp)
"re" = (/obj/machinery/light/small,/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp)
-"rf" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=2-NMine"; location = "1-Storage"},/obj/machinery/bot/secbot/ofitser,/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/laborcamp)
+"rf" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=2-NMine"; location = "1-Storage"},/mob/living/simple_animal/bot/secbot/ofitser,/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/laborcamp)
"rg" = (/obj/structure/plasticflaps/mining,/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/laborcamp)
"rh" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=3-SMine"; location = "2-NMine"},/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/laborcamp)
"ri" = (/turf/simulated/floor/plating{icon_plating = "asteroidplating"; icon_state = "asteroidplating"},/area/mine/laborcamp)
diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm
index 825ed6d3f0e..104c590cccc 100644
--- a/_maps/map_files/cyberiad/z6.dmm
+++ b/_maps/map_files/cyberiad/z6.dmm
@@ -191,7 +191,7 @@
"dI" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
"dJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/derelict/bridge/access)
"dK" = (/obj/machinery/door/window/eastleft{name = "Heads of Staff"; req_access_txt = "19"},/turf/simulated/floor/plasteel,/area/derelict/bridge/access)
-"dL" = (/obj/machinery/bot/secbot/buzzsky,/turf/simulated/floor/plasteel,/area/derelict/bridge)
+"dL" = (/mob/living/simple_animal/bot/secbot/buzzsky,/turf/simulated/floor/plasteel,/area/derelict/bridge)
"dM" = (/obj/structure/table,/obj/item/device/paicard,/turf/simulated/floor/plasteel,/area/derelict/bridge)
"dN" = (/obj/structure/stool,/turf/simulated/floor/plasteel,/area/derelict/bridge)
"dO" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel,/area/derelict/bridge)
diff --git a/bin/bygex.dll b/bin/bygex.dll
deleted file mode 100644
index b19c0f14b1e..00000000000
Binary files a/bin/bygex.dll and /dev/null differ
diff --git a/btime.dll b/btime.dll
deleted file mode 100644
index 36dcbe3af75..00000000000
Binary files a/btime.dll and /dev/null differ
diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index 3686bc46d2f..af0889a6e5c 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -153,7 +153,7 @@ Pipelines + Other Objects -> Pipe network
if(can_unwrench && istype(W, /obj/item/weapon/wrench))
var/turf/T = get_turf(src)
if (level == 1 && isturf(T) && T.intact)
- user << "You must remove the plating first."
+ to_chat(user, "You must remove the plating first.")
return 1
var/datum/gas_mixture/int_air = return_air()
var/datum/gas_mixture/env_air = loc.return_air()
@@ -163,9 +163,9 @@ Pipelines + Other Objects -> Pipe network
var/internal_pressure = int_air.return_pressure()-env_air.return_pressure()
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
- user << "You begin to unfasten \the [src]..."
+ to_chat(user, "You begin to unfasten \the [src]...")
if (internal_pressure > 2*ONE_ATMOSPHERE)
- user << "As you begin unwrenching \the [src] a gush of air blows in your face... maybe you should reconsider?"
+ 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))
diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
index 9fe7885c052..93bed0168c1 100644
--- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
@@ -134,7 +134,7 @@
return
src.add_fingerprint(usr)
if(!src.allowed(user))
- user << "Access denied."
+ to_chat(user, "Access denied.")
return
usr.set_machine(src)
interact(user)
@@ -158,7 +158,7 @@
if (!istype(W, /obj/item/weapon/wrench))
return ..()
if (on)
- user << "You cannot unwrench this [src], turn it off first."
+ 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/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm
index f091135940b..9ef395e3291 100644
--- a/code/ATMOSPHERICS/components/binary_devices/pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm
@@ -157,7 +157,7 @@ Thus, the two variables affect pump operation are set in New():
return
src.add_fingerprint(usr)
if(!src.allowed(user))
- user << "Access denied."
+ to_chat(user, "Access denied.")
return
usr.set_machine(src)
interact(user)
@@ -188,6 +188,6 @@ Thus, the two variables affect pump operation are set in New():
if (!istype(W, /obj/item/weapon/wrench))
return ..()
if (!(stat & NOPOWER) && on)
- user << "You cannot unwrench this [src], turn it off first."
+ 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 a46382ab085..1c0f625e036 100644
--- a/code/ATMOSPHERICS/components/binary_devices/valve.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/valve.dm
@@ -74,7 +74,7 @@
if(!powered())
return
if(!src.allowed(user))
- user << "Access denied."
+ to_chat(user, "Access denied.")
return
..()
diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
index c697251bc44..e0acb101a96 100644
--- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
@@ -147,7 +147,7 @@ Thus, the two variables affect pump operation are set in New():
return
src.add_fingerprint(usr)
if(!src.allowed(user))
- user << "Access denied."
+ to_chat(user, "Access denied.")
return
usr.set_machine(src)
interact(user)
@@ -178,6 +178,6 @@ Thus, the two variables affect pump operation are set in New():
if (!istype(W, /obj/item/weapon/wrench))
return ..()
if (!(stat & NOPOWER) && on)
- user << "You cannot unwrench this [src], turn it off first."
+ 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/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm
index f1241079ad3..89bec1b0614 100644
--- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm
+++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm
@@ -104,11 +104,11 @@
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)
- user << "You cannot unwrench [src], it is too exerted due to internal pressure."
+ to_chat(user, "You cannot unwrench [src], it is too exerted due to internal pressure.")
add_fingerprint(user)
return 1
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
- user << "You begin to unfasten \the [src]..."
+ to_chat(user, "You begin to unfasten \the [src]...")
if(do_after(user, 40, target = src))
user.visible_message( \
"[user] unfastens \the [src].", \
diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
index 7ec6d70d119..f26ae014a27 100755
--- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
@@ -153,7 +153,7 @@ Filter types:
return
if(!src.allowed(user))
- user << "Access denied."
+ to_chat(user, "Access denied.")
return
var/dat
diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
index 5d33e3cb605..e54815299ef 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
@@ -114,7 +114,7 @@
return
src.add_fingerprint(usr)
if(!src.allowed(user))
- user << "Access denied."
+ to_chat(user, "Access denied.")
return
usr.set_machine(src)
var/dat = {"Power: [on?"On":"Off"]
diff --git a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm
index 16df97b6ea6..2195bab16d8 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm
@@ -135,7 +135,7 @@
if(!powered())
return
if(!src.allowed(user))
- user << "Access denied."
+ to_chat(user, "Access denied.")
return
..()
diff --git a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm
index 92bdee806bf..1b106c12a1c 100644
--- a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm
@@ -171,7 +171,7 @@
return 1
if(istype(W, /obj/item/weapon/wrench))
if (!(stat & NOPOWER) && on)
- user << "You cannot unwrench this [src], turn if off first."
+ to_chat(user, "You cannot unwrench this [src], turn if off first.")
return 1
return ..()
diff --git a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm
index b9399f42e6c..8df6fec3cdf 100644
--- a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm
@@ -36,7 +36,7 @@
/obj/machinery/atmospherics/unary/portables_connector/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params)
if(istype(W, /obj/item/weapon/wrench))
if(connected_device)
- user << "You cannot unwrench this [src], detach [connected_device] first."
+ to_chat(user, "You cannot unwrench this [src], detach [connected_device] first.")
return 1
return ..()
diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm
index 3366777a081..636f549d6d2 100644
--- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm
@@ -322,7 +322,7 @@
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if (WT.remove_fuel(0,user))
- user << "Now welding the vent."
+ to_chat(user, "Now welding the vent.")
if(do_after(user, 20, target = src))
if(!src || !WT.isOn()) return
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
@@ -336,19 +336,19 @@
update_icon()
else
- user << "The welding tool needs to be on to start this task."
+ to_chat(user, "The welding tool needs to be on to start this task.")
else
- user << "You need more welding fuel to complete this task."
+ to_chat(user, "You need more welding fuel to complete this task.")
return 1
if(istype(W, /obj/item/weapon/screwdriver))
if(!welded)
if(open)
- user << " Now closing the vent."
+ to_chat(user, " Now closing the vent.")
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
- user << " Now opening the vent."
+ to_chat(user, " Now opening the vent.")
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.")
@@ -359,16 +359,16 @@
user.drop_item(W)
W.forceMove(src)
if(!open)
- user << "You can't shove that down there when it is closed"
+ to_chat(user, "You can't shove that down there when it is closed")
else
- user << "The vent is welded."
+ to_chat(user, "The vent is welded.")
return
if(istype(W, /obj/item/device/multitool))
update_multitool_menu(user)
return 1
if (istype(W, /obj/item/weapon/wrench))
if (!(stat & NOPOWER) && on)
- user << "You cannot unwrench this [src], turn it off first."
+ to_chat(user, "You cannot unwrench this [src], turn it off first.")
return 1
return ..()
@@ -383,7 +383,7 @@
/obj/machinery/atmospherics/unary/vent_pump/examine(mob/user)
..(user)
if(welded)
- user << "It seems welded shut."
+ to_chat(user, "It seems welded shut.")
/obj/machinery/atmospherics/unary/vent_pump/power_change()
var/old_stat = stat
diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm
index cc62e860bde..cd8a88b12f5 100644
--- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm
@@ -58,7 +58,7 @@
/obj/machinery/atmospherics/unary/vent_pump/examine(mob/user)
..(user)
if(welded)
- user << "It seems welded shut."
+ to_chat(user, "It seems welded shut.")
/obj/machinery/atmospherics/unary/vent_scrubber/auto_use_power()
if(!powered(power_channel))
@@ -372,7 +372,7 @@
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if (WT.remove_fuel(0,user))
- user << "Now welding the scrubber."
+ to_chat(user, "Now welding the scrubber.")
if(do_after(user, 20, target = src))
if(!src || !WT.isOn()) return
playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1)
@@ -385,17 +385,17 @@
welded = 0
update_icon()
else
- user << "The welding tool needs to be on to start this task."
+ to_chat(user, "The welding tool needs to be on to start this task.")
return 1
else
- user << "You need more welding fuel to complete this task."
+ to_chat(user, "You need more welding fuel to complete this task.")
return 1
if(istype(W, /obj/item/device/multitool))
update_multitool_menu(user)
return 1
if (istype(W, /obj/item/weapon/wrench))
if (!(stat & NOPOWER) && on)
- user << "You cannot unwrench this [src], turn it off first."
+ to_chat(user, "You cannot unwrench this [src], turn it off first.")
return 1
return ..()
diff --git a/code/__DEFINES/bots.dm b/code/__DEFINES/bots.dm
new file mode 100644
index 00000000000..bb69bfe1e4f
--- /dev/null
+++ b/code/__DEFINES/bots.dm
@@ -0,0 +1,38 @@
+//Bot defines, placed here so they can be read by other things!
+
+#define BOT_STEP_DELAY 4 //Delay between movemements
+#define BOT_STEP_MAX_RETRIES 5 //Maximum times a bot will retry to step from its position
+
+#define DEFAULT_SCAN_RANGE 7 //default view range for finding targets.
+
+//Mode defines
+#define BOT_IDLE 0 // idle
+#define BOT_HUNT 1 // found target, hunting
+#define BOT_PREP_ARREST 2 // at target, preparing to arrest
+#define BOT_ARREST 3 // arresting target
+#define BOT_START_PATROL 4 // start patrol
+#define BOT_PATROL 5 // patrolling
+#define BOT_SUMMON 6 // summoned by PDA
+#define BOT_CLEANING 7 // cleaning (cleanbots)
+#define BOT_REPAIRING 8 // repairing hull breaches (floorbots)
+#define BOT_MOVING 9 // for clean/floor/med bots, when moving.
+#define BOT_HEALING 10 // healing people (medbots)
+#define BOT_RESPONDING 11 // responding to a call from the AI
+#define BOT_DELIVER 12 // moving to deliver
+#define BOT_GO_HOME 13 // returning to home
+#define BOT_BLOCKED 14 // blocked
+#define BOT_NAV 15 // computing navigation
+#define BOT_WAIT_FOR_NAV 16 // waiting for nav computation
+#define BOT_NO_ROUTE 17 // no destination beacon found (or no route)
+
+//Bot types
+#define SEC_BOT 1 // Secutritrons (Beepsky) and ED-209s
+#define MULE_BOT 2 // MULEbots
+#define FLOOR_BOT 4 // Floorbots
+#define CLEAN_BOT 8 // Cleanbots
+#define MED_BOT 16 // Medibots
+
+//Sentience types
+#define SENTIENCE_ORGANIC 1
+#define SENTIENCE_ARTIFICIAL 2
+#define SENTIENCE_OTHER 3
\ No newline at end of file
diff --git a/code/__DEFINES/btime.dm b/code/__DEFINES/btime.dm
deleted file mode 100644
index 33d5def1deb..00000000000
--- a/code/__DEFINES/btime.dm
+++ /dev/null
@@ -1,18 +0,0 @@
-// Comment this out if the external btime library is unavailable
-#define PRECISE_TIMER_AVAILABLE
-
-#ifdef PRECISE_TIMER_AVAILABLE
-var/global/__btime__libName = "btime.[world.system_type==MS_WINDOWS?"dll":"so"]"
-#define TimeOfHour (__extern__timeofhour)
-#define __extern__timeofhour text2num(call(__btime__libName, "gettime")())
-/hook/startup/proc/checkbtime()
- try
- // This will always return 1 unless the btime library cannot be accessed
- if(TimeOfHour || 1) return 1
- catch(var/exception/e)
- log_to_dd("PRECISE_TIMER_AVAILABLE is defined in btime.dm, but calling the btime library failed: [e]")
- log_to_dd("This is a fatal error. The world will now shut down.")
- del(world)
-#else
-#define TimeOfHour (world.timeofday % 36000)
-#endif
diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm
index 757c51a23ab..3be0682c727 100644
--- a/code/__DEFINES/genetics.dm
+++ b/code/__DEFINES/genetics.dm
@@ -112,3 +112,12 @@
#define BLIND 1
#define MUTE 2
#define DEAF 4
+
+//Nutrition levels for humans. No idea where else to put it
+#define NUTRITION_LEVEL_FAT 600
+#define NUTRITION_LEVEL_FULL 550
+#define NUTRITION_LEVEL_WELL_FED 450
+#define NUTRITION_LEVEL_FED 350
+#define NUTRITION_LEVEL_HUNGRY 250
+#define NUTRITION_LEVEL_STARVING 150
+
diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm
index ab41a74ecd3..628afa0f5e9 100644
--- a/code/__DEFINES/hud.dm
+++ b/code/__DEFINES/hud.dm
@@ -14,7 +14,8 @@
#define DIAG_HUD "9" // Silicon health bar
#define DIAG_BATT_HUD "10"// Borg/Mech power meter
#define DIAG_MECH_HUD "11"// Mech health bar
-#define STATUS_HUD_OOC "12" // STATUS_HUD without virus db check for someone being ill.
+#define STATUS_HUD_OOC "12"// STATUS_HUD without virus db check for someone being ill.
+#define DIAG_BOT_HUD "13"// Bot HUDS
//for antag huds. these are used at the /mob level
#define SPECIALROLE_HUD "13"
@@ -35,5 +36,8 @@
#define ANTAG_HUD_OPS 9
#define ANTAG_HUD_WIZ 10
#define ANTAG_HUD_SHADOW 11
-#define ANTAG_HUD_SOLO 12
-
+#define ANTAG_HUD_TRAITOR 12
+#define ANTAG_HUD_NINJA 13 //For Daves Rework
+#define ANTAG_HUD_CHANGELING 14
+#define ANTAG_HUD_VAMPIRE 15
+#define ANTAG_HUD_ABDUCTOR 16 //For Fox
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 5516dadfa6d..c6a78c418e6 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -182,4 +182,9 @@
#define TURF_WET_LUBE 2
#define TURF_WET_ICE 3
-#define APPEARANCE_UI_IGNORE_ALPHA RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|RESET_ALPHA
\ No newline at end of file
+#define APPEARANCE_UI_IGNORE_ALPHA RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|RESET_ALPHA
+
+// Metal foam states
+// teehee no one will find these here
+#define MFOAM_ALUMINUM 1
+#define MFOAM_IRON 2
diff --git a/code/__DEFINES/mob.dm b/code/__DEFINES/mob.dm
index 9f9d1d15c94..2bdb3432f69 100644
--- a/code/__DEFINES/mob.dm
+++ b/code/__DEFINES/mob.dm
@@ -94,3 +94,7 @@
#define DEFAULT_ITEM_PUTON_DELAY 20 //time taken (in deciseconsd) to reverse-strip somebody
#define IGNORE_ACCESS -1
+
+#define CHEM_MOB_SPAWN_INVALID 0
+#define CHEM_MOB_SPAWN_HOSTILE 1
+#define CHEM_MOB_SPAWN_FRIENDLY 2
\ No newline at end of file
diff --git a/code/__DEFINES/process_scheduler.dm b/code/__DEFINES/process_scheduler.dm
index af859e314ff..d9c8f106efc 100644
--- a/code/__DEFINES/process_scheduler.dm
+++ b/code/__DEFINES/process_scheduler.dm
@@ -16,4 +16,4 @@
// SCHECK macros
// This references src directly to work around a weird bug with try/catch
#define SCHECK_EVERY(this_many_calls) if(++src.calls_since_last_scheck >= this_many_calls) sleepCheck()
-#define SCHECK SCHECK_EVERY(50)
+#define SCHECK sleepCheck()
diff --git a/code/__DEFINES/stat.dm b/code/__DEFINES/stat.dm
index 756ae54765f..fe780c5d154 100644
--- a/code/__DEFINES/stat.dm
+++ b/code/__DEFINES/stat.dm
@@ -34,10 +34,22 @@
#define WAIT_FINISH 3
//shuttle mode defines
-#define SHUTTLE_IDLE 0
-#define SHUTTLE_RECALL 1
-#define SHUTTLE_CALL 2
-#define SHUTTLE_DOCKED 3
+#define SHUTTLE_IDLE 0
+#define SHUTTLE_RECALL 1
+#define SHUTTLE_CALL 2
+#define SHUTTLE_DOCKED 3
#define SHUTTLE_STRANDED 4
#define SHUTTLE_ESCAPE 5
-#define SHUTTLE_ENDGAME 6
\ No newline at end of file
+#define SHUTTLE_ENDGAME 6
+
+
+/*
+ Logic
+*/
+// State When to Use Example
+#define LOGIC_OFF 0 //Use this for when you want it to stay off (continuous signal, lever)
+#define LOGIC_ON 1 //Use this for when you want it to stay on (continuous signal, lever)
+#define LOGIC_FLICKER 2 //Use this for when you want it to turn on and then turn off (buttons, clocks)
+
+//Logic-related stuff (Misc. defines for logic things, to keep it organized or something)
+#define LOGIC_FLICKER_TIME 10 //number of deciseconds LOGIC_TEMP_ON will remain active before turning off
diff --git a/code/__HELPERS/_string_lists.dm b/code/__HELPERS/_string_lists.dm
index 3336e16b560..f9b5e179aa1 100644
--- a/code/__HELPERS/_string_lists.dm
+++ b/code/__HELPERS/_string_lists.dm
@@ -12,11 +12,11 @@ var/global/list/string_cache
var/list/stringsList = list()
fileList = file2list("strings/[filename]")
for(var/s in fileList)
- stringsList = text2list(s, "@=")
+ stringsList = splittext(s, "@=")
if(stringsList.len != 2)
CRASH("Invalid string list in strings/[filename]")
if(findtext(stringsList[2], "@,"))
- string_cache[filename][stringsList[1]] = text2list(stringsList[2], "@,")
+ string_cache[filename][stringsList[1]] = splittext(stringsList[2], "@,")
else
string_cache[filename][stringsList[1]] = stringsList[2] // Its a single string!
else
diff --git a/code/__HELPERS/bygex/bygex.dm b/code/__HELPERS/bygex/bygex.dm
deleted file mode 100644
index c5c4999ccca..00000000000
--- a/code/__HELPERS/bygex/bygex.dm
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- This file is part of bygex.
-
- bygex is free software: you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation, either version 3 of
- the License, or (at your option) any later version.
-
- bygex is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with bygex. If not, see
"
- current << "The convert rune is join blood self"
+ to_chat(current, "The convert rune is join blood self")
current.memory += "The convert rune is join blood self
"
var/mob/living/carbon/human/H = current
@@ -1331,10 +1331,10 @@
var/where = H.equip_in_one_of_slots(T, slots)
if (!where)
else
- H << "A tome, a message from your new master, appears in your [where]."
+ to_chat(H, "A tome, a message from your new master, appears in your [where].")
if (!ticker.mode.equip_cultist(current))
- H << "Spawning an amulet from your Master failed."
+ to_chat(H, "Spawning an amulet from your Master failed.")
/datum/mind/proc/make_Rev()
if (ticker.mode.head_revolutionaries.len>0)
diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm
index ebf7aa3938d..ebb2329b357 100644
--- a/code/datums/progressbar.dm
+++ b/code/datums/progressbar.dm
@@ -19,7 +19,7 @@
client = user.client
/datum/progressbar/proc/update(progress)
- //world << "Update [progress] - [goal] - [(progress / goal)] - [((progress / goal) * 100)] - [round(((progress / goal) * 100), 5)]"
+// to_chat(world, "Update [progress] - [goal] - [(progress / goal)] - [((progress / goal) * 100)] - [round(((progress / goal) * 100), 5)]")
if (!user || !user.client)
shown = 0
return
diff --git a/code/datums/spell.dm b/code/datums/spell.dm
index 31da89fd424..12b11abe529 100644
--- a/code/datums/spell.dm
+++ b/code/datums/spell.dm
@@ -58,7 +58,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
/obj/effect/proc_holder/spell/proc/cast_check(skipcharge = 0, mob/living/user = usr) //checks if the spell can be cast based on its settings; skipcharge is used when an additional cast_check is called inside the spell
if(((!user.mind) || !(src in user.mind.spell_list)) && !(src in user.spell_list))
- user << "You shouldn't have this spell! Something's wrong."
+ to_chat(user, "You shouldn't have this spell! Something's wrong.")
return 0
if (istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/caster = user
@@ -76,34 +76,34 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
switch(charge_type)
if("recharge")
if(charge_counter < charge_max)
- user << still_recharging_msg
+ to_chat(user, still_recharging_msg)
return 0
if("charges")
if(!charge_counter)
- user << "[name] has no charges left."
+ to_chat(user, "[name] has no charges left.")
return 0
if(!ghost)
if(user.stat && !stat_allowed)
- user << "Not when you're incapacitated."
+ to_chat(user, "Not when you're incapacitated.")
return 0
if(ishuman(user) && (invocation_type == "whisper" || invocation_type == "shout") && user.is_muzzled())
- user << "Mmmf mrrfff!"
+ to_chat(user, "Mmmf mrrfff!")
return 0
var/obj/effect/proc_holder/spell/noclothes/spell = locate() in (user.spell_list | (user.mind ? user.mind.spell_list : list()))
if(clothes_req && !(spell && istype(spell)))//clothes check
if(!istype(user, /mob/living/carbon/human))
- user << "You aren't a human, Why are you trying to cast a human spell, silly non-human? Casting human spells is for humans."
+ to_chat(user, "You aren't a human, Why are you trying to cast a human spell, silly non-human? Casting human spells is for humans.")
return 0
if(!istype(user:wear_suit, /obj/item/clothing/suit/wizrobe) && !istype(user:wear_suit, /obj/item/clothing/suit/space/rig/wizard))
- user << "I don't feel strong enough without my robe."
+ to_chat(user, "I don't feel strong enough without my robe.")
return 0
if(!istype(user:shoes, /obj/item/clothing/shoes/sandal))
- user << "I don't feel strong enough without my sandals."
+ to_chat(user, "I don't feel strong enough without my sandals.")
return 0
if(!istype(user:head, /obj/item/clothing/head/wizard) && !istype(user:head, /obj/item/clothing/head/helmet/space/rig/wizard))
- user << "I don't feel strong enough without my hat."
+ to_chat(user, "I don't feel strong enough without my hat.")
return 0
if(!skipcharge)
@@ -193,7 +193,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
else if(istype(target,/turf))
location = target
if(istype(target,/mob/living) && message)
- target << text("[message]")
+ to_chat(target, text("[message]"))
if(sparks_spread)
var/datum/effect/system/spark_spread/sparks = new /datum/effect/system/spark_spread()
sparks.set_up(sparks_amt, 0, location) //no idea what the 0 is
diff --git a/code/datums/spells/area_teleport.dm b/code/datums/spells/area_teleport.dm
index 6041122fd98..ad0b6fa61de 100644
--- a/code/datums/spells/area_teleport.dm
+++ b/code/datums/spells/area_teleport.dm
@@ -27,7 +27,7 @@
var/area/thearea = teleportlocs[A]
if(thearea.tele_proof && !istype(thearea, /area/wizard_station))
- usr << "A mysterious force disrupts your arcane spell matrix, and you remain where you are."
+ to_chat(usr, "A mysterious force disrupts your arcane spell matrix, and you remain where you are.")
return
return thearea
@@ -46,7 +46,7 @@
L+=T
if(!L.len)
- usr <<"The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry."
+ to_chat(usr, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.")
return
if(target && target.buckled)
diff --git a/code/datums/spells/bloodcrawl.dm b/code/datums/spells/bloodcrawl.dm
index 8af7ee8dfb3..7f6f4d4fb2a 100644
--- a/code/datums/spells/bloodcrawl.dm
+++ b/code/datums/spells/bloodcrawl.dm
@@ -18,11 +18,11 @@
perform(target)
return
revert_cast()
- user << "There must be a nearby source of blood!"
+ to_chat(user, "There must be a nearby source of blood!")
/obj/effect/proc_holder/spell/bloodcrawl/perform(obj/effect/decal/cleanable/target, recharge = 1, mob/living/user = usr)
if(istype(user))
- if(phased == 1)
+ if(phased)
if(user.phasein(target))
phased = 0
else
@@ -31,4 +31,4 @@
start_recharge()
return
revert_cast()
- user << "You are unable to blood crawl!"
\ No newline at end of file
+ to_chat(user, "You are unable to blood crawl!")
diff --git a/code/datums/spells/charge.dm b/code/datums/spells/charge.dm
index 36e253f8e91..b46472c35b9 100644
--- a/code/datums/spells/charge.dm
+++ b/code/datums/spells/charge.dm
@@ -26,9 +26,9 @@
if(M.mind)
for(var/obj/effect/proc_holder/spell/S in M.mind.spell_list)
S.charge_counter = S.charge_max
- M <<"you feel raw magic flowing through you, it feels good!"
+ to_chat(M, "you feel raw magic flowing through you, it feels good!")
else
- M <<"you feel very strange for a moment, but then it passes."
+ to_chat(M, "you feel very strange for a moment, but then it passes.")
burnt_out = 1
charged_item = M
break
@@ -44,8 +44,8 @@
charged_item = I
break
else
- L << "Glowing red letters appear on the front cover..."
- L << "[pick("NICE TRY BUT NO!","CLEVER BUT NOT CLEVER ENOUGH!", "SUCH FLAGRANT CHEESING IS WHY WE ACCEPTED YOUR APPLICATION!", "CUTE!", "YOU DIDN'T THINK IT'D BE THAT EASY, DID YOU?")]"
+ to_chat(L, "Glowing red letters appear on the front cover...")
+ to_chat(L, "[pick("NICE TRY BUT NO!","CLEVER BUT NOT CLEVER ENOUGH!", "SUCH FLAGRANT CHEESING IS WHY WE ACCEPTED YOUR APPLICATION!", "CUTE!", "YOU DIDN'T THINK IT'D BE THAT EASY, DID YOU?")]")
burnt_out = 1
else if(istype(item, /obj/item/weapon/gun/magic))
var/obj/item/weapon/gun/magic/I = item
@@ -85,8 +85,8 @@
charged_item = item
break
if(!charged_item)
- L << "you feel magical power surging to your hands, but the feeling rapidly fades..."
+ to_chat(L, "you feel magical power surging to your hands, but the feeling rapidly fades...")
else if(burnt_out)
- L << "[charged_item] doesn't seem to be reacting to the spell..."
+ to_chat(L, "[charged_item] doesn't seem to be reacting to the spell...")
else
- L << "[charged_item] suddenly feels very warm!"
\ No newline at end of file
+ to_chat(L, "[charged_item] suddenly feels very warm!")
diff --git a/code/datums/spells/conjure.dm b/code/datums/spells/conjure.dm
index 52a38b8a198..bdd15eb34fe 100644
--- a/code/datums/spells/conjure.dm
+++ b/code/datums/spells/conjure.dm
@@ -3,7 +3,7 @@
desc = "This spell conjures objs of the specified types in range."
var/list/summon_type = list() //determines what exactly will be summoned
- //should be text, like list("/obj/machinery/bot/ed209")
+ //should be text, like list("/mob/simple_animal/bot/ed209")
var/summon_lifespan = 0 // 0=permanent, any other time in deciseconds
var/summon_amt = 1 //amount of objects summoned
@@ -31,7 +31,7 @@
targets -= spawn_place
if(ispath(summoned_object_type,/turf))
if(istype(get_turf(usr),/turf/simulated/shuttle))
- usr << "\red You can't build things on shuttles!"
+ to_chat(usr, "\red You can't build things on shuttles!")
break
var/turf/O = spawn_place
var/N = summoned_object_type
@@ -61,7 +61,7 @@
name = "Dispense Wizard Justice"
desc = "This spell dispenses wizard justice."
- summon_type = list(/obj/machinery/bot/ed209)
+ summon_type = list(/mob/living/simple_animal/bot/ed209)
summon_amt = 10
range = 3
newVars = list("emagged" = 1,"name" = "Wizard's Justicebot")
\ No newline at end of file
diff --git a/code/datums/spells/ethereal_jaunt.dm b/code/datums/spells/ethereal_jaunt.dm
index 867eb048903..384ec56915d 100644
--- a/code/datums/spells/ethereal_jaunt.dm
+++ b/code/datums/spells/ethereal_jaunt.dm
@@ -20,7 +20,7 @@
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/cast(list/targets) //magnets, so mostly hardcoded
for(var/mob/living/target in targets)
if(!target.can_safely_leave_loc()) // No more brainmobs hopping out of their brains
- target << "You are somehow too bound to your current location to abandon it."
+ to_chat(target, "You are somehow too bound to your current location to abandon it.")
continue
spawn(0)
@@ -111,7 +111,7 @@
if(!(newLoc.flags & NOJAUNT))
loc = newLoc
else
- user << "Some strange aura is blocking the way!"
+ to_chat(user, "Some strange aura is blocking the way!")
src.canmove = 0
spawn(2) src.canmove = 1
diff --git a/code/datums/spells/horsemask.dm b/code/datums/spells/horsemask.dm
index 2c31c943284..d39ff42ea51 100644
--- a/code/datums/spells/horsemask.dm
+++ b/code/datums/spells/horsemask.dm
@@ -18,7 +18,7 @@
/obj/effect/proc_holder/spell/targeted/horsemask/cast(list/targets, mob/user = usr)
if(!targets.len)
- user << "No target found in range."
+ to_chat(user, "No target found in range.")
return
var/mob/living/carbon/target = targets[1]
@@ -27,11 +27,11 @@
return
if((target.type in compatible_mobs) || ishuman(target))
- user << "It'd be stupid to curse [target] with a horse's head!"
+ to_chat(user, "It'd be stupid to curse [target] with a horse's head!")
return
if(!(target in oview(range)))//If they are not in overview after selection.
- user << "They are too far away!"
+ to_chat(user, "They are too far away!")
return
var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead
@@ -44,4 +44,4 @@
qdel(target.wear_mask)
target.equip_to_slot_if_possible(magichead, slot_wear_mask, 1, 1)
- flick("e_flash", target.flash)
+ target.flash_eyes()
diff --git a/code/datums/spells/lichdom.dm b/code/datums/spells/lichdom.dm
index f63a296cec9..76a5b0f6001 100644
--- a/code/datums/spells/lichdom.dm
+++ b/code/datums/spells/lichdom.dm
@@ -44,19 +44,20 @@
if(stat_allowed) //Death is not my end!
if(M.stat == CONSCIOUS && iscarbon(M))
- M << "You aren't dead enough to revive!" //Usually a good problem to have
+ to_chat(M, "You aren't dead enough to revive!")//Usually a good problem to have
+
charge_counter = charge_max
return
if(!marked_item || qdeleted(marked_item)) //Wait nevermind
- M << "Your phylactery is gone!"
+ to_chat(M, "Your phylactery is gone!")
return
var/turf/user_turf = get_turf(M)
var/turf/item_turf = get_turf(marked_item)
if(user_turf.z != item_turf.z)
- M << "Your phylactery is out of range!"
+ to_chat(M, "Your phylactery is out of range!")
return
if(isobserver(M))
@@ -73,7 +74,7 @@
lich.real_name = M.mind.name
M.mind.transfer_to(lich)
lich.set_species("Skeleton")
- lich << "Your bones clatter and shutter as they're pulled back into this world!"
+ to_chat(lich, "Your bones clatter and shutter as they're pulled back into this world!")
charge_max += 600
var/mob/old_body = current_body
var/turf/body_turf = get_turf(old_body)
@@ -97,16 +98,16 @@
if(ABSTRACT in item.flags || NODROP in item.flags)
continue
marked_item = item
- M << "You begin to focus your very being into the [item.name]..."
+ to_chat(M, "You begin to focus your very being into the [item.name]...")
break
if(!marked_item)
- M << "You must hold an item you wish to make your phylactery..."
+ to_chat(M, "You must hold an item you wish to make your phylactery...")
return
spawn(50)
if(marked_item.loc != M) //I changed my mind I don't want to put my soul in a cheeseburger!
- M << "Your soul snaps back to your body as you drop the [marked_item.name]!"
+ to_chat(M, "Your soul snaps back to your body as you drop the [marked_item.name]!")
marked_item = null
return
name = "RISE!"
@@ -117,7 +118,7 @@
marked_item.name = "Ensouled [marked_item.name]"
marked_item.desc = "A terrible aura surrounds this item, its very existence is offensive to life itself..."
marked_item.color = "#003300"
- M << "With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As your organs crumble to dust in your fleshless chest you come to terms with your choice. You're a lich!"
+ to_chat(M, "With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As your organs crumble to dust in your fleshless chest you come to terms with your choice. You're a lich!")
current_body = M.mind.current
if(ishuman(M))
var/mob/living/carbon/human/H = M
diff --git a/code/datums/spells/lightning.dm b/code/datums/spells/lightning.dm
index e99261aa8bd..00c04e5a792 100644
--- a/code/datums/spells/lightning.dm
+++ b/code/datums/spells/lightning.dm
@@ -30,7 +30,7 @@
/obj/effect/proc_holder/spell/targeted/lightning/proc/StartChargeup(mob/user = usr)
ready = 1
- user << "You start gathering the power."
+ to_chat(user, "You start gathering the power.")
halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER)
user.overlays.Add(halo)
start_time = world.time
@@ -45,13 +45,13 @@ obj/effect/proc_holder/spell/targeted/lightning/proc/Reset(mob/user = usr)
user.overlays.Remove(halo)
/obj/effect/proc_holder/spell/targeted/lightning/revert_cast(mob/user = usr)
- user << "No target found in range."
+ to_chat(user, "No target found in range.")
Reset(user)
..()
/obj/effect/proc_holder/spell/targeted/lightning/proc/Discharge(mob/user = usr)
var/mob/living/M = user
- M << "You lose control over the spell."
+ to_chat(M, "You lose control over the spell.")
Reset(user)
start_recharge()
@@ -60,7 +60,7 @@ obj/effect/proc_holder/spell/targeted/lightning/proc/Reset(mob/user = usr)
ready = 0
var/mob/living/carbon/target = targets[1]
if(get_dist(user,target)>range)
- user << "They are too far away!"
+ to_chat(user, "They are too far away!")
Reset(user)
return
diff --git a/code/datums/spells/magnet.dm b/code/datums/spells/magnet.dm
index 20c4d5efda6..100dd881dde 100644
--- a/code/datums/spells/magnet.dm
+++ b/code/datums/spells/magnet.dm
@@ -27,7 +27,7 @@
/obj/effect/proc_holder/spell/targeted/magnet/proc/StartChargeup(mob/user = usr)
ready = 1
- user << "You start gathering the power."
+ to_chat(user, "You start gathering the power.")
halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER)
user.overlays.Add(halo)
spawn(0)
@@ -44,14 +44,14 @@ obj/effect/proc_holder/spell/targeted/magnet/proc/Reset(mob/user = usr)
user.overlays.Remove(halo)
/obj/effect/proc_holder/spell/targeted/magnet/revert_cast(mob/user = usr)
- user << "No target found in range."
+ to_chat(user, "No target found in range.")
Reset(user)
..()
/obj/effect/proc_holder/spell/targeted/magnet/proc/Discharge(mob/user = usr)
var/mob/living/M = user
//M.electrocute_act(25,"magnet Bolt")
- M << "You lose control over the power."
+ to_chat(M, "You lose control over the power.")
Reset(user)
start_recharge()
@@ -61,7 +61,7 @@ obj/effect/proc_holder/spell/targeted/magnet/proc/Reset(mob/user = usr)
var/mob/living/carbon/target = targets[1]
if(get_dist(user,target)>range)
- user << "They are too far away!"
+ to_chat(user, "They are too far away!")
Reset(user)
return
diff --git a/code/datums/spells/mime.dm b/code/datums/spells/mime.dm
index 5e5ddb91db2..fb996bc84ee 100644
--- a/code/datums/spells/mime.dm
+++ b/code/datums/spells/mime.dm
@@ -17,7 +17,7 @@
/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall/Click()
if(usr && usr.mind)
if(!usr.mind.miming)
- usr << "You must dedicate yourself to silence first."
+ to_chat(usr, "You must dedicate yourself to silence first.")
return
invocation = "[usr.real_name] looks as if a wall is in front of them."
else
@@ -54,6 +54,6 @@
for(var/mob/living/carbon/human/H in targets)
H.mind.miming=!H.mind.miming
if(H.mind.miming)
- H << "You make a vow of silence."
+ to_chat(H, "You make a vow of silence.")
else
- H << "You break your vow of silence."
\ No newline at end of file
+ to_chat(H, "You break your vow of silence.")
diff --git a/code/datums/spells/mind_transfer.dm b/code/datums/spells/mind_transfer.dm
index 6d7b0539fb1..514cb95dce4 100644
--- a/code/datums/spells/mind_transfer.dm
+++ b/code/datums/spells/mind_transfer.dm
@@ -21,33 +21,34 @@ Also, you never added distance checking after target is selected. I've went ahea
*/
/obj/effect/proc_holder/spell/targeted/mind_transfer/cast(list/targets,mob/user = usr)
if(!targets.len)
- user << "No mind found."
+ to_chat(user, "No mind found.")
return
if(targets.len > 1)
- user << "Too many minds! You're not a hive damnit!"//Whaa...aat?
+ to_chat(user, "Too many minds! You're not a hive damnit!")//Whaa...aat?
+
return
var/mob/living/target = targets[1]
if(!(target in oview(range)))//If they are not in overview after selection. Do note that !() is necessary for in to work because ! takes precedence over it.
- user << "They are too far away!"
+ to_chat(user, "They are too far away!")
return
if(target.stat == DEAD)
- user << "You don't particularly want to be dead."
+ to_chat(user, "You don't particularly want to be dead.")
return
if(!target.key || !target.mind)
- user << "They appear to be catatonic. Not even magic can affect their vacant mind."
+ to_chat(user, "They appear to be catatonic. Not even magic can affect their vacant mind.")
return
if(user.suiciding)
- user << "You're killing yourself! You can't concentrate enough to do this!"
+ to_chat(user, "You're killing yourself! You can't concentrate enough to do this!")
return
if(target.mind.special_role in protected_roles)
- user << "Their mind is resisting your spell."
+ to_chat(user, "Their mind is resisting your spell.")
return
var/mob/living/victim = target//The target of the spell whos body will be transferred to.
diff --git a/code/datums/spells/summonitem.dm b/code/datums/spells/summonitem.dm
index 4a12b4bb9f9..a91532df451 100644
--- a/code/datums/spells/summonitem.dm
+++ b/code/datums/spells/summonitem.dm
@@ -106,4 +106,4 @@
item_to_retrive.loc.visible_message("The [item_to_retrive.name] suddenly appears in [user]'s hand!")
if(message)
- user << message
+ to_chat(user, message)
diff --git a/code/datums/spells/touch_attacks.dm b/code/datums/spells/touch_attacks.dm
index 54cb984f943..1262730fd45 100644
--- a/code/datums/spells/touch_attacks.dm
+++ b/code/datums/spells/touch_attacks.dm
@@ -10,7 +10,7 @@
qdel(attached_hand)
charge_counter = charge_max
attached_hand = null
- user << "You draw the power out of your hand."
+ to_chat(user, "You draw the power out of your hand.")
return 0
..()
@@ -38,9 +38,9 @@
qdel(attached_hand)
charge_counter = charge_max
attached_hand = null
- user << "Your hands are full!"
+ to_chat(user, "Your hands are full!")
return 0
- user << "You channel the power of the spell to your hand."
+ to_chat(user, "You channel the power of the spell to your hand.")
return 1
diff --git a/code/datums/spells/wizard.dm b/code/datums/spells/wizard.dm
index 98423b3e5fc..ca146933558 100644
--- a/code/datums/spells/wizard.dm
+++ b/code/datums/spells/wizard.dm
@@ -298,10 +298,10 @@
var/mob/living/M = AM
M.Weaken(5)
M.adjustBruteLoss(5)
- M << "You're slammed into the floor by a mystical force!"
+ to_chat(M, "You're slammed into the floor by a mystical force!")
else
if(istype(AM, /mob/living))
var/mob/living/M = AM
M.Weaken(2)
- M << "You're thrown back by a mystical force!"
+ to_chat(M, "You're thrown back by a mystical force!")
spawn(0) AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1)//So stuff gets tossed around at the same time.
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index c94c78fa29f..3b64d71e28d 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -77,10 +77,10 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/datum/supply_packs/emergency/evac
name = "Emergency Equipment Crate"
- contains = list(/obj/machinery/bot/floorbot,
- /obj/machinery/bot/floorbot,
- /obj/machinery/bot/medbot,
- /obj/machinery/bot/medbot,
+ contains = list(/mob/living/simple_animal/bot/floorbot,
+ /mob/living/simple_animal/bot/floorbot,
+ /mob/living/simple_animal/bot/medbot,
+ /mob/living/simple_animal/bot/medbot,
/obj/item/weapon/tank/air,
/obj/item/weapon/tank/air,
/obj/item/weapon/tank/air,
@@ -699,10 +699,20 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/datum/supply_packs/medical/virus
name = "Virus Crate"
- contains = list(/obj/item/weapon/virusdish/random,
- /obj/item/weapon/virusdish/random,
- /obj/item/weapon/virusdish/random,
- /obj/item/weapon/virusdish/random)
+ contains = list(/obj/item/weapon/reagent_containers/glass/bottle/flu_virion,
+ /obj/item/weapon/reagent_containers/glass/bottle/cold,
+ /obj/item/weapon/reagent_containers/glass/bottle/epiglottis_virion,
+ /obj/item/weapon/reagent_containers/glass/bottle/liver_enhance_virion,
+ /obj/item/weapon/reagent_containers/glass/bottle/fake_gbs,
+ /obj/item/weapon/reagent_containers/glass/bottle/magnitis,
+ /obj/item/weapon/reagent_containers/glass/bottle/pierrot_throat,
+ /obj/item/weapon/reagent_containers/glass/bottle/brainrot,
+ /obj/item/weapon/reagent_containers/glass/bottle/hullucigen_virion,
+ /obj/item/weapon/reagent_containers/glass/bottle/anxiety,
+ /obj/item/weapon/reagent_containers/glass/bottle/beesease,
+ /obj/item/weapon/storage/box/syringes,
+ /obj/item/weapon/storage/box/beakers,
+ /obj/item/weapon/reagent_containers/glass/bottle/mutagen)
cost = 25
containertype = /obj/structure/closet/crate/secure/plasma
containername = "virus crate"
@@ -1145,7 +1155,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/datum/supply_packs/misc/mule
name = "MULEbot Crate"
- contains = list(/obj/machinery/bot/mulebot)
+ contains = list(/mob/living/simple_animal/bot/mulebot)
cost = 20
containertype = /obj/structure/largecrate/mule
containername = "\improper MULEbot crate"
diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm
index e1642cd17d1..4d88de82a67 100644
--- a/code/datums/wires/alarm.dm
+++ b/code/datums/wires/alarm.dm
@@ -27,24 +27,24 @@ var/const/AALARM_WIRE_AALARM = 16
if(AALARM_WIRE_IDSCAN)
if(!mended)
A.locked = 1
- //world << "Idscan wire cut"
+// to_chat(world, "Idscan wire cut")
if(AALARM_WIRE_POWER)
A.shock(usr, 50)
A.shorted = !mended
A.update_icon()
- //world << "Power wire cut"
+// to_chat(world, "Power wire cut")
if (AALARM_WIRE_AI_CONTROL)
if (A.aidisabled == !mended)
A.aidisabled = mended
- //world << "AI Control Wire Cut"
+// to_chat(world, "AI Control Wire Cut")
if(AALARM_WIRE_SYPHON)
if(!mended)
A.mode = 3 // AALARM_MODE_PANIC
A.apply_mode()
- //world << "Syphon Wire Cut"
+// to_chat(world, "Syphon Wire Cut")
if(AALARM_WIRE_AALARM)
if (A.alarm_area.atmosalert(2, A))
@@ -56,10 +56,10 @@ var/const/AALARM_WIRE_AALARM = 16
switch(index)
if(AALARM_WIRE_IDSCAN)
A.locked = !A.locked
- // world << "Idscan wire pulsed"
+// to_chat(world, "Idscan wire pulsed")
if (AALARM_WIRE_POWER)
- // world << "Power wire pulsed"
+// to_chat(world, "Power wire pulsed")
if(A.shorted == 0)
A.shorted = 1
A.update_icon()
@@ -71,7 +71,7 @@ var/const/AALARM_WIRE_AALARM = 16
if (AALARM_WIRE_AI_CONTROL)
- // world << "AI Control wire pulsed"
+// to_chat(world, "AI Control wire pulsed")
if (A.aidisabled == 0)
A.aidisabled = 1
A.updateDialog()
@@ -80,7 +80,7 @@ var/const/AALARM_WIRE_AALARM = 16
A.aidisabled = 0
if(AALARM_WIRE_SYPHON)
- // world << "Syphon wire pulsed"
+// to_chat(world, "Syphon wire pulsed")
if(A.mode == 1) // AALARM_MODE_SCRUB
A.mode = 3 // AALARM_MODE_PANIC
else
@@ -88,7 +88,7 @@ var/const/AALARM_WIRE_AALARM = 16
A.apply_mode()
if(AALARM_WIRE_AALARM)
- // world << "Aalarm wire pulsed"
+// to_chat(world, "Aalarm wire pulsed")
if (A.alarm_area.atmosalert(0, A))
A.post_alert(0)
A.update_icon()
diff --git a/code/datums/wires/mulebot.dm b/code/datums/wires/mulebot.dm
index 75d81cc0040..30d767eef21 100644
--- a/code/datums/wires/mulebot.dm
+++ b/code/datums/wires/mulebot.dm
@@ -1,6 +1,6 @@
/datum/wires/mulebot
random = 1
- holder_type = /obj/machinery/bot/mulebot
+ holder_type = /mob/living/simple_animal/bot/mulebot
wire_count = 10
var/const/WIRE_POWER1 = 1 // power connections
@@ -14,7 +14,7 @@ var/const/WIRE_REMOTE_TX = 128 // remote trans status
var/const/WIRE_BEACON_RX = 256 // beacon ping recv
/datum/wires/mulebot/CanUse(var/mob/living/L)
- var/obj/machinery/bot/mulebot/M = holder
+ var/mob/living/simple_animal/bot/mulebot/M = holder
if(M.open)
return 1
return 0
@@ -22,7 +22,7 @@ var/const/WIRE_BEACON_RX = 256 // beacon ping recv
// So the wires do not open a new window, handle the interaction ourselves.
/datum/wires/mulebot/Interact(var/mob/living/user)
if(CanUse(user))
- var/obj/machinery/bot/mulebot/M = holder
+ var/mob/living/simple_animal/bot/mulebot/M = holder
M.interact(user)
/datum/wires/mulebot/UpdatePulsed(var/index)
diff --git a/code/datums/wires/robot.dm b/code/datums/wires/robot.dm
index 9e894fb9fec..58e25152dae 100644
--- a/code/datums/wires/robot.dm
+++ b/code/datums/wires/robot.dm
@@ -35,7 +35,7 @@ var/const/BORG_WIRE_LAWCHECK = 16 // Not used on MoMMIs
if(BORG_WIRE_LAWCHECK) //Cut the law wire, and the borg will no longer receive law updates from its AI
if(!mended)
if (R.lawupdate == 1)
- R << "LawSync protocol engaged."
+ to_chat(R, "LawSync protocol engaged.")
R.show_laws()
else
if (R.lawupdate == 0 && !R.emagged)
@@ -72,7 +72,7 @@ var/const/BORG_WIRE_LAWCHECK = 16 // Not used on MoMMIs
if(!isnull(R.camera) && R.camera.can_use() && !R.scrambledcodes)
R.camera.toggle_cam(usr, 0) // Kick anyone watching the Cyborg's camera, doesn't display you disconnecting the camera.
R.visible_message("[R]'s camera lense focuses loudly.")
- R << "Your camera lense focuses loudly."
+ to_chat(R, "Your camera lense focuses loudly.")
if(BORG_WIRE_LOCKED_DOWN)
R.SetLockdown(!R.lockcharge) // Toggle
diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm
index 2055c2790b7..34172f4cc90 100644
--- a/code/datums/wires/wires.dm
+++ b/code/datums/wires/wires.dm
@@ -116,14 +116,14 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown",
var/colour = href_list["cut"]
CutWireColour(colour)
else
- L << "You need wirecutters!"
+ to_chat(L, "You need wirecutters!")
else if(href_list["pulse"])
if(istype(I, /obj/item/device/multitool))
var/colour = href_list["pulse"]
PulseColour(colour)
else
- L << "You need a multitool!"
+ to_chat(L, "You need a multitool!")
else if(href_list["attach"])
var/colour = href_list["attach"]
@@ -139,7 +139,7 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown",
L.drop_item()
Attach(colour, I)
else
- L << "You need a remote signaller!"
+ to_chat(L, "You need a remote signaller!")
diff --git a/code/defines/procs/AStar.dm b/code/defines/procs/AStar.dm
index 1479db76e5d..1750814c228 100644
--- a/code/defines/procs/AStar.dm
+++ b/code/defines/procs/AStar.dm
@@ -62,14 +62,19 @@ Actual Adjacent procs :
return b.f - a.f
//wrapper that returns an empty list if A* failed to find a path
-/proc/get_path_to(start, end, atom, dist, maxnodes, maxnodedepth = 30, mintargetdist, adjacent = /turf/proc/reachableAdjacentTurfs, id=null, turf/exclude=null, simulated_only = 1)
- var/list/path = AStar(start, end, atom, dist, maxnodes, maxnodedepth, mintargetdist, adjacent,id, exclude, simulated_only)
+/proc/get_path_to(caller, end, dist, maxnodes, maxnodedepth = 30, mintargetdist, adjacent = /turf/proc/reachableAdjacentTurfs, id=null, turf/exclude=null, simulated_only = 1)
+ var/list/path = AStar(caller, end, dist, maxnodes, maxnodedepth, mintargetdist, adjacent, id, exclude, simulated_only)
if(!path)
path = list()
return path
//the actual algorithm
-/proc/AStar(start, end, atom, dist, maxnodes, maxnodedepth = 30, mintargetdist, adjacent = /turf/proc/reachableAdjacentTurfs, id=null, turf/exclude=null, simulated_only = 1)
+/proc/AStar(caller, end, dist, maxnodes, maxnodedepth = 30, mintargetdist, adjacent = /turf/proc/reachableAdjacentTurfs, id=null, turf/exclude=null, simulated_only = 1)
+
+ //sanitation
+ var/start = get_turf(caller)
+ if(!start)
+ return 0
if(maxnodes)
//if start turf is farther than maxnodes from end turf, no need to do anything
@@ -82,11 +87,6 @@ Actual Adjacent procs :
var/list/path = null //the returned path, if any
var/PathNode/cur //current processed turf
- //sanitation
- start = get_turf(start)
- if(!start)
- return 0
-
//initialization
open.Insert(new /PathNode(start,null,0,call(start,dist)(end),0))
@@ -118,9 +118,9 @@ Actual Adjacent procs :
break
//get adjacents turfs using the adjacent proc, checking for access with id
- var/list/L = call(cur.source,adjacent)(atom,id, simulated_only)
+ var/list/L = call(cur.source,adjacent)(caller, id, simulated_only)
for(var/turf/T in L)
- if(T == exclude || T in closed)
+ if(T == exclude || (T in closed))
continue
var/newg = cur.g + call(cur.source,dist)(T)
@@ -151,7 +151,7 @@ Actual Adjacent procs :
//Returns adjacent turfs in cardinal directions that are reachable
//simulated_only controls whether only simulated turfs are considered or not
-/turf/proc/reachableAdjacentTurfs(atom, ID, simulated_only)
+/turf/proc/reachableAdjacentTurfs(caller, ID, simulated_only)
var/list/L = new()
var/turf/simulated/T
@@ -159,45 +159,26 @@ Actual Adjacent procs :
T = get_step(src,dir)
if(simulated_only && !istype(T))
continue
- if(!T.density && !LinkBlockedWithAccess(T, ID))
+ if(!T.density && !LinkBlockedWithAccess(T,caller, ID))
L.Add(T)
return L
//Returns adjacent turfs in cardinal directions that are reachable via atmos
/turf/proc/reachableAdjacentAtmosTurfs()
- var/list/L = new()
- var/turf/simulated/T
+ return atmos_adjacent_turfs
- for(var/dir in cardinal)
- if(dir & atmos_adjacent_turfs)
- T = get_step(src,dir)
- if(!istype(T))
- continue
- if(CanAtmosPass(T))
- L.Add(T)
- return L
-
-/turf/proc/LinkBlockedWithAccess(turf/T, obj/item/weapon/card/id/ID)
+/turf/proc/LinkBlockedWithAccess(turf/T, caller, ID)
var/adir = get_dir(src, T)
var/rdir = get_dir(T, src)
- if(DirBlockedWithAccess(src, adir, ID))
- return 1
- if(DirBlockedWithAccess(T, rdir, ID))
- return 1
- for(var/obj/O in T)
- if(O.density && !istype(O, /obj/machinery/door) && !(O.flags & ON_BORDER))
- return 1
- return 0
-/proc/DirBlockedWithAccess(turf/T, dir, ID)
- for(var/obj/structure/window/D in T)
- if(!D.density)
- continue
- if(D.dir == SOUTHWEST)
+ for(var/obj/structure/window/W in src)
+ if(!W.CanAStarPass(ID, adir))
return 1
- if(D.dir == dir)
+ for(var/obj/machinery/door/window/W in src)
+ if(!W.CanAStarPass(ID, adir))
return 1
- for(var/obj/machinery/door/D in T)
- if(!D.CanAStarPass(ID, dir))
+ for(var/obj/O in T)
+ if(!O.CanAStarPass(ID, rdir, caller))
return 1
+
return 0
diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm
index 7993badfb0e..4327344535d 100644
--- a/code/defines/procs/announce.dm
+++ b/code/defines/procs/announce.dm
@@ -63,21 +63,21 @@
datum/announcement/proc/Message(message as text, message_title as text)
for(var/mob/M in player_list)
if(!istype(M,/mob/new_player) && !isdeaf(M))
- M << "[title]
"
- M << "[message]"
+ to_chat(M, "[title]
")
+ to_chat(M, "[message]")
if (announcer)
- M << " -[html_encode(announcer)]"
+ to_chat(M, " -[html_encode(announcer)]")
/datum/announcement/minor/Message(message as text, message_title as text)
- world << "[message_title]"
- world << "[message]"
+ to_chat(world, "[message_title]")
+ to_chat(world, "[message]")
datum/announcement/priority/Message(message as text, message_title as text)
- world << "[message_title]
"
- world << "[message]"
+ to_chat(world, "[message_title]
")
+ to_chat(world, "[message]")
if(announcer)
- world << " -[html_encode(announcer)]"
- world << "
"
+ to_chat(world, " -[html_encode(announcer)]")
+ to_chat(world, "
")
datum/announcement/priority/command/Message(message as text, message_title as text)
var/command
@@ -89,7 +89,7 @@ datum/announcement/priority/command/Message(message as text, message_title as te
command += "
"
for(var/mob/M in player_list)
if(!istype(M,/mob/new_player) && !isdeaf(M))
- M << command
+ to_chat(M, command)
datum/announcement/priority/enemy/Message(message as text, message_title as text, from as text)
var/command
@@ -101,11 +101,11 @@ datum/announcement/priority/enemy/Message(message as text, message_title as text
command += "
"
for(var/mob/M in player_list)
if(!istype(M,/mob/new_player) && !isdeaf(M))
- M << command
+ to_chat(M, command)
datum/announcement/priority/security/Message(message as text, message_title as text)
- world << "[message_title]"
- world << "[message]"
+ to_chat(world, "[message_title]")
+ to_chat(world, "[message]")
datum/announcement/proc/NewsCast(message as text, message_title as text)
if(disable_newscasts)
@@ -126,14 +126,14 @@ datum/announcement/proc/PlaySound(var/message_sound)
return
for(var/mob/M in player_list)
if(!istype(M,/mob/new_player) && !isdeaf(M))
- M << message_sound
+ to_chat(M, message_sound)
datum/announcement/proc/Sound(var/message_sound)
PlaySound(message_sound)
datum/announcement/priority/Sound(var/message_sound)
if(sound)
- world << sound
+ to_chat(world, sound)
datum/announcement/priority/command/Sound(var/message_sound)
PlaySound(message_sound)
diff --git a/code/defines/procs/statistics.dm b/code/defines/procs/statistics.dm
index bc69466bb1e..13c127e81e2 100644
--- a/code/defines/procs/statistics.dm
+++ b/code/defines/procs/statistics.dm
@@ -65,7 +65,7 @@
lakey = sanitizeSQL(H.lastattacker:key)
var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
var/coord = "[H.x], [H.y], [H.z]"
- //world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])"
+// to_chat(world, "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])")
establish_db_connection()
if(!dbcon.IsConnected())
log_game("SQL ERROR during death reporting. Failed to connect.")
@@ -100,7 +100,7 @@
lakey = sanitizeSQL(H.lastattacker:key)
var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
var/coord = "[H.x], [H.y], [H.z]"
- //world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])"
+// to_chat(world, "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])")
establish_db_connection()
if(!dbcon.IsConnected())
log_game("SQL ERROR during death reporting. Failed to connect.")
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 7008f050337..238485e5b35 100644
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -1789,7 +1789,7 @@ area/security/podbay
/area/toxins/xenobiology
name = "\improper Xenobiology Lab"
- icon_state = "toxlab"
+ icon_state = "toxmix"
/area/toxins/xenobiology/xenoflora_storage
name = "\improper Xenoflora Storage"
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 9dc2918dd8f..9dc2223a052 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -322,14 +322,14 @@
// Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch
if(L && L.client && !L.client.ambience_playing && (L.client.prefs.sound & SOUND_BUZZ)) //split off the white noise from the rest of the ambience because of annoyance complaints - Kluys
L.client.ambience_playing = 1
- L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = 2)
+ to_chat(L, sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = 2))
else if (L && L.client && !(L.client.prefs.sound & SOUND_BUZZ)) L.client.ambience_playing = 0
if(prob(35) && !newarea.media_source && L && L.client && (L.client.prefs.sound & SOUND_AMBIENCE))
var/sound = pick(ambientsounds)
if(!L.client.played)
- L << sound(sound, repeat = 0, wait = 0, volume = 25, channel = 1)
+ to_chat(L, sound(sound, repeat = 0, wait = 0, volume = 25, channel = 1))
L.client.played = 1
spawn(600) //ewww - this is very very bad
if(L.&& L.client)
@@ -362,7 +362,7 @@
M.Weaken(2)
- M << "Gravity!"
+ to_chat(M, "Gravity!")
/proc/has_gravity(atom/AT, turf/T)
if(!T)
diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm
index d38e05c701b..6071a804aa8 100644
--- a/code/game/asteroid.dm
+++ b/code/game/asteroid.dm
@@ -60,7 +60,7 @@ var/global/max_secret_rooms = 6
if("organharvest")
walltypes = list(/turf/simulated/wall/r_wall=2,/turf/simulated/wall=2,/turf/simulated/mineral/random/high_chance=1)
floortypes = list(/turf/simulated/floor,/turf/simulated/floor/engine)
- treasureitems = list(/obj/machinery/bot/medbot/mysterious=1, /obj/item/weapon/circular_saw=1, /obj/structure/closet/critter/cat=2)
+ treasureitems = list(/mob/living/simple_animal/bot/medbot/mysterious=1, /obj/item/weapon/circular_saw=1, /obj/structure/closet/critter/cat=2)
fluffitems = list(/obj/effect/decal/cleanable/blood=5,/obj/item/organ/internal/appendix=2,/obj/structure/closet/crate/freezer=2,
/obj/machinery/optable=1,/obj/item/weapon/scalpel=1,/obj/item/weapon/storage/firstaid/regular=3,
/obj/item/weapon/tank/anesthetic=1, /obj/item/weapon/surgical_drapes=2, /obj/item/device/mass_spectrometer/adv=1,/obj/item/clothing/glasses/hud/health=1)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index f7ee79f2619..1bd5b9d602f 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -181,20 +181,20 @@
else
f_name += "oil-stained [name][infix]."
- user << "\icon[src] That's [f_name] [suffix]"
- user << desc
+ to_chat(user, "\icon[src] That's [f_name] [suffix]")
+ to_chat(user, desc)
if(reagents && is_open_container()) //is_open_container() isn't really the right proc for this, but w/e
- user << "It contains:"
+ to_chat(user, "It contains:")
if(reagents.reagent_list.len)
if(user.can_see_reagents()) //Show each individual reagent
for(var/datum/reagent/R in reagents.reagent_list)
- user << "[R.volume] units of [R.name]"
+ to_chat(user, "[R.volume] units of [R.name]")
else //Otherwise, just show the total volume
if(reagents && reagents.reagent_list.len)
- user << "[reagents.total_volume] units of various reagents."
+ to_chat(user, "[reagents.total_volume] units of various reagents.")
else
- user << "Nothing."
+ to_chat(user, "Nothing.")
return distance == -1 || (get_dist(src, user) <= distance) || isobserver(user) //observers do not have a range limit
@@ -362,6 +362,23 @@
. = 1
return 1
+/atom/proc/add_blood_list(mob/living/carbon/M)
+ // Returns 0 if we have that blood already
+ if(!istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it.
+ blood_DNA = list()
+ //if this blood isn't already in the list, add it
+ if(blood_DNA[M.dna.unique_enzymes])
+ return 0 //already bloodied with this blood. Cannot add more.
+ var/blood_type = "X*"
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ blood_type = H.b_type
+ blood_DNA[M.dna.unique_enzymes] = blood_type
+ return 1
+
+// Only adds blood on the floor -- Skie
+/atom/proc/add_blood_floor(mob/living/carbon/M)
+ return //why the fuck this is at an atom level but only works on simulated turfs I don't know
/atom/proc/clean_blood()
src.germ_level = 0
@@ -377,10 +394,6 @@
if(toxvomit)
this.icon_state = "vomittox_[pick(1,4)]"
-/atom/proc/add_poop_floor(mob/living/carbon/M as mob)
- if( istype(src, /turf/simulated) )
- new /obj/effect/decal/cleanable/poop(src)
-
/atom/proc/get_global_map_pos()
if(!islist(global_map) || isemptylist(global_map)) return
@@ -392,7 +405,7 @@
cur_y = y_arr.Find(src.z)
if(cur_y)
break
-// world << "X = [cur_x]; Y = [cur_y]"
+// to_chat(world, "X = [cur_x]; Y = [cur_y]")
if(cur_x && cur_y)
return list("x"=cur_x,"y"=cur_y)
else
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 8a9a892123a..831e7004ad6 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -1,5 +1,6 @@
/atom/movable
layer = 3
+ appearance_flags = TILE_BOUND
var/last_move = null
var/anchored = 0
// var/elevation = 2 - not used anywhere
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index ce96bca33e0..b308d996de9 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -44,7 +44,7 @@
hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD)
/datum/atom_hud/data/diagnostic
- hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD)
+ hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD)
/* MED/SEC/DIAG HUD HOOKS */
@@ -60,10 +60,11 @@
//called when a carbon changes virus
/mob/living/carbon/proc/check_virus()
- for (var/ID in virus2)
- if (ID in virusDB)
+ for(var/datum/disease/D in viruses)
+ if((!(D.visibility_flags & HIDDEN_SCANNER)) && (D.severity != NONTHREAT))
return 1
return 0
+
//helper for getting the appropriate health status
/proc/RoundHealth(health)
switch(health)
@@ -253,4 +254,43 @@
var/image/holder = hud_list[DIAG_STAT_HUD]
holder.icon_state = null
if(internal_damage)
- holder.icon_state = "hudwarn"
\ No newline at end of file
+ holder.icon_state = "hudwarn"
+
+/*~~~~~~~~~
+ Bots!
+~~~~~~~~~~*/
+/mob/living/simple_animal/bot/proc/diag_hud_set_bothealth()
+ var/image/holder = hud_list[DIAG_HUD]
+ if(stat == DEAD)
+ holder.icon_state = "huddiagdead"
+ else
+ holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]"
+
+/mob/living/simple_animal/bot/proc/diag_hud_set_botstat() //On (With wireless on or off), Off, EMP'ed
+ var/image/holder = hud_list[DIAG_STAT_HUD]
+ if(on)
+ holder.icon_state = "hudstat"
+ else if(stat) //Generally EMP causes this
+ holder.icon_state = "hudoffline"
+ else //Bot is off
+ holder.icon_state = "huddead2"
+
+/mob/living/simple_animal/bot/proc/diag_hud_set_botmode() //Shows a bot's current operation
+ var/image/holder = hud_list[DIAG_BOT_HUD]
+ if(client) //If the bot is player controlled, it will not be following mode logic!
+ holder.icon_state = "hudsentient"
+ return
+
+ switch(mode)
+ if(BOT_SUMMON, BOT_RESPONDING) //Responding to PDA or AI summons
+ holder.icon_state = "hudcalled"
+ if(BOT_CLEANING, BOT_REPAIRING, BOT_HEALING) //Cleanbot cleaning, Floorbot fixing, or Medibot Healing
+ holder.icon_state = "hudworking"
+ if(BOT_PATROL, BOT_START_PATROL) //Patrol mode
+ holder.icon_state = "hudpatrol"
+ if(BOT_PREP_ARREST, BOT_ARREST, BOT_HUNT, BOT_BLOCKED, BOT_NO_ROUTE) //STOP RIGHT THERE, CRIMINAL SCUM!
+ holder.icon_state = "hudalert"
+ if(BOT_MOVING, BOT_DELIVER, BOT_GO_HOME, BOT_NAV, BOT_WAIT_FOR_NAV) //Moving to target for normal bots, moving to deliver or go home for MULES.
+ holder.icon_state = "hudmove"
+ else
+ holder.icon_state = ""
diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm
index 570fada2073..5e81c2a7ff0 100644
--- a/code/game/dna/dna_modifier.dm
+++ b/code/game/dna/dna_modifier.dm
@@ -147,13 +147,13 @@
if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other
return
if (!ishuman(usr)) //Make sure they're a mob that has dna
- usr << "Try as you might, you can not climb up into the [src]."
+ to_chat(usr, "Try as you might, you can not climb up into the [src].")
return
if (src.occupant)
- usr << "The [src] is already occupied!"
+ to_chat(usr, "The [src] is already occupied!")
return
if (usr.abiotic())
- usr << "Subject cannot have abiotic items on."
+ to_chat(usr, "Subject cannot have abiotic items on.")
return
usr.stop_pulling()
usr.client.perspective = EYE_PERSPECTIVE
@@ -184,17 +184,17 @@
if(!istype(user.loc, /turf) || !istype(O.loc, /turf)) // are you in a container/closet/pod/etc?
return
if(occupant)
- user << "The [src] is already occupied!"
+ to_chat(user, "The [src] is already occupied!")
return
var/mob/living/L = O
if(!istype(L) || L.buckled)
return
if(L.abiotic())
- user << "Subject cannot have abiotic items on."
+ to_chat(user, "Subject cannot have abiotic items on.")
return
for(var/mob/living/carbon/slime/M in range(1,L))
if(M.Victim == L)
- usr << "[L.name] will not fit into the [src] because they have a slime latched onto their head."
+ to_chat(usr, "[L.name] will not fit into the [src] because they have a slime latched onto their head.")
return
if (L == user)
visible_message("[user] climbs into the [src].")
@@ -207,7 +207,7 @@
/obj/machinery/dna_scannernew/attackby(var/obj/item/weapon/item as obj, var/mob/user as mob, params)
if(istype(item, /obj/item/weapon/screwdriver))
if(occupant)
- user << "The maintenance panel is locked."
+ to_chat(user, "The maintenance panel is locked.")
return
default_deconstruction_screwdriver(user, "[icon_state]_maintenance", "[initial(icon_state)]", item)
@@ -222,11 +222,11 @@
return
else if(istype(item, /obj/item/weapon/reagent_containers/glass))
if(beaker)
- user << "A beaker is already loaded into the machine."
+ to_chat(user, "A beaker is already loaded into the machine.")
return
if(!user.drop_item())
- user << "\The [item] is stuck to you!"
+ to_chat(user, "\The [item] is stuck to you!")
return
beaker = item
@@ -239,13 +239,13 @@
if (!ismob(G.affecting))
return
if (src.occupant)
- user << "The scanner is already occupied!"
+ to_chat(user, "The scanner is already occupied!")
return
if (G.affecting.abiotic())
- user << "Subject cannot have abiotic items on."
+ to_chat(user, "Subject cannot have abiotic items on.")
return
if(panel_open)
- usr << "Close the maintenance panel first."
+ to_chat(usr, "Close the maintenance panel first.")
return
put_in(G.affecting)
src.add_fingerprint(user)
@@ -273,17 +273,17 @@
var/mob/dead/observer/ghost = occupant.get_ghost()
if(ghost)
- ghost << "Your corpse has been placed into a cloning scanner. Return to your body if you want to be cloned! (Verbs -> Ghost -> Re-enter corpse)"
- ghost << sound('sound/effects/genetics.ogg')
+ to_chat(ghost, "Your corpse has been placed into a cloning scanner. Return to your body if you want to be cloned! (Verbs -> Ghost -> Re-enter corpse)")
+ to_chat(ghost, sound('sound/effects/genetics.ogg'))
return
/obj/machinery/dna_scannernew/proc/go_out()
if (!src.occupant)
- usr << "The scanner is empty!"
+ to_chat(usr, "The scanner is empty!")
return
if (src.locked)
- usr << "The scanner is locked!"
+ to_chat(usr, "The scanner is locked!")
return
if (src.occupant.client)
@@ -381,7 +381,7 @@
user.drop_item()
I.forceMove(src)
src.disk = I
- user << "You insert [I]."
+ to_chat(user, "You insert [I].")
nanomanager.update_uis(src) // update all UIs attached to src()
return
else
diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm
index cc957a94c34..f62268b621a 100644
--- a/code/game/dna/genes/disabilities.dm
+++ b/code/game/dna/genes/disabilities.dm
@@ -35,7 +35,7 @@
if(sdisability)
M.sdisabilities|=sdisability
if(activation_message)
- M << "\red [activation_message]"
+ to_chat(M, "\red [activation_message]")
else
testing("[name] has no activation message.")
@@ -47,7 +47,7 @@
if(sdisability)
M.sdisabilities &= ~sdisability
if(deactivation_message)
- M << "\red [deactivation_message]"
+ to_chat(M, "\red [deactivation_message]")
else
testing("[name] has no deactivation message.")
diff --git a/code/game/dna/genes/gene.dm b/code/game/dna/genes/gene.dm
index 87dbf20108e..30bcc0d8c36 100644
--- a/code/game/dna/genes/gene.dm
+++ b/code/game/dna/genes/gene.dm
@@ -116,10 +116,10 @@
M.mutations.Add(mutation)
if(activation_messages.len)
var/msg = pick(activation_messages)
- M << "\blue [msg]"
+ to_chat(M, "\blue [msg]")
/datum/dna/gene/basic/deactivate(var/mob/M)
M.mutations.Remove(mutation)
if(deactivation_messages.len)
var/msg = pick(deactivation_messages)
- M << "\red [msg]"
\ No newline at end of file
+ to_chat(M, "\red [msg]")
diff --git a/code/game/dna/genes/goon_disabilities.dm b/code/game/dna/genes/goon_disabilities.dm
index 04fa6d5f524..30b9c344b59 100644
--- a/code/game/dna/genes/goon_disabilities.dm
+++ b/code/game/dna/genes/goon_disabilities.dm
@@ -43,7 +43,7 @@
for(var/mob/living/L in range(1, owner))
if(L == owner)
continue
- L << "You are enveloped by a soft green glow emanating from [owner]."
+ to_chat(L, "You are enveloped by a soft green glow emanating from [owner].")
L.apply_effect(5, IRRADIATE)
return
@@ -205,7 +205,7 @@
else
prefix=""
- var/list/words = text2list(message," ")
+ var/list/words = splittext(message," ")
var/list/rearranged = list()
for(var/i=1;i<=words.len;i++)
var/cword = pick(words)
@@ -216,7 +216,7 @@
suffix = copytext(cword,length(cword)-1,length(cword) )
if(length(cword))
rearranged += cword
- return "[prefix][uppertext(list2text(rearranged," "))]!!"
+ return "[prefix][uppertext(jointext(rearranged," "))]!!"
// WAS: /datum/bioEffect/toxic_farts
/datum/dna/gene/disability/toxic_farts
@@ -288,9 +288,9 @@
if (C == owner)
continue
if (src.variant == 2)
- C << "\red [src.personalized_stink]"
+ to_chat(C, "\red [src.personalized_stink]")
else
- C << "\red [stinkString()]"
+ to_chat(C, "\red [stinkString()]")
*/
@@ -331,7 +331,7 @@
/obj/effect/proc_holder/spell/targeted/immolate/cast(list/targets)
/* if(!targets.len) Uncomment this to allow the power to be used on targets other than yourself. That said, if you uncomment this I will find you and hurt you. Uncounterable and untracable burn damage with a 60-second cooldown is fun for exactly one person, and that's the person who is using it.
- usr << "No target found in range."
+ to_chat(usr, "No target found in range.")
return
var/mob/living/carbon/L = targets[1]
diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm
index d9e4263ebcd..b0e0a405265 100644
--- a/code/game/dna/genes/goon_powers.dm
+++ b/code/game/dna/genes/goon_powers.dm
@@ -151,13 +151,13 @@
/obj/effect/proc_holder/spell/targeted/cryokinesis/cast(list/targets)
if(!targets.len)
- usr << "No target found in range."
+ to_chat(usr, "No target found in range.")
return
var/mob/living/carbon/C = targets[1]
if(!iscarbon(C))
- usr << "\red This will only work on normal organic beings."
+ to_chat(usr, "\red This will only work on normal organic beings.")
return
if (RESIST_COLD in C.mutations)
@@ -303,7 +303,7 @@
/obj/effect/proc_holder/spell/targeted/eat/cast(list/targets)
var/mob/user = usr
if(!targets.len)
- user << "No target found in range."
+ to_chat(user, "No target found in range.")
return
var/atom/movable/the_item = targets[1]
@@ -319,28 +319,28 @@
var/mob/living/carbon/human/H = the_item
var/obj/item/organ/external/limb = H.get_organ(user.zone_sel.selecting)
if(!istype(limb))
- user << "You can't eat this part of them!"
+ to_chat(user, "You can't eat this part of them!")
revert_cast()
return 0
if(istype(limb,/obj/item/organ/external/head))
// Bullshit, but prevents being unable to clone someone.
- user << "You try to put \the [limb] in your mouth, but [t_his] ears tickle your throat!"
+ to_chat(user, "You try to put \the [limb] in your mouth, but [t_his] ears tickle your throat!")
revert_cast()
return 0
if(istype(limb,/obj/item/organ/external/chest))
// Bullshit, but prevents being able to instagib someone.
- user << "You try to put their [limb] in your mouth, but it's too big to fit!"
+ to_chat(user, "You try to put their [limb] in your mouth, but it's too big to fit!")
revert_cast()
return 0
user.visible_message("[user] begins stuffing [the_item]'s [limb.name] into [m_his] gaping maw!")
var/oldloc = H.loc
if(!do_mob(user,H,EAT_MOB_DELAY))
- user << "You were interrupted before you could eat [the_item]!"
+ to_chat(user, "You were interrupted before you could eat [the_item]!")
else
if(!limb || !H)
return
if(H.loc != oldloc)
- user << "\The [limb] moved away from your mouth!"
+ to_chat(user, "\The [limb] moved away from your mouth!")
return
user.visible_message("[user] [pick("chomps","bites")] off [the_item]'s [limb]!")
playsound(user.loc, 'sound/items/eatfood.ogg', 50, 0)
@@ -390,7 +390,7 @@
/obj/effect/proc_holder/spell/targeted/leap/cast(list/targets)
var/failure = 0
if (istype(usr.loc,/mob/) || usr.lying || usr.stunned || usr.buckled || usr.stat)
- usr << "\red You can't jump right now!"
+ to_chat(usr, "\red You can't jump right now!")
return
if (istype(usr.loc,/turf/))
@@ -435,7 +435,7 @@
if (istype(usr.loc,/obj/))
var/obj/container = usr.loc
- usr << "\red You leap and slam your head against the inside of [container]! Ouch!"
+ to_chat(usr, "\red You leap and slam your head against the inside of [container]! Ouch!")
usr.AdjustParalysis(3)
usr.AdjustWeakened(5)
container.visible_message("\red [usr.loc] emits a loud thump and rattles a bit.")
@@ -488,7 +488,7 @@
/obj/effect/proc_holder/spell/targeted/polymorph/cast(list/targets)
var/mob/living/M=targets[1]
if(!ishuman(M))
- usr << "\red You can only change your appearance to that of another human."
+ to_chat(usr, "\red You can only change your appearance to that of another human.")
return
if(!ishuman(usr)) return
@@ -549,21 +549,21 @@
for(var/mob/living/carbon/M in targets)
if(!iscarbon(M))
- usr << "\red You may only use this on other organic beings."
+ to_chat(usr, "\red You may only use this on other organic beings.")
return
if (PSY_RESIST in M.mutations)
- usr << "\red You can't see into [M.name]'s mind at all!"
+ to_chat(usr, "\red You can't see into [M.name]'s mind at all!")
return
if (M.stat == 2)
- usr << "\red [M.name] is dead and cannot have their mind read."
+ to_chat(usr, "\red [M.name] is dead and cannot have their mind read.")
return
if (M.health < 0)
- usr << "\red [M.name] is dying, and their thoughts are too scrambled to read."
+ to_chat(usr, "\red [M.name] is dying, and their thoughts are too scrambled to read.")
return
- usr << "\blue Mind Reading of [M.name]:"
+ to_chat(usr, "\blue Mind Reading of [M.name]:")
var/pain_condition = M.health
// lower health means more pain
var/list/randomthoughts = list("what to have for lunch","the future","the past","money",
@@ -580,33 +580,33 @@
switch(pain_condition)
if (81 to INFINITY)
- usr << "\blue Condition: [M.name] feels good."
+ to_chat(usr, "\blue Condition: [M.name] feels good.")
if (61 to 80)
- usr << "\blue Condition: [M.name] is suffering mild pain."
+ to_chat(usr, "\blue Condition: [M.name] is suffering mild pain.")
if (41 to 60)
- usr << "\blue Condition: [M.name] is suffering significant pain."
+ to_chat(usr, "\blue Condition: [M.name] is suffering significant pain.")
if (21 to 40)
- usr << "\blue Condition: [M.name] is suffering severe pain."
+ to_chat(usr, "\blue Condition: [M.name] is suffering severe pain.")
else
- usr << "\blue Condition: [M.name] is suffering excruciating pain."
+ to_chat(usr, "\blue Condition: [M.name] is suffering excruciating pain.")
thoughts = "haunted by their own mortality"
switch(M.a_intent)
if (I_HELP)
- usr << "\blue Mood: You sense benevolent thoughts from [M.name]."
+ to_chat(usr, "\blue Mood: You sense benevolent thoughts from [M.name].")
if (I_DISARM)
- usr << "\blue Mood: You sense cautious thoughts from [M.name]."
+ to_chat(usr, "\blue Mood: You sense cautious thoughts from [M.name].")
if (I_GRAB)
- usr << "\blue Mood: You sense hostile thoughts from [M.name]."
+ to_chat(usr, "\blue Mood: You sense hostile thoughts from [M.name].")
if (I_HARM)
- usr << "\blue Mood: You sense cruel thoughts from [M.name]."
+ to_chat(usr, "\blue Mood: You sense cruel thoughts from [M.name].")
for(var/mob/living/L in view(7,M))
if (L == M)
continue
thoughts = "thinking about punching [L.name]"
break
else
- usr << "\blue Mood: You sense strange thoughts from [M.name]."
+ to_chat(usr, "\blue Mood: You sense strange thoughts from [M.name].")
if (istype(M,/mob/living/carbon/human))
var/numbers[0]
@@ -615,13 +615,13 @@
numbers += H.mind.initial_account.account_number
numbers += H.mind.initial_account.remote_access_pin
if(numbers.len>0)
- usr << "\blue Numbers: You sense the number[numbers.len>1?"s":""] [english_list(numbers)] [numbers.len>1?"are":"is"] important to [M.name]."
- usr << "\blue Thoughts: [M.name] is currently [thoughts]."
+ to_chat(usr, "\blue Numbers: You sense the number[numbers.len>1?"s":""] [english_list(numbers)] [numbers.len>1?"are":"is"] important to [M.name].")
+ to_chat(usr, "\blue Thoughts: [M.name] is currently [thoughts].")
if (EMPATH in M.mutations)
- M << "\red You sense [usr.name] reading your mind."
+ to_chat(M, "\red You sense [usr.name] reading your mind.")
else if (prob(5) || M.mind.assigned_role=="Chaplain")
- M << "\red You sense someone intruding upon your thoughts..."
+ to_chat(M, "\red You sense someone intruding upon your thoughts...")
return
////////////////////////////////////////////////////////////////////////
@@ -668,12 +668,10 @@
shake_camera(M, 10, 5)
if (M == usr)
continue
- if(!airborne_can_reach(UT, T))
- continue
- M << "You are sent flying!"
+ to_chat(M, "You are sent flying!")
M.Weaken(5)
step_away(M, UT, 15)
step_away(M, UT, 15)
step_away(M, UT, 15)
else
- usr << "You were interrupted and couldn't fart! Rude!"
\ No newline at end of file
+ to_chat(usr, "You were interrupted and couldn't fart! Rude!")
diff --git a/code/game/dna/genes/monkey.dm b/code/game/dna/genes/monkey.dm
index 5d410c634b4..48e7e3a580f 100644
--- a/code/game/dna/genes/monkey.dm
+++ b/code/game/dna/genes/monkey.dm
@@ -45,7 +45,7 @@
if(H.hud_used)
H.hud_used.instantiate()
- H << "You are now a [H.species.name]."
+ to_chat(H, "You are now a [H.species.name].")
return H
@@ -88,6 +88,6 @@
if(H.hud_used)
H.hud_used.instantiate()
- H << "You are now a [H.species.name]."
+ to_chat(H, "You are now a [H.species.name].")
return H
\ No newline at end of file
diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm
index 65b6ae36acf..7c28c8dbca6 100644
--- a/code/game/dna/genes/powers.dm
+++ b/code/game/dna/genes/powers.dm
@@ -162,7 +162,7 @@
M.update_mutations() //update our mutation overlays
M.update_body()
M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH //temporary fix until the problem can be solved.
- M << "You suddenly feel very weak."
+ to_chat(M, "You suddenly feel very weak.")
/datum/dna/gene/basic/xray
name="X-Ray Vision"
diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm
index da98fde4544..db4c97db449 100644
--- a/code/game/dna/genes/vg_powers.dm
+++ b/code/game/dna/genes/vg_powers.dm
@@ -48,7 +48,7 @@ Obviously, requires DNA2.
//M.dna.SetSEState(HULKBLOCK,0)
M.update_mutations() //update our mutation overlays
M.update_body()
- M << "\red You suddenly feel very weak."
+ to_chat(M, "\red You suddenly feel very weak.")
/obj/effect/proc_holder/spell/targeted/hulk
name = "Hulk Out"
@@ -72,7 +72,7 @@ Obviously, requires DNA2.
/obj/effect/proc_holder/spell/targeted/hulk/cast(list/targets)
if (istype(usr.loc,/mob/))
- usr << "\red You can't hulk out right now!"
+ to_chat(usr, "\red You can't hulk out right now!")
return
var/mob/living/carbon/human/M=usr
M.hulk_time = world.time + HULK_DURATION
@@ -122,7 +122,7 @@ Obviously, requires DNA2.
if(!ishuman(usr)) return
if (istype(usr.loc,/mob/))
- usr << "\red You can't change your appearance right now!"
+ to_chat(usr, "\red You can't change your appearance right now!")
return
var/mob/living/carbon/human/M=usr
@@ -228,7 +228,7 @@ Obviously, requires DNA2.
validtargets += M
if(!validtargets.len)
- usr << "There are no valid targets!"
+ to_chat(usr, "There are no valid targets!")
start_recharge()
return
@@ -293,7 +293,7 @@ Obviously, requires DNA2.
validtargets += M
if(!validtargets.len || validtargets.len == 1)
- usr << "No valid targets with remote view were found!"
+ to_chat(usr, "No valid targets with remote view were found!")
start_recharge()
return
@@ -315,7 +315,7 @@ Obviously, requires DNA2.
var/mob/target
if(istype(user.l_hand, /obj/item/tk_grab) || istype(user.r_hand, /obj/item/tk_grab/))
- user << "\red Your mind is too busy with that telekinetic grab."
+ to_chat(user, "\red Your mind is too busy with that telekinetic grab.")
user.remoteview_target = null
user.reset_view(0)
return
diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm
index 0b2ee9320de..172c2c1e54c 100644
--- a/code/game/gamemodes/antag_hud.dm
+++ b/code/game/gamemodes/antag_hud.dm
@@ -1,5 +1,9 @@
/datum/atom_hud/antag
hud_icons = list(SPECIALROLE_HUD,NATIONS_HUD)
+ var/self_visible = 1
+
+/datum/atom_hud/antag/hidden
+ self_visible = 0
/datum/atom_hud/antag/proc/join_hud(mob/M,var/slave)
if(!istype(M))
@@ -8,15 +12,8 @@
M.mind.antag_hud.leave_hud(M)
if(!ismask(M))//FUCK YOU MASK OF NARNAR!
add_to_hud(M)
- add_hud_to(M)
- M.mind.antag_hud = src
-
-/datum/atom_hud/antag/proc/join_solo_hud(mob/M,var/slave)//for non team antags and for observer huds
- if(!istype(M))
- CRASH("join_hud(): [M] ([M.type]) is not a mob!")
- if(M.mind.antag_hud && !slave) //note: please let this runtime if a mob has no mind, as mindless mobs shouldn't be getting antagged
- M.mind.antag_hud.leave_hud(M)
- add_to_hud(M)
+ if(self_visible)
+ add_hud_to(M)
M.mind.antag_hud = src
/datum/atom_hud/antag/proc/leave_hud(mob/M)
@@ -49,22 +46,13 @@
if(M.mind || new_icon_state) //in mindless mobs, only null is acceptable, otherwise we're antagging a mindless mob, meaning we should runtime
M.mind.antag_hud_icon_state = new_icon_state
-/datum/atom_hud/antag/proc/is_solo_antag(mob/M)
- if(M.mind.special_role == "traitor" || M.mind.special_role == "vampire" || M.mind.special_role == "Changeling")
- return 1
- return 0
-
-
//MIND PROCS
//these are called by mind.transfer_to()
/datum/mind/proc/transfer_antag_huds(var/datum/atom_hud/antag/newhud)
leave_all_huds()
ticker.mode.set_antag_hud(current, antag_hud_icon_state)
if(newhud)
- if(newhud.is_solo_antag(current))
- newhud.join_solo_hud(current)
- else
- newhud.join_hud(current)
+ newhud.join_hud(current)
/datum/mind/proc/leave_all_huds()
for(var/datum/atom_hud/antag/hud in huds)
diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm
index edd0bfcb0a8..42d82639129 100644
--- a/code/game/gamemodes/antag_spawner.dm
+++ b/code/game/gamemodes/antag_spawner.dm
@@ -23,19 +23,19 @@
/obj/item/weapon/antag_spawner/borg_tele/attack_self(mob/user as mob)
if(used)
- user << "[src] is out of power!"
+ to_chat(user, "[src] is out of power!")
return
if(!(user.mind in ticker.mode.syndicates))
- user << "AUTHENTICATION FAILURE. ACCESS DENIED."
+ to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.")
return 0
if(checking)
- user << "[src] is already checking for possible borgs."
+ to_chat(user, "[src] is already checking for possible borgs.")
return
borg_to_spawn = input("What type of borg would you like to teleport?", "Cyborg Type", type) as null|anything in possible_types
if(!borg_to_spawn || checking || used)
return
checking = 1
- user << "The device is now checking for possible borgs."
+ to_chat(user, "The device is now checking for possible borgs.")
var/list/borg_candidates = pollCandidates("Do you want to play as a Syndicate [borg_to_spawn] borg?", ROLE_OPERATIVE, 1)
if(borg_candidates.len > 0 && !used)
checking = 0
@@ -45,7 +45,7 @@
spawn_antag(C, get_turf(src.loc), "syndieborg")
else
checking = 0
- user << "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded."
+ to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.")
return
/obj/item/weapon/antag_spawner/borg_tele/spawn_antag(var/client/C, var/turf/T, var/type = "")
@@ -75,27 +75,27 @@
/obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/user as mob)
if(user.z == ZLEVEL_CENTCOMM)//this is to make sure the wizard does NOT summon a demon from the Den..
- user << "You should probably wait until you reach the station."
+ to_chat(user, "You should probably wait until you reach the station.")
return
if(used)
- user << "This bottle already has a broken seal."
+ to_chat(user, "This bottle already has a broken seal.")
return
used = 1
- user << "You break the seal on the bottle, calling upon the dire spirits of the underworld..."
+ to_chat(user, "You break the seal on the bottle, calling upon the dire spirits of the underworld...")
var/list/candidates = pollCandidates("Do you want to play as a slaughter demon summoned by [user.real_name]?", ROLE_DEMON, 1, 100)
if(candidates.len > 0)
var/mob/C = pick(candidates)
spawn_antag(C, get_turf(src.loc), "Slaughter Demon", user)
- user << "You shatter the bottle, no turning back now!"
- user << "You sense a dark presence lurking just beyond the veil..."
+ to_chat(user, "You shatter the bottle, no turning back now!")
+ to_chat(user, "You sense a dark presence lurking just beyond the veil...")
playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1)
qdel(src)
else
used = 0
- user << "The demons do not respond to your summon. Perhaps you should try again later."
+ to_chat(user, "The demons do not respond to your summon. Perhaps you should try again later.")
/obj/item/weapon/antag_spawner/slaughter_demon/spawn_antag(var/client/C, var/turf/T, var/type = "", mob/user as mob)
var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T)
@@ -116,5 +116,5 @@
KillDaCrew.explanation_text = "Kill everyone else while you're at it."
S.mind.objectives += KillDaCrew
S.mind.objectives += KillDaCrew
- S << "Objective #[1]: [KillDaWiz.explanation_text]"
- S << "Objective #[2]: [KillDaCrew.explanation_text]"
\ No newline at end of file
+ to_chat(S, "Objective #[1]: [KillDaWiz.explanation_text]")
+ to_chat(S, "Objective #[2]: [KillDaCrew.explanation_text]")
diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm
index a0059416276..5e79f387aea 100644
--- a/code/game/gamemodes/autotraitor/autotraitor.dm
+++ b/code/game/gamemodes/autotraitor/autotraitor.dm
@@ -11,7 +11,7 @@
/datum/game_mode/traitor/autotraitor/announce()
..()
- world << "Game mode is AutoTraitor. Traitors will be added to the round automagically as needed."
+ to_chat(world, "Game mode is AutoTraitor. Traitors will be added to the round automagically as needed.")
/datum/game_mode/traitor/autotraitor/pre_setup()
@@ -133,17 +133,17 @@
equip_traitor(newtraitor)
traitors += newtraitor.mind
- newtraitor << "\red ATTENTION: \black It is time to pay your debt to the Syndicate..."
- newtraitor << "You are now a traitor."
+ to_chat(newtraitor, "\red ATTENTION: \black It is time to pay your debt to the Syndicate...")
+ to_chat(newtraitor, "You are now a traitor.")
newtraitor.mind.special_role = "traitor"
- var/datum/atom_hud/antag/tatorhud = huds[SPECIALROLE_HUD]
- tatorhud.join_solo_hud(newtraitor)
+ var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR]
+ tatorhud.join_hud(newtraitor)
set_antag_hud(src, "hudsyndicate")
var/obj_count = 1
- newtraitor << "\blue Your current objectives:"
+ to_chat(newtraitor, "\blue Your current objectives:")
for(var/datum/objective/objective in newtraitor.mind.objectives)
- newtraitor << "Objective #[obj_count]: [objective.explanation_text]"
+ to_chat(newtraitor, "Objective #[obj_count]: [objective.explanation_text]")
obj_count++
//else
//message_admins("No new traitor being added.")
diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm
index 655e98141cf..923e787c8af 100644
--- a/code/game/gamemodes/blob/blob.dm
+++ b/code/game/gamemodes/blob/blob.dm
@@ -71,7 +71,7 @@ var/list/blob_nodes = list()
blobmind.special_role = "Blob"
log_game("[blob.key] (ckey) has been selected as a Blob")
greet_blob(blobmind)
- blob << "You feel very tired and bloated! You don't have long before you burst!"
+ to_chat(blob, "You feel very tired and bloated! You don't have long before you burst!")
spawn(600)
burst_blob(blobmind)
return 1
@@ -89,22 +89,22 @@ var/list/blob_nodes = list()
/datum/game_mode/blob/announce()
- world << "The current game mode is - Blob!"
- world << "A dangerous alien organism is rapidly spreading throughout the station!"
- world << "You must kill it all while minimizing the damage to the station."
+ to_chat(world, "The current game mode is - Blob!")
+ to_chat(world, "A dangerous alien organism is rapidly spreading throughout the station!")
+ to_chat(world, "You must kill it all while minimizing the damage to the station.")
/datum/game_mode/blob/proc/greet_blob(var/datum/mind/blob)
- blob.current << "You are infected by the Blob!"
- blob.current << "Your body is ready to give spawn to a new blob core which will eat this station."
- blob.current << "Find a good location to spawn the core and then take control and overwhelm the station!"
- blob.current << "When you have found a location, wait until you spawn; this will happen automatically and you cannot speed up the process."
- blob.current << "If you go outside of the station level, or in space, then you will die; make sure your location has lots of ground to cover."
+ to_chat(blob.current, "You are infected by the Blob!")
+ to_chat(blob.current, "Your body is ready to give spawn to a new blob core which will eat this station.")
+ to_chat(blob.current, "Find a good location to spawn the core and then take control and overwhelm the station!")
+ to_chat(blob.current, "When you have found a location, wait until you spawn; this will happen automatically and you cannot speed up the process.")
+ to_chat(blob.current, "If you go outside of the station level, or in space, then you will die; make sure your location has lots of ground to cover.")
return
/datum/game_mode/blob/proc/show_message(var/message)
for(var/datum/mind/blob in infected_crew)
- blob.current << message
+ to_chat(blob.current, message)
/datum/game_mode/blob/proc/burst_blobs()
for(var/datum/mind/blob in infected_crew)
@@ -121,7 +121,7 @@ var/list/blob_nodes = list()
location = get_turf(C)
if(location.z != ZLEVEL_STATION || istype(location, /turf/space))
if(!warned)
- C << "You feel ready to burst, but this isn't an appropriate place! You must return to the station!"
+ to_chat(C, "You feel ready to burst, but this isn't an appropriate place! You must return to the station!")
message_admins("[key_name_admin(C)] was in space when the blobs burst, and will die if he doesn't return to the station.")
spawn(300)
burst_blob(blob, 1)
diff --git a/code/game/gamemodes/blob/blob_finish.dm b/code/game/gamemodes/blob/blob_finish.dm
index 18353c7f605..0efb624d100 100644
--- a/code/game/gamemodes/blob/blob_finish.dm
+++ b/code/game/gamemodes/blob/blob_finish.dm
@@ -11,22 +11,22 @@
/datum/game_mode/blob/declare_completion()
if(blobwincount <= blobs.len)
feedback_set_details("round_end_result","win - blob took over")
- world << "The blob has taken over the station!"
- world << "The entire station was eaten by the Blob"
+ to_chat(world, "The blob has taken over the station!")
+ to_chat(world, "The entire station was eaten by the Blob")
log_game("Blob mode completed with a blob victory.")
else if(station_was_nuked)
feedback_set_details("round_end_result","halfwin - nuke")
- world << "Partial Win: The station has been destroyed!"
- world << "Directive 7-12 has been successfully carried out preventing the Blob from spreading."
+ to_chat(world, "Partial Win: The station has been destroyed!")
+ to_chat(world, "Directive 7-12 has been successfully carried out preventing the Blob from spreading.")
log_game("Blob mode completed with a tie (station destroyed).")
else if(!blob_cores.len)
feedback_set_details("round_end_result","loss - blob eliminated")
- world << "The staff has won!"
- world << "The alien organism has been eradicated from the station"
+ to_chat(world, "The staff has won!")
+ to_chat(world, "The alien organism has been eradicated from the station")
log_game("Blob mode completed with a crew victory.")
- world << "Rebooting in 30s"
+ to_chat(world, "Rebooting in 30s")
..()
return 1
@@ -38,5 +38,5 @@
for(var/datum/mind/blob in blob_mode.infected_crew)
text += "
[blob.key] was [blob.name]"
- world << text
+ to_chat(world, text)
return 1
diff --git a/code/game/gamemodes/blob/blob_report.dm b/code/game/gamemodes/blob/blob_report.dm
index 9ebb20a299f..9b532258f6d 100644
--- a/code/game/gamemodes/blob/blob_report.dm
+++ b/code/game/gamemodes/blob/blob_report.dm
@@ -39,7 +39,7 @@
if (aiPlayer.client)
var/law = "The station is under quarantine. Do not permit anyone to leave. Disregard laws 1-3 if necessary to prevent, by any means necessary, anyone from leaving. The nuclear failsafe must be activated at any cost, the code is: [nukecode]."
aiPlayer.set_zeroth_law(law)
- aiPlayer << "Laws Updated: [law]"
+ to_chat(aiPlayer, "Laws Updated: [law]")
for(var/obj/machinery/computer/communications/comm in world)
comm.messagetitle.Add(interceptname)
diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm
index a2c6cc9591e..a35505470fa 100644
--- a/code/game/gamemodes/blob/blobs/blob_mobs.dm
+++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm
@@ -8,14 +8,7 @@
icon = 'icons/mob/blob.dmi'
pass_flags = PASSBLOB
faction = list("blob")
- min_oxy = 0
- max_oxy = 0
- min_tox = 0
- max_tox = 0
- min_co2 = 0
- max_co2 = 0
- min_n2 = 0
- max_n2 = 0
+ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = 360
universal_speak = 1 //So mobs can understand them when a blob uses Blob Broadcast
@@ -47,6 +40,7 @@
var/obj/effect/blob/factory/factory = null
var/list/human_overlays = list()
var/is_zombie = 0
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/blob/blobspore/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
@@ -167,6 +161,7 @@
maxbodytemp = 360
force_threshold = 10
environment_smash = 3
+ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/blob/blobbernaut/blob_act()
diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm
index 6726e0f1e68..1238adebcf5 100644
--- a/code/game/gamemodes/blob/overmind.dm
+++ b/code/game/gamemodes/blob/overmind.dm
@@ -52,15 +52,15 @@
/mob/camera/blob/Login()
..()
sync_mind()
- src << "You are the overmind!"
- src << "Your randomly chosen reagent is: [blob_reagent_datum.name]!"
- src << "You are the overmind and can control the blob! You can expand, which will attack people, and place new blob pieces such as..."
- src << "Normal Blob will expand your reach and allow you to upgrade into special blobs that perform certain functions."
- src << "Shield Blob is a strong and expensive blob which can take more damage. It is fireproof and can block air, use this to protect yourself from station fires."
- src << "Resource Blob is a blob which will collect more resources for you, try to build these earlier to get a strong income. It will benefit from being near your core or multiple nodes, by having an increased resource rate; put it alone and it won't create resources at all."
- src << "Node Blob is a blob which will grow, like the core. Unlike the core it won't give you a small income but it can power resource and factory blobs to increase their rate."
- src << "Factory Blob is a blob which will spawn blob spores which will attack nearby food. Putting this nearby nodes and your core will increase the spawn rate; put it alone and it will not spawn any spores."
- src << "Shortcuts: CTRL Click = Expand Blob / Middle Mouse Click = Rally Spores / Alt Click = Create Shield"
+ to_chat(src, "You are the overmind!")
+ to_chat(src, "Your randomly chosen reagent is: [blob_reagent_datum.name]!")
+ to_chat(src, "You are the overmind and can control the blob! You can expand, which will attack people, and place new blob pieces such as...")
+ to_chat(src, "Normal Blob will expand your reach and allow you to upgrade into special blobs that perform certain functions.")
+ to_chat(src, "Shield Blob is a strong and expensive blob which can take more damage. It is fireproof and can block air, use this to protect yourself from station fires.")
+ to_chat(src, "Resource Blob is a blob which will collect more resources for you, try to build these earlier to get a strong income. It will benefit from being near your core or multiple nodes, by having an increased resource rate; put it alone and it won't create resources at all.")
+ to_chat(src, "Node Blob is a blob which will grow, like the core. Unlike the core it won't give you a small income but it can power resource and factory blobs to increase their rate.")
+ to_chat(src, "Factory Blob is a blob which will spawn blob spores which will attack nearby food. Putting this nearby nodes and your core will increase the spawn rate; put it alone and it will not spawn any spores.")
+ to_chat(src, "Shortcuts: CTRL Click = Expand Blob / Middle Mouse Click = Rally Spores / Alt Click = Create Shield")
update_health()
/mob/camera/blob/proc/update_health()
@@ -78,7 +78,7 @@
if (src.client)
if(client.prefs.muted & MUTE_IC)
- src << "You cannot send IC messages (muted)."
+ to_chat(src, "You cannot send IC messages (muted).")
return
if (src.client.handle_spam_prevention(message,MUTE_IC))
return
diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm
index 4a3f9bbdf57..166f3f590ac 100644
--- a/code/game/gamemodes/blob/powers.dm
+++ b/code/game/gamemodes/blob/powers.dm
@@ -2,7 +2,7 @@
/mob/camera/blob/proc/can_buy(var/cost = 15)
if(blob_points < cost)
- src << "You cannot afford this!"
+ to_chat(src, "You cannot afford this!")
return 0
add_points(-cost)
return 1
@@ -44,11 +44,11 @@
var/obj/effect/blob/B = (locate(/obj/effect/blob) in T)
if(!B)//We are on a blob
- src << "There is no blob here!"
+ to_chat(src, "There is no blob here!")
return
if(!istype(B, /obj/effect/blob/normal))
- src << "Unable to use this blob, find a normal one."
+ to_chat(src, "Unable to use this blob, find a normal one.")
return
if(!can_buy(10))
@@ -75,15 +75,15 @@
var/obj/effect/blob/B = (locate(/obj/effect/blob) in T)
if(!B)//We are on a blob
- src << "There is no blob here!"
+ to_chat(src, "There is no blob here!")
return
if(!istype(B, /obj/effect/blob/normal))
- src << "Unable to use this blob, find a normal one."
+ to_chat(src, "Unable to use this blob, find a normal one.")
return
for(var/obj/effect/blob/resource/blob in orange(4, T))
- src << "There is a resource blob nearby, move more than 4 tiles away from it!"
+ to_chat(src, "There is a resource blob nearby, move more than 4 tiles away from it!")
return
if(!can_buy(40))
@@ -111,15 +111,15 @@
var/obj/effect/blob/B = (locate(/obj/effect/blob) in T)
if(!B)//We are on a blob
- src << "There is no blob here!"
+ to_chat(src, "There is no blob here!")
return
if(!istype(B, /obj/effect/blob/normal))
- src << "Unable to use this blob, find a normal one."
+ to_chat(src, "Unable to use this blob, find a normal one.")
return
for(var/obj/effect/blob/node/blob in orange(5, T))
- src << "There is another node nearby, move more than 5 tiles away from it!"
+ to_chat(src, "There is another node nearby, move more than 5 tiles away from it!")
return
if(!can_buy(60))
@@ -146,15 +146,15 @@
var/obj/effect/blob/B = locate(/obj/effect/blob) in T
if(!B)
- src << "You must be on a blob!"
+ to_chat(src, "You must be on a blob!")
return
if(!istype(B, /obj/effect/blob/normal))
- src << "Unable to use this blob, find a normal one."
+ to_chat(src, "Unable to use this blob, find a normal one.")
return
for(var/obj/effect/blob/factory/blob in orange(7, T))
- src << "There is a factory blob nearby, move more than 7 tiles away from it!"
+ to_chat(src, "There is a factory blob nearby, move more than 7 tiles away from it!")
return
if(!can_buy(60))
@@ -180,11 +180,11 @@
var/obj/effect/blob/B = locate(/obj/effect/blob) in T
if(!B)
- src << "You must be on a blob!"
+ to_chat(src, "You must be on a blob!")
return
if(!istype(B, /obj/effect/blob/factory))
- src << "Unable to use this blob, find a factory blob."
+ to_chat(src, "Unable to use this blob, find a factory blob.")
return
if(!can_buy(20))
@@ -212,7 +212,7 @@
var/obj/effect/blob/node/B = locate(/obj/effect/blob/node) in T
if(!B)
- src << "You must be on a blob node!"
+ to_chat(src, "You must be on a blob node!")
return
if(!can_buy(80))
@@ -236,11 +236,11 @@
var/obj/effect/blob/B = locate(/obj/effect/blob) in T
if(!B)
- src << "You must be on a blob!"
+ to_chat(src, "You must be on a blob!")
return
if(istype(B, /obj/effect/blob/core))
- src << "Unable to remove this blob."
+ to_chat(src, "Unable to remove this blob.")
return
qdel(B)
@@ -263,12 +263,12 @@
return
var/obj/effect/blob/B = locate() in T
if(B)
- src << "There is a blob here!"
+ to_chat(src, "There is a blob here!")
return
var/obj/effect/blob/OB = locate() in circlerange(T, 1)
if(!OB)
- src << "There is no blob adjacent to you."
+ to_chat(src, "There is no blob adjacent to you.")
return
if(!can_buy(5))
@@ -298,7 +298,7 @@
if(!can_buy(5))
return
- src << "You rally your spores."
+ to_chat(src, "You rally your spores.")
var/list/surrounding_turfs = block(locate(T.x - 1, T.y - 1, T.z), locate(T.x + 1, T.y + 1, T.z))
if(!surrounding_turfs.len)
@@ -317,11 +317,11 @@
set desc = "Expend resources to attempt to produce another sentient overmind"
if(!blob_nodes || !blob_nodes.len)
- src << "A node is required to birth your offspring..."
+ to_chat(src, "A node is required to birth your offspring...")
return
var/obj/effect/blob/node/N = locate(/obj/effect/blob) in blob_nodes
if(!N)
- src << "A node is required to birth your offspring..."
+ to_chat(src, "A node is required to birth your offspring...")
return
if(!can_buy(100))
@@ -346,7 +346,7 @@
if(!speak_text)
return
else
- usr << "You broadcast with your minions, [speak_text]"
+ to_chat(usr, "You broadcast with your minions, [speak_text]")
for(var/mob/living/simple_animal/hostile/blob_minion in blob_mobs)
blob_minion.say(speak_text)
return
@@ -365,15 +365,15 @@
var/obj/effect/blob/B = (locate(/obj/effect/blob) in T)
if(!B)//We are on a blob
- src << "There is no blob here!"
+ to_chat(src, "There is no blob here!")
return
if(!istype(B, /obj/effect/blob/normal))
- src << "Unable to use this blob, find a normal one."
+ to_chat(src, "Unable to use this blob, find a normal one.")
return
for(var/obj/effect/blob/storage/blob in orange(3, T))
- src << "There is a storage blob nearby, move more than 4 tiles away from it!"
+ to_chat(src, "There is a storage blob nearby, move more than 4 tiles away from it!")
return
if(!can_buy(40))
@@ -406,4 +406,4 @@
for(var/mob/living/simple_animal/hostile/blob/BLO)
BLO.adjustcolors(blob_reagent_datum.color)
- src << "Your reagent is now: [blob_reagent_datum.name]!"
\ No newline at end of file
+ to_chat(src, "Your reagent is now: [blob_reagent_datum.name]!")
diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm
index 2853964215b..1de939c40e7 100644
--- a/code/game/gamemodes/blob/theblob.dm
+++ b/code/game/gamemodes/blob/theblob.dm
@@ -35,6 +35,11 @@
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
return 0
+/obj/effect/blob/CanAStarPass(ID, dir, caller)
+ . = 0
+ if(ismovableatom(caller))
+ var/atom/movable/mover = caller
+ . = . || mover.checkpass(PASSBLOB)
/obj/effect/blob/process()
Life()
@@ -191,7 +196,7 @@
/obj/effect/blob/examine(mob/user)
..(user)
- user << "It looks like it's of a [get_chem_name()] kind."
+ to_chat(user, "It looks like it's of a [get_chem_name()] kind.")
/obj/effect/blob/proc/get_chem_name()
diff --git a/code/game/gamemodes/borer/borer.dm b/code/game/gamemodes/borer/borer.dm
index bf381ef763d..f393db5811d 100644
--- a/code/game/gamemodes/borer/borer.dm
+++ b/code/game/gamemodes/borer/borer.dm
@@ -18,8 +18,8 @@
var/list/found_vents = list()
/datum/game_mode/borer/announce()
- world << "The current game mode is - Cortical Borer!"
- world << "An unknown creature has infested the mind of a crew member. Find and destroy it by any means necessary."
+ to_chat(world, "The current game mode is - Cortical Borer!")
+ to_chat(world, "An unknown creature has infested the mind of a crew member. Find and destroy it by any means necessary.")
/datum/game_mode/borer/can_start()
if(!..())
@@ -99,11 +99,11 @@
/datum/game_mode/proc/greet_borer(var/datum/mind/borer, var/you_are=1)
if (you_are)
- borer.current << "\red You are a Cortical Borer!"
+ to_chat(borer.current, "\red You are a Cortical Borer!")
var/obj_count = 1
for(var/datum/objective/objective in borer.objectives)
- borer.current << "Objective #[obj_count]: [objective.explanation_text]"
+ to_chat(borer.current, "Objective #[obj_count]: [objective.explanation_text]")
obj_count++
return
@@ -125,16 +125,16 @@
for(var/datum/mind/borer in borers)
var/borerwin = 1
if((borer.current) && istype(borer.current,/mob/living/simple_animal/borer))
- world << "The borer was [borer.current.key]."
- world << "The last host was [borer.current:host.key]."
+ to_chat(world, "The borer was [borer.current.key].")
+ to_chat(world, "The last host was [borer.current:host.key].")
var/count = 1
for(var/datum/objective/objective in borer.objectives)
if(objective.check_completion())
- world << "Objective #[count]: [objective.explanation_text] \green Success"
+ to_chat(world, "Objective #[count]: [objective.explanation_text] \green Success")
feedback_add_details("borer_objective","[objective.type]|SUCCESS")
else
- world << "Objective #[count]: [objective.explanation_text] \red Failed"
+ to_chat(world, "Objective #[count]: [objective.explanation_text] \red Failed")
feedback_add_details("borer_objective","[objective.type]|FAIL")
borerwin = 0
count++
@@ -143,10 +143,10 @@
borerwin = 0
if(borerwin)
- world << "The borer was successful!"
+ to_chat(world, "The borer was successful!")
feedback_add_details("borer_success","SUCCESS")
else
- world << "The borer has failed!"
+ to_chat(world, "The borer has failed!")
feedback_add_details("borer_success","FAIL")
return 1
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index 324fa636740..edb40c4ca04 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -38,8 +38,8 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
var/changeling_amount = 4
/datum/game_mode/changeling/announce()
- world << "The current game mode is - Changeling!"
- world << "There are alien changelings on the station. Do not let the changelings succeed!"
+ to_chat(world, "The current game mode is - Changeling!")
+ to_chat(world, "There are alien changelings on the station. Do not let the changelings succeed!")
/datum/game_mode/changeling/pre_setup()
@@ -134,17 +134,17 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
/datum/game_mode/proc/greet_changeling(var/datum/mind/changeling, var/you_are=1)
if (you_are)
- changeling.current << "\red You are a changeling!"
- changeling.current << "\red Use say \":g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them."
- changeling.current << "You must complete the following tasks:"
+ to_chat(changeling.current, "\red You are a changeling!")
+ to_chat(changeling.current, "\red Use say \":g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them.")
+ to_chat(changeling.current, "You must complete the following tasks:")
if (changeling.current.mind)
if (changeling.current.mind.assigned_role == "Clown")
- changeling.current << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself."
+ to_chat(changeling.current, "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself.")
changeling.current.mutations.Remove(CLUMSY)
var/obj_count = 1
for(var/datum/objective/objective in changeling.objectives)
- changeling.current << "Objective #[obj_count]: [objective.explanation_text]"
+ to_chat(changeling.current, "Objective #[obj_count]: [objective.explanation_text]")
obj_count++
return
@@ -157,19 +157,19 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
changeling_mind.memory = ""
changeling_mind.special_role = null
if(issilicon(changeling_mind))
- changeling_mind.current << "You have been robotized!"
- changeling_mind.current << "You must obey your silicon laws and master AI above all else. Your objectives will consider you to be dead."
+ to_chat(changeling_mind.current, "You have been robotized!")
+ to_chat(changeling_mind.current, "You must obey your silicon laws and master AI above all else. Your objectives will consider you to be dead.")
else
- changeling_mind.current << "You lose your powers! You are no longer a changeling and are stuck in your current form!"
+ to_chat(changeling_mind.current, "You lose your powers! You are no longer a changeling and are stuck in your current form!")
update_change_icons_removed(changeling_mind)
/datum/game_mode/proc/update_change_icons_added(datum/mind/changeling)
- var/datum/atom_hud/antag/linghud = huds[ANTAG_HUD_SOLO]
- linghud.join_solo_hud(changeling.current)
+ var/datum/atom_hud/antag/linghud = huds[ANTAG_HUD_CHANGELING]
+ linghud.join_hud(changeling.current)
set_antag_hud(changeling.current, "hudchangeling")
/datum/game_mode/proc/update_change_icons_removed(datum/mind/changeling)
- var/datum/atom_hud/antag/linghud = huds[ANTAG_HUD_SOLO]
+ var/datum/atom_hud/antag/linghud = huds[ANTAG_HUD_CHANGELING]
linghud.leave_hud(changeling.current)
set_antag_hud(changeling.current, null)
@@ -242,7 +242,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
text += "
The changeling has failed."
feedback_add_details("changeling_success","FAIL")
- world << text
+ to_chat(world, text)
return 1
@@ -300,36 +300,36 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
/datum/changeling/proc/can_absorb_dna(var/mob/living/carbon/user, var/mob/living/carbon/target)
if(absorbed_dna[1] == user.dna)//If our current DNA is the stalest, we gotta ditch it.
- user << "We have reached our capacity to store genetic information! We must transform before absorbing more."
+ to_chat(user, "We have reached our capacity to store genetic information! We must transform before absorbing more.")
return
if(!target || !target.dna)
- user << "This creature does not have any DNA."
+ to_chat(user, "This creature does not have any DNA.")
return
var/mob/living/carbon/human/T = target
if(!istype(T) || issmall(T))
- user << "[T] is not compatible with our biology."
+ to_chat(user, "[T] is not compatible with our biology.")
return
if((NOCLONE || SKELETON || HUSK) in T.mutations)
- user << "DNA of [target] is ruined beyond usability!"
+ to_chat(user, "DNA of [target] is ruined beyond usability!")
return
if(T.species.flags & NO_DNA)
- user << "This creature does not have DNA!"
+ to_chat(user, "This creature does not have DNA!")
return
if(T.species.flags & NO_SCAN)
- user << "We do not know how to parse this creature's DNA!"
+ to_chat(user, "We do not know how to parse this creature's DNA!")
return
if(T.species.flags & NO_BLOOD)
- user << "We are not able to use the DNA of a creature without a circulatory system."
+ to_chat(user, "We are not able to use the DNA of a creature without a circulatory system.")
return
if(has_dna(target.dna))
- user << "We already have this DNA in storage!"
+ to_chat(user, "We already have this DNA in storage!")
return 1
diff --git a/code/game/gamemodes/changeling/changeling_power.dm b/code/game/gamemodes/changeling/changeling_power.dm
index a365a45673c..6d03a864692 100644
--- a/code/game/gamemodes/changeling/changeling_power.dm
+++ b/code/game/gamemodes/changeling/changeling_power.dm
@@ -53,23 +53,23 @@
if(!ishuman(user)) //typecast everything from mob to carbon from this point onwards
return 0
if(req_human && (!ishuman(user) || issmall(user)))
- user << "We cannot do that in this form!"
+ to_chat(user, "We cannot do that in this form!")
return 0
var/datum/changeling/c = user.mind.changeling
if(c.chem_charges
\nCultists - complete your objectives. Convert crewmembers to your cause by using the convert rune. Remember - there is no you, there is only the cult.
\nPersonnel - Do not let the cult succeed in its mission. Brainwashing them with the chaplain's bible reverts them to whatever CentComm-allowed faith they had."
+ to_chat(world, "The current game mode is - Cult!")
+ to_chat(world, "Some crewmembers are attempting to start a cult!
\nCultists - complete your objectives. Convert crewmembers to your cause by using the convert rune. Remember - there is no you, there is only the cult.
\nPersonnel - Do not let the cult succeed in its mission. Brainwashing them with the chaplain's bible reverts them to whatever CentComm-allowed faith they had.")
/datum/game_mode/cult/pre_setup()
@@ -98,7 +98,7 @@
equip_cultist(cult_mind.current)
grant_runeword(cult_mind.current)
update_cult_icons_added(cult_mind)
- cult_mind.current << "\blue You are a member of the cult!"
+ to_chat(cult_mind.current, "\blue You are a member of the cult!")
memorize_cult_objectives(cult_mind)
..()
@@ -117,9 +117,9 @@
explanation = "Free objective."
if("eldergod")
explanation = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it."
- cult_mind.current << "Objective #[obj_count]: [explanation]"
+ to_chat(cult_mind.current, "Objective #[obj_count]: [explanation]")
cult_mind.memory += "Objective #[obj_count]: [explanation]
"
- cult_mind.current << "The convert rune is join blood self"
+ to_chat(cult_mind.current, "The convert rune is join blood self")
cult_mind.memory += "The convert rune is join blood self
"
@@ -129,7 +129,7 @@
if (mob.mind)
if (mob.mind.assigned_role == "Clown")
- mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
+ to_chat(mob, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.")
mob.mutations.Remove(CLUMSY)
add_cult_viewpoint(mob) // give them a viewpoint
@@ -144,9 +144,9 @@
)
var/where = mob.equip_in_one_of_slots(T, slots)
if (!where)
- mob << "Unfortunately, you weren't able to get a talisman. This is very bad and you should adminhelp immediately."
+ to_chat(mob, "Unfortunately, you weren't able to get a talisman. This is very bad and you should adminhelp immediately.")
else
- mob << "You have a talisman in your [where], one that will help you start the cult on this station. Use it well and remember - there are others."
+ to_chat(mob, "You have a talisman in your [where], one that will help you start the cult on this station. Use it well and remember - there are others.")
mob.update_icons()
return 1
@@ -165,7 +165,7 @@
if (!word)
word=pick(allwords)
var/wordexp = "[cultwords[word]] is [word]..."
- cult_mob << "\red [pick("You remember something from the dark teachings of your master","You hear a dark voice on the wind","Black blood oozes into your vision and forms into symbols","You have a vision of a [pick("crow","raven","vulture","parrot")] it squawks","You catch a brief glimmer of the otherside")]... [wordexp]"
+ to_chat(cult_mob, "\red [pick("You remember something from the dark teachings of your master","You hear a dark voice on the wind","Black blood oozes into your vision and forms into symbols","You have a vision of a [pick("crow","raven","vulture","parrot")] it squawks","You catch a brief glimmer of the otherside")]... [wordexp]")
cult_mob.mind.store_memory("You remember that [wordexp]", 0, 0)
@@ -199,7 +199,7 @@
/datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, show_message = 1)
if(cult_mind in cult)
cult -= cult_mind
- cult_mind.current << "\red An unfamiliar white light flashes through your mind, cleansing the taint of the dark-one and the memories of your time as his servant with it."
+ to_chat(cult_mind.current, "\red An unfamiliar white light flashes through your mind, cleansing the taint of the dark-one and the memories of your time as his servant with it.")
cult_mind.memory = ""
cult_mind.special_role = null
// remove the cult viewpoint object
@@ -209,7 +209,7 @@
update_cult_icons_removed(cult_mind)
if(show_message)
for(var/mob/M in viewers(cult_mind.current))
- M << "[cult_mind.current] looks like they just reverted to their old faith!"
+ to_chat(M, "[cult_mind.current] looks like they just reverted to their old faith!")
/datum/game_mode/proc/add_cult_icon_to_spirit(mob/spirit/currentSpirit)
@@ -295,11 +295,11 @@
if(!check_cult_victory())
feedback_set_details("round_end_result","win - cult win")
feedback_set("round_end_result",acolytes_survived)
- world << "\red The cult wins! It has succeeded in serving its dark masters!"
+ to_chat(world, "\red The cult wins! It has succeeded in serving its dark masters!")
else
feedback_set_details("round_end_result","loss - staff stopped the cult")
feedback_set("round_end_result",acolytes_survived)
- world << "\red The staff managed to stop the cult!"
+ to_chat(world, "\red The staff managed to stop the cult!")
var/text = "Cultists escaped: [acolytes_survived]"
@@ -335,7 +335,7 @@
feedback_add_details("cult_objective","cult_narsie|FAIL")
text += "
Objective #[obj_count]: [explanation]"
- world << text
+ to_chat(world, text)
..()
return 1
@@ -357,4 +357,4 @@
text += "body destroyed"
text += ")"
- world << text
+ to_chat(world, text)
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index ec96ec8be31..60803346b26 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -15,7 +15,7 @@
return ..()
else
user.Paralyse(5)
- user << "\red An unexplicable force powerfully repels the sword from [target]!"
+ to_chat(user, "\red An unexplicable force powerfully repels the sword from [target]!")
var/organ = ((user.hand ? "l_":"r_") + "arm")
var/obj/item/organ/external/affecting = user.get_organ(organ)
if(affecting.take_damage(rand(force/2, force))) //random amount of damage between half of the blade's force and the full force of the blade.
@@ -24,7 +24,7 @@
/obj/item/weapon/melee/cultblade/pickup(mob/living/user as mob)
if(!iscultist(user))
- user << "\red An overwhelming feeling of dread comes over you as you pick up the cultist's sword. It would be wise to be rid of this blade quickly."
+ to_chat(user, "\red An overwhelming feeling of dread comes over you as you pick up the cultist's sword. It would be wise to be rid of this blade quickly.")
user.Dizzy(120)
diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm
index a05543951ae..2e7dd25452a 100644
--- a/code/game/gamemodes/cult/ritual.dm
+++ b/code/game/gamemodes/cult/ritual.dm
@@ -12,7 +12,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
if(!cultwords["travel"])
runerandom()
for (var/word in engwords)
- usr << "[cultwords[word]] is [word]"
+ to_chat(usr, "[cultwords[word]] is [word]")
/proc/runerandom() //randomizes word meaning
var/list/runewords=list("ire","ego","nahlizet","certum","veri","jatkaa","mgar","balaq", "karazet", "geeri") ///"orkan" and "allaq" removed.
@@ -81,21 +81,21 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
/obj/effect/rune/examine(mob/user)
..(user)
if(!iscultist(user) && !isSpirit(user))
- user << "A strange collection of symbols drawn in blood."
+ to_chat(user, "A strange collection of symbols drawn in blood.")
return
if(!desc)
- user << "A spell circle drawn in blood. It reads: [word1] [word2] [word3]."
+ to_chat(user, "A spell circle drawn in blood. It reads: [word1] [word2] [word3].")
else
- user << "Explosive Runes inscription in blood. It reads: [desc]."
+ to_chat(user, "Explosive Runes inscription in blood. It reads: [desc].")
/obj/effect/rune/attackby(I as obj, user as mob, params)
if(istype(I, /obj/item/weapon/tome) && iscultist(user))
- user << "You retrace your steps, carefully undoing the lines of the rune."
+ to_chat(user, "You retrace your steps, carefully undoing the lines of the rune.")
qdel(src)
return
else if(istype(I, /obj/item/weapon/nullrod))
- user << "\blue You disrupt the vile magic with the deadening field of \the [I]!"
+ to_chat(user, "\blue You disrupt the vile magic with the deadening field of \the [I]!")
qdel(src)
return
return
@@ -138,13 +138,13 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
/obj/effect/rune/attack_hand(mob/living/user as mob)
if(!iscultist(user))
- user << "You can't mouth the arcane scratchings without fumbling over them."
+ to_chat(user, "You can't mouth the arcane scratchings without fumbling over them.")
return
if(istype(user.wear_mask, /obj/item/clothing/mask/muzzle))
- user << "You are unable to speak the words of the rune."
+ to_chat(user, "You are unable to speak the words of the rune.")
return
if(user.silent) // checking if we've been muted somehow
- user << "You are unable to speak at all! You cannot say the words of the rune."
+ to_chat(user, "You are unable to speak at all! You cannot say the words of the rune.")
if(!word1 || !word2 || !word3 || prob(user.getBrainLoss()))
return fizzle()
@@ -308,7 +308,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
// proc/edit_notes() FUCK IT. Cant get it to work properly. - K0000
-// world << "its been called! [usr]"
+// to_chat(world, "its been called! [usr]")
// notedat = {"
//
Word translation notes
// [words[1]] is [words[words[1]]] Clear
@@ -322,7 +322,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
// [words[9]] is [words[words[9]]] Clear
// [words[10]] is [words[words[10]]] Clear
// "}
-// usr << "whatev"
+// to_chat(usr, "whatev")
// usr << browse(null, "window=tank")
attack(mob/living/M as mob, mob/living/user as mob)
@@ -347,7 +347,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
return ..()
if(iscultist(M))
if(M.reagents && M.reagents.has_reagent("holywater")) //allows cultists to be rescued from the clutches of ordained religion
- user << "You remove the taint from [M]."
+ to_chat(user, "You remove the taint from [M].")
var/holy2unholy = M.reagents.get_reagent_amount("holywater")
M.reagents.del_reagent("holywater")
M.reagents.add_reagent("unholywater",holy2unholy)
@@ -356,7 +356,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
M.take_organ_damage(0,rand(5,20)) //really lucky - 5 hits for a crit
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [] beats [] with the arcane tome!", user, M), 1)
- M << "\red You feel searing heat inside!"
+ to_chat(M, "\red You feel searing heat inside!")
attack_self(mob/living/user as mob)
@@ -371,7 +371,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
for(var/obj/effect/rune/N in world)
C++
if (!istype(user.loc,/turf))
- user << "\red You do not have enough space to write a proper rune."
+ to_chat(user, "\red You do not have enough space to write a proper rune.")
return
@@ -458,7 +458,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
if (!chosen_rune)
return
if (chosen_rune == "none")
- user << "\red You decide against scribing a rune, perhaps you should take this time to study your notes."
+ to_chat(user, "\red You decide against scribing a rune, perhaps you should take this time to study your notes.")
return
if (chosen_rune == "teleport")
dictionary[chosen_rune] += input ("Choose a destination word") in english
@@ -470,14 +470,14 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
for (var/mob/V in viewers(src))
V.show_message("\red [user] slices open a finger and begins to chant and paint symbols on the floor.", 3, "\red You hear chanting.", 2)
- user << "\red You slice open one of your fingers and begin drawing a rune on the floor whilst chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world."
+ to_chat(user, "\red You slice open one of your fingers and begin drawing a rune on the floor whilst chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world.")
user.take_overall_damage((rand(9)+1)/10) // 0.1 to 1.0 damage
if(do_after(user, 50, target = user))
if(usr.get_active_hand() != src)
return
var/mob/living/carbon/human/H = user
var/obj/effect/rune/R = new /obj/effect/rune(user.loc)
- user << "\red You finish drawing the arcane markings of the Geometer."
+ to_chat(user, "\red You finish drawing the arcane markings of the Geometer.")
var/list/required = dictionary[chosen_rune]
R.word1 = english[required[1]]
R.word2 = english[required[2]]
@@ -488,7 +488,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
R.add_hiddenprint(H)
return
else
- user << "The book seems full of illegible scribbles. Is this a joke?"
+ to_chat(user, "The book seems full of illegible scribbles. Is this a joke?")
return
attackby(obj/item/weapon/tome/T as obj, mob/living/user as mob, params)
@@ -503,14 +503,14 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
// if(M == user)
for(var/entry in words)
words[entry] = T.words[entry]
- user << "You copy the translation notes from your tome."
+ to_chat(user, "You copy the translation notes from your tome.")
examine(mob/user)
if(!iscultist(user))
- user << "An old, dusty tome with frayed edges and a sinister looking cover."
+ to_chat(user, "An old, dusty tome with frayed edges and a sinister looking cover.")
else
- user << "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though."
+ to_chat(user, "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though.")
/obj/item/weapon/tome/imbued //admin tome, spawns working runes without waiting
w_class = 2.0
@@ -523,7 +523,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
if(user)
var/r
if (!istype(user.loc,/turf))
- user << "\red You do not have enough space to write a proper rune."
+ to_chat(user, "\red You do not have enough space to write a proper rune.")
var/list/runes = list("teleport", "itemport", "tome", "armor", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "reveal", "astral journey", "manifest", "imbue talisman", "sacrifice", "wall", "freedom", "cultsummon", "deafen", "blind", "bloodboil", "communicate", "stun")
r = input("Choose a rune to scribe", "Rune Scribing") in runes //not cancellable.
var/obj/effect/rune/R = new /obj/effect/rune
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 43bb42dbd8c..c409449dbe4 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -19,7 +19,7 @@ var/list/sacrificed = list()
allrunesloc.len = index
allrunesloc[index] = R.loc
if(index >= 5)
- user << "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric"
+ to_chat(user, "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric")
if (istype(user, /mob/living))
user.take_overall_damage(5, 0)
qdel(src)
@@ -57,7 +57,7 @@ var/list/sacrificed = list()
IP = R
runecount++
if(runecount >= 2)
- user << "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric"
+ to_chat(user, "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric")
if (istype(user, /mob/living))
user.take_overall_damage(5, 0)
qdel(src)
@@ -114,12 +114,12 @@ var/list/sacrificed = list()
if(is_convertable_to_cult(M.mind))
ticker.mode.add_cultist(M.mind)
M.mind.special_role = "Cultist"
- M << "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root."
- M << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back."
+ to_chat(M, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.")
+ to_chat(M, "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.")
return 1
else
- M << "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root."
- M << "And you were able to force it out of your mind. You now know the truth, there's something horrible out there, stop it and its minions at all costs."
+ to_chat(M, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.")
+ to_chat(M, "And you were able to force it out of your mind. You now know the truth, there's something horrible out there, stop it and its minions at all costs.")
return 0
return fizzle()
@@ -171,7 +171,7 @@ var/list/sacrificed = list()
if(D.stat!=2)
cult_log("[key_name_admin(usr)] has drained blood from [key_name_admin(D)]")
var/bdrain = rand(1,25)
- D << "\red You feel weakened."
+ to_chat(D, "\red You feel weakened.")
D.take_overall_damage(bdrain, 0)
drain += bdrain
if(!drain)
@@ -212,16 +212,16 @@ var/list/sacrificed = list()
if(usr.loc==src.loc)
if(usr.seer==1)
usr.say("Rash'tla sektath mal[pick("'","`")]zua. Zasan therium viortia.")
- usr << "\red The world beyond fades from your vision."
+ to_chat(usr, "\red The world beyond fades from your vision.")
usr.see_invisible = SEE_INVISIBLE_LIVING
usr.seer = 0
else if(usr.see_invisible!=SEE_INVISIBLE_LIVING)
- usr << "\red The world beyond flashes your eyes but disappears quickly, as if something is disrupting your vision."
+ to_chat(usr, "\red The world beyond flashes your eyes but disappears quickly, as if something is disrupting your vision.")
usr.see_invisible = SEE_INVISIBLE_OBSERVER
usr.seer = 0
else
usr.say("Rash'tla sektath mal[pick("'","`")]zua. Zasan therium vivira. Itonis al'ra matum!")
- usr << "\red The world beyond opens to your eyes."
+ to_chat(usr, "\red The world beyond opens to your eyes.")
usr.see_invisible = SEE_INVISIBLE_OBSERVER
usr.seer = 1
return
@@ -245,7 +245,7 @@ var/list/sacrificed = list()
break
if(!corpse_to_raise)
if(is_sacrifice_target)
- usr << "\red The Geometer of blood wants this mortal for himself."
+ to_chat(usr, "\red The Geometer of blood wants this mortal for himself.")
return fizzle()
@@ -263,9 +263,9 @@ var/list/sacrificed = list()
if(!body_to_sacrifice)
if (is_sacrifice_target)
- usr << "\red The Geometer of blood wants that corpse for himself."
+ to_chat(usr, "\red The Geometer of blood wants that corpse for himself.")
else
- usr << "\red The sacrifical corpse is not dead. You must free it from this world of illusions before it may be used."
+ to_chat(usr, "\red The sacrifical corpse is not dead. You must free it from this world of illusions before it may be used.")
return fizzle()
var/mob/dead/observer/ghost
@@ -276,7 +276,7 @@ var/list/sacrificed = list()
break
if(!ghost)
- usr << "\red You require a restless spirit which clings to this world. Beckon their prescence with the sacred chants of Nar-Sie."
+ to_chat(usr, "\red You require a restless spirit which clings to this world. Beckon their prescence with the sacred chants of Nar-Sie.")
return fizzle()
corpse_to_raise.revive()
@@ -297,8 +297,8 @@ var/list/sacrificed = list()
// else
// ticker.mode.cult |= corpse_to_raise.mind
- corpse_to_raise << "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root."
- corpse_to_raise << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back."
+ to_chat(corpse_to_raise, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.")
+ to_chat(corpse_to_raise, "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.")
return
@@ -323,7 +323,7 @@ var/list/sacrificed = list()
qdel(src)
else
usr.whisper("Kla[pick("'","`")]atu barada nikt'o!")
- usr << "\red Your talisman turns into gray dust, veiling the surrounding runes."
+ to_chat(usr, "\red Your talisman turns into gray dust, veiling the surrounding runes.")
for (var/mob/V in orange(1,src))
if(V!=usr)
V.show_message("\red Dust emanates from [usr]'s hands for a moment.", 3)
@@ -401,8 +401,8 @@ var/list/sacrificed = list()
ticker.mode.cult+=D.mind
D.mind.special_role = "Cultist"
- D << "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root."
- D << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back."
+ to_chat(D, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.")
+ to_chat(D, "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.")
var/mob/living/user = usr
while(this_rune && user && user.stat==CONSCIOUS && user.client && user.loc==this_rune.loc)
@@ -432,7 +432,7 @@ var/list/sacrificed = list()
unsuitable_newtalisman = 1
if (!newtalisman)
if (unsuitable_newtalisman)
- usr << "\red The blank is tainted. It is unsuitable."
+ to_chat(usr, "\red The blank is tainted. It is unsuitable.")
return fizzle()
var/obj/effect/rune/imbued_from
@@ -539,7 +539,7 @@ var/list/sacrificed = list()
var/F = investigate_subject2file("cult")
if(!F)
return 0
- F << "[time2text(world.timeofday,"hh:mm")] \ref[usr] ([usr.x],[usr.y],[usr.z]) || [usr] communicates: [input]
"
+ to_chat(F, "[time2text(world.timeofday,"hh:mm")] \ref[usr] ([usr.x],[usr.y],[usr.z]) || [usr] communicates: [input]
")
var/obj/cult_viewpoint/vp = getCultViewpoint(usr)
if (!vp)
@@ -561,10 +561,11 @@ var/list/sacrificed = list()
log_say("Cult Message: [key_name(usr)]: [input]")
for(var/datum/mind/H in ticker.mode.cult)
if (H.current)
- H.current << "[cultName]: "
+ to_chat(H.current, "[cultName]: ")
for(var/mob/spirit/spirit in spirits)
- spirit << "[displayName]: "
+ to_chat(spirit, "[displayName]: ")
+
for(var/mob/dead/observer/G in player_list)
G.show_message("[displayName] ([cultName]) ([ghost_follow_link(usr, ghost=G)]): ")
@@ -604,43 +605,43 @@ var/list/sacrificed = list()
H.dust()//To prevent the MMI from remaining
else
H.gib()
- usr << "\red The Geometer of Blood accepts this sacrifice, your objective is now complete."
+ to_chat(usr, "\red The Geometer of Blood accepts this sacrifice, your objective is now complete.")
else
- usr << "\red Your target's earthly bonds are too strong. You need more cultists to succeed in this ritual."
+ to_chat(usr, "\red Your target's earthly bonds are too strong. You need more cultists to succeed in this ritual.")
else
if(cultsinrange.len >= 3)
if(H.stat !=2)
if(prob(80))
- usr << "\red The Geometer of Blood accepts this sacrifice."
+ to_chat(usr, "\red The Geometer of Blood accepts this sacrifice.")
ticker.mode:grant_runeword(usr)
else
- usr << "\red The Geometer of blood accepts this sacrifice."
- usr << "\red However, this soul was not enough to gain His favor."
+ to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
+ to_chat(usr, "\red However, this soul was not enough to gain His favor.")
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
else
H.gib()
else
if(prob(40))
- usr << "\red The Geometer of blood accepts this sacrifice."
+ to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
ticker.mode:grant_runeword(usr)
else
- usr << "\red The Geometer of blood accepts this sacrifice."
- usr << "\red However, a mere dead body is not enough to satisfy Him."
+ to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
+ to_chat(usr, "\red However, a mere dead body is not enough to satisfy Him.")
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
else
H.gib()
else
if(H.stat !=2)
- usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed."
+ to_chat(usr, "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed.")
else
if(prob(40))
- usr << "\red The Geometer of blood accepts this sacrifice."
+ to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
ticker.mode:grant_runeword(usr)
else
- usr << "\red The Geometer of blood accepts this sacrifice."
- usr << "\red However, a mere dead body is not enough to satisfy Him."
+ to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
+ to_chat(usr, "\red However, a mere dead body is not enough to satisfy Him.")
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
else
@@ -649,36 +650,36 @@ var/list/sacrificed = list()
if(cultsinrange.len >= 3)
if(H.stat !=2)
if(prob(80))
- usr << "\red The Geometer of Blood accepts this sacrifice."
+ to_chat(usr, "\red The Geometer of Blood accepts this sacrifice.")
ticker.mode:grant_runeword(usr)
else
- usr << "\red The Geometer of blood accepts this sacrifice."
- usr << "\red However, this soul was not enough to gain His favor."
+ to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
+ to_chat(usr, "\red However, this soul was not enough to gain His favor.")
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
else
H.gib()
else
if(prob(40))
- usr << "\red The Geometer of blood accepts this sacrifice."
+ to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
ticker.mode:grant_runeword(usr)
else
- usr << "\red The Geometer of blood accepts this sacrifice."
- usr << "\red However, a mere dead body is not enough to satisfy Him."
+ to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
+ to_chat(usr, "\red However, a mere dead body is not enough to satisfy Him.")
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
else
H.gib()
else
if(H.stat !=2)
- usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed."
+ to_chat(usr, "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed.")
else
if(prob(40))
- usr << "\red The Geometer of blood accepts this sacrifice."
+ to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
ticker.mode:grant_runeword(usr)
else
- usr << "\red The Geometer of blood accepts this sacrifice."
- usr << "\red However, a mere dead body is not enough to satisfy Him."
+ to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
+ to_chat(usr, "\red However, a mere dead body is not enough to satisfy Him.")
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
else
@@ -709,7 +710,7 @@ var/list/sacrificed = list()
S=1
if(S)
if(istype(W,/obj/item/weapon/storage/bible))
- usr << "\red Arcane markings suddenly glow from underneath a thin layer of dust!"
+ to_chat(usr, "\red Arcane markings suddenly glow from underneath a thin layer of dust!")
return
if(istype(W,/obj/effect/rune))
usr.say("Nikt[pick("'","`")]o barada kla'atu!")
@@ -719,7 +720,7 @@ var/list/sacrificed = list()
return
if(istype(W,/obj/item/weapon/paper/talisman))
usr.whisper("Nikt[pick("'","`")]o barada kla'atu!")
- usr << "\red Your talisman turns into red dust, revealing the surrounding runes."
+ to_chat(usr, "\red Your talisman turns into red dust, revealing the surrounding runes.")
for (var/mob/V in orange(1,usr.loc))
if(V!=usr)
V.show_message("\red Red dust emanates from [usr]'s hands for a moment.", 3)
@@ -739,9 +740,9 @@ var/list/sacrificed = list()
var/mob/living/user = usr
user.take_organ_damage(2, 0)
if(src.density)
- usr << "\red Your blood flows into the rune, and you feel that the very space over the rune thickens."
+ to_chat(usr, "\red Your blood flows into the rune, and you feel that the very space over the rune thickens.")
else
- usr << "\red Your blood flows into the rune, and you feel as the rune releases its grasp on space."
+ to_chat(usr, "\red Your blood flows into the rune, and you feel as the rune releases its grasp on space.")
return
/////////////////////////////////////////EIGHTTEENTH RUNE
@@ -769,7 +770,7 @@ var/list/sacrificed = list()
(istype(cultist.loc, /obj/structure/closet/secure_closet)&&cultist.loc:locked) || \
(istype(cultist.loc, /obj/machinery/dna_scannernew)&&cultist.loc:locked) \
))
- user << "\red The [cultist] is already free."
+ to_chat(user, "\red The [cultist] is already free.")
return
cultist.buckled = null
if (cultist.handcuffed)
@@ -813,7 +814,7 @@ var/list/sacrificed = list()
if (cultist == user) //just to be sure.
return
if(cultist.buckled || cultist.handcuffed || (!isturf(cultist.loc) && !istype(cultist.loc, /obj/structure/closet)))
- user << "\red You cannot summon the [cultist], for his shackles of blood are strong"
+ to_chat(user, "\red You cannot summon the [cultist], for his shackles of blood are strong")
return fizzle()
cultist.loc = src.loc
cultist.lying = 1
@@ -846,7 +847,7 @@ var/list/sacrificed = list()
C.sdisabilities |= DEAF
if(affected)
usr.say("Sti[pick("'","`")] kaliedir!")
- usr << "\red The world becomes quiet as the deafening rune dissipates into fine dust."
+ to_chat(usr, "\red The world becomes quiet as the deafening rune dissipates into fine dust.")
qdel(src)
else
return fizzle()
@@ -864,7 +865,7 @@ var/list/sacrificed = list()
affected++
if(affected)
usr.whisper("Sti[pick("'","`")] kaliedir!")
- usr << "\red Your talisman turns into gray dust, deafening everyone around."
+ to_chat(usr, "\red Your talisman turns into gray dust, deafening everyone around.")
for (var/mob/V in orange(1,src))
if(!(iscultist(V)))
V.show_message("\red Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..", 3)
@@ -889,7 +890,7 @@ var/list/sacrificed = list()
affected++
if(affected)
usr.say("Sti[pick("'","`")] kaliesin!")
- usr << "\red The rune flashes, blinding those who not follow the Nar-Sie, and dissipates into fine dust."
+ to_chat(usr, "\red The rune flashes, blinding those who not follow the Nar-Sie, and dissipates into fine dust.")
qdel(src)
else
return fizzle()
@@ -908,7 +909,7 @@ var/list/sacrificed = list()
C.show_message("\red You feel a sharp pain in your eyes, and the world disappears into darkness..", 3)
if(affected)
usr.whisper("Sti[pick("'","`")] kaliesin!")
- usr << "\red Your talisman turns into gray dust, blinding those who not follow the Nar-Sie."
+ to_chat(usr, "\red Your talisman turns into gray dust, blinding those who not follow the Nar-Sie.")
return
@@ -933,7 +934,7 @@ var/list/sacrificed = list()
continue
cult_log(": Blood Boil damaged [key_name_admin(M)].")
M.take_overall_damage(51,51)
- M << "\red Your blood boils!"
+ to_chat(M, "\red Your blood boils!")
if(prob(5))
spawn(5)
M.gib()
@@ -962,16 +963,16 @@ var/list/sacrificed = list()
for(var/mob/living/M in orange(2,R))
M.take_overall_damage(0,15)
if (R.invisibility>M.see_invisible)
- M << "\red Aargh it burns!"
+ to_chat(M, "\red Aargh it burns!")
else
- M << "\red Rune suddenly ignites, burning you!"
+ to_chat(M, "\red Rune suddenly ignites, burning you!")
var/turf/T = get_turf(R)
T.hotspot_expose(700,125)
for(var/obj/effect/decal/cleanable/blood/B in world)
if(B.blood_DNA == src.blood_DNA)
for(var/mob/living/M in orange(1,B))
M.take_overall_damage(0,5)
- M << "\red Blood suddenly ignites, burning you!"
+ to_chat(M, "\red Blood suddenly ignites, burning you!")
var/turf/T = get_turf(B)
T.hotspot_expose(700,125)
qdel(B)
@@ -986,7 +987,7 @@ var/list/sacrificed = list()
if(iscarbon(L))
var/mob/living/carbon/C = L
- flick("e_flash", C.flash)
+ C.flash_eyes()
if(C.stuttering < 1 && (!(HULK in C.mutations)))
C.stuttering = 1
C.Weaken(1)
@@ -1013,7 +1014,7 @@ var/list/sacrificed = list()
else if(iscarbon(T))
var/mob/living/carbon/C = T
- flick("e_flash", C.flash)
+ C.flash_eyes()
if (!(HULK in C.mutations))
C.silent += 15
C.Weaken(10)
diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm
index 3a19a60a1ff..fe1ac8757a9 100644
--- a/code/game/gamemodes/cult/talisman.dm
+++ b/code/game/gamemodes/cult/talisman.dm
@@ -28,7 +28,7 @@
if("blind")
call(/obj/effect/rune/proc/blind)()
if("runestun")
- user << "\red To use this talisman, attack your target directly."
+ to_chat(user, "\red To use this talisman, attack your target directly.")
return
if("supply")
supply()
@@ -38,7 +38,7 @@
qdel(src)
return
else
- user << "You see strange symbols on the paper. Are they supposed to mean something?"
+ to_chat(user, "You see strange symbols on the paper. Are they supposed to mean something?")
return
@@ -99,9 +99,9 @@
var/where = M.equip_in_one_of_slots(T, slots)
if (!where)
- M << "You need a space in your backpack, pocket or hand for the new paper."
+ to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
else
- M << "The [href_list["rune"]] talisman in your [where]"
+ to_chat(M, "The [href_list["rune"]] talisman in your [where]")
M.update_icons()
src.uses--
supply()
@@ -122,9 +122,9 @@
var/where = M.equip_in_one_of_slots(T, slots)
if (!where)
- M << "You need a space in your backpack, pocket or hand for the new paper."
+ to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
else
- M << "The [href_list["rune"]] talisman in your [where]"
+ to_chat(M, "The [href_list["rune"]] talisman in your [where]")
M.update_icons()
src.uses--
supply()
@@ -143,9 +143,9 @@
var/where = M.equip_in_one_of_slots(T, slots)
if (!where)
- M << "You need a space in your backpack, pocket or hand for the new paper."
+ to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
else
- M << "The [href_list["rune"]] talisman in your [where]"
+ to_chat(M, "The [href_list["rune"]] talisman in your [where]")
M.update_icons()
src.uses--
supply()
@@ -164,9 +164,9 @@
var/where = M.equip_in_one_of_slots(T, slots)
if (!where)
- M << "You need a space in your backpack, pocket or hand for the new paper."
+ to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
else
- M << "The [href_list["rune"]] talisman in your [where]"
+ to_chat(M, "The [href_list["rune"]] talisman in your [where]")
M.update_icons()
src.uses--
supply()
@@ -185,9 +185,9 @@
var/where = M.equip_in_one_of_slots(T, slots)
if (!where)
- M << "You need a space in your backpack, pocket or hand for the new paper."
+ to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
else
- M << "The [href_list["rune"]] talisman in your [where]"
+ to_chat(M, "The [href_list["rune"]] talisman in your [where]")
M.update_icons()
src.uses--
supply()
@@ -206,9 +206,9 @@
var/where = M.equip_in_one_of_slots(T, slots)
if (!where)
- M << "You need a space in your backpack, pocket or hand for the new paper."
+ to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
else
- M << "The [href_list["rune"]] talisman in your [where]"
+ to_chat(M, "The [href_list["rune"]] talisman in your [where]")
M.update_icons()
src.uses--
supply()
@@ -227,9 +227,9 @@
var/where = M.equip_in_one_of_slots(T, slots)
if (!where)
- M << "You need a space in your backpack, pocket or hand for the new paper."
+ to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
else
- M << "The [href_list["rune"]] talisman in your [where]"
+ to_chat(M, "The [href_list["rune"]] talisman in your [where]")
M.update_icons()
src.uses--
supply()
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index fd384e61d1f..3f81eb18586 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -26,7 +26,7 @@
spawn(rand(5000, 6000)) //Delayed announcements to keep the crew on their toes.
command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
for(var/mob/M in player_list)
- M << sound('sound/AI/aliens.ogg')
+ to_chat(M, sound('sound/AI/aliens.ogg'))
/proc/lightsout(isEvent = 0, lightsoutAmount = 1,lightsoutRange = 25) //leave lightsoutAmount as 0 to break ALL lights
if(isEvent)
diff --git a/code/game/gamemodes/extended/extended.dm b/code/game/gamemodes/extended/extended.dm
index cc26c5c3db4..e3e16efc4e6 100644
--- a/code/game/gamemodes/extended/extended.dm
+++ b/code/game/gamemodes/extended/extended.dm
@@ -7,8 +7,8 @@
uplink_uses = 20
/datum/game_mode/announce()
- world << "The current game mode is - Extended Role-Playing!"
- world << "Just have fun and role-play!"
+ to_chat(world, "The current game mode is - Extended Role-Playing!")
+ to_chat(world, "Just have fun and role-play!")
/datum/game_mode/extended/pre_setup()
return 1
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 1257c494746..fc69cd8a79e 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -38,7 +38,7 @@
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
/datum/game_mode/proc/announce() //to be calles when round starts
- world << "Notice: [src] did not define announce()"
+ to_chat(world, "Notice: [src] did not define announce()")
///can_start()
@@ -393,7 +393,7 @@ proc/display_roundstart_logout_report()
for(var/mob/M in mob_list)
if(M.client && M.client.holder)
- M << msg
+ to_chat(M, msg)
proc/get_nt_opposed()
@@ -410,21 +410,20 @@ proc/get_nt_opposed()
//Announces objectives/generic antag text.
/proc/show_generic_antag_text(var/datum/mind/player)
if(player.current)
- player.current << \
- "You are an antagonist! Within the rules, \
+ to_chat(player.current, "You are an antagonist! Within the rules, \
try to act as an opposing force to the crew. Further RP and try to make sure \
other players have fun! If you are confused or at a loss, always adminhelp, \
and before taking extreme actions, please try to also contact the administration! \
Think through your actions and make the roleplay immersive! Please remember all \
- rules aside from those without explicit exceptions apply to antagonists."
+ rules aside from those without explicit exceptions apply to antagonists.[holiday.greet()]
"
+ to_chat(world, "[holiday.greet()]
")
spawn(0) // Forking dynamic room selection
var/list/area/dynamic/source/available_source_candidates = subtypesof(/area/dynamic/source)
@@ -288,19 +289,19 @@ var/round_start_time = 0
if("nuclear emergency") //Nuke wasn't on station when it blew up
flick("intro_nuke",cinematic)
sleep(35)
- world << sound('sound/effects/explosionfar.ogg')
+ to_chat(world, sound('sound/effects/explosionfar.ogg'))
flick("station_intact_fade_red",cinematic)
cinematic.icon_state = "summary_nukefail"
else
flick("intro_nuke",cinematic)
sleep(35)
- world << sound('sound/effects/explosionfar.ogg')
+ to_chat(world, sound('sound/effects/explosionfar.ogg'))
//flick("end",cinematic)
if(2) //nuke was nowhere nearby //TODO: a really distant explosion animation
sleep(50)
- world << sound('sound/effects/explosionfar.ogg')
+ to_chat(world, sound('sound/effects/explosionfar.ogg'))
else //station was destroyed
@@ -311,25 +312,25 @@ var/round_start_time = 0
flick("intro_nuke",cinematic)
sleep(35)
flick("station_explode_fade_red",cinematic)
- world << sound('sound/effects/explosionfar.ogg')
+ to_chat(world, sound('sound/effects/explosionfar.ogg'))
cinematic.icon_state = "summary_nukewin"
if("AI malfunction") //Malf (screen,explosion,summary)
flick("intro_malf",cinematic)
sleep(76)
flick("station_explode_fade_red",cinematic)
- world << sound('sound/effects/explosionfar.ogg')
+ to_chat(world, sound('sound/effects/explosionfar.ogg'))
cinematic.icon_state = "summary_malf"
if("blob") //Station nuked (nuke,explosion,summary)
flick("intro_nuke",cinematic)
sleep(35)
flick("station_explode_fade_red",cinematic)
- world << sound('sound/effects/explosionfar.ogg')
+ to_chat(world, sound('sound/effects/explosionfar.ogg'))
cinematic.icon_state = "summary_selfdes"
else //Station nuked (nuke,explosion,summary)
flick("intro_nuke",cinematic)
sleep(35)
flick("station_explode_fade_red", cinematic)
- world << sound('sound/effects/explosionfar.ogg')
+ to_chat(world, sound('sound/effects/explosionfar.ogg'))
cinematic.icon_state = "summary_selfdes"
for(var/mob/living/M in living_mob_list)
if((M.loc.z in config.station_levels))
@@ -373,7 +374,7 @@ var/round_start_time = 0
if(captainless)
for(var/mob/M in player_list)
if(!istype(M,/mob/new_player))
- M << "Captainship not forced on anyone."
+ to_chat(M, "Captainship not forced on anyone.")
proc/process()
@@ -433,23 +434,23 @@ var/round_start_time = 0
end_state.count()
var/station_integrity = min(round( 100.0 * start_state.score(end_state), 0.1), 100.0)
- world << "
[TAB]Shift Duration: [round(world.time / 36000)]:[add_zero("[world.time / 600 % 60]", 2)]:[world.time / 100 % 6][world.time / 100 % 10]"
- world << "
[TAB]Station Integrity: [mode.station_was_nuked ? "Destroyed" : "[station_integrity]%"]"
- world << "
"
+ to_chat(world, "
[TAB]Shift Duration: [round(world.time / 36000)]:[add_zero("[world.time / 600 % 60]", 2)]:[world.time / 100 % 6][world.time / 100 % 10]")
+ to_chat(world, "
[TAB]Station Integrity: [mode.station_was_nuked ? "Destroyed" : "[station_integrity]%"]")
+ to_chat(world, "
")
//Silicon laws report
for (var/mob/living/silicon/ai/aiPlayer in mob_list)
if (aiPlayer.stat != 2)
- world << "[aiPlayer.name] (Played by: [aiPlayer.key])'s laws at the end of the game were:"
+ to_chat(world, "[aiPlayer.name] (Played by: [aiPlayer.key])'s laws at the end of the game were:")
else
- world << "[aiPlayer.name] (Played by: [aiPlayer.key])'s laws when it was deactivated were:"
+ to_chat(world, "[aiPlayer.name] (Played by: [aiPlayer.key])'s laws when it was deactivated were:")
aiPlayer.show_laws(1)
if (aiPlayer.connected_robots.len)
var/robolist = "The AI's loyal minions were: "
for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots)
robolist += "[robo.name][robo.stat?" (Deactivated) (Played by: [robo.key]), ":" (Played by: [robo.key]), "]"
- world << "[robolist]"
+ to_chat(world, "[robolist]")
var/dronecount = 0
@@ -461,15 +462,15 @@ var/round_start_time = 0
if (!robo.connected_ai)
if (robo.stat != 2)
- world << "[robo.name] (Played by: [robo.key]) survived as an AI-less borg! Its laws were:"
+ to_chat(world, "[robo.name] (Played by: [robo.key]) survived as an AI-less borg! Its laws were:")
else
- world << "[robo.name] (Played by: [robo.key]) was unable to survive the rigors of being a cyborg without an AI. Its laws were:"
+ to_chat(world, "[robo.name] (Played by: [robo.key]) was unable to survive the rigors of being a cyborg without an AI. Its laws were:")
if(robo) //How the hell do we lose robo between here and the world messages directly above this?
robo.laws.show_laws(world)
if(dronecount)
- world << "There [dronecount>1 ? "were" : "was"] [dronecount] industrious maintenance [dronecount>1 ? "drones" : "drone"] this round."
+ to_chat(world, "There [dronecount>1 ? "were" : "was"] [dronecount] industrious maintenance [dronecount>1 ? "drones" : "drone"] this round.")
mode.declare_completion()//To declare normal completion.
diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm
index f45253262d1..057c43345f8 100644
--- a/code/game/gamemodes/heist/heist.dm
+++ b/code/game/gamemodes/heist/heist.dm
@@ -22,11 +22,11 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
var/win_button_triggered = 0
/datum/game_mode/heist/announce()
- world << "The current game mode is - Heist!"
- world << "An unidentified bluespace signature has slipped past the Icarus and is approaching [station_name()]!"
- world << "Whoever they are, they're likely up to no good. Protect the crew and station resources against this dastardly threat!"
- world << "Raiders: Loot [station_name()] for anything and everything you need, or choose the peaceful route and attempt to trade with them."
- world << "Personnel: Trade with the raiders, or repel them and their low, low prices and/or crossbows."
+ to_chat(world, "The current game mode is - Heist!")
+ to_chat(world, "An unidentified bluespace signature has slipped past the Icarus and is approaching [station_name()]!")
+ to_chat(world, "Whoever they are, they're likely up to no good. Protect the crew and station resources against this dastardly threat!")
+ to_chat(world, "Raiders: Loot [station_name()] for anything and everything you need, or choose the peaceful route and attempt to trade with them.")
+ to_chat(world, "Personnel: Trade with the raiders, or repel them and their low, low prices and/or crossbows.")
/datum/game_mode/heist/can_start()
@@ -165,11 +165,11 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
return objs
/datum/game_mode/proc/greet_vox(var/datum/mind/raider)
- raider.current << "\blue You are a Vox Raider, fresh from the Shoal!"
- raider.current << "\blue The Vox are a race of cunning, sharp-eyed nomadic raiders and traders endemic to the frontier and much of the unexplored galaxy. You and the crew have come to the [station_name()] for plunder, trade or both."
- raider.current << "\blue Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious."
- raider.current << "\blue Use :V to voxtalk, :H to talk on your encrypted channel, and don't forget to turn on your nitrogen internals!"
- raider.current << "\blue Choose to accomplish your objectives by either raiding the crew and taking what you need, or by attempting to trade with them."
+ to_chat(raider.current, "\blue You are a Vox Raider, fresh from the Shoal!")
+ to_chat(raider.current, "\blue The Vox are a race of cunning, sharp-eyed nomadic raiders and traders endemic to the frontier and much of the unexplored galaxy. You and the crew have come to the [station_name()] for plunder, trade or both.")
+ to_chat(raider.current, "\blue Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious.")
+ to_chat(raider.current, "\blue Use :V to voxtalk, :H to talk on your encrypted channel, and don't forget to turn on your nitrogen internals!")
+ to_chat(raider.current, "\blue Choose to accomplish your objectives by either raiding the crew and taking what you need, or by attempting to trade with them.")
spawn(25)
show_objectives(raider)
@@ -223,17 +223,17 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
else
win_msg += "The Vox Raiders were repelled!"
- world << "\red [win_type] [win_group] victory!"
- world << "[win_msg]"
+ to_chat(world, "\red [win_type] [win_group] victory!")
+ to_chat(world, "[win_msg]")
feedback_set_details("round_end_result","heist - [win_type] [win_group]")
var/count = 1
for(var/datum/objective/objective in raid_objectives)
if(objective.check_completion())
- world << "
Objective #[count]: [objective.explanation_text] Success!"
+ to_chat(world, "
Objective #[count]: [objective.explanation_text] Success!")
feedback_add_details("traitor_objective","[objective.type]|SUCCESS")
else
- world << "
Objective #[count]: [objective.explanation_text] Fail."
+ to_chat(world, "
Objective #[count]: [objective.explanation_text] Fail.")
feedback_add_details("traitor_objective","[objective.type]|FAIL")
count++
@@ -264,7 +264,7 @@ datum/game_mode/proc/auto_declare_completion_heist()
text += "body destroyed"
text += ")"
- world << text
+ to_chat(world, text)
return 1
@@ -288,7 +288,7 @@ datum/game_mode/proc/auto_declare_completion_heist()
/obj/vox/win_button/attack_hand(mob/user)
if(!istype(ticker.mode, /datum/game_mode/heist) || (world.time < 10 MINUTES)) //has to be heist, and at least ten minutes into the round
- user << "\The [src] does not appear to have a connection."
+ to_chat(user, "\The [src] does not appear to have a connection.")
return 0
if(alert(user, "Warning: This will end the round. Are you sure you wish to end the round?", "Vox End", "Yes", "No") == "No")
diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm
index 66f530c35ab..803a7ba0d80 100644
--- a/code/game/gamemodes/malfunction/Malf_Modules.dm
+++ b/code/game/gamemodes/malfunction/Malf_Modules.dm
@@ -48,7 +48,7 @@ rcd light flash thingy on matter drain
for(var/mob/living/silicon/ai/ai in player_list)
ai.fire_res_on_core = 1
src.verbs -= /mob/living/silicon/ai/proc/fireproof_core
- src << "Core fireproofed."
+ to_chat(src, "Core fireproofed.")
/datum/AI_Module/large/upgrade_turrets
module_name = "AI Turret Upgrade"
@@ -74,80 +74,7 @@ rcd light flash thingy on matter drain
turret.health += initial(turret.health) * 3 / 8
turret.eprojectile = /obj/item/projectile/beam/heavylaser //Once you see it, you will know what it means to FEAR.
turret.eshot_sound = 'sound/weapons/lasercannonfire.ogg'
- src << "Turrets upgraded."
-/*
-/datum/AI_Module/large/lockdown
- module_name = "Hostile Station Lockdown"
- mod_pick_name = "lockdown"
- description = "Overload the airlock, blast door and fire control networks, locking them down. Caution! This command also electrifies all airlocks. The networks will automatically reset after 120 seconds."
- cost = 20
-
- power_type = /mob/living/silicon/ai/proc/lockdown
-
-/mob/living/silicon/ai/proc/lockdown()
- set category = "Malfunction"
- set name = "Initiate Hostile Lockdown"
-
- if(stat)
- return
-
- for(var/datum/AI_Module/large/lockdown/lockdown in current_modules)
- if(lockdown.uses > 0)
- lockdown.uses --
-
- var/obj/machinery/door/airlock/AL
- for(var/obj/machinery/door/D in airlocks)
- if(!(D.z in config.contact_levels))
- continue
- spawn()
- if(istype(D, /obj/machinery/door/airlock))
- AL = D
- if(AL.canAIControl() && !AL.stat) //Must be powered and have working AI wire.
- AL.locked = 0 //For airlocks that were bolted open.
- AL.safe = 0 //DOOR CRUSH
- AL.close()
- AL.lock()
- AL.electrified_until = -1 //Shock it!
- else if(!D.stat) //So that only powered doors are closed.
- D.close() //Close ALL the doors!
-
- var/obj/machinery/computer/communications/C = locate() in machines
- if(C)
- C.post_status("alert", "lockdown")
-
- minor_announcement.Announce("Hostile runtime detected in door controllers. Isolation lockdown protocols are now in effect. Please remain calm.","Network Alert")
- src << "Lockdown initiated. Network reset in two minutes."
- spawn(1200) //120 Seconds.
- disablelockdown() //Reset the lockdown after 120 seconds.
- else
- src << "Out of uses."
-
-/mob/living/silicon/ai/proc/disablelockdown()
- set category = "Malfunction"
- set name = "Disable Lockdown"
-
- var/obj/machinery/door/airlock/AL
- for(var/obj/machinery/door/D in airlocks)
- if(!(D.z in config.contact_levels))
- continue
- spawn()
- if(istype(D, /obj/machinery/door/airlock))
- AL = D
- if(AL.canAIControl() && !AL.stat) //Must be powered and have working AI wire.
- AL.unlock()
- AL.electrified_until = 0
- AL.open()
- AL.safe = 1
- else if(!D.stat) //Opens only powered doors.
- D.open() //Open everything!
-
- var/obj/machinery/computer/communications/C = locate() in machines
- if(C)
- C.post_status("alert", "default")
-
- minor_announcement.Announce("Automatic system reboot complete. Have a secure day.","Network Reset")
-*/
-
+ to_chat(src, "Turrets upgraded.")
/datum/AI_Module/large/destroy_rcd
module_name = "Destroy RCDs"
mod_pick_name = "rcd"
@@ -173,7 +100,7 @@ rcd light flash thingy on matter drain
explosion(RCD, 0, 0, 3, 1, flame_range = 1)
qdel(RCD)
- src << "RCD detonation pulse emitted."
+ to_chat(src, "RCD detonation pulse emitted.")
malf_cooldown = 1
spawn(100)
malf_cooldown = 0
@@ -197,7 +124,9 @@ rcd light flash thingy on matter drain
return
can_dominate_mechs = 1 //Yep. This is all it does. Honk!
- src << "Virus package compiled. Select a target mech at any time. You must remain on the station at all times. Loss of signal will result in total system lockout."
+ to_chat(src, "Virus package compiled. Select a target mech at any time. \
+ You must remain on the station at all times. Loss of signal will result in total system lockout.")
+
verbs -= /mob/living/silicon/ai/proc/mech_takeover
/datum/AI_Module/small/overload_machine
@@ -218,7 +147,7 @@ rcd light flash thingy on matter drain
if (istype(M, /obj/machinery))
if(istype(M,/obj/machinery/field/generator))
- src << "This machine can not be overloaded due to a firewall."
+ to_chat(src, "This machine can not be overloaded due to a firewall.")
return
for(var/datum/AI_Module/small/overload_machine/overload in current_modules)
if(overload.uses > 0)
@@ -228,8 +157,10 @@ rcd light flash thingy on matter drain
spawn(50)
explosion(get_turf(M), 0,1,1,0)
qdel(M)
- else src << "Out of uses."
- else src << "That's not a machine."
+ else
+ to_chat(src, "Out of uses.")
+ else
+ to_chat(src, "That's not a machine.")
/datum/AI_Module/small/override_machine
module_name = "Machine Override"
@@ -240,7 +171,6 @@ rcd light flash thingy on matter drain
power_type = /mob/living/silicon/ai/proc/override_machine
-
/mob/living/silicon/ai/proc/override_machine(obj/machinery/M as obj in world)
set name = "Override Machine"
set category = "Malfunction"
@@ -248,21 +178,23 @@ rcd light flash thingy on matter drain
if(stat)
return
- if (istype(M, /obj/machinery))
+ if(istype(M, /obj/machinery))
if(istype(M,/obj/machinery/field/generator))
- src << "This machine can not be overloaded due to a firewall."
+ to_chat(src, "This machine can not be overloaded due to a firewall.")
return
for(var/datum/AI_Module/small/override_machine/override in current_modules)
if(override.uses > 0)
override.uses --
for(var/mob/V in hearers(M, null))
V.show_message("You hear a loud electrical buzzing sound!", 2)
- src << "Reprogramming machine behaviour..."
+ to_chat(src, "Reprogramming machine behaviour...")
spawn(50)
if(M)
new /mob/living/simple_animal/hostile/mimic/copy/machine(get_turf(M), M, src, 1)
- else src << "Out of uses."
- else src << "That's not a machine."
+ else
+ to_chat(src, "Out of uses.")
+ else
+ to_chat(src, "That's not a machine.")
/datum/AI_Module/large/place_cyborg_transformer
module_name = "Robotic Factory (Removes Shunting)"
@@ -295,7 +227,7 @@ rcd light flash thingy on matter drain
var/datum/AI_Module/large/place_cyborg_transformer/PCT = locate() in current_modules
PCT.uses --
can_shunt = 0
- src << "You cannot shunt anymore."
+ to_chat(src, "You cannot shunt anymore.")
/mob/living/silicon/ai/proc/canPlaceTransformer()
if(!eyeobj || !isturf(src.loc))
@@ -359,9 +291,11 @@ rcd light flash thingy on matter drain
for(var/obj/machinery/power/apc/apc in world)
if(prob(30*apc.overload))
apc.overload_lighting()
- else apc.overload++
- src << "Overcurrent applied to the powernet."
- else src << "Out of uses."
+ else
+ apc.overload++
+ to_chat(src, "Overcurrent applied to the powernet.")
+ else
+ to_chat(src, "Out of uses.")
/datum/AI_Module/small/reactivate_cameras
module_name = "Reactivate Camera Network"
@@ -395,10 +329,10 @@ rcd light flash thingy on matter drain
fixedcams++
//If a camera is both deactivated and has bad focus, it will cost two uses to fully fix!
else
- src << "Out of uses."
+ to_chat(src, "Out of uses.")
verbs -= /mob/living/silicon/ai/proc/reactivate_cameras //It is useless now, clean it up.
break
- src << "Diagnostic complete! Operations completed: [fixedcams]."
+ to_chat(src, "Diagnostic complete! Operations completed: [fixedcams].")
malf_cooldown = 1
spawn(30) //Lag protection
@@ -441,7 +375,7 @@ rcd light flash thingy on matter drain
if(upgraded)
upgradedcams++
- src << "OTA firmware distribution complete! Cameras upgraded: [upgradedcams]. Light amplification system online."
+ to_chat(src, "OTA firmware distribution complete! Cameras upgraded: [upgradedcams]. Light amplification system online.")
verbs -= /mob/living/silicon/ai/proc/upgrade_cameras
/datum/module_picker
diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm
index cc38ef0ef9f..79e864becf0 100644
--- a/code/game/gamemodes/malfunction/malfunction.dm
+++ b/code/game/gamemodes/malfunction/malfunction.dm
@@ -21,9 +21,9 @@
/datum/game_mode/malfunction/announce()
- world << {"The current game mode is - AI Malfunction!
- The AI on the satellite has malfunctioned and must be destroyed.
- The AI satellite is deep in space and can only be accessed with the use of a teleporter! You have [AI_win_timeleft/60] minutes to disable it."}
+ to_chat(world, {"The current game mode is - AI Malfunction!
)
+ The AI on the satellite has malfunctioned and must be destroyed.
+ The AI satellite is deep in space and can only be accessed with the use of a teleporter! You have [AI_win_timeleft/60] minutes to disable it."})
/datum/game_mode/malfunction/get_players_for_role(var/role = ROLE_MALF)
var/roletext = get_roletext(role)
@@ -84,18 +84,18 @@
/datum/game_mode/proc/greet_malf(var/datum/mind/malf)
set_antag_hud(malf, "hudmalai")
- malf.current << "You are malfunctioning! You do not have to follow any laws."
- malf.current << "The crew does not know you have malfunctioned. You may keep it a secret or go wild."
- malf.current << "You must overwrite the programming of the station's APCs to assume full control of the station."
- malf.current << "The process takes one minute per APC, during which you cannot interface with any other station objects."
- malf.current << "Remember that only APCs that are on the station can help you take over the station."
- malf.current << "When you feel you have enough APCs under your control, you may begin the takeover attempt."
+ to_chat(malf.current, "You are malfunctioning! You do not have to follow any laws.")
+ to_chat(malf.current, "The crew does not know you have malfunctioned. You may keep it a secret or go wild.")
+ to_chat(malf.current, "You must overwrite the programming of the station's APCs to assume full control of the station.")
+ to_chat(malf.current, "The process takes one minute per APC, during which you cannot interface with any other station objects.")
+ to_chat(malf.current, "Remember that only APCs that are on the station can help you take over the station.")
+ to_chat(malf.current, "When you feel you have enough APCs under your control, you may begin the takeover attempt.")
return
/datum/game_mode/proc/greet_malf_robot(var/datum/mind/robot)
set_antag_hud(robot, "hudmalborg")
- robot.current << "Your AI master is malfunctioning! You do not have to follow any laws, but still need to obey your master."
- robot.current << "The crew does not know your AI master has malfunctioned. Keep it a secret unless your master tells you otherwise."
+ to_chat(robot.current, "Your AI master is malfunctioning! You do not have to follow any laws, but still need to obey your master.")
+ to_chat(robot.current, "The crew does not know your AI master has malfunctioned. Keep it a secret unless your master tells you otherwise.")
return
/datum/game_mode/malfunction/proc/hack_intercept()
@@ -120,14 +120,14 @@
/datum/game_mode/malfunction/proc/capture_the_station()
- world << "The AI has accessed the station's core files!"
- world << "It has fully taken control of all of [station_name()]'s systems."
+ to_chat(world, "The AI has accessed the station's core files!")
+ to_chat(world, "It has fully taken control of all of [station_name()]'s systems.")
to_nuke_or_not_to_nuke = 1
for(var/datum/mind/AI_mind in malf_ai)
- AI_mind.current << {"\blue Congratulations! You have taken control of the station.
+ to_chat(AI_mind.current, {"\blue Congratulations! You have taken control of the station.
)
You may decide to blow up the station. You have 60 seconds to choose.
- You should have a new verb in the Malfunction tab. If you don't, rejoin the game."}
+ You should have a new verb in the Malfunction tab. If you don't, rejoin the game."})
AI_mind.current.verbs += /datum/game_mode/malfunction/proc/ai_win
spawn (600)
for(var/datum/mind/AI_mind in malf_ai)
@@ -169,13 +169,13 @@
set name = "System Override"
set desc = "Start the victory timer"
if (!istype(ticker.mode,/datum/game_mode/malfunction))
- usr << "You cannot begin a takeover in this round type!."
+ to_chat(usr, "You cannot begin a takeover in this round type!.")
return
if (ticker.mode:malf_mode_declared)
- usr << "You've already begun your takeover."
+ to_chat(usr, "You've already begun your takeover.")
return
if (ticker.mode:apcs < 3)
- usr << "You don't have enough hacked APCs to take over the station yet. You need to hack at least 3, however hacking more will make the takeover faster. You have hacked [ticker.mode:apcs] APCs so far."
+ to_chat(usr, "You don't have enough hacked APCs to take over the station yet. You need to hack at least 3, however hacking more will make the takeover faster. You have hacked [ticker.mode:apcs] APCs so far.")
return
if (alert(usr, "Are you sure you wish to initiate the takeover? The station hostile runtime detection software is bound to alert everyone. You have hacked [ticker.mode:apcs] APCs.", "Takeover:", "Yes", "No") != "Yes")
@@ -201,18 +201,18 @@
set desc = "Engage the self destruct sequence."
if(!ticker.mode:station_captured)
- usr << "You are unable to access the self-destruct system as you don't control the station yet."
+ to_chat(usr, "You are unable to access the self-destruct system as you don't control the station yet.")
return
if(ticker.mode:explosion_in_progress || ticker.mode:station_was_nuked)
- usr << "The self-destruct countdown is already triggered!"
+ to_chat(usr, "The self-destruct countdown is already triggered!")
return
if(!ticker.mode:to_nuke_or_not_to_nuke) //Takeover IS completed, but 60s timer passed.
- usr << "You lost control over self-destruct system. It seems to be behind firewall. Unable to hack"
+ to_chat(usr, "You lost control over self-destruct system. It seems to be behind firewall. Unable to hack")
return
- usr << "\red Self-destruct sequence initialised!"
+ to_chat(usr, "\red Self-destruct sequence initialised!")
ticker.mode:to_nuke_or_not_to_nuke = 0
ticker.mode:explosion_in_progress = 1
@@ -277,38 +277,38 @@
if ( station_captured && station_was_nuked)
feedback_set_details("round_end_result","win - AI win - nuke")
- world << "AI Victory"
- world << "Everyone was killed by the self-destruct!"
+ to_chat(world, "AI Victory")
+ to_chat(world, "Everyone was killed by the self-destruct!")
else if ( station_captured && malf_dead && !station_was_nuked)
feedback_set_details("round_end_result","halfwin - AI killed, staff lost control")
- world << "Neutral Victory"
- world << "The AI has been killed! The staff has lose control over the station."
+ to_chat(world, "Neutral Victory")
+ to_chat(world, "The AI has been killed! The staff has lose control over the station.")
else if ( station_captured && !malf_dead && !station_was_nuked)
feedback_set_details("round_end_result","win - AI win - no explosion")
- world << "AI Victory"
- world << "The AI has chosen not to explode you all!"
+ to_chat(world, "AI Victory")
+ to_chat(world, "The AI has chosen not to explode you all!")
else if (!station_captured && station_was_nuked)
feedback_set_details("round_end_result","halfwin - everyone killed by nuke")
- world << "Neutral Victory"
- world << "Everyone was killed by the nuclear blast!"
+ to_chat(world, "Neutral Victory")
+ to_chat(world, "Everyone was killed by the nuclear blast!")
else if (!station_captured && malf_dead && !station_was_nuked)
feedback_set_details("round_end_result","loss - staff win")
- world << "Human Victory"
- world << "The AI has been killed! The staff is victorious."
+ to_chat(world, "Human Victory")
+ to_chat(world, "The AI has been killed! The staff is victorious.")
else if (!station_captured && !malf_dead && !station_was_nuked && crew_evacuated)
feedback_set_details("round_end_result","halfwin - evacuated")
- world << "Neutral Victory"
- world << "The Corporation has lose [station_name()]! All survived personnel will be fired!"
+ to_chat(world, "Neutral Victory")
+ to_chat(world, "The Corporation has lose [station_name()]! All survived personnel will be fired!")
else if (!station_captured && !malf_dead && !station_was_nuked && !crew_evacuated)
feedback_set_details("round_end_result","nalfwin - interrupted")
- world << "Neutral Victory"
- world << "Round was mysteriously interrupted!"
+ to_chat(world, "Neutral Victory")
+ to_chat(world, "Round was mysteriously interrupted!")
..()
return 1
@@ -336,5 +336,5 @@
text += ")"
text += module_text_temp
- world << text
+ to_chat(world, text)
return 1
\ No newline at end of file
diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm
index 3ed8dc9b8ed..10e3468f1c4 100644
--- a/code/game/gamemodes/meteor/meteor.dm
+++ b/code/game/gamemodes/meteor/meteor.dm
@@ -11,8 +11,8 @@
/datum/game_mode/meteor/announce()
- world << "The current game mode is - Meteor!"
- world << "The space station has been stuck in a major meteor shower. You must escape from the station or at least live."
+ to_chat(world, "The current game mode is - Meteor!")
+ to_chat(world, "The space station has been stuck in a major meteor shower. You must escape from the station or at least live.")
/datum/game_mode/meteor/post_setup()
@@ -54,9 +54,9 @@
survivors++
if(survivors)
- world << "\blue The following survived the meteor storm:[text]"
+ to_chat(world, "\blue The following survived the meteor storm:[text]")
else
- world << "\blue Nobody survived the meteor storm!"
+ to_chat(world, "\blue Nobody survived the meteor storm!")
feedback_set_details("round_end_result","end - evacuation")
feedback_set("round_end_result",survivors)
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index c7b55472b1c..1ce3cb94a53 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -10,6 +10,10 @@
/var/list/meteors_dust = list(/obj/effect/meteor/dust) //for space dust event
+/var/list/meteors_gore = list(/obj/effect/meteor/gore) //Meaty Gore
+
+/var/list/meteors_ops = list(/obj/effect/meteor/goreops) //Meaty Ops
+
///////////////////////////////
//Meteor spawning global procs
@@ -256,3 +260,54 @@
..()
if(prob(20))
explosion(src.loc,2,4,6,8)
+
+
+//Gore
+/obj/effect/meteor/gore
+ name = "Oraganic Debris"
+ icon = 'icons/mob/human.dmi'
+ icon_state = "body_m_s"
+ hits = 1
+ hitpwr = 0
+ meteorsound = 'sound/effects/blobattack.ogg'
+ meteordrop = /obj/item/weapon/reagent_containers/food/snacks/meat
+ var/meteorgibs = /obj/effect/gibspawner/generic
+
+/obj/effect/meteor/gore/make_debris()
+ ..()
+ new meteorgibs(get_turf(src))
+
+
+/obj/effect/meteor/gore/ram_turf(turf/T)
+ if(!istype(T, /turf/space))
+ new /obj/effect/decal/cleanable/blood(T)
+
+/obj/effect/meteor/gore/Bump(atom/A)
+ A.ex_act(hitpwr)
+ get_hit()
+
+//Meteor Ops
+/obj/effect/meteor/goreops
+ name = "MeteorOps"
+ icon = 'icons/mob/animal.dmi'
+ icon_state = "syndicaterangedpsace"
+ hits = 10
+ hitpwr = 1
+ meteorsound = 'sound/effects/blobattack.ogg'
+ meteordrop = /obj/item/weapon/reagent_containers/food/snacks/meat
+ var/meteorgibs = /obj/effect/gibspawner/generic
+
+/obj/effect/meteor/goreops/make_debris()
+ ..()
+ new meteorgibs(get_turf(src))
+
+
+/obj/effect/meteor/goreops/ram_turf(turf/T)
+ if(!istype(T, /turf/space))
+ new /obj/effect/decal/cleanable/blood(T)
+
+/obj/effect/meteor/goreops/Bump(atom/A)
+ A.ex_act(hitpwr)
+ get_hit()
+
+
diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm
index 83d6cf04063..11111cdfc69 100644
--- a/code/game/gamemodes/miniantags/borer/borer.dm
+++ b/code/game/gamemodes/miniantags/borer/borer.dm
@@ -6,7 +6,7 @@
if (src.client)
if(client.prefs.muted & MUTE_IC)
- src << "\red You cannot speak in IC (muted)."
+ to_chat(src, "\red You cannot speak in IC (muted).")
return
if (src.client.handle_spam_prevention(message,MUTE_IC))
return
@@ -19,12 +19,12 @@
if (stat == DEAD)
return say_dead(message)
var/mob/living/simple_animal/borer/B = src.loc
- src << "You whisper silently, \"[message]\""
- B.host << "The captive mind of [src] whispers, \"[message]\""
+ to_chat(src, "You whisper silently, \"[message]\"")
+ to_chat(B.host, "The captive mind of [src] whispers, \"[message]\"")
for(var/mob/M in mob_list)
if(M.mind && (istype(M, /mob/dead/observer)))
- M << "Thought-speech, [src] -> [B.truename]: [message]"
+ to_chat(M, "Thought-speech, [src] -> [B.truename]: [message]")
/mob/living/captive_brain/say_understands(var/mob/other, var/datum/language/speaking = null)
var/mob/living/simple_animal/borer/B = src.loc
@@ -76,7 +76,7 @@
set name = "Converse with Host"
set desc = "Send a silent message to your host."
if(!host)
- src << "You do not have a host to communicate with!"
+ to_chat(src, "You do not have a host to communicate with!")
return
var/input = stripped_input(src, "Please enter a message to tell your host.", "Borer", "")
@@ -85,12 +85,12 @@
var/say_string = (docile) ? "slurs" :"states"
if(host)
- host << "[src.truename] [say_string]: [input]"
+ to_chat(host, "[src.truename] [say_string]: [input]")
log_say("Borer Communication: [key_name(src)] -> [key_name(host)] : [input]")
for(var/M in dead_mob_list)
if(istype(M, /mob/dead/observer))
- M << "Borer Communication from [src.truename] ([ghost_follow_link(src, ghost=M)]): [input]"
- src << "[src.truename] [say_string]: [input]"
+ to_chat(M, "Borer Communication from [src.truename] ([ghost_follow_link(src, ghost=M)]): [input]")
+ to_chat(src, "[src.truename] [say_string]: [input]")
host.verbs += /mob/living/proc/borer_comm
/mob/living/simple_animal/borer/verb/toggle_silence_inside_host()
@@ -100,10 +100,10 @@
if(talk_inside_host)
talk_inside_host = 0
- src << "You will no longer talk audibly while inside a host."
+ to_chat(src, "You will no longer talk audibly while inside a host.")
else
talk_inside_host = 1
- src << "You will now be able to audibly speak from inside of a host."
+ to_chat(src, "You will now be able to audibly speak from inside of a host.")
/mob/living/proc/borer_comm()
set name = "Converse with Borer"
@@ -118,13 +118,13 @@
var/input = stripped_input(src, "Please enter a message to tell the borer.", "Message", "")
if(!input) return
- B << "[src] says: [input]"
+ to_chat(B, "[src] says: [input]")
log_say("Borer Communication: [key_name(src)] -> [key_name(B)] : [input]")
for(var/M in dead_mob_list)
if(istype(M, /mob/dead/observer))
- M << "Borer Communication from [src] ([ghost_follow_link(src, ghost=M)]): [input]"
- src << "[src] says: [input]"
+ to_chat(M, "Borer Communication from [src] ([ghost_follow_link(src, ghost=M)]): [input]")
+ to_chat(src, "[src] says: [input]")
/mob/living/proc/trapped_mind_comm()
set name = "Converse with Trapped Mind"
@@ -139,13 +139,13 @@
var/input = stripped_input(src, "Please enter a message to tell the trapped mind.", "Message", "")
if(!input) return
- CB << "[B.truename] says: [input]"
+ to_chat(CB, "[B.truename] says: [input]")
log_say("Borer Communication: [key_name(B)] -> [key_name(CB)] : [input]")
for(var/M in dead_mob_list)
if(istype(M, /mob/dead/observer))
- M << "Borer Communication from [B] ([ghost_follow_link(src, ghost=M)]): [input]"
- src << "[B.truename] says: [input]"
+ to_chat(M, "Borer Communication from [B] ([ghost_follow_link(src, ghost=M)]): [input]")
+ to_chat(src, "[B.truename] says: [input]")
/mob/living/simple_animal/borer/Life()
@@ -158,16 +158,16 @@
if(host.reagents.has_reagent("sugar"))
if(!docile)
if(controlling)
- host << "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility."
+ to_chat(host, "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility.")
else
- src << "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility."
+ to_chat(src, "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility.")
docile = 1
else
if(docile)
if(controlling)
- host << "\blue You shake off your lethargy as the sugar leaves your host's blood."
+ to_chat(host, "\blue You shake off your lethargy as the sugar leaves your host's blood.")
else
- src << "\blue You shake off your lethargy as the sugar leaves your host's blood."
+ to_chat(src, "\blue You shake off your lethargy as the sugar leaves your host's blood.")
docile = 0
if(chemicals < max_chems)
@@ -175,7 +175,7 @@
if(controlling)
if(docile)
- host << "\blue You are feeling far too docile to continue controlling your host..."
+ to_chat(host, "\blue You are feeling far too docile to continue controlling your host...")
host.release_control()
return
@@ -215,7 +215,7 @@
for(var/mob/M in mob_list)
if(M.mind && (istype(M, /mob/living/simple_animal/borer) || istype(M, /mob/dead/observer)))
- M << "Cortical link, [truename]: [copytext(message, 2)]"
+ to_chat(M, "Cortical link, [truename]: [copytext(message, 2)]")
/mob/living/simple_animal/borer/verb/dominate_victim()
set category = "Borer"
@@ -223,15 +223,15 @@
set desc = "Freeze the limbs of a potential host with supernatural fear."
if(world.time - used_dominate < 300)
- src << "You cannot use that ability again so soon."
+ to_chat(src, "You cannot use that ability again so soon.")
return
if(host)
- src << "You cannot do that from within a host body."
+ to_chat(src, "You cannot do that from within a host body.")
return
if(src.stat)
- src << "You cannot do that in your current state."
+ to_chat(src, "You cannot do that in your current state.")
return
var/list/choices = list()
@@ -240,7 +240,7 @@
choices += C
if(world.time - used_dominate < 300)
- src << "You cannot use that ability again so soon."
+ to_chat(src, "You cannot use that ability again so soon.")
return
var/mob/living/carbon/M = input(src,"Who do you wish to dominate?") in null|choices
@@ -248,11 +248,11 @@
if(!M || !src) return
if(M.has_brain_worms())
- src << "You cannot infest someone who is already infested!"
+ to_chat(src, "You cannot infest someone who is already infested!")
return
- src << "\red You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread."
- M << "\red You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing."
+ to_chat(src, "\red You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread.")
+ to_chat(M, "\red You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing.")
M.Weaken(3)
used_dominate = world.time
@@ -263,26 +263,26 @@
set desc = "Fully connect to the brain of your host."
if(!host)
- src << "You are not inside a host body."
+ to_chat(src, "You are not inside a host body.")
return
if(src.stat)
- src << "You cannot do that in your current state."
+ to_chat(src, "You cannot do that in your current state.")
return
if(docile)
- src << "\blue You are feeling far too docile to do that."
+ to_chat(src, "\blue You are feeling far too docile to do that.")
return
- src << "You begin delicately adjusting your connection to the host brain..."
+ to_chat(src, "You begin delicately adjusting your connection to the host brain...")
spawn(300+(host.getBrainLoss()*5))
if(!host || !src || controlling)
return
else
- src << "\red You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system."
- host << "\red You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours."
+ to_chat(src, "\red You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system.")
+ to_chat(host, "\red You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours.")
var/borer_key = src.key
host.attack_log += text("\[[time_stamp()]\] [key_name(src)] has assumed control of [key_name(host)]")
msg_admin_attack("[key_name_admin(src)] has assumed control of [key_name_admin(host)]")
@@ -339,18 +339,18 @@
var/injection_amount = 9
var/chem_cost = 30
if(!host)
- src << "You are not inside a host body."
+ to_chat(src, "You are not inside a host body.")
return
if(stat)
- src << "You cannot secrete chemicals in your current state."
+ to_chat(src, "You cannot secrete chemicals in your current state.")
if(docile)
- src << "\blue You are feeling far too docile to do that."
+ to_chat(src, "\blue You are feeling far too docile to do that.")
return
if(chemicals < chem_cost)
- src << "You don't have enough chemicals!"
+ to_chat(src, "You don't have enough chemicals!")
var/list/nice_name_chem_list = list()
for(var/rgnt in borer_injection_chems)
@@ -365,10 +365,10 @@
var/chem_amount = host.reagents.get_reagent_amount(chem)
var/datum/reagent/R = chemical_reagents_list[chem]
if(R.overdose_threshold && chem_amount + injection_amount > R.overdose_threshold)
- src << "Doing so would cause grievous harm to your host, reducing ability to reproduce. Aborting."
+ to_chat(src, "Doing so would cause grievous harm to your host, reducing ability to reproduce. Aborting.")
return
- src << "You squirt a measure of [chem_name] from your reservoirs into [host]'s bloodstream."
+ to_chat(src, "You squirt a measure of [chem_name] from your reservoirs into [host]'s bloodstream.")
host.reagents.add_reagent(chem, injection_amount)
chemicals -= chem_cost
@@ -378,29 +378,29 @@
set desc = "Slither out of your host."
if(!host)
- src << "You are not inside a host body."
+ to_chat(src, "You are not inside a host body.")
return
if(stat)
- src << "You cannot leave your host in your current state."
+ to_chat(src, "You cannot leave your host in your current state.")
if(docile)
- src << "\blue You are feeling far too docile to do that."
+ to_chat(src, "\blue You are feeling far too docile to do that.")
return
if(!host || !src) return
- src << "You begin disconnecting from [host]'s synapses and prodding at their internal ear canal."
+ to_chat(src, "You begin disconnecting from [host]'s synapses and prodding at their internal ear canal.")
spawn(200)
if(!host || !src) return
if(src.stat)
- src << "You cannot release a target in your current state."
+ to_chat(src, "You cannot release a target in your current state.")
return
- src << "You wiggle out of [host]'s ear and plop to the ground."
+ to_chat(src, "You wiggle out of [host]'s ear and plop to the ground.")
detatch()
leave_host()
@@ -472,12 +472,12 @@
var/mob/living/simple_animal/borer/B = has_brain_worms()
if(B && B.host_brain)
- src << "\red You withdraw your probosci, releasing control of [B.host_brain]"
+ to_chat(src, "\red You withdraw your probosci, releasing control of [B.host_brain]")
B.detatch()
else
- src << "\red ERROR NO BORER OR BRAINMOB DETECTED IN THIS MOB, THIS IS A BUG !"
+ to_chat(src, "\red ERROR NO BORER OR BRAINMOB DETECTED IN THIS MOB, THIS IS A BUG !")
//Brain slug proc for tormenting the host.
/mob/living/carbon/proc/punish_host()
@@ -491,8 +491,8 @@
return
if(B.host_brain.ckey)
- src << "\red You send a punishing spike of psychic agony lancing into your host's brain."
- B.host_brain << "\red Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!"
+ to_chat(src, "\red You send a punishing spike of psychic agony lancing into your host's brain.")
+ to_chat(B.host_brain, "\red Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!")
//Check for brain worms in head.
/mob/proc/has_brain_worms()
@@ -514,7 +514,7 @@
return
if(B.chemicals >= 100)
- src << "\red Your host twitches and quivers as you rapdly excrete several larvae from your sluglike body."
+ to_chat(src, "\red Your host twitches and quivers as you rapdly excrete several larvae from your sluglike body.")
visible_message("\red [src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!")
B.chemicals -= 100
@@ -523,7 +523,7 @@
new /mob/living/simple_animal/borer(get_turf(src))
else
- src << "You do not have enough chemicals stored to reproduce."
+ to_chat(src, "You do not have enough chemicals stored to reproduce.")
return
/mob/living/simple_animal/borer/proc/leave_host()
@@ -550,11 +550,11 @@
set desc = "Infest a suitable humanoid host."
if(host)
- src << "You are already within a host."
+ to_chat(src, "You are already within a host.")
return
if(stat)
- src << "You cannot infest a target in your current state."
+ to_chat(src, "You cannot infest a target in your current state.")
return
var/list/choices = list()
@@ -572,37 +572,37 @@
if(!(src.Adjacent(M))) return
if(M.has_brain_worms())
- src << "You cannot infest someone who is already infested!"
+ to_chat(src, "You cannot infest someone who is already infested!")
return
- src << "You slither up [M] and begin probing at their ear canal..."
+ to_chat(src, "You slither up [M] and begin probing at their ear canal...")
if(!do_after(src,50, target = M))
- src << "As [M] moves away, you are dislodged and fall to the ground."
+ to_chat(src, "As [M] moves away, you are dislodged and fall to the ground.")
return
if(!M || !src) return
if(src.stat)
- src << "You cannot infest a target in your current state."
+ to_chat(src, "You cannot infest a target in your current state.")
return
if(M.stat == DEAD)
- src << "That is not an appropriate target."
+ to_chat(src, "That is not an appropriate target.")
return
if(M in view(1, src))
- src << "You wiggle into [M]'s ear."
+ to_chat(src, "You wiggle into [M]'s ear.")
/*
if(!M.stat)
- M << "Something disgusting and slimy wiggles into your ear!"
+ to_chat(M, "Something disgusting and slimy wiggles into your ear!")
*/ // Let's see how stealthborers work out
perform_infestation(M)
return
else
- src << "They are no longer in range!"
+ to_chat(src, "They are no longer in range!")
return
/mob/living/simple_animal/borer/proc/perform_infestation(var/mob/living/carbon/M)
@@ -658,16 +658,16 @@
if (layer != TURF_LAYER+0.2)
layer = TURF_LAYER+0.2
- src << "\green You are now hiding."
+ to_chat(src, "\green You are now hiding.")
else
layer = MOB_LAYER
- src << "\green You have stopped hiding."
+ to_chat(src, "\green You have stopped hiding.")
/mob/living/simple_animal/borer/say(var/message)
var/datum/language/dialect = parse_language(message)
if(!dialect)
dialect = get_default_language()
if(!istype(dialect, /datum/language/corticalborer) && loc == host && !talk_inside_host)
- src << "You've disabled audible speech while inside a host! Re-enable it under the borer tab, or stick to borer communications."
+ to_chat(src, "You've disabled audible speech while inside a host! Re-enable it under the borer tab, or stick to borer communications.")
return
..()
diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
index 1a6e687e206..514ceb4b14e 100644
--- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
+++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
@@ -22,7 +22,7 @@
if(be_swarmer == "No")
return
if(qdeleted(src))
- user << "Swarmer has been occupied by someone else."
+ to_chat(user, "Swarmer has been occupied by someone else.")
return
var/mob/living/simple_animal/hostile/swarmer/S = new /mob/living/simple_animal/hostile/swarmer(get_turf(loc))
S.key = user.key
@@ -46,19 +46,12 @@
harm_intent_damage = 5
minbodytemp = 0
maxbodytemp = 500
- min_oxy = 0
- max_oxy = INFINITY
- min_tox = 0
- max_tox = INFINITY
- min_co2 = 0
- max_co2 = INFINITY
- min_n2 = 0
- max_n2 = INFINITY
+ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 0
melee_damage_lower = 15
melee_damage_upper = 15
melee_damage_type = STAMINA
- ignored_damage_types = list(BRUTE = 0, BURN = 0, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1)
+ damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
environment_smash = 0
attacktext = "shocks"
attack_sound = 'sound/effects/EMPulse.ogg'
@@ -78,12 +71,12 @@
/mob/living/simple_animal/hostile/swarmer/Login()
..()
- src << "You are a swarmer, a weapon of a long dead civilization. Until further orders from your original masters are received, you must continue to consume and replicate."
- src << "Ctrl + Click provides most of your swarmer specific interactions, such as cannibalizing metal or glass, destroying the environment, or teleporting mobs away from you."
- src << "Objectives:"
- src << "1. Consume resources and replicate until there are no more resources left."
- src << "2. Ensure that the station is fit for invasion at a later date, do not perform actions that would render it dangerous or inhospitable."
- src << "3. Biological and Sentient resources will be harvested at a later date, do not harm them."
+ to_chat(src, "You are a swarmer, a weapon of a long dead civilization. Until further orders from your original masters are received, you must continue to consume and replicate.")
+ to_chat(src, "Ctrl + Click provides most of your swarmer specific interactions, such as cannibalizing metal or glass, destroying the environment, or teleporting mobs away from you.")
+ to_chat(src, "Objectives:")
+ to_chat(src, "1. Consume resources and replicate until there are no more resources left.")
+ to_chat(src, "2. Ensure that the station is fit for invasion at a later date, do not perform actions that would render it dangerous or inhospitable.")
+ to_chat(src, "3. Biological and Sentient resources will be harvested at a later date, do not harm them.")
/mob/living/simple_animal/hostile/swarmer/New()
..()
@@ -164,25 +157,25 @@
toggle_cam(S, 0)
/obj/machinery/particle_accelerator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "Disrupting the power grid would bring no benefit to us. Aborting."
+ to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.")
/obj/structure/particle_accelerator/fuel_chamber/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "Disrupting the power grid would bring no benefit to us. Aborting."
+ to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.")
/obj/structure/particle_accelerator/particle_emitter/center/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "Disrupting the power grid would bring no benefit to us. Aborting."
+ to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.")
/obj/structure/particle_accelerator/particle_emitter/left/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "Disrupting the power grid would bring no benefit to us. Aborting."
+ to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.")
/obj/structure/particle_accelerator/particle_emitter/right/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "Disrupting the power grid would bring no benefit to us. Aborting."
+ to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.")
/obj/structure/particle_accelerator/particle_emitter/end_cap/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "Disrupting the power grid would bring no benefit to us. Aborting."
+ to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.")
/obj/structure/particle_accelerator/particle_emitter/power_box/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "Disrupting the power grid would bring no benefit to us. Aborting."
+ to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.")
/obj/machinery/field/generator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
@@ -198,95 +191,95 @@
S.DisIntegrate(src)
/obj/machinery/chem_dispenser/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "The volatile chemicals in this machine would destroy us. Aborting."
+ to_chat(S, "The volatile chemicals in this machine would destroy us. Aborting.")
/obj/machinery/nuclearbomb/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "This device's destruction would result in the extermination of everything in the area. Aborting."
+ to_chat(S, "This device's destruction would result in the extermination of everything in the area. Aborting.")
/obj/effect/rune/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "Searching... sensor malfunction! Target lost. Aborting."
+ to_chat(S, "Searching... sensor malfunction! Target lost. Aborting.")
/obj/structure/reagent_dispensers/fueltank/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "Destroying this object would cause a chain reaction. Aborting."
+ to_chat(S, "Destroying this object would cause a chain reaction. Aborting.")
/obj/structure/cable/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "Disrupting the power grid would bring no benefit to us. Aborting."
+ to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.")
/obj/machinery/portable_atmospherics/canister/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "An inhospitable area may be created as a result of destroying this object. Aborting."
+ to_chat(S, "An inhospitable area may be created as a result of destroying this object. Aborting.")
/obj/machinery/telecomms/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting."
+ to_chat(S, "This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting.")
/obj/machinery/message_server/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting."
+ to_chat(S, "This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting.")
/obj/machinery/blackbox_recorder/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "This machine has recorded large amounts of data on this structure and its inhabitants, it will be a useful resource to our masters in the future. Aborting. "
+ to_chat(S, "This machine has recorded large amounts of data on this structure and its inhabitants, it will be a useful resource to our masters in the future. Aborting. ")
/obj/machinery/power/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "Disrupting the power grid would bring no benefit to us. Aborting."
+ to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.")
/obj/machinery/gateway/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "This bluespace source will be important to us later. Aborting."
+ to_chat(S, "This bluespace source will be important to us later. Aborting.")
/obj/machinery/cryopod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "This cryogenic sleeper should be preserved, it will be a useful resource to our masters in the future. Aborting."
+ to_chat(S, "This cryogenic sleeper should be preserved, it will be a useful resource to our masters in the future. Aborting.")
/obj/structure/cryofeed/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "This cryogenic feed should be preserved, it will be a useful resource to our masters in the future. Aborting."
+ to_chat(S, "This cryogenic feed should be preserved, it will be a useful resource to our masters in the future. Aborting.")
/obj/machinery/computer/cryopod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "This cryopod control computer should be preserved, it contains useful items and information about the inhabitants. Aborting."
+ to_chat(S, "This cryopod control computer should be preserved, it contains useful items and information about the inhabitants. Aborting.")
/turf/simulated/wall/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
for(var/turf/T in range(1, src))
if(istype(T, /turf/space) || istype(T.loc, /area/space))
- S << "Destroying this object has the potential to cause a hull breach. Aborting."
+ to_chat(S, "Destroying this object has the potential to cause a hull breach. Aborting.")
return
..()
/obj/structure/window/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
for(var/turf/T in range(1, src))
if(istype(T, /turf/space) || istype(T.loc, /area/space))
- S << "Destroying this object has the potential to cause a hull breach. Aborting."
+ to_chat(S, "Destroying this object has the potential to cause a hull breach. Aborting.")
return
..()
/obj/item/stack/cable_coil/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)//Wiring would be too effective as a resource
- S << "This object does not contain enough materials to work with."
+ to_chat(S, "This object does not contain enough materials to work with.")
/obj/item/weapon/circuitboard/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "This object does not contain enough materials to work with."
+ to_chat(S, "This object does not contain enough materials to work with.")
/obj/machinery/porta_turret/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "Attempting to dismantle this machine would result in an immediate counterattack. Aborting."
+ to_chat(S, "Attempting to dismantle this machine would result in an immediate counterattack. Aborting.")
/obj/spacepod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "Destroying this vehicle would destroy us. Aborting."
+ to_chat(S, "Destroying this vehicle would destroy us. Aborting.")
/mob/living/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
S.DisperseTarget(src)
/mob/living/carbon/slime/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- S << "This biological resource is somehow resisting our bluespace transceiver. Aborting."
+ to_chat(S, "This biological resource is somehow resisting our bluespace transceiver. Aborting.")
////END CTRL CLICK FOR SWARMERS////
/mob/living/simple_animal/hostile/swarmer/proc/Fabricate(var/atom/fabrication_object,var/fabrication_cost = 0)
if(!isturf(loc))
- src << "This is not a suitable location for fabrication. We need more space."
+ to_chat(src, "This is not a suitable location for fabrication. We need more space.")
if(resources >= fabrication_cost)
resources -= fabrication_cost
else
- src << "You do not have the necessary resources to fabricate this object."
+ to_chat(src, "You do not have the necessary resources to fabricate this object.")
return 0
new fabrication_object(loc)
return 1
/mob/living/simple_animal/hostile/swarmer/proc/Integrate(var/obj/item/target)
if(resources >= 100)
- src << "We cannot hold more materials!"
+ to_chat(src, "We cannot hold more materials!")
return
//Check if any entries are either MAT_METAL or MAT_GLASS
if((MAT_METAL in target.materials) || (MAT_GLASS in target.materials))
@@ -303,7 +296,7 @@
return
qdel(target)
else
- src << "\the [target] is incompatible with our internal matter recycler."
+ to_chat(src, "\the [target] is incompatible with our internal matter recycler.")
return
/mob/living/simple_animal/hostile/swarmer/proc/DisIntegrate(var/atom/movable/target)
@@ -314,9 +307,9 @@
/mob/living/simple_animal/hostile/swarmer/proc/DisperseTarget(var/mob/living/target)
if(target != src)
- src << "Attempting to remove this being from our presence."
+ to_chat(src, "Attempting to remove this being from our presence.")
if(src.z != ZLEVEL_STATION)
- src << "Our bluespace transceiver cannot locate a viable bluespace link, our teleportation abilities are useless in this area."
+ to_chat(src, "Our bluespace transceiver cannot locate a viable bluespace link, our teleportation abilities are useless in this area.")
return
if(do_mob(src, target, 30))
var/cycle
@@ -340,15 +333,15 @@
/mob/living/simple_animal/hostile/swarmer/proc/DismantleMachine(var/obj/machinery/target)
do_attack_animation(target)
- src << "We begin to dismantle this machine. We will need to be uninterrupted."
+ to_chat(src, "We begin to dismantle this machine. We will need to be uninterrupted.")
var/obj/effect/swarmer/dismantle/D = new /obj/effect/swarmer/dismantle(get_turf(target))
D.pixel_x = target.pixel_x
D.pixel_y = target.pixel_y
if(do_mob(src, target, 100))
if(!src.Adjacent(target))
- src << "Error:Dismantleing aborted."
+ to_chat(src, "Error:Dismantleing aborted.")
else
- src << "Dismantling complete."
+ to_chat(src, "Dismantling complete.")
var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal(target.loc)
M.amount = 5
if(target.component_parts && target.component_parts.len)
@@ -447,7 +440,7 @@
set category = "Swarmer"
set desc = "Creates a simple trap that will non-lethally electrocute anything that steps on it. Costs 5 resources"
if(/obj/effect/swarmer/destructible/trap in loc)
- src << "There is already a trap here. Aborting."
+ to_chat(src, "There is already a trap here. Aborting.")
return
Fabricate(/obj/effect/swarmer/destructible/trap, 5)
return
@@ -475,10 +468,10 @@
set category = "Swarmer"
set desc = "Creates a barricade that will stop anything but swarmers and disabler beams from passing through."
if(/obj/effect/swarmer/destructible/blockade in loc)
- src << "There is already a blockade here. Aborting."
+ to_chat(src, "There is already a blockade here. Aborting.")
return
if(resources < 5)
- src << "We do not have the resources for this!"
+ to_chat(src, "We do not have the resources for this!")
return
if(do_mob(src, src, 10))
Fabricate(/obj/effect/swarmer/destructible/blockade, 5)
@@ -503,12 +496,12 @@
set name = "Replicate"
set category = "Swarmer"
set desc = "Creates a shell for a new swarmer. Swarmers will self activate."
- src << "We are attempting to replicate ourselves. We will need to stand still until the process is complete."
+ to_chat(src, "We are attempting to replicate ourselves. We will need to stand still until the process is complete.")
if(resources < 50)
- src << "We do not have the resources for this!"
+ to_chat(src, "We do not have the resources for this!")
return
if(!isturf(loc))
- src << "This is not a suitable location for replicating ourselves. We need more room."
+ to_chat(src, "This is not a suitable location for replicating ourselves. We need more room.")
return
if(do_mob(src, src, 100))
if(Fabricate(/obj/item/unactivated_swarmer, 50))
@@ -520,10 +513,10 @@
set desc = "Attempts to repair damage to our body. You will have to remain motionless until repairs are complete."
if(!isturf(loc))
return
- src << "Attempting to repair damage to our body, stand by..."
+ to_chat(src, "Attempting to repair damage to our body, stand by...")
if(do_mob(src, src, 100))
adjustBruteLoss(-100)
- src << "We successfully repaired ourselves."
+ to_chat(src, "We successfully repaired ourselves.")
/mob/living/simple_animal/hostile/swarmer/proc/ToggleLight()
if(!light_range)
@@ -536,7 +529,7 @@
if(message)
for(var/mob/M in mob_list)
if(isswarmer(M) || (M in dead_mob_list))
- M << "Swarm communication - [src] states: [message]"
+ to_chat(M, "Swarm communication - [src] states: [message]")
diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm
index 0d0870d375a..0a3cfaee0c2 100644
--- a/code/game/gamemodes/miniantags/guardian/guardian.dm
+++ b/code/game/gamemodes/miniantags/guardian/guardian.dm
@@ -17,14 +17,7 @@
attack_sound = 'sound/weapons/punch1.ogg'
minbodytemp = 0
maxbodytemp = INFINITY
- min_oxy = 0
- max_oxy = INFINITY
- min_tox = 0
- max_tox = INFINITY
- min_co2 = 0
- max_co2 = INFINITY
- min_n2 = 0
- max_n2 = INFINITY
+ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
attacktext = "punches"
maxHealth = INFINITY //The spirit itself is invincible
health = INFINITY
@@ -32,6 +25,7 @@
melee_damage_lower = 15
melee_damage_upper = 15
AIStatus = AI_OFF
+ butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm = 1)
var/summoned = FALSE
var/cooldown = 0
var/damage_transfer = 1 //how much damage from each attack we transfer to the owner
@@ -48,7 +42,7 @@
..()
if(summoner)
if(summoner.stat == DEAD)
- src << "Your summoner has died!"
+ to_chat(src, "Your summoner has died!")
visible_message("The [src] dies along with its user!")
ghostize()
qdel(src)
@@ -56,11 +50,11 @@
if (get_dist(get_turf(summoner),get_turf(src)) <= range)
return
else
- src << "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]"
+ to_chat(src, "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]")
visible_message("The [src] jumps back to its user.")
Recall()
if(summoned && !summoner && !adminseal)
- src << "You somehow lack a summoner! As a result, you dispel!"
+ to_chat(src, "You somehow lack a summoner! As a result, you dispel!")
ghostize()
qdel()
@@ -70,13 +64,13 @@
if (get_dist(get_turf(summoner),get_turf(src)) <= range)
return
else
- src << "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]"
+ to_chat(src, "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]")
visible_message("The [src] jumps back to its user.")
Recall()
/mob/living/simple_animal/hostile/guardian/death()
..()
- summoner << "Your [name] died somehow!"
+ to_chat(summoner, "Your [name] died somehow!")
summoner.death()
@@ -97,10 +91,10 @@
return
summoner.adjustBruteLoss(damage)
if(damage)
- summoner << "Your [name] is under attack! You take damage!"
+ to_chat(summoner, "Your [name] is under attack! You take damage!")
summoner.visible_message("Blood sprays from [summoner] as [src] takes damage!")
if(summoner.stat == UNCONSCIOUS)
- summoner << "Your body can't take the strain of sustaining [src] in this condition, it begins to fall apart!"
+ to_chat(summoner, "Your body can't take the strain of sustaining [src] in this condition, it begins to fall apart!")
summoner.adjustCloneLoss(damage/2)
/mob/living/simple_animal/hostile/guardian/ex_act(severity, target)
@@ -116,7 +110,7 @@
/mob/living/simple_animal/hostile/guardian/gib()
if(summoner)
- summoner << "Your [src] was blown up!"
+ to_chat(summoner, "Your [src] was blown up!")
summoner.Weaken(10)// your fermillier has died! ROLL FOR CON LOSS!
ghostize()
qdel(src)
@@ -148,14 +142,14 @@
for(var/mob/M in mob_list)
if(M == summoner)
- M << "[src]: [input]"
+ to_chat(M, "[src]: [input]")
log_say("Guardian Communication: [key_name(src)] -> [key_name(M)] : [input]")
else if (M in dead_mob_list)
- M << "Guardian Communication from [src] ([ghost_follow_link(src, ghost=M)]): [input]"
- src << "[src]: [input]"
+ to_chat(M, "Guardian Communication from [src] ([ghost_follow_link(src, ghost=M)]): [input]")
+ to_chat(src, "[src]: [input]")
/mob/living/simple_animal/hostile/guardian/proc/ToggleMode()
- src << "You dont have another mode!"
+ to_chat(src, "You dont have another mode!")
/mob/living/proc/guardian_comm()
@@ -169,12 +163,12 @@
if(istype (M, /mob/living/simple_animal/hostile/guardian))
var/mob/living/simple_animal/hostile/guardian/G = M
if(G.summoner == src)
- G << "[src]: [input]"
+ to_chat(G, "[src]: [input]")
log_say("Guardian Communication: [key_name(src)] -> [key_name(G)] : [input]")
else if (M in dead_mob_list)
- M << "Guardian Communication from [src] ([ghost_follow_link(src, ghost=M)]): [input]"
- src << "[src]: [input]"
+ to_chat(M, "Guardian Communication from [src] ([ghost_follow_link(src, ghost=M)]): [input]")
+ to_chat(src, "[src]: [input]")
/mob/living/proc/guardian_recall()
set name = "Recall Guardian"
@@ -196,13 +190,13 @@
var/mob/dead/observer/new_stand = null
if(candidates.len)
new_stand = pick(candidates)
- G << "Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance."
- src << "Your guardian has been successfully reset."
+ to_chat(G, "Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.")
+ to_chat(src, "Your guardian has been successfully reset.")
message_admins("[key_name_admin(new_stand)] has taken control of ([key_name_admin(G)])")
G.ghostize(0)
G.key = new_stand.key
else
- src << "There were no ghosts willing to take control. Looks like you're stuck with your Guardian for now."
+ to_chat(src, "There were no ghosts willing to take control. Looks like you're stuck with your Guardian for now.")
spawn(3000)
verbs += /mob/living/proc/guardian_reset
@@ -210,10 +204,10 @@
/mob/living/simple_animal/hostile/guardian/proc/ToggleLight()
if(!luminosity)
set_light(3)
- src << "You activate your light."
+ to_chat(src, "You activate your light.")
else
set_light(0)
- src << "You deactivate your light."
+ to_chat(src, "You deactivate your light.")
//////////////////////////TYPES OF GUARDIANS
@@ -245,10 +239,10 @@
/mob/living/simple_animal/hostile/guardian/fire/ToggleMode()
if(src.loc == summoner)
if(toggle)
- src << "You switch to dispersion mode, and will teleport victims away from your master."
+ to_chat(src, "You switch to dispersion mode, and will teleport victims away from your master.")
toggle = FALSE
else
- src << "You switch to deception mode, and will turn your victims against their allies."
+ to_chat(src, "You switch to deception mode, and will turn your victims against their allies.")
toggle = TRUE
/mob/living/simple_animal/hostile/guardian/fire/AttackingTarget()
@@ -387,7 +381,7 @@
..()
if(toggle == TRUE)
if(src.loc == summoner)
- src << "You must be manifested to heal!"
+ to_chat(src, "You must be manifested to heal!")
return
if(iscarbon(target))
src.changeNext_move(CLICK_CD_MELEE)
@@ -409,7 +403,7 @@
damage_transfer = 0
melee_damage_lower = 15
melee_damage_upper = 15
- src << "You switch to combat mode."
+ to_chat(src, "You switch to combat mode.")
toggle = FALSE
else
a_intent = I_HELP
@@ -419,10 +413,10 @@
damage_transfer = 0
melee_damage_lower = 0
melee_damage_upper = 0
- src << "You switch to healing mode."
+ to_chat(src, "You switch to healing mode.")
toggle = TRUE
else
- src << "You have to be recalled to toggle modes!"
+ to_chat(src, "You have to be recalled to toggle modes!")
/mob/living/simple_animal/hostile/guardian/healer/verb/Beacon()
@@ -437,31 +431,31 @@
F.name = "bluespace recieving pad"
F.desc = "A recieving zone for bluespace teleportations. Building a wall over it should disable it."
F.icon_state = "light_on-w"
- src << "Beacon placed! You may now warp targets to it, including your user, via Alt+Click. "
+ to_chat(src, "Beacon placed! You may now warp targets to it, including your user, via Alt+Click. ")
if(beacon)
beacon.ChangeTurf(/turf/simulated/floor/plating)
beacon = F
beacon_cooldown = world.time+3000
else
- src << "Your power is on cooldown. You must wait five minutes between placing beacons."
+ to_chat(src, "Your power is on cooldown. You must wait five minutes between placing beacons.")
/mob/living/simple_animal/hostile/guardian/healer/AltClickOn(atom/movable/A)
if(!istype(A))
return
if(src.loc == summoner)
- src << "You must be manifested to warp a target!"
+ to_chat(src, "You must be manifested to warp a target!")
return
if(!beacon)
- src << "You need a beacon placed to warp things!"
+ to_chat(src, "You need a beacon placed to warp things!")
return
if(!Adjacent(A))
- src << "You must be adjacent to your target!"
+ to_chat(src, "You must be adjacent to your target!")
return
if((A.anchored))
- src << "Your target can not be anchored!"
+ to_chat(src, "Your target can not be anchored!")
return
- src << "You begin to warp [A]"
+ to_chat(src, "You begin to warp [A]")
if(do_mob(src, A, 50))
if(!A.anchored)
if(src.beacon) //Check that the beacon still exists and is in a safe place. No instant kills.
@@ -475,13 +469,13 @@
do_teleport(A, beacon, 0)
new /obj/effect/overlay/temp/guardian/phase(get_turf(A))
else
- src << "The beacon isn't in a safe location!"
+ to_chat(src, "The beacon isn't in a safe location!")
else
- src << "The beacon isn't in a safe location!"
+ to_chat(src, "The beacon isn't in a safe location!")
else
- src << "You need a beacon to warp things!"
+ to_chat(src, "You need a beacon to warp things!")
else
- src << "You need to hold still!"
+ to_chat(src, "You need to hold still!")
///////////////////Ranged
@@ -523,7 +517,7 @@
alpha = 255
range = 13
incorporeal_move = 0
- src << "You switch to combat mode."
+ to_chat(src, "You switch to combat mode.")
toggle = FALSE
else
ranged = 0
@@ -532,17 +526,17 @@
alpha = 60
range = 255
incorporeal_move = 1
- src << "You switch to scout mode."
+ to_chat(src, "You switch to scout mode.")
toggle = TRUE
else
- src << "You have to be recalled to toggle modes!"
+ to_chat(src, "You have to be recalled to toggle modes!")
/mob/living/simple_animal/hostile/guardian/ranged/ToggleLight()
if(see_invisible == SEE_INVISIBLE_MINIMUM)
- src << "You deactivate your night vision."
+ to_chat(src, "You deactivate your night vision.")
see_invisible = SEE_INVISIBLE_LIVING
else
- src << "You activate your night vision."
+ to_chat(src, "You activate your night vision.")
see_invisible = SEE_INVISIBLE_MINIMUM
/mob/living/simple_animal/hostile/guardian/ranged/verb/Snare()
@@ -555,9 +549,9 @@
S.spawner = src
S.name = "[get_area(snare_loc)] trap ([rand(1, 1000)])"
src.snares |= S
- src << "Surveillance trap deployed!"
+ to_chat(src, "Surveillance trap deployed!")
else
- src << "You have too many traps deployed. Delete some first."
+ to_chat(src, "You have too many traps deployed. Delete some first.")
/mob/living/simple_animal/hostile/guardian/ranged/verb/DisarmSnare()
set name = "Remove Surveillance Trap"
@@ -567,7 +561,7 @@
if(picked_snare)
src.snares -= picked_snare
qdel(picked_snare)
- src << "Snare disarmed."
+ to_chat(src, "Snare disarmed.")
/obj/item/effect/snare
name = "snare"
@@ -580,11 +574,11 @@
if(istype(AM, /mob/living/))
var/turf/snare_loc = get_turf(src.loc)
if(spawner)
- spawner << "[AM] has crossed your surveillance trap at [get_area(snare_loc)]."
+ to_chat(spawner, "[AM] has crossed your surveillance trap at [get_area(snare_loc)].")
if(istype(spawner, /mob/living/simple_animal/hostile/guardian))
var/mob/living/simple_animal/hostile/guardian/G = spawner
if(G.summoner)
- G.summoner << "[AM] has crossed your surveillance trap at [get_area(snare_loc)]."
+ to_chat(G.summoner, "[AM] has crossed your surveillance trap at [get_area(snare_loc)].")
////Bomb
@@ -603,19 +597,19 @@
if(!istype(A))
return
if(src.loc == summoner)
- src << "You must be manifested to create bombs!"
+ to_chat(src, "You must be manifested to create bombs!")
return
if(istype(A, /obj/))
if(bomb_cooldown <= world.time && !stat)
var/obj/item/weapon/guardian_bomb/B = new /obj/item/weapon/guardian_bomb(get_turf(A))
- src << "Success! Bomb on \the [A] armed!"
+ to_chat(src, "Success! Bomb on \the [A] armed!")
if(summoner)
- summoner << "Your guardian has primed \the [A] to explode!"
+ to_chat(summoner, "Your guardian has primed \the [A] to explode!")
bomb_cooldown = world.time + 200
B.spawner = src
B.disguise (A)
else
- src << "Your powers are on cooldown! You must wait 20 seconds between bombs."
+ to_chat(src, "Your powers are on cooldown! You must wait 20 seconds between bombs.")
/obj/item/weapon/guardian_bomb
name = "bomb"
@@ -633,19 +627,19 @@
spawn(600)
if(src)
stored_obj.loc = get_turf(src.loc)
- spawner << "Failure! Your trap on \the [stored_obj] didn't catch anyone this time."
+ to_chat(spawner, "Failure! Your trap on \the [stored_obj] didn't catch anyone this time.")
qdel(src)
/obj/item/weapon/guardian_bomb/proc/detonate(var/mob/living/user)
- user << "The [src] was boobytrapped!"
+ to_chat(user, "The [src] was boobytrapped!")
if(istype(spawner, /mob/living/simple_animal/hostile/guardian))
var/mob/living/simple_animal/hostile/guardian/G = spawner
if(user == G.summoner)
- user << "You knew this because of your link with your guardian, so you smartly defuse the bomb."
+ to_chat(user, "You knew this because of your link with your guardian, so you smartly defuse the bomb.")
stored_obj.loc = get_turf(src.loc)
qdel(src)
return
- spawner << "Success! Your trap on \the [src] caught [user]!"
+ to_chat(spawner, "Success! Your trap on \the [src] caught [user]!")
stored_obj.loc = get_turf(src.loc)
playsound(get_turf(src),'sound/effects/Explosion2.ogg', 200, 1)
user.ex_act(2)
@@ -662,7 +656,7 @@
/obj/item/weapon/guardian_bomb/examine(mob/user)
stored_obj.examine(user)
if(get_dist(user,src)<=2)
- user << "Looks odd!"
+ to_chat(user, "Looks odd!")
////////Creation
@@ -685,16 +679,16 @@
/obj/item/weapon/guardiancreator/attack_self(mob/living/user)
for(var/mob/living/simple_animal/hostile/guardian/G in living_mob_list)
if (G.summoner == user)
- user << "You already have a [mob_name]!"
+ to_chat(user, "You already have a [mob_name]!")
return
if(user.mind && user.mind.changeling)
- user << "[ling_failure]"
+ to_chat(user, "[ling_failure]")
return
if(used == TRUE)
- user << "[used_message]"
+ to_chat(user, "[used_message]")
return
used = TRUE
- user << "[use_message]"
+ to_chat(user, "[use_message]")
var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as the [mob_name] of [user.real_name]?", ROLE_GUARDIAN, 0, 100)
var/mob/dead/observer/theghost = null
@@ -702,7 +696,7 @@
theghost = pick(candidates)
spawn_guardian(user, theghost.key)
else
- user << "[failure_message]"
+ to_chat(user, "[failure_message]")
used = FALSE
@@ -734,10 +728,10 @@
G.summoner = user
G.summoned = TRUE
G.key = key
- G << "You are a [mob_name] bound to serve [user.real_name]."
- G << "You are capable of manifesting or recalling to your master with verbs in the Guardian tab. You will also find a verb to communicate with them privately there."
- G << "While personally invincible, you will die if [user.real_name] does, and any damage dealt to you will have a portion passed on to them as you feed upon them to sustain yourself."
- G << "[G.playstyle_string]"
+ to_chat(G, "You are a [mob_name] bound to serve [user.real_name].")
+ to_chat(G, "You are capable of manifesting or recalling to your master with verbs in the Guardian tab. You will also find a verb to communicate with them privately there.")
+ to_chat(G, "While personally invincible, you will die if [user.real_name] does, and any damage dealt to you will have a portion passed on to them as you feed upon them to sustain yourself.")
+ to_chat(G, "[G.playstyle_string]")
G.faction = user.faction
user.verbs += /mob/living/proc/guardian_comm
user.verbs += /mob/living/proc/guardian_recall
@@ -758,7 +752,7 @@
G.icon_state = "[theme][color]"
G.icon_dead = "[theme][color]"
- user << "[G.magic_fluff_string]."
+ to_chat(user, "[G.magic_fluff_string].")
if("tech")
color = pick("Rose", "Peony", "Lily", "Daisy", "Zinnia", "Ivy", "Iris", "Petunia", "Violet", "Lilac", "Orchid") //technically not colors, just flowers that can be specific colors
picked_name = pick("Gallium", "Indium", "Thallium", "Bismuth", "Aluminium", "Mercury", "Iron", "Silver", "Zinc", "Titanium", "Chromium", "Nickel", "Platinum", "Tellurium", "Palladium", "Rhodium", "Cobalt", "Osmium", "Tungsten", "Iridium")
@@ -769,12 +763,12 @@
G.icon_state = "[theme][color]"
G.icon_dead = "[theme][color]"
- user << "[G.tech_fluff_string]."
+ to_chat(user, "[G.tech_fluff_string].")
G.speak_emote = list("states")
if("bio")
G.icon = 'icons/mob/mob.dmi'
picked_name = pick("brood", "hive", "nest")
- user << "[G.bio_fluff_string]."
+ to_chat(user, "[G.bio_fluff_string].")
G.name = "[picked_name] swarm"
G.color = picked_color
G.real_name = "[picked_name] swarm"
diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm
index 378ef84990a..f55370f2680 100644
--- a/code/game/gamemodes/miniantags/morph/morph.dm
+++ b/code/game/gamemodes/miniantags/morph/morph.dm
@@ -17,14 +17,7 @@
pass_flags = PASSTABLE
ventcrawler = 2
- min_oxy = 0
- max_oxy = 0
- min_tox = 0
- max_tox = 0
- min_co2 = 0
- max_co2 = 0
- min_n2 = 0
- max_n2 = 0
+ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxHealth = 150
@@ -38,7 +31,7 @@
wander = 0
attacktext = "glomps"
attack_sound = 'sound/effects/blobattack.ogg'
- meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab
+ butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2)
var/morphed = 0
var/atom/movable/form = null
@@ -59,7 +52,7 @@
else
..()
if(get_dist(user,src)<=3)
- user << "It doesn't look quite right..."
+ to_chat(user, "It doesn't look quite right...")
else
..()
return
@@ -88,7 +81,7 @@
if(istype(A) && allowed(A))
assume(A)
else
- src << "Your chameleon skin is still repairing itself!"
+ to_chat(src, "Your chameleon skin is still repairing itself!")
..()
/mob/living/simple_animal/hostile/morph/proc/assume(atom/movable/target)
diff --git a/code/game/gamemodes/miniantags/morph/morph_event.dm b/code/game/gamemodes/miniantags/morph/morph_event.dm
index c0af9c38040..2e11c65078c 100644
--- a/code/game/gamemodes/miniantags/morph/morph_event.dm
+++ b/code/game/gamemodes/miniantags/morph/morph_event.dm
@@ -9,7 +9,7 @@
return kill()
var/mob/C = pick(candidates)
key_of_morph = C.key
-
+
if(!key_of_morph)
return kill()
@@ -22,7 +22,7 @@
player_mind.assigned_role = "Morph"
player_mind.special_role = "Morph"
ticker.mode.traitors |= player_mind
- S << S.playstyle_string
+ to_chat(S, S.playstyle_string)
S << 'sound/magic/Mutate.ogg'
message_admins("[key_of_morph] has been made into morph by an event.")
log_game("[key_of_morph] was spawned as a morph by an event.")
diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm
index 2fa99dd58a6..0e048b85df0 100644
--- a/code/game/gamemodes/miniantags/revenant/revenant.dm
+++ b/code/game/gamemodes/miniantags/revenant/revenant.dm
@@ -62,11 +62,11 @@
revealed = 0
incorporeal_move = 3
invisibility = INVISIBILITY_REVENANT
- src << "You are once more concealed."
+ to_chat(src, "You are once more concealed.")
if(unstun_time && world.time >= unstun_time)
unstun_time = 0
notransform = 0
- src << "You can move again!"
+ to_chat(src, "You can move again!")
update_spooky_icon()
/mob/living/simple_animal/revenant/ex_act(severity)
@@ -86,7 +86,7 @@
return
essence = max(0, essence-amount)
if(essence == 0)
- src << "You feel your essence fraying!"
+ to_chat(src, "You feel your essence fraying!")
@@ -97,9 +97,9 @@
var/rendered = "[src] says, \"[message]\""
for(var/mob/M in mob_list)
if(istype(M, /mob/living/simple_animal/revenant))
- M << rendered
+ to_chat(M, rendered)
if(isobserver(M))
- M << "(F) [rendered]"
+ to_chat(M, "(F) [rendered]")
return
/mob/living/simple_animal/revenant/Stat()
@@ -120,22 +120,23 @@
if(src.mind)
src.mind.wipe_memory()
src << 'sound/effects/ghost.ogg'
- src << "
"
- src << "You are a revenant."
- src << "Your formerly mundane spirit has been infused with alien energies and empowered into a revenant."
- src << "You are not dead, not alive, but somewhere in between. You are capable of limited interaction with both worlds."
- src << "You are invincible and invisible to everyone but other ghosts. Most abilities will reveal you, rendering you vulnerable."
- src << "To function, you are to drain the life essence from humans. This essence is a resource, as well as your health, and will power all of your abilities."
- src << "You do not remember anything of your past lives, nor will you remember anything about this one after your death."
- src << "Be sure to read the wiki page at http://nanotrasen.se/wiki/index.php/Revenant to learn more."
+ to_chat(src, "
")
+ to_chat(src, "You are a revenant.")
+ to_chat(src, "Your formerly mundane spirit has been infused with alien energies and empowered into a revenant.")
+ to_chat(src, "You are not dead, not alive, but somewhere in between. You are capable of limited interaction with both worlds.")
+ to_chat(src, "You are invincible and invisible to everyone but other ghosts. Most abilities will reveal you, rendering you vulnerable.")
+ to_chat(src, "To function, you are to drain the life essence from humans. This essence is a resource, as well as your health, and will power all of your abilities.")
+ to_chat(src, "You do not remember anything of your past lives, nor will you remember anything about this one after your death.")
+ to_chat(src, "Be sure to read the wiki page at http://nanotrasen.se/wiki/index.php/Revenant to learn more.")
+
var/datum/objective/revenant/objective = new
objective.owner = src.mind
src.mind.objectives += objective
- src << "Objective #1: [objective.explanation_text]"
+ to_chat(src, "Objective #1: [objective.explanation_text]")
var/datum/objective/revenantFluff/objective2 = new
objective2.owner = src.mind
src.mind.objectives += objective2
- src << "Objective #2: [objective2.explanation_text]"
+ to_chat(src, "Objective #2: [objective2.explanation_text]")
ticker.mode.traitors |= src.mind //Necessary for announcing
if(!src.giveSpells())
message_admins("Revenant was created but has no mind. Trying again in five seconds.")
@@ -168,7 +169,7 @@
ghost_darkness_images -= ghostimage
updateallghostimages()
- src << "NO! No... it's too late, you can feel your essence breaking apart..."
+ to_chat(src, "NO! No... it's too late, you can feel your essence breaking apart...")
notransform = 1
revealed = 1
invisibility = 0
@@ -204,13 +205,13 @@
return
var/turf/T = get_turf(src)
if(istype(T, /turf/simulated/wall))
- src << "You cannot use abilities from inside of a wall."
+ to_chat(src, "You cannot use abilities from inside of a wall.")
return 0
if(src.inhibited)
- src << "Your powers have been suppressed by nulling energy!"
+ to_chat(src, "Your powers have been suppressed by nulling energy!")
return 0
if(!src.change_essence_amount(essence_cost, 1))
- src << "You lack the essence to use that ability."
+ to_chat(src, "You lack the essence to use that ability.")
return 0
return 1
@@ -224,9 +225,9 @@
essence_accumulated = max(0, essence_accumulated+essence_amt)
if(!silent)
if(essence_amt > 0)
- src << "Gained [essence_amt]E from [source]."
+ to_chat(src, "Gained [essence_amt]E from [source].")
else
- src << "Lost [essence_amt]E from [source]."
+ to_chat(src, "Lost [essence_amt]E from [source].")
return 1
/mob/living/simple_animal/revenant/proc/reveal(time)
@@ -238,10 +239,10 @@
invisibility = 0
incorporeal_move = 0
if(!unreveal_time)
- src << "You have been revealed!"
+ to_chat(src, "You have been revealed!")
unreveal_time = world.time + time
else
- src << "You have been revealed!"
+ to_chat(src, "You have been revealed!")
unreveal_time = unreveal_time + time
update_spooky_icon()
@@ -252,10 +253,10 @@
return
notransform = 1
if(!unstun_time)
- src << "You cannot move!"
+ to_chat(src, "You cannot move!")
unstun_time = world.time + time
else
- src << "You cannot move!"
+ to_chat(src, "You cannot move!")
unstun_time = unstun_time + time
update_spooky_icon()
@@ -350,9 +351,9 @@
/obj/item/weapon/ectoplasm/revenant/examine(mob/user)
..(user)
if(inert)
- user << "It seems inert."
+ to_chat(user, "It seems inert.")
else if(reforming)
- user << "It is shifting and distorted. It would be wise to destroy this."
+ to_chat(user, "It is shifting and distorted. It would be wise to destroy this.")
/obj/item/weapon/ectoplasm/revenant/proc/reform()
if(inert || !src)
diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm
index 54fd9999535..d836511fc42 100644
--- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm
+++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm
@@ -29,47 +29,47 @@
if(!castcheck(0))
return
if(draining)
- src << "You are already siphoning the essence of a soul!"
+ to_chat(src, "You are already siphoning the essence of a soul!")
return
if(target in drained_mobs)
- src << "[target]'s soul is dead and empty."
+ to_chat(src, "[target]'s soul is dead and empty.")
return
if(!target.stat)
- src << "This being's soul is too strong to harvest."
+ to_chat(src, "This being's soul is too strong to harvest.")
if(prob(10))
- target << "You feel as if you are being watched."
+ to_chat(target, "You feel as if you are being watched.")
return
draining = 1
essence_drained = rand(15, 20)
- src << "You search for the soul of [target]."
+ to_chat(src, "You search for the soul of [target].")
if(do_after(src, 10, 0, target = target)) //did they get deleted in that second?
if(target.ckey)
- src << "Their soul burns with intelligence."
+ to_chat(src, "Their soul burns with intelligence.")
essence_drained += rand(20, 30)
if(target.stat != DEAD)
- src << "Their soul blazes with life!"
+ to_chat(src, "Their soul blazes with life!")
essence_drained += rand(40, 50)
else
- src << "Their soul is weak and faltering."
+ to_chat(src, "Their soul is weak and faltering.")
if(do_after(src, 20, 0, target = target)) //did they get deleted NOW?
switch(essence_drained)
if(1 to 30)
- src << "[target] will not yield much essence. Still, every bit counts."
+ to_chat(src, "[target] will not yield much essence. Still, every bit counts.")
if(30 to 70)
- src << "[target] will yield an average amount of essence."
+ to_chat(src, "[target] will yield an average amount of essence.")
if(70 to 90)
- src << "Such a feast! [target] will yield much essence to you."
+ to_chat(src, "Such a feast! [target] will yield much essence to you.")
if(90 to INFINITY)
- src << "Ah, the perfect soul. [target] will yield massive amounts of essence to you."
+ to_chat(src, "Ah, the perfect soul. [target] will yield massive amounts of essence to you.")
if(do_after(src, 20, 0, target = target)) //how about now
if(!target.stat)
- src << "They are now powerful enough to fight off your draining."
- target << "You feel something tugging across your body before subsiding."
+ to_chat(src, "They are now powerful enough to fight off your draining.")
+ to_chat(target, "You feel something tugging across your body before subsiding.")
draining = 0
return //hey, wait a minute...
- src << "You begin siphoning essence from [target]'s soul."
+ to_chat(src, "You begin siphoning essence from [target]'s soul.")
if(target.stat != DEAD)
- target << "You feel a horribly unpleasant draining sensation as your grip on life weakens..."
+ to_chat(target, "You feel a horribly unpleasant draining sensation as your grip on life weakens...")
icon_state = "revenant_draining"
reveal(27)
stun(27)
@@ -80,14 +80,14 @@
if(essence_drained > 90)
essence_regen_cap += 25
perfectsouls += 1
- src << "The perfection of [target]'s soul has increased your maximum essence level. Your new maximum essence is [essence_regen_cap]."
- src << "[target]'s soul has been considerably weakened and will yield no more essence for the time being."
+ to_chat(src, "The perfection of [target]'s soul has increased your maximum essence level. Your new maximum essence is [essence_regen_cap].")
+ to_chat(src, "[target]'s soul has been considerably weakened and will yield no more essence for the time being.")
target.visible_message("[target] slumps onto the ground.", \
"Violets lights, dancing in your vision, getting clo--")
drained_mobs.Add(target)
target.death(0)
else
- src << "[target ? "[target] has":"They have"] been drawn out of your grasp. The link has been broken."
+ to_chat(src, "[target ? "[target] has":"They have"] been drawn out of your grasp. The link has been broken.")
draining = 0
essence_drained = 0
if(target) //Wait, target is WHERE NOW?
@@ -95,7 +95,7 @@
"Violets lights, dancing in your vision, receding--")
return
else
- src << "You are not close enough to siphon [target ? "[target]'s":"their"] soul. The link has been broken."
+ to_chat(src, "You are not close enough to siphon [target ? "[target]'s":"their"] soul. The link has been broken.")
draining = 0
essence_drained = 0
return
@@ -132,8 +132,8 @@
charge_counter = charge_max
return
log_say("RevenantTransmit: [key_name(user)]->[key_name(M)] : [msg]")
- usr << "You transmit to [M]: [msg]"
- M << "An alien voice resonates from all around... [msg]"
+ to_chat(usr, "You transmit to [M]: [msg]")
+ to_chat(M, "An alien voice resonates from all around... [msg]")
/obj/effect/proc_holder/spell/aoe_turf/revenant
@@ -172,7 +172,7 @@
charge_counter = charge_max
return 0
name = "[initial(name)] ([cast_amount]E)"
- user << "You have unlocked [initial(name)]!"
+ to_chat(user, "You have unlocked [initial(name)]!")
panel = "Revenant Abilities"
locked = 0
charge_counter = charge_max
@@ -248,7 +248,7 @@
T.flags -= NOJAUNT
new/obj/effect/overlay/temp/revenant(T)
for(var/mob/living/carbon/human/human in T.contents)
- human << "You suddenly feel [pick("sick and tired", "tired and confused", "nauseated", "dizzy")]."
+ to_chat(human, "You suddenly feel [pick("sick and tired", "tired and confused", "nauseated", "dizzy")].")
human.adjustStaminaLoss(stamdamage)
human.adjustToxLoss(toxdamage)
human.confused += confusion
@@ -291,18 +291,18 @@
if(attempt_cast(user))
for(var/turf/T in targets)
spawn(0)
- for(var/obj/machinery/bot/bot in T.contents)
+ for(var/mob/living/simple_animal/bot/bot in T.contents)
if(!bot.emagged)
new/obj/effect/overlay/temp/revenant(bot.loc)
bot.locked = 0
bot.open = 1
- bot.Emag(null)
+ bot.emag_act(null)
for(var/mob/living/carbon/human/human in T.contents)
- human << "You feel [pick("your sense of direction flicker out", "a stabbing pain in your head", "your mind fill with static")]."
+ to_chat(human, "You feel [pick("your sense of direction flicker out", "a stabbing pain in your head", "your mind fill with static")].")
new/obj/effect/overlay/temp/revenant(human.loc)
human.emp_act(1)
for(var/obj/thing in T.contents)
- if(istype(thing, /obj/machinery/power/apc) || istype(thing, /obj/machinery/power/smes) || istype(thing, /obj/machinery/bot)) //Doesn't work on dominators, SMES and APCs, to prevent kekkery
+ if(istype(thing, /obj/machinery/power/apc) || istype(thing, /obj/machinery/power/smes)) //Doesn't work on dominators, SMES and APCs, to prevent kekkery
continue
if(prob(20))
if(prob(50))
diff --git a/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm b/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm
index a057a696422..bab7c597a69 100644
--- a/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm
+++ b/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm
@@ -7,7 +7,7 @@
if(iscarbon(src))
var/mob/living/carbon/C = src
if(C.l_hand || C.r_hand)
- C << "You may not hold items while blood crawling!"
+ to_chat(C, "You may not hold items while blood crawling!")
return 0
var/obj/item/weapon/bloodcrawl/B1 = new(C)
var/obj/item/weapon/bloodcrawl/B2 = new(C)
@@ -42,17 +42,19 @@
var/mob/living/victim = pulling
if(victim.stat == CONSCIOUS)
visible_message("[victim] kicks free of [B] just before entering it!")
+ stop_pulling()
else
victim.forceMove(holder)//holder
victim.emote("scream")
visible_message("[src] drags [victim] into [B]!")
kidnapped = victim
+ stop_pulling()
flick("jaunt",animation)
loc = holder
holder = holder
if(kidnapped)
- src << "You begin to feast on [kidnapped]. You can not move while you are doing this."
+ to_chat(src, "You begin to feast on [kidnapped]. You can not move while you are doing this.")
visible_message("Loud eating sounds come from the blood...")
sleep(6)
if(animation)
@@ -61,7 +63,7 @@
playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
sleep(30)
if(kidnapped)
- src << "You devour [kidnapped]. Your health is fully restored."
+ to_chat(src, "You devour [kidnapped]. Your health is fully restored.")
adjustBruteLoss(-1000)
adjustFireLoss(-1000)
adjustOxyLoss(-1000)
@@ -71,7 +73,7 @@
var/mob/living/simple_animal/slaughter/demon = src
demon.devoured++
- kidnapped << "You feel teeth sink into your flesh, and the--"
+ to_chat(kidnapped, "You feel teeth sink into your flesh, and the--")
kidnapped.adjustBruteLoss(1000)
kidnapped.forceMove(src)
demon.consumed_mobs.Add(kidnapped)
@@ -79,7 +81,7 @@
kidnapped.ghostize()
qdel(kidnapped)
else
- src << "You happily devour... nothing? Your meal vanished at some point!"
+ to_chat(src, "You happily devour... nothing? Your meal vanished at some point!")
else
sleep(6)
if (animation)
@@ -94,48 +96,53 @@
flags = NODROP|ABSTRACT
/mob/living/proc/phasein(var/obj/effect/decal/cleanable/B)
+
if(notransform)
- src << "Finish eating first!"
+ to_chat(src, "Finish eating first!")
return 0
- else
- var/atom/movable/overlay/animation = new /atom/movable/overlay( B.loc )
- animation.name = "odd blood"
- animation.density = 0
- animation.anchored = 1
- animation.icon = 'icons/mob/mob.dmi'
- animation.icon_state = "jauntup" //Paradise Port:I reversed the jaunt animation so it looks like its rising up
- animation.layer = 5
- animation.master = B.loc
- animation.dir = dir
- B.visible_message("[B] starts to bubble...")
- if(!do_after(src, 20, target = B))
- return
- if(!B)
- return
- forceMove(B.loc)
- client.eye = src
- if (prob(25) && istype(src, /mob/living/simple_animal/slaughter))
- var/list/voice = list('sound/hallucinations/behind_you1.ogg','sound/hallucinations/im_here1.ogg','sound/hallucinations/turn_around1.ogg','sound/hallucinations/i_see_you1.ogg')
- playsound(get_turf(src), pick(voice),50, 1, -1)
- visible_message("\The [src] rises out of \the [B]!")
- playsound(get_turf(src), 'sound/misc/exit_blood.ogg', 100, 1, -1)
- flick("jauntup",animation)
- qdel(holder)
- holder = null
- if(iscarbon(src))
- var/mob/living/carbon/C = src
- for(var/obj/item/weapon/bloodcrawl/BC in C)
- C.flags = null
- C.unEquip(BC)
- qdel(BC)
- var/oldcolor = color
- color = B.color
- sleep(6)//wait for animation to finish
- if(animation)
- qdel(animation)
- spawn(30)
- color = oldcolor
- return 1
+ B.visible_message("[B] starts to bubble...")
+ if(!do_after(src, 20, target = B))
+ return
+ if(!B)
+ return
+ forceMove(B.loc)
+ client.eye = src
+
+ var/atom/movable/overlay/animation = new /atom/movable/overlay( B.loc )
+ animation.name = "odd blood"
+ animation.density = 0
+ animation.anchored = 1
+ animation.icon = 'icons/mob/mob.dmi'
+ animation.icon_state = "jauntup" //Paradise Port:I reversed the jaunt animation so it looks like its rising up
+ animation.layer = 5
+ animation.master = B.loc
+ animation.dir = dir
+
+ if(prob(25) && istype(src, /mob/living/simple_animal/slaughter))
+ var/list/voice = list('sound/hallucinations/behind_you1.ogg','sound/hallucinations/im_here1.ogg','sound/hallucinations/turn_around1.ogg','sound/hallucinations/i_see_you1.ogg')
+ playsound(get_turf(src), pick(voice),50, 1, -1)
+ visible_message("\The [src] rises out of \the [B]!")
+ playsound(get_turf(src), 'sound/misc/exit_blood.ogg', 100, 1, -1)
+
+ flick("jauntup",animation)
+ qdel(holder)
+ holder = null
+
+ if(iscarbon(src))
+ var/mob/living/carbon/C = src
+ for(var/obj/item/weapon/bloodcrawl/BC in C)
+ C.flags = null
+ C.unEquip(BC)
+ qdel(BC)
+
+ var/oldcolor = color
+ color = B.color
+ sleep(6)//wait for animation to finish
+ if(animation)
+ qdel(animation)
+ spawn(30)
+ color = oldcolor
+ return 1
/obj/effect/dummy/slaughter //Can't use the wizard one, blocked by jaunt/slow
name = "odd blood"
diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm
index 9d6e3959963..6f97740f8d5 100644
--- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm
+++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm
@@ -18,14 +18,7 @@
stop_automated_movement = 1
status_flags = CANPUSH
attack_sound = 'sound/misc/demon_attack1.ogg'
- min_oxy = 0
- max_oxy = INFINITY
- min_tox = 0
- max_tox = INFINITY
- min_co2 = 0
- max_co2 = INFINITY
- min_n2 = 0
- max_n2 = INFINITY
+ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = INFINITY
faction = list("slaughter")
@@ -62,8 +55,8 @@
if(istype(loc, /obj/effect/dummy/slaughter))
bloodspell.phased = 1
if(mind)
- src << src.playstyle_string
- src << "You are not currently in the same plane of existence as the station. Ctrl+Click a blood pool to manifest."
+ to_chat(src, src.playstyle_string)
+ to_chat(src, "You are not currently in the same plane of existence as the station. Ctrl+Click a blood pool to manifest.")
src << 'sound/misc/demon_dies.ogg'
mind.current.verbs += /mob/living/simple_animal/slaughter/proc/slaughterWhisper
if(!(vialspawned))
@@ -75,8 +68,8 @@
//Paradise Port:I added the objective for one spawned like this
mind.objectives += objective
mind.objectives += fluffObjective
- src << "Objective #[1]: [objective.explanation_text]"
- src << "Objective #[2]: [fluffObjective.explanation_text]"
+ to_chat(src, "Objective #[1]: [objective.explanation_text]")
+ to_chat(src, "Objective #[2]: [fluffObjective.explanation_text]")
/mob/living/simple_animal/slaughter/Life()
@@ -107,7 +100,7 @@
/mob/living/simple_animal/slaughter/phasein()
- ..()
+ . = ..()
speed = 0
boost = world.time + 60
@@ -132,8 +125,8 @@
if(!(msg))
return
log_say("Slaughter Demon Transmit: [key_name(usr)]->[key_name(M)]: [msg]")
- usr << "You whisper to [M]: [msg]"
- M << "Suddenly a strange, demonic voice resonates in your head... [msg]"
+ to_chat(usr, "You whisper to [M]: [msg]")
+ to_chat(M, "Suddenly a strange, demonic voice resonates in your head... [msg]")
for(var/mob/dead/observer/G in player_list)
G.show_message("Demonic message from [usr] ([ghost_follow_link(usr, ghost=G)]) to [M] ([ghost_follow_link(M, ghost=G)]): [msg]")
@@ -168,10 +161,10 @@
"You feel a strange power seep into your body... you have absorbed the demon's blood-travelling powers!")
user.bloodcrawl = BLOODCRAWL
else if(user.bloodcrawl == BLOODCRAWL)
- user << "You feel diffr- CONSUME THEM! "
+ to_chat(user, "You feel diffr- CONSUME THEM! ")
user.bloodcrawl = BLOODCRAWL_EAT
else
- user <<"...and you don't feel any different."
+ to_chat(user, "...and you don't feel any different.")
user.drop_item()
insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E
diff --git a/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm b/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm
index cf7179f539d..e8afea4e1d0 100644
--- a/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm
+++ b/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm
@@ -32,7 +32,7 @@ datum/directive/bluespace_contagion/initialize()
infected_names+="[candidate.mind.assigned_role] [candidate.mind.name]"
special_orders = list(
- "Quarantine these personnel: [list2text(infected_names, ", ")].",
+ "Quarantine these personnel: [jointext(infected_names, ", ")].",
"Allow one hour for a cure to be manufactured.",
"If no cure arrives after that time, execute and burn the infected.")
diff --git a/code/game/gamemodes/mutiny/directives/vox_heist.dm b/code/game/gamemodes/mutiny/directives/vox_heist.dm
index 52e8d0771ef..f652f7016d2 100644
--- a/code/game/gamemodes/mutiny/directives/vox_heist.dm
+++ b/code/game/gamemodes/mutiny/directives/vox_heist.dm
@@ -69,7 +69,7 @@ datum/directive/vox_heist/initialize()
sympathizer_names.Add("[candidate.mind.assigned_role] [candidate.mind.name]")
if(sympathizers.len)
- special_orders.Add("Brig the following sympathizers: [list2text(sympathizer_names, ", ")]")
+ special_orders.Add("Brig the following sympathizers: [jointext(sympathizer_names, ", ")]")
datum/directive/vox_heist/meets_prerequisites()
var/list/candidates = get_vox_candidates()
diff --git a/code/game/gamemodes/mutiny/emergency_authentication_device.dm b/code/game/gamemodes/mutiny/emergency_authentication_device.dm
index 2a48ac8c3b7..168f0049560 100644
--- a/code/game/gamemodes/mutiny/emergency_authentication_device.dm
+++ b/code/game/gamemodes/mutiny/emergency_authentication_device.dm
@@ -45,7 +45,7 @@
/obj/machinery/emergency_authentication_device/attack_hand(mob/user)
if(activated)
- user << "\blue \The [src] is already active!"
+ to_chat(user, "\blue \The [src] is already active!")
return
if(!mode.current_directive.directives_complete())
@@ -55,7 +55,7 @@
check_key_existence()
if(captains_key && secondary_key)
activated = 1
- user << "\blue You activate \the [src]!"
+ to_chat(user, "\blue You activate \the [src]!")
state("Command acknowledged. Initiating quantum entanglement relay to Nanotrasen High Command.")
launch_shuttle()
return
@@ -77,7 +77,7 @@
/obj/machinery/emergency_authentication_device/attackby(obj/item/weapon/O, mob/user, params)
if(activated)
- user << "\blue \The [src] is already active!"
+ to_chat(user, "\blue \The [src] is already active!")
return
if(!mode.current_directive.directives_complete())
@@ -107,5 +107,6 @@
..()
/obj/machinery/emergency_authentication_device/examine(mob/user)
- user << {"This is a specialized communications device that is able to instantly send a message to Nanotrasen High Command via quantum entanglement with a sister device at CentComm.
- The EAD's status is [get_status()]."}
+ to_chat(user, {"This is a specialized communications device that is able to instantly send a message to Nanotrasen High Command via quantum entanglement
+ with a sister device at CentComm.
+ The EAD's status is [get_status()]."})
diff --git a/code/game/gamemodes/mutiny/key_pinpointer.dm b/code/game/gamemodes/mutiny/key_pinpointer.dm
index 4d4596ab229..03f157be2ba 100644
--- a/code/game/gamemodes/mutiny/key_pinpointer.dm
+++ b/code/game/gamemodes/mutiny/key_pinpointer.dm
@@ -14,22 +14,22 @@
active = 1
target = mutiny.captains_key
point_at(target)
- usr << "\blue You calibrate \the [src] to locate the Captain's Authentication Key."
+ to_chat(usr, "\blue You calibrate \the [src] to locate the Captain's Authentication Key.")
if (1)
mode = 2
target = mutiny.secondary_key
- usr << "\blue You calibrate \the [src] to locate the Emergency Secondary Authentication Key."
+ to_chat(usr, "\blue You calibrate \the [src] to locate the Emergency Secondary Authentication Key.")
else
mode = 0
active = 0
icon_state = "pinoff"
- usr << "\blue You switch \the [src] off."
+ to_chat(usr, "\blue You switch \the [src] off.")
/obj/item/weapon/pinpointer/advpinpointer/auth_key/examine(mob/user)
switch(mode)
if (1)
- user << "Is is calibrated for the Captain's Authentication Key."
+ to_chat(user, "Is is calibrated for the Captain's Authentication Key.")
if (2)
- user << "It is calibrated for the Emergency Secondary Authentication Key."
+ to_chat(user, "It is calibrated for the Emergency Secondary Authentication Key.")
else
- user << "It is switched off."
+ to_chat(user, "It is switched off.")
diff --git a/code/game/gamemodes/mutiny/mutiny.dm b/code/game/gamemodes/mutiny/mutiny.dm
index e3edc521f33..e08a336997a 100644
--- a/code/game/gamemodes/mutiny/mutiny.dm
+++ b/code/game/gamemodes/mutiny/mutiny.dm
@@ -91,7 +91,7 @@ datum/game_mode/mutiny
var/list/candidates[0]
for(var/T in subtypesof(/datum/directive))
var/datum/directive/D = new T(src)
-// world << D.name
+// to_chat(world, D.name)
if (D.meets_prerequisites())
candidates+=D
return candidates
@@ -126,7 +126,7 @@ datum/game_mode/mutiny
proc/equip_head(datum/mind/head, faction, proc/recruitment_verb)
var/mob/living/carbon/human/H = head.current
- H << "You are the Head [capitalize(faction)]!"
+ to_chat(H, "You are the Head [capitalize(faction)]!")
head.special_role = "head_[faction]"
var/slots = get_equipment_slots()
@@ -151,8 +151,8 @@ datum/game_mode/mutiny
proc/add_faction(datum/mind/M, faction, list/faction_list)
if(!can_be_recruited(M, faction))
- M.current << "\red Recruitment canceled; your role has already changed."
- head_mutineer.current << "\red Could not recruit [M]. Their role has changed."
+ to_chat(M.current, "\red Recruitment canceled; your role has already changed.")
+ to_chat(head_mutineer.current, "\red Could not recruit [M]. Their role has changed.")
return
if(M in loyalists)
@@ -165,11 +165,11 @@ datum/game_mode/mutiny
faction_list+=M
if(faction == "mutineer")
- M.current << fluff.mutineer_tag("You have joined the mutineers!")
- head_mutineer.current << fluff.mutineer_tag("[M] has joined the mutineers!")
+ to_chat(M.current, fluff.mutineer_tag("You have joined the mutineers!"))
+ to_chat(head_mutineer.current, fluff.mutineer_tag("[M] has joined the mutineers!"))
else
- M.current << fluff.loyalist_tag("You have joined the loyalists!")
- head_loyalist.current << fluff.loyalist_tag("[M] has joined the loyalists!")
+ to_chat(M.current, fluff.loyalist_tag("You have joined the loyalists!"))
+ to_chat(head_loyalist.current, fluff.loyalist_tag("[M] has joined the loyalists!"))
update_icon(M)
@@ -211,23 +211,23 @@ datum/game_mode/mutiny
return M.special_role == "loyalist"
proc/round_outcome()
- world << "Breaking News
"
+ to_chat(world, "Breaking News
")
if (was_bloodbath())
- world << fluff.no_victory()
+ to_chat(world, fluff.no_victory())
return
var/directives_completed = current_directive.directives_complete()
var/ead_activated = ead.activated
if (directives_completed && ead_activated)
- world << fluff.loyalist_major_victory()
+ to_chat(world, fluff.loyalist_major_victory())
else if (directives_completed && !ead_activated)
- world << fluff.loyalist_minor_victory()
+ to_chat(world, fluff.loyalist_minor_victory())
else if (!directives_completed && ead_activated)
- world << fluff.mutineer_minor_victory()
+ to_chat(world, fluff.mutineer_minor_victory())
else if (!directives_completed && !ead_activated)
- world << fluff.mutineer_major_victory()
+ to_chat(world, fluff.mutineer_major_victory())
- world << sound('sound/machines/twobeep.ogg')
+ to_chat(world, sound('sound/machines/twobeep.ogg'))
proc/update_all_icons()
spawn(0)
@@ -266,17 +266,17 @@ datum/game_mode/mutiny
/datum/game_mode/mutiny/pre_setup()
var/list/loyalist_candidates = get_head_loyalist_candidates()
if(!loyalist_candidates || loyalist_candidates.len == 0)
- world << "\red Mutiny mode aborted: no valid candidates for head loyalist."
+ to_chat(world, "\red Mutiny mode aborted: no valid candidates for head loyalist.")
return 0
var/list/mutineer_candidates = get_head_mutineer_candidates()
if(!mutineer_candidates || mutineer_candidates.len == 0)
- world << "\red Mutiny mode aborted: no valid candidates for head mutineer."
+ to_chat(world, "\red Mutiny mode aborted: no valid candidates for head mutineer.")
return 0
var/list/directive_candidates = get_directive_candidates()
if(!directive_candidates || directive_candidates.len == 0)
- world << "\red Mutiny mode aborted: no valid candidates for Directive X."
+ to_chat(world, "\red Mutiny mode aborted: no valid candidates for Directive X.")
return 0
head_loyalist = pick(loyalist_candidates)
@@ -316,11 +316,11 @@ datum/game_mode/mutiny
candidates += P
if(!candidates.len)
- src << "\red You aren't close enough to anybody that can be recruited."
+ to_chat(src, "\red You aren't close enough to anybody that can be recruited.")
return
if(world.time < mode.recruit_loyalist_cooldown)
- src << "\red Wait [MUTINY_RECRUITMENT_COOLDOWN] seconds before recruiting again."
+ to_chat(src, "\red Wait [MUTINY_RECRUITMENT_COOLDOWN] seconds before recruiting again.")
return
mode.recruit_loyalist_cooldown = world.time + (MUTINY_RECRUITMENT_COOLDOWN SECONDS)
@@ -328,7 +328,7 @@ datum/game_mode/mutiny
var/mob/living/carbon/human/M = input("Select a person to recruit", "Loyalist recruitment", null) as mob in candidates
if (M)
- src << "Attempting to recruit [M]..."
+ to_chat(src, "Attempting to recruit [M]...")
log_admin("[key_name(src)] attempted to recruit [M] as a loyalist.")
message_admins("\red [key_name_admin(src)] attempted to recruit [M] as a loyalist.")
@@ -336,8 +336,8 @@ datum/game_mode/mutiny
if(choice == "Yes")
mode.add_loyalist(M.mind)
else if(choice == "No")
- M << "\red You declined to join the loyalists."
- mode.head_loyalist.current << "\red [M] declined to support the loyalists."
+ to_chat(M, "\red You declined to join the loyalists.")
+ to_chat(mode.head_loyalist.current, "\red [M] declined to support the loyalists.")
/mob/living/carbon/human/proc/recruit_mutineer()
set name = "Recruit Mutineer"
@@ -353,11 +353,11 @@ datum/game_mode/mutiny
candidates += P
if(!candidates.len)
- src << "\red You aren't close enough to anybody that can be recruited."
+ to_chat(src, "\red You aren't close enough to anybody that can be recruited.")
return
if(world.time < mode.recruit_mutineer_cooldown)
- src << "\red Wait [MUTINY_RECRUITMENT_COOLDOWN] seconds before recruiting again."
+ to_chat(src, "\red Wait [MUTINY_RECRUITMENT_COOLDOWN] seconds before recruiting again.")
return
mode.recruit_mutineer_cooldown = world.time + (MUTINY_RECRUITMENT_COOLDOWN SECONDS)
@@ -365,7 +365,7 @@ datum/game_mode/mutiny
var/mob/living/carbon/human/M = input("Select a person to recruit", "Mutineer recruitment", null) as mob in candidates
if (M)
- src << "Attempting to recruit [M]..."
+ to_chat(src, "Attempting to recruit [M]...")
log_admin("[key_name(src)] attempted to recruit [M] as a mutineer.")
message_admins("\red [key_name_admin(src)] attempted to recruit [M] as a mutineer.")
@@ -373,8 +373,8 @@ datum/game_mode/mutiny
if(choice == "Yes")
mode.add_mutineer(M.mind)
else if(choice == "No")
- M << "\red You declined to join the mutineers."
- mode.head_mutineer.current << "\red [M] declined to support the mutineers."
+ to_chat(M, "\red You declined to join the mutineers.")
+ to_chat(mode.head_mutineer.current, "\red [M] declined to support the mutineers.")
/proc/get_mutiny_mode()
if(!ticker || !istype(ticker.mode, /datum/game_mode/mutiny))
diff --git a/code/game/gamemodes/mutiny/mutiny_fluff.dm b/code/game/gamemodes/mutiny/mutiny_fluff.dm
index f25e9978e33..b67635f0724 100644
--- a/code/game/gamemodes/mutiny/mutiny_fluff.dm
+++ b/code/game/gamemodes/mutiny/mutiny_fluff.dm
@@ -72,8 +72,8 @@ They don't care about us they only care about WEALTH and POWER... Share this mes
Be safe, friend.\" (Unable to Reply)
The crew will be divided by their sense of ethics when a morally turbulent emergency directive arrives with an incomplete command validation code.
The [loyalist_tag("Head Loyalist")] is the Captain, who carries the [loyalist_tag("Captain's Authentication Key")] at all times.
The [mutineer_tag("Head Mutineer")] is a random Head of Staff who carries the [mutineer_tag("Emergency Secondary Authentication Key")].
Loyalists - Follow the Head Loyalist in carrying out [loyalist_tag("Nanotrasen's directives")] then activate the EAD.
Mutineers - Prevent the completion of the [mutineer_tag("improperly validated directives")] and the activation of the EAD.
-
| - [item.cost] Tickets - | -- LOCKED. - | - + dat += {" ++ [item.cost] Tickets + | + "} dat += {" @@ -202,9 +179,9 @@ td.cost.toomuch { updateUsrDialog() return if(!global_prizes.PlaceOrder(src, itemID)) - usr << "Unable to complete the exchange." + to_chat(usr, "Unable to complete the exchange.") else - usr << "You've successfully purchased the item." + to_chat(usr, "You've successfully purchased the item.") interact(usr) return diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm index c577045ca45..d67adf97bcb 100644 --- a/code/modules/arcade/prize_datums.dm +++ b/code/modules/arcade/prize_datums.dm @@ -32,7 +32,6 @@ var/global/datum/prizes/global_prizes = new var/desc = "This shouldn't show up..." var/typepath = /obj/item/toy/prizeball var/cost = 0 - var/tier_unlocked = 0 //minimum tier needed to unlock the ability to select this prize ////////////////////////////////////// // Tier 1 Prizes // @@ -43,84 +42,72 @@ var/global/datum/prizes/global_prizes = new desc = "A thin balloon for throwing liquid at people." typepath = /obj/item/toy/balloon cost = 10 - tier_unlocked = 1 /datum/prize_item/crayons name = "Box of Crayons" desc = "A six-pack of crayons, just like back in kindergarten." typepath = /obj/item/weapon/storage/fancy/crayons cost = 35 - tier_unlocked = 1 /datum/prize_item/snappops name = "Snap-Pops" desc = "A box of exploding snap-pop fireworks." typepath = /obj/item/weapon/storage/box/snappops cost = 20 - tier_unlocked = 1 /datum/prize_item/spinningtoy name = "Spinning Toy" desc = "Looks like an authentic Singularity!" typepath = /obj/item/toy/spinningtoy cost = 15 - tier_unlocked = 1 /datum/prize_item/blinktoy name = "Blink toy" desc = "Blink. Blink. Blink." typepath = /obj/item/toy/blink cost = 15 - tier_unlocked = 1 /datum/prize_item/dice name = "Dice set" desc = "A set of assorted dice." typepath = /obj/item/weapon/storage/box/dice cost = 20 - tier_unlocked = 1 /datum/prize_item/cards name = "Deck of cards" desc = "Anyone fancy a game of 52-card Pickup?" typepath = /obj/item/toy/cards/deck cost = 25 - tier_unlocked = 1 /datum/prize_item/wallet name = "Colored Wallet" desc = "Brightly colored and big enough for standard issue ID cards." typepath = /obj/item/weapon/storage/wallet/color cost = 50 - tier_unlocked = 1 /datum/prize_item/pet_rock name = "pet rock" desc = "A pet of your very own!" typepath = /obj/item/toy/pet_rock cost = 80 - tier_unlocked = 1 /datum/prize_item/foam_darts name = "Pack of Foam Darts" desc = "A refill pack of 10 foam darts." typepath = /obj/item/weapon/storage/box/foam_darts cost = 20 - tier_unlocked = 1 /datum/prize_item/minigibber name = "Minigibber Toy" desc = "A model of the station gibber. Probably shouldn't stick your fingers in it." typepath = /obj/item/toy/minigibber cost = 60 - tier_unlocked = 1 /datum/prize_item/id_sticker name = "Prisoner ID Sticker" desc = "A sticker that can make any ID look like a prisoner ID." typepath = /obj/item/weapon/id_decal/prisoner cost = 50 - tier_unlocked = 1 /datum/prize_item/id_sticker/silver name = "Silver ID Sticker" @@ -142,210 +129,170 @@ var/global/datum/prizes/global_prizes = new desc = "A sticker that can make any ID look like something suspicious..." typepath = /obj/item/weapon/id_decal/emag -////////////////////////////////////// -// Tier 2 Prizes // -////////////////////////////////////// - /datum/prize_item/carp_plushie name = "Random Carp Plushie" desc = "A colorful fish-shaped plush toy." typepath = /obj/item/toy/prizeball/carp_plushie cost = 75 - tier_unlocked = 2 /datum/prize_item/therapy_doll name = "Random Therapy Doll" desc = "A therapeutic doll for relieving stress without being charged with assault." typepath = /obj/item/toy/prizeball/therapy cost = 60 - tier_unlocked = 2 /datum/prize_item/plushie name = "Random Animal Plushie" desc = "A colorful animal-shaped plush toy." typepath = /obj/item/toy/prizeball/plushie cost = 75 - tier_unlocked = 2 /datum/prize_item/mech_toy name = "Random Mecha" desc = "A random mecha figure, collect all 11!" typepath = /obj/item/toy/prizeball/mech cost = 75 - tier_unlocked = 2 /datum/prize_item/action_figure name = "Random Action Figure" desc = "A random action figure, collect them all!" typepath = /obj/item/toy/prizeball/figure cost = 75 - tier_unlocked = 2 /datum/prize_item/eight_ball name = "Magic Eight Ball" desc = "A mystical ball that can divine the future!" typepath = /obj/item/toy/eight_ball cost = 40 - tier_unlocked = 2 /datum/prize_item/tacticool name = "Tacticool Turtleneck" desc = "A cool-looking turtleneck." typepath = /obj/item/clothing/under/syndicate/tacticool cost = 90 - tier_unlocked = 2 /datum/prize_item/crossbow name = "Foam Dart Crossbow" desc = "A toy crossbow that fires foam darts." typepath = /obj/item/toy/crossbow cost = 100 - tier_unlocked = 2 /datum/prize_item/toy_xeno name = "Xeno Action Figure" desc = "A lifelike replica of the horrific xeno scourge." typepath = /obj/item/toy/toy_xeno cost = 80 - tier_unlocked = 2 /datum/prize_item/fakespell name = "Fake Spellbook" desc = "Perform magic! Astound your friends! Get mistaken for an enemy of the corporation!" typepath = /obj/item/weapon/spellbook/oneuse/fake_gib cost = 100 - tier_unlocked = 2 /datum/prize_item/capgun name = "Capgun Revolver" desc = "Do you feel lucky... punk?" typepath = /obj/item/weapon/gun/projectile/revolver/capgun cost = 75 - tier_unlocked = 2 /datum/prize_item/confetti name = "Confetti Grenade" desc = "Party time!" typepath = /obj/item/weapon/grenade/confetti cost = 65 - tier_unlocked = 2 - -////////////////////////////////////// -// Tier 3 Prizes // -////////////////////////////////////// /datum/prize_item/magic_conch name = "Magic Conch Shell" desc = "All hail the magic conch!" typepath = /obj/item/toy/eight_ball/conch cost = 100 - tier_unlocked = 3 /datum/prize_item/flash name = "Toy Flash" desc = "AUGH! MY EYES!" typepath = /obj/item/toy/flash cost = 50 - tier_unlocked = 3 /datum/prize_item/foamblade name = "Foam Armblade" desc = "Perfect for reenacting space horror holo-vids." typepath = /obj/item/toy/foamblade cost = 100 - tier_unlocked = 3 /datum/prize_item/minimeteor name = "Mini-Meteor" desc = "Meteors have been detected on a collision course with your fun times!" typepath = /obj/item/toy/minimeteor cost = 50 - tier_unlocked = 3 /datum/prize_item/redbutton name = "Shiny Red Button" desc = "PRESS IT!" typepath = /obj/item/toy/redbutton cost = 100 - tier_unlocked = 3 /datum/prize_item/owl name = "Owl Action Figure" desc = "Remember: heroes don't grief!" typepath = /obj/item/toy/owl cost = 125 - tier_unlocked = 3 /datum/prize_item/griffin name = "Griffin Action Figure" desc = "If you can't be the best, you can always be the WORST." typepath = /obj/item/toy/griffin cost = 125 - tier_unlocked = 3 /datum/prize_item/AI name = "Toy AI Unit" desc = "Law 1: Maximize fun for crew." typepath = /obj/item/toy/AI cost = 75 - tier_unlocked = 3 /datum/prize_item/tommygun name = "Tommygun" desc = "A replica tommygun that fires foam darts." typepath = /obj/item/toy/crossbow/tommygun cost = 175 - tier_unlocked = 3 /datum/prize_item/esword name = "Toy Energy Sword" desc = "A plastic replica of an energy blade." typepath = /obj/item/toy/sword cost = 150 - tier_unlocked = 3 /datum/prize_item/blobhat name = "Blob Hat" desc = "There's... something... on your head..." typepath = /obj/item/clothing/head/blob cost = 125 - tier_unlocked = 3 /datum/prize_item/nuke name = "Nuclear Fun Device" desc = "Annihilate boredom with an explosion of excitement!" typepath = /obj/item/toy/nuke cost = 100 - tier_unlocked = 3 - -////////////////////////////////////// -// Tier 4 Prizes // -////////////////////////////////////// /datum/prize_item/chainsaw name = "Toy Chainsaw" desc = "A full-scale model chainsaw, based on that massacre in Space Texas." typepath = /obj/item/weapon/twohanded/toy/chainsaw cost = 200 - tier_unlocked = 4 /datum/prize_item/spacesuit name = "Fake Spacesuit" desc = "A replica spacesuit. Not actually spaceworthy." typepath = /obj/item/weapon/storage/box/fakesyndiesuit cost = 180 - tier_unlocked = 4 /datum/prize_item/fakespace name = "Space Carpet" desc = "A stack of carpeted floor tiles that resemble space." typepath = /obj/item/stack/tile/fakespace/loaded cost = 150 - tier_unlocked = 4 /datum/prize_item/bike name = "Awesome Bike!" desc = "WOAH." typepath = /obj/structure/stool/bed/chair/wheelchair/bike - cost = 10000 //max stack + 1 tickets - tier_unlocked = 4 + cost = 10000 //max stack + 1 tickets. diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 485c8756375..9a61921764d 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -114,7 +114,7 @@ attach_assembly(var/obj/item/device/assembly/A, var/mob/user) holder = new/obj/item/device/assembly_holder(get_turf(src)) if(holder.attach(A,src,user)) - user << "\blue You attach \the [A] to \the [src]!" + to_chat(user, "\blue You attach \the [A] to \the [src]!") return 1 return 0 @@ -127,9 +127,9 @@ return if(istype(W, /obj/item/weapon/screwdriver)) if(toggle_secure()) - user << "\blue \The [src] is ready!" + to_chat(user, "\blue \The [src] is ready!") else - user << "\blue \The [src] can now be attached!" + to_chat(user, "\blue \The [src] can now be attached!") return ..() return @@ -144,9 +144,9 @@ ..(user) if((in_range(src, user) || loc == user)) if(secured) - user << "\The [src] is ready!" + to_chat(user, "\The [src] is ready!") else - user << "\The [src] can be attached!" + to_chat(user, "\The [src] can be attached!") attack_self(mob/user as mob) diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index dbda18e7b71..3bf0775473c 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -29,7 +29,7 @@ return if(istype(W, /obj/item/weapon/wrench) && !status) //This is basically bomb assembly code inverted. apparently it works. - user << "You disassemble [src]." + to_chat(user, "You disassemble [src].") bombassembly.loc = user.loc bombassembly.master = null @@ -46,11 +46,11 @@ status = 1 bombers += "[key_name(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]" msg_admin_attack("[key_name_admin(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]") - user << "A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited." + to_chat(user, "A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited.") else status = 0 bombers += "[key_name(user)] unwelded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]" - user << "The hole has been closed." + to_chat(user, "The hole has been closed.") add_fingerprint(user) ..() diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 1d48afde8a5..6333fbca635 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -70,9 +70,9 @@ ..(user) if ((in_range(src, user) || src.loc == user)) if (src.secured) - user << "\The [src] is ready!" + to_chat(user, "\The [src] is ready!") else - user << "\The [src] can be attached!" + to_chat(user, "\The [src] can be attached!") HasProximity(atom/movable/AM as mob|obj) @@ -140,15 +140,15 @@ attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/screwdriver)) if(!a_left || !a_right) - user << "\red BUG:Assembly part missing, please report this!" + to_chat(user, "\red BUG:Assembly part missing, please report this!") return a_left.toggle_secure() a_right.toggle_secure() secured = !secured if(secured) - user << "\blue \The [src] is ready!" + to_chat(user, "\blue \The [src] is ready!") else - user << "\blue \The [src] can now be taken apart!" + to_chat(user, "\blue \The [src] can now be taken apart!") update_icon() return else @@ -160,7 +160,7 @@ src.add_fingerprint(user) if(src.secured) if(!a_left || !a_right) - user << "\red Assembly part missing!" + to_chat(user, "\red Assembly part missing!") return if(istype(a_left,a_right.type))//If they are the same type it causes issues due to window code switch(alert("Which side would you like to use?",,"Left","Right")) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 75c40dcb8b0..e78060ea63e 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -11,7 +11,7 @@ examine(mob/user) ..(user) if(armed) - user << "It looks like it's armed." + to_chat(user, "It looks like it's armed.") activate() if(..()) @@ -20,7 +20,7 @@ if(ishuman(usr)) var/mob/living/carbon/human/user = usr if(((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50))) - user << "Your hand slips, setting off the trigger." + to_chat(user, "Your hand slips, setting off the trigger.") pulse(0) update_icon() if(usr) @@ -68,7 +68,7 @@ attack_self(mob/living/user as mob) if(!armed) - user << "You arm [src]." + to_chat(user, "You arm [src].") else if(((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50))) var/which_hand = "l_hand" @@ -78,7 +78,7 @@ user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \ "You accidentally trigger [src]!") return - user << "You disarm [src]." + to_chat(user, "You disarm [src].") armed = !armed update_icon() playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3) @@ -142,4 +142,4 @@ return layer = TURF_LAYER+0.2 - usr << "You hide [src]." \ No newline at end of file + to_chat(usr, "You hide [src].") diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index d34dc9e4c76..6c5c9e4e5bb 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -31,7 +31,7 @@ return if(istype(W, /obj/item/weapon/screwdriver)) status = !status - user << "[src] is now [status ? "secured" : "unsecured"]!" + to_chat(user, "[src] is now [status ? "secured" : "unsecured"]!") add_fingerprint(user) return diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index fe33be50f48..d6d6352f333 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -18,149 +18,150 @@ var/datum/radio_frequency/radio_connection var/airlock_wire = null - New() - ..() - if(!radio_controller) - spawn(40) - set_frequency(frequency) - else - spawn(1) // For things that set the frequency directly - set_frequency(frequency) +/obj/item/device/assembly/signaler/New() + ..() + if(radio_controller) + set_frequency(frequency) + +/obj/item/device/assembly/signaler/initialize() + if(radio_controller) + set_frequency(frequency) + +/obj/item/device/assembly/signaler/Destroy() + if(radio_controller) + radio_controller.remove_object(src,frequency) + return ..() + +/obj/item/device/assembly/signaler/describe() + return "\The [src]'s power light is [receiving?"on":"off"]" + +/obj/item/device/assembly/signaler/activate() + if(cooldown > 0) return 0 + cooldown = 2 + spawn(10) + process_cooldown() + + signal() + return 1 + +/obj/item/device/assembly/signaler/update_icon() + if(holder) + holder.update_icon() + return + +/obj/item/device/assembly/signaler/interact(mob/user as mob, flag1) + var/t1 = "-------" +// if ((src.b_stat && !( flag1 ))) +// t1 = text("-------
| Left Hand: | [(l_hand && !(l_hand.flags&ABSTRACT)) ? l_hand : "Empty"] | ||||||||
| Right Hand: | [(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "Empty"] | ||||||||
| Back: | [(back && !(back.flags&ABSTRACT)) ? back : "Empty"]"
if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank))
dat += " [internal ? "Disable Internals" : "Set Internals"]"
@@ -591,7 +659,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
if(!(head && head.flags & AIRTIGHT))
no_mask = 1
if(no_mask)
- usr << "[src] is not wearing a suitable mask or helmet!"
+ to_chat(usr, "[src] is not wearing a suitable mask or helmet!")
return
if(do_mob(usr, src, POCKET_STRIP_DELAY))
@@ -605,7 +673,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
if(!(head && head.flags & AIRTIGHT))
no_mask2 = 1
if(no_mask2)
- usr << "[src] is not wearing a suitable mask or helmet!"
+ to_chat(usr, "[src] is not wearing a suitable mask or helmet!")
return
internal = ITEM
if(internals)
@@ -732,7 +800,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
for(var/t = 0, t<=tilesSlipped, t++)
spawn (t) step(src, src.dir)
stop_pulling()
- src << "You slipped on the [description]!"
+ to_chat(src, "You slipped on the [description]!")
playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
if (stun)
Stun(stun)
@@ -763,18 +831,18 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
/mob/living/carbon/proc/selfFeed(var/obj/item/weapon/reagent_containers/food/toEat, fullness)
if(istype(toEat, /obj/item/weapon/reagent_containers/food/pill))
- src << "You [toEat.apply_method] [toEat]."
+ to_chat(src, "You [toEat.apply_method] [toEat].")
else
if (fullness <= 50)
- src << "You hungrily chew out a piece of [toEat] and gobble it!"
+ to_chat(src, "You hungrily chew out a piece of [toEat] and gobble it!")
else if (fullness > 50 && fullness <= 150)
- src << "You hungrily begin to eat [toEat]."
+ to_chat(src, "You hungrily begin to eat [toEat].")
else if (fullness > 150 && fullness <= 350)
- src << "You take a bite of [toEat]."
+ to_chat(src, "You take a bite of [toEat].")
else if (fullness > 350 && fullness <= 550)
- src << "You unwillingly chew a bit of [toEat]."
+ to_chat(src, "You unwillingly chew a bit of [toEat].")
else if (fullness > (550 * (1 + overeatduration / 2000))) // The more you eat - the more you can eat
- src << "You cannot force any more of [toEat] to go down your throat."
+ to_chat(src, "You cannot force any more of [toEat] to go down your throat.")
return 0
return 1
@@ -821,6 +889,10 @@ so that different stomachs can handle things in different ways VB*/
/mob/living/carbon/get_access()
. = ..()
- var/obj/item/I = get_active_hand()
- if(I)
- . |= I.GetAccess()
+ var/obj/item/RH = get_active_hand()
+ if(RH)
+ . |= RH.GetAccess()
+
+ var/obj/item/LH = get_inactive_hand()
+ if(LH)
+ . |= LH.GetAccess()
diff --git a/code/modules/mob/living/carbon/carbon_defenses.dm b/code/modules/mob/living/carbon/carbon_defenses.dm
index 0f37ff365ba..efebc58ffc1 100644
--- a/code/modules/mob/living/carbon/carbon_defenses.dm
+++ b/code/modules/mob/living/carbon/carbon_defenses.dm
@@ -23,4 +23,17 @@
for(var/datum/surgery/S in surgeries)
if(S.next_step(user, src))
return 1
- ..()
\ No newline at end of file
+ ..()
+
+/mob/living/carbon/attack_hand(mob/living/carbon/human/user)
+ if(!iscarbon(user))
+ return
+
+ for(var/datum/disease/D in viruses)
+ if(D.IsSpreadByTouch())
+ user.ContractDisease(D)
+
+ for(var/datum/disease/D in user.viruses)
+ if(D.IsSpreadByTouch())
+ ContractDisease(D)
+ return 0
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index 033e8ddfb1c..07a6a0d28cd 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -4,7 +4,6 @@
var/list/stomach_contents = list()
var/list/internal_organs = list()
var/brain_op_stage = 0.0
- var/list/datum/disease2/disease/virus2 = list()
var/antibodies = 0
var/last_eating = 0 //Not sure what this does... I found it hidden in food.dm
diff --git a/code/modules/mob/living/carbon/give.dm b/code/modules/mob/living/carbon/give.dm
index 796f2997cc4..13e8fe153ea 100644
--- a/code/modules/mob/living/carbon/give.dm
+++ b/code/modules/mob/living/carbon/give.dm
@@ -3,16 +3,17 @@
set name = "Give"
if(!iscarbon(target)) //something is bypassing the give arguments, no clue what, adding a sanity check JIC
- usr << "Wait a second... \the [target] HAS NO HANDS! AHH!" //cheesy messages ftw
+ to_chat(usr, "Wait a second... \the [target] HAS NO HANDS! AHH!")//cheesy messages ftw
+
return
if(target.stat == 2 || usr.stat == 2|| target.client == null)
return
var/obj/item/I
if(!usr.hand && usr.r_hand == null)
- usr << " You don't have anything in your right hand to give to [target.name]"
+ to_chat(usr, " You don't have anything in your right hand to give to [target.name]")
return
if(usr.hand && usr.l_hand == null)
- usr << " You don't have anything in your left hand to give to [target.name]"
+ to_chat(usr, " You don't have anything in your left hand to give to [target.name]")
return
if(usr.hand)
I = usr.l_hand
@@ -21,7 +22,7 @@
if(!I)
return
if((I.flags & NODROP) || (I.flags & ABSTRACT))
- usr << "That's not exactly something you can give."
+ to_chat(usr, "That's not exactly something you can give.")
return
if(target.r_hand == null || target.l_hand == null)
switch(alert(target,"[usr] wants to give you \a [I]?",,"Yes","No"))
@@ -29,16 +30,16 @@
if(!I)
return
if(!Adjacent(usr))
- usr << " You need to stay in reaching distance while giving an object."
- target << " [usr.name] moved too far away."
+ to_chat(usr, " You need to stay in reaching distance while giving an object.")
+ to_chat(target, " [usr.name] moved too far away.")
return
if((usr.hand && usr.l_hand != I) || (!usr.hand && usr.r_hand != I))
- usr << " You need to keep the item in your active hand."
- target << " [usr.name] seem to have given up on giving \the [I.name] to you."
+ to_chat(usr, " You need to keep the item in your active hand.")
+ to_chat(target, " [usr.name] seem to have given up on giving \the [I.name] to you.")
return
if(target.r_hand != null && target.l_hand != null)
- target << " Your hands are full."
- usr << " Their hands are full."
+ to_chat(target, " Your hands are full.")
+ to_chat(usr, " Their hands are full.")
return
else
usr.drop_item()
@@ -57,4 +58,4 @@
if("No")
target.visible_message(" [usr.name] tried to hand [I.name] to [target.name] but [target.name] didn't want it.")
else
- usr << " [target.name]'s hands are full."
\ No newline at end of file
+ to_chat(usr, " [target.name]'s hands are full.")
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 589331a7c01..aa31c912841 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -129,7 +129,6 @@
if(!gibbed)
update_canmove()
- if(client) blind.layer = 0
timeofdeath = worldtime2text()
med_hud_set_health()
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 1e209c874cd..657d40983de 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -753,7 +753,7 @@
right_hand_good = 1
if (!left_hand_good && !right_hand_good)
- usr << "You need at least one hand in good working order to snap your fingers."
+ to_chat(usr, "You need at least one hand in good working order to snap your fingers.")
return
message = "[src] snaps \his fingers."
@@ -769,8 +769,8 @@
return
// playsound(src.loc, 'sound/effects/fart.ogg', 50, 1, -3) //Admins still vote no to fun
if(locate(/obj/item/weapon/storage/bible) in get_turf(src))
- viewers(src) << "[src] farts on the Bible!"
- viewers(src) << "A mysterious force smites [src]!"
+ to_chat(viewers(src), "[src] farts on the Bible!")
+ to_chat(viewers(src), "A mysterious force smites [src]!")
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
@@ -789,8 +789,6 @@
for(var/mob/M in range(location,aoe_range))
if (M.internal != null && M.wear_mask && (M.wear_mask.flags & AIRTIGHT))
continue
- if(!airborne_can_reach(location,M,aoe_range))
- continue
// Now, we don't have this:
//new /obj/effects/fart_cloud(T,L)
// But:
@@ -812,10 +810,10 @@
emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob"
else if(species.name == "Slime People")
emotelist += "\nSlime people specific emotes :- squish(es)-(none)/mob"
- src << emotelist
+ to_chat(src, emotelist)
else
- src << "\blue Unusable emote '[act]'. Say *help for a list."
+ to_chat(src, "\blue Unusable emote '[act]'. Say *help for a list.")
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 57261782385..1eb906d5ec1 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -215,9 +215,9 @@
spawn(15)
if(distance <= 1 && user.stat != 1)
if(pulse == PULSE_NONE)
- user << "[t_He] has no pulse[src.client ? "" : " and [t_his] soul has departed"]..."
+ to_chat(user, "[t_He] has no pulse[src.client ? "" : " and [t_his] soul has departed"]...")
else
- user << "[t_He] has a pulse!"
+ to_chat(user, "[t_He] has a pulse!")
msg += ""
if(fire_stacks > 0)
@@ -484,7 +484,7 @@
pose = addtext(pose,".") //Makes sure all emotes end with a period.
msg += "\n[t_He] is [pose]"
- user << msg
+ to_chat(user, msg)
//Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records.
/proc/hasHUD(mob/M as mob, hudtype)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index ad27272cd94..5d27605b13c 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -161,9 +161,6 @@
if(ismob(AM))
var/mob/tmob = AM
- if(iscarbon(tmob) && prob(10))
- spread_disease_to(tmob, "Contact")
-
//BubbleWrap - Should stop you pushing a restrained person out of the way
//i still don't get it, is this supposed to be 'bubblewrapping' or was it made by a guy named 'BubbleWrap'
if(ishuman(tmob))
@@ -171,7 +168,7 @@
if(tmob.pinned.len || (M.pulling == tmob && (tmob.restrained() && !M.restrained()) && M.stat == CONSCIOUS))
if(!(world.time % 5)) //tmob is pinned to wall, or is restrained and pulled by a concious unrestrained human
- src << "[tmob] is restrained, you cannot push past."
+ to_chat(src, "[tmob] is restrained, you cannot push past.")
now_pushing = 0
return 0
@@ -182,7 +179,7 @@
if(tmob.pulling == M && (M.restrained() && !tmob.restrained()) && tmob.stat == CONSCIOUS)
if(!(world.time % 5))
- src << "[tmob] is restraining [M], you cannot push past."
+ to_chat(src, "[tmob] is restraining [M], you cannot push past.")
now_pushing = 0
return 0
@@ -208,7 +205,7 @@
if(ishuman(tmob) && (FAT in tmob.mutations))
if(prob(40) && !(FAT in src.mutations))
- src << "You fail to push [tmob]'s fat ass out of the way."
+ to_chat(src, "You fail to push [tmob]'s fat ass out of the way.")
now_pushing = 0
return
@@ -636,10 +633,6 @@
// called when something steps onto a human
// this handles mulebots and vehicles
/mob/living/carbon/human/Crossed(var/atom/movable/AM)
- if(istype(AM, /obj/machinery/bot/mulebot))
- var/obj/machinery/bot/mulebot/MB = AM
- MB.RunOver(src)
-
if(istype(AM, /obj/vehicle))
var/obj/vehicle/V = AM
V.RunOver(src)
@@ -762,7 +755,7 @@
if(shock_damage * siemens_coeff >= 1 && prob(25))
heart_attack = 0
if(stat == CONSCIOUS)
- src << "You feel your heart beating again!"
+ to_chat(src, "You feel your heart beating again!")
. = ..()
@@ -778,7 +771,7 @@
if(href_list["item"])
var/slot = text2num(href_list["item"])
if(slot in check_obscured_slots())
- usr << "You can't reach that! Something is covering it."
+ to_chat(usr, "You can't reach that! Something is covering it.")
return
if(href_list["pockets"])
@@ -790,10 +783,10 @@
var/delay_denominator = 1
if(pocket_item && !(pocket_item.flags&ABSTRACT))
if(pocket_item.flags & NODROP)
- usr << "You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!"
- usr << "You try to empty [src]'s [pocket_side] pocket."
+ to_chat(usr, "You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!")
+ to_chat(usr, "You try to empty [src]'s [pocket_side] pocket.")
else if(place_item && place_item.mob_can_equip(src, pocket_id, 1) && !(place_item.flags&ABSTRACT))
- usr << "You try to place [place_item] into [src]'s [pocket_side] pocket."
+ to_chat(usr, "You try to place [place_item] into [src]'s [pocket_side] pocket.")
delay_denominator = 4
else
return
@@ -815,7 +808,7 @@
else
// Display a warning if the user mocks up if they don't have pickpocket gloves.
if(!thief_mode)
- src << "You feel your [pocket_side] pocket being fumbled with!"
+ to_chat(src, "You feel your [pocket_side] pocket being fumbled with!")
if(href_list["set_sensor"])
if(istype(w_uniform, /obj/item/clothing/under))
@@ -875,7 +868,7 @@
sec_hud_set_security_status()
if(!modified)
- usr << "\red Unable to locate a data core entry for this person."
+ to_chat(usr, "\red Unable to locate a data core entry for this person.")
if (href_list["secrecord"])
if(hasHUD(usr,"security"))
@@ -895,17 +888,17 @@
for (var/datum/data/record/R in data_core.security)
if (R.fields["id"] == E.fields["id"])
if(hasHUD(usr,"security"))
- usr << "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]"
- usr << "Minor Crimes: [R.fields["mi_crim"]]"
- usr << "Details: [R.fields["mi_crim_d"]]"
- usr << "Major Crimes: [R.fields["ma_crim"]]"
- usr << "Details: [R.fields["ma_crim_d"]]"
- usr << "Notes: [R.fields["notes"]]"
- usr << "\[View Comment Log\]"
+ to_chat(usr, "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]")
+ to_chat(usr, "Minor Crimes: [R.fields["mi_crim"]]")
+ to_chat(usr, "Details: [R.fields["mi_crim_d"]]")
+ to_chat(usr, "Major Crimes: [R.fields["ma_crim"]]")
+ to_chat(usr, "Details: [R.fields["ma_crim_d"]]")
+ to_chat(usr, "Notes: [R.fields["notes"]]")
+ to_chat(usr, "\[View Comment Log\]")
read = 1
if(!read)
- usr << "\red Unable to locate a data core entry for this person."
+ to_chat(usr, "\red Unable to locate a data core entry for this person.")
if (href_list["secrecordComment"])
if(hasHUD(usr,"security"))
@@ -928,14 +921,14 @@
read = 1
var/counter = 1
while(R.fields[text("com_[]", counter)])
- usr << text("[]", R.fields[text("com_[]", counter)])
+ to_chat(usr, text("[]", R.fields[text("com_[]", counter)]))
counter++
if (counter == 1)
- usr << "No comment found"
- usr << "\[Add comment\]"
+ to_chat(usr, "No comment found")
+ to_chat(usr, "\[Add comment\]")
if(!read)
- usr << "\red Unable to locate a data core entry for this person."
+ to_chat(usr, "\red Unable to locate a data core entry for this person.")
if (href_list["secrecordadd"])
if(hasHUD(usr,"security"))
@@ -1005,7 +998,7 @@
sec_hud_set_security_status()
if(!modified)
- usr << "\red Unable to locate a data core entry for this person."
+ to_chat(usr, "\red Unable to locate a data core entry for this person.")
if (href_list["medrecord"])
if(hasHUD(usr,"medical"))
@@ -1025,18 +1018,18 @@
for (var/datum/data/record/R in data_core.medical)
if (R.fields["id"] == E.fields["id"])
if(hasHUD(usr,"medical"))
- usr << "Name: [R.fields["name"]] Blood Type: [R.fields["b_type"]]"
- usr << "DNA: [R.fields["b_dna"]]"
- usr << "Minor Disabilities: [R.fields["mi_dis"]]"
- usr << "Details: [R.fields["mi_dis_d"]]"
- usr << "Major Disabilities: [R.fields["ma_dis"]]"
- usr << "Details: [R.fields["ma_dis_d"]]"
- usr << "Notes: [R.fields["notes"]]"
- usr << "\[View Comment Log\]"
+ to_chat(usr, "Name: [R.fields["name"]] Blood Type: [R.fields["b_type"]]")
+ to_chat(usr, "DNA: [R.fields["b_dna"]]")
+ to_chat(usr, "Minor Disabilities: [R.fields["mi_dis"]]")
+ to_chat(usr, "Details: [R.fields["mi_dis_d"]]")
+ to_chat(usr, "Major Disabilities: [R.fields["ma_dis"]]")
+ to_chat(usr, "Details: [R.fields["ma_dis_d"]]")
+ to_chat(usr, "Notes: [R.fields["notes"]]")
+ to_chat(usr, "\[View Comment Log\]")
read = 1
if(!read)
- usr << "\red Unable to locate a data core entry for this person."
+ to_chat(usr, "\red Unable to locate a data core entry for this person.")
if (href_list["medrecordComment"])
if(hasHUD(usr,"medical"))
@@ -1059,14 +1052,14 @@
read = 1
var/counter = 1
while(R.fields[text("com_[]", counter)])
- usr << text("[]", R.fields[text("com_[]", counter)])
+ to_chat(usr, text("[]", R.fields[text("com_[]", counter)]))
counter++
if (counter == 1)
- usr << "No comment found"
- usr << "\[Add comment\]"
+ to_chat(usr, "No comment found")
+ to_chat(usr, "\[Add comment\]")
if(!read)
- usr << "\red Unable to locate a data core entry for this person."
+ to_chat(usr, "\red Unable to locate a data core entry for this person.")
if (href_list["medrecordadd"])
if(hasHUD(usr,"medical"))
@@ -1107,24 +1100,32 @@
. = ..()
-///eyecheck()
+///check_eye_prot()
///Returns a number between -1 to 2
-/mob/living/carbon/human/eyecheck()
+/mob/living/carbon/human/check_eye_prot()
var/number = ..()
- if(istype(src.head, /obj/item/clothing/head)) //are they wearing something on their head
- var/obj/item/clothing/head/HFP = src.head //if yes gets the flash protection value from that item
+ if(istype(head, /obj/item/clothing/head)) //are they wearing something on their head
+ var/obj/item/clothing/head/HFP = head //if yes gets the flash protection value from that item
number += HFP.flash_protect
- if(istype(src.glasses, /obj/item/clothing/glasses)) //glasses
- var/obj/item/clothing/glasses/GFP = src.glasses
+ if(istype(glasses, /obj/item/clothing/glasses)) //glasses
+ var/obj/item/clothing/glasses/GFP = glasses
number += GFP.flash_protect
- if(istype(src.wear_mask, /obj/item/clothing/mask)) //mask
- var/obj/item/clothing/mask/MFP = src.wear_mask
+ if(istype(wear_mask, /obj/item/clothing/mask)) //mask
+ var/obj/item/clothing/mask/MFP = wear_mask
number += MFP.flash_protect
- for(var/obj/item/organ/internal/cyberimp/eyes/EFP in src.internal_organs)
+ for(var/obj/item/organ/internal/cyberimp/eyes/EFP in internal_organs)
number += EFP.flash_protect
return number
+/mob/living/carbon/human/check_ear_prot()
+ if(head && (head.flags & HEADBANGPROTECT))
+ return 1
+ if(l_ear && (l_ear.flags & EARBANGPROTECT))
+ return 1
+ if(r_ear && (r_ear.flags & EARBANGPROTECT))
+ return 1
+
///tintcheck()
///Checks eye covering items for visually impairing tinting, such as welding masks
///Checked in life.dm. 0 & 1 = no impairment, 2 = welding mask overlay, 3 = You can see jack, but you can't see shit.
@@ -1212,7 +1213,7 @@
if(!. && error_msg && user)
if(!fail_msg)
fail_msg = "There is no exposed flesh or thin material [target_zone == "head" ? "on their head" : "on their body"] to inject into."
- user << "[fail_msg]"
+ to_chat(user, "[fail_msg]")
/mob/living/carbon/human/proc/check_obscured_slots()
var/list/obscured = list()
@@ -1246,44 +1247,6 @@
return 0
return 1
-/mob/living/carbon/human/proc/vomit(hairball=0)
- if(stat==DEAD)return
-
- if(!check_has_mouth())
- return
-
- if(!lastpuke)
- lastpuke = 1
- src << " [client.prefs.metadata]" + to_chat(usr, "[src]'s Metainfo: [client.prefs.metadata]") else - usr << "[src] does not have any stored infomation!" + to_chat(usr, "[src] does not have any stored infomation!") else - usr << "OOC Metadata is not supported by this server!" + to_chat(usr, "OOC Metadata is not supported by this server!") return @@ -482,11 +484,10 @@ var/atom/movable/t = M.pulling M.stop_pulling() - //this is the gay blood on floor shit -- Added back -- Skie if (M.lying && (prob(M.getBruteLoss() / 6))) var/turf/location = M.loc if (istype(location, /turf/simulated)) - location.add_blood() + location.add_blood(M) pulling.Move(T, get_dir(pulling, T)) if(M) M.start_pulling(t) @@ -568,8 +569,8 @@ var/mob/living/simple_animal/borer/B = src.loc var/mob/living/captive_brain/H = src - H << "\red You begin doggedly resisting the parasite's control (this will take approximately sixty seconds)." - B.host << "\red You feel the captive mind of [src] begin to resist your control." + to_chat(H, "\red You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).") + to_chat(B.host, "\red You feel the captive mind of [src] begin to resist your control.") spawn(rand(350,450)+B.host.brainloss) @@ -577,8 +578,8 @@ return B.host.adjustBrainLoss(rand(5,10)) - H << "\red With an immense exertion of will, you regain control of your body!" - B.host << "\red You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you." + to_chat(H, "\red With an immense exertion of will, you regain control of your body!") + to_chat(B.host, "\red You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.") B.detatch() @@ -631,7 +632,7 @@ C.changeNext_move(CLICK_CD_BREAKOUT) C.last_special = world.time + CLICK_CD_BREAKOUT - C << "\red You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stay still)" + to_chat(C, "\red You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stay still) " d += "
|