diff --git a/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm b/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm index 6f0c2ebd42b7..e8175c609273 100644 --- a/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm +++ b/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm @@ -7,9 +7,6 @@ /turf/open/floor/plating, /area/tcommsat/computer) "aA" = ( -/obj/machinery/computer/ai_resource_distribution{ - dir = 8 - }, /obj/machinery/computer/security/telescreen{ dir = 8; name = "MiniSat Camera Monitor"; @@ -42,6 +39,12 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/ai_monitored/turret_protected/ai) +"aY" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "bb" = ( /obj/machinery/status_display/ai{ pixel_x = 32 @@ -85,6 +88,17 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"br" = ( +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/modular_computer/console/preset/netmin, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/grimy, +/area/ai_monitored/turret_protected/aisat_interior) "bs" = ( /obj/machinery/light/small{ dir = 4 @@ -142,29 +156,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) -"cz" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) -"cE" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "cH" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -202,33 +193,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) -"cP" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) -"cW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) -"dG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 6 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "dL" = ( /obj/structure/lattice, /turf/open/space/basic, @@ -272,6 +236,20 @@ }, /turf/open/floor/plating, /area/tcommsat/computer) +"ew" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "ez" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 @@ -320,27 +298,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) -"fl" = ( -/obj/machinery/door/airlock/highsecurity{ - id_tag = "ai_core_airlock_exterior"; - name = "AI Core"; - req_access_txt = "16" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "fq" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, @@ -508,6 +465,20 @@ }, /turf/open/space/basic, /area/ai_monitored/turret_protected/ai) +"ix" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "iD" = ( /obj/machinery/light, /obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ @@ -515,6 +486,25 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) +"ja" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "jc" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden, /obj/effect/turf_decal/trimline/purple/filled/line/lower{ @@ -551,17 +541,20 @@ /obj/effect/turf_decal/trimline/neutral/filled/line/lower, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) -"jN" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "jR" = ( /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/space/nearstation) +"jT" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/obj/machinery/ai/networking{ + label = "Computer Science - 2"; + roundstart_connection = "Subcontroller" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "jY" = ( /obj/machinery/telecomms/broadcaster/preset_right, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -633,27 +626,25 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"kM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "kY" = ( /obj/structure/lattice, /turf/open/space/basic, /area/ai_monitored/turret_protected/ai) -"la" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "lk" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 @@ -689,14 +680,6 @@ }, /turf/open/floor/circuit/telecomms/server, /area/ai_monitored/turret_protected/ai) -"lp" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 1; - external_pressure_bound = 120; - name = "server vent" - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "ly" = ( /obj/structure/cable/white{ icon_state = "2-4" @@ -792,6 +775,21 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"mK" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "nj" = ( /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/tcommsat/server"; @@ -918,6 +916,30 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/solar/port/aft) +"pP" = ( +/obj/machinery/door/airlock/highsecurity{ + id_tag = "ai_core_airlock_exterior"; + name = "AI Core"; + req_access_txt = "16" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "pQ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 1 @@ -947,9 +969,18 @@ }, /turf/open/space/basic, /area/solar/port/aft) -"qf" = ( -/obj/machinery/status_display/ai_core, -/turf/open/floor/circuit/telecomms/server, +"qd" = ( +/obj/machinery/holopad, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark/telecomms, /area/ai_monitored/turret_protected/ai) "rm" = ( /obj/machinery/power/terminal{ @@ -990,6 +1021,18 @@ }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/aisat_interior) +"rv" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 6 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "rE" = ( /turf/closed/wall, /area/ai_monitored/turret_protected/aisat_interior) @@ -1125,22 +1168,6 @@ }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) -"uS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "uV" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1407,6 +1434,24 @@ }, /turf/open/floor/circuit/telecomms/server, /area/ai_monitored/turret_protected/ai) +"zk" = ( +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Monitoring Room"; + req_access_txt = "65" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/ai_monitored/turret_protected/aisat_interior) "zp" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ dir = 1 @@ -1454,6 +1499,13 @@ /obj/effect/turf_decal/trimline/neutral/filled/line/lower, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"zW" = ( +/obj/machinery/status_display/ai_core, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "Ab" = ( /obj/structure/cable/yellow{ icon_state = "2-8" @@ -1475,6 +1527,26 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/ai_monitored/turret_protected/ai) +"Am" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "AF" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -1494,6 +1566,18 @@ /obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) +"AS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 6 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "AU" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -1560,6 +1644,13 @@ /obj/machinery/telecomms/processor/preset_four, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) +"BY" = ( +/obj/machinery/ai/server_cabinet/prefilled, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "Co" = ( /obj/machinery/light/small{ dir = 8 @@ -1569,9 +1660,6 @@ }, /turf/open/floor/plating, /area/ai_monitored/storage/satellite) -"Cr" = ( -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "Ct" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/doorButtons/airlock_controller{ @@ -1682,8 +1770,8 @@ dir = 2; dwidth = 2; height = 6; - shuttle_id = "ai_ship"; name = "ai ship bay"; + shuttle_id = "ai_ship"; width = 5 }, /turf/open/space/basic, @@ -1739,17 +1827,6 @@ /obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) -"GG" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "Hd" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ dir = 1; @@ -1858,6 +1935,15 @@ "Je" = ( /turf/open/space/basic, /area/space) +"Jj" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "Jk" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -1888,10 +1974,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/ai_monitored/storage/satellite) -"Kk" = ( -/obj/machinery/holopad, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "Kt" = ( /obj/machinery/door/airlock/external{ name = "MiniSat External Access"; @@ -2069,24 +2151,6 @@ }, /turf/open/space/basic, /area/ai_monitored/turret_protected/aisat_interior) -"ND" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/aisat_interior) "NK" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -2195,6 +2259,25 @@ "Pd" = ( /turf/closed/wall, /area/tcommsat/computer) +"Pe" = ( +/obj/machinery/door/airlock/public{ + id_tag = "ai_core_airlock_interior" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "Pg" = ( /obj/machinery/telecomms/hub/preset, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -2328,6 +2411,17 @@ }, /turf/open/floor/plating, /area/ai_monitored/storage/satellite) +"RK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 1; + external_pressure_bound = 120; + name = "server vent" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "RL" = ( /obj/machinery/airalarm{ pixel_y = 24 @@ -2350,21 +2444,13 @@ }, /turf/open/floor/plating, /area/ai_monitored/storage/satellite) -"Sh" = ( -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Monitoring Room"; - req_access_txt = "65" +"Sj" = ( +/obj/machinery/ai/data_core/primary, +/obj/structure/ethernet_cable{ + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "Sk" = ( /obj/machinery/telecomms/processor/preset_one, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -2402,6 +2488,27 @@ }, /turf/open/floor/plasteel/dark, /area/tcommsat/computer) +"SZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit, +/area/ai_monitored/turret_protected/aisat_interior) "Tb" = ( /obj/structure/window/reinforced{ dir = 4 @@ -2415,15 +2522,6 @@ }, /turf/open/floor/circuit/green/telecomms, /area/ai_monitored/turret_protected/ai) -"Tj" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) -"Tu" = ( -/obj/machinery/ai/data_core/primary, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "Tv" = ( /obj/machinery/telecomms/server/presets/security, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -2462,16 +2560,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) -"TS" = ( -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/computer/ai_control_console{ - dir = 8 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "Um" = ( /obj/machinery/power/terminal{ dir = 4 @@ -2544,6 +2632,14 @@ }, /turf/open/floor/plasteel/dark, /area/tcommsat/computer) +"UV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/grimy, +/area/ai_monitored/turret_protected/aisat_interior) "UW" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -2667,6 +2763,16 @@ }, /turf/open/floor/plating, /area/tcommsat/server) +"Xn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "Xw" = ( /obj/structure/cable/white{ icon_state = "4-8" @@ -2705,22 +2811,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) -"XM" = ( -/obj/machinery/door/airlock/public{ - id_tag = "ai_core_airlock_interior" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "XN" = ( /obj/structure/frame/machine, /turf/open/floor/circuit/green/telecomms, @@ -2742,10 +2832,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) -"Ys" = ( -/obj/machinery/ai/server_cabinet/prefilled, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "YZ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/trimline/blue/filled/line/lower{ @@ -4364,11 +4450,11 @@ JQ lN fF AF -la -GG -cz -Sh -Tj +Am +ew +ix +zk +UV oA Qi Qi @@ -4399,11 +4485,11 @@ RI pD bb Ct -ND +SZ NK uZ rE -TS +br aA Qi jR @@ -4434,7 +4520,7 @@ OM OM PH PH -fl +pP PH PH Qi @@ -4469,7 +4555,7 @@ kY kY PH XB -uS +ja Ph PH kY @@ -4504,7 +4590,7 @@ kY PH PH PH -XM +Pe PH PH PH @@ -4539,7 +4625,7 @@ PH PH gh lo -cW +kM VJ OB PH @@ -4574,7 +4660,7 @@ PH Tb ig KM -cE +mK td Xw mj @@ -4606,10 +4692,10 @@ jR PH kY PH -Ys -dG +jT +AS uV -qf +zW bV rr XN @@ -4642,12 +4728,12 @@ PH kY PH Dh -jN -cP -Kk -Cr -xn -lp +Xn +Jj +qd +aY +rv +RK PH kY PH @@ -4679,10 +4765,10 @@ PH XN ci jn -Tu +Sj ly oW -Ys +BY PH kY PH diff --git a/_maps/RandomZLevels/VR/netmin_hub.dmm b/_maps/RandomZLevels/VR/netmin_hub.dmm new file mode 100644 index 000000000000..c07991846b99 --- /dev/null +++ b/_maps/RandomZLevels/VR/netmin_hub.dmm @@ -0,0 +1,72096 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ab" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen{ + pixel_y = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"ac" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/item/crowbar, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"ae" = ( +/obj/structure/sign/poster/official/random{ + pixel_x = -32 + }, +/obj/machinery/vending/cola/random, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"ag" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet/blue, +/area/awaymission/vr/scientist_raid) +"ai" = ( +/turf/closed/wall/mineral/titanium, +/area/awaymission/vr/hub) +"am" = ( +/obj/item/stack/ore/iron, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"an" = ( +/obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"ao" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/structure/table, +/obj/item/melee/baton/cattleprod, +/obj/item/electropack, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"ap" = ( +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"aq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"ar" = ( +/obj/structure/table, +/obj/structure/table, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/hub) +"ax" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/sign/poster/official/random{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"az" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"aA" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/filled/corner, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"aE" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"aJ" = ( +/obj/structure/showcase/cyborg{ + desc = "A stand with a deactivated combat robot attached. This seems to be an earlier model. Weren't these made illegal a long time ago?"; + name = "ancient robot showcase" + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"aM" = ( +/obj/machinery/door/poddoor{ + id = "nothing"; + name = "supply dock loading door" + }, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"aV" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"aW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/bed, +/obj/item/bedsheet/centcom, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"aY" = ( +/obj/structure/closet/l3closet/janitor, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"bc" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"bf" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/structure/table, +/obj/item/scalpel, +/obj/item/paper/fluff/awaymissions/scientist_raid/report4, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"bk" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"bn" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 9 + }, +/obj/machinery/button_puzzle{ + id = "mine_button"; + pixel_x = -23; + pixel_y = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"bo" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/carpet/royalblue, +/area/awaymission/vr/combat_robot_factory) +"bq" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"br" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner/lower{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"bt" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"bu" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/table, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/hub) +"bv" = ( +/obj/machinery/door/airlock/command{ + name = "Personal Quarters" + }, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"bx" = ( +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"by" = ( +/turf/open/floor/plasteel/white, +/area/awaymission/vr/hub) +"bA" = ( +/obj/effect/landmark/vr_spawn/vr_mission/abandoned_mine, +/obj/machinery/light/small, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"bD" = ( +/obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ + dir = 5 + }, +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"bG" = ( +/obj/item/flashlight/lantern, +/turf/open/floor/plating, +/area/awaymission/vr/abandoned_mine) +"bH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"bI" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/table/glass, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/storage/firstaid/brute{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"bP" = ( +/turf/open/floor/plating, +/area/awaymission/vr/hub) +"bQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"bS" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/bottle/cognac, +/obj/item/storage/secure/safe/scientist_raid{ + pixel_x = 32 + }, +/obj/item/storage/fancy/cigarettes/cigars/havana, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"bU" = ( +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"bX" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/item/paper/fluff/awaymissions/robot_factory/classified, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"bY" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/light, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/hub) +"cl" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"cn" = ( +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel/grimy, +/area/awaymission/vr/combat_robot_factory) +"co" = ( +/obj/machinery/door/airlock/science{ + name = "Experimental Computer Science" + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"cu" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"cD" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"cJ" = ( +/obj/structure/table/wood, +/obj/item/storage/box/matches{ + pixel_x = -5; + pixel_y = 13 + }, +/turf/open/floor/carpet/blue, +/area/awaymission/vr/combat_robot_factory) +"cO" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"cS" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"cU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/awaymission/vr/combat_robot_factory) +"cX" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 8 + }, +/obj/machinery/button_puzzle{ + id = "mine_button"; + pixel_x = -23; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"cY" = ( +/obj/item/chair/stool, +/obj/effect/decal/cleanable/blood, +/obj/structure/spider/cocoon, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"cZ" = ( +/obj/effect/decal/remains/human, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"db" = ( +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"de" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"df" = ( +/obj/item/ammo_casing/n762{ + pixel_x = 8; + pixel_y = -9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"dh" = ( +/obj/machinery/door/airlock/medical{ + name = "Experimental Development" + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"dj" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/awaymission/vr/abandoned_mine) +"dm" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"dn" = ( +/mob/living/simple_animal/hostile/boss/robot_leader{ + del_on_death = 1; + loot = list(/obj/effect/decal/cleanable/robot_debris,/obj/item/paper/fluff/awaymissions/robot_factory/diagnostic,/obj/item/ai_cpu/self_aware) + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"do" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad" + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"dp" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11; + pixel_y = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/abandoned_mine) +"dq" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"dw" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"dB" = ( +/obj/structure/chair/comfy/brown, +/turf/open/floor/carpet/blue, +/area/awaymission/vr/scientist_raid) +"dC" = ( +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"dD" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/vending/cola/random, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"dE" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck{ + pixel_x = 7 + }, +/obj/item/stack/spacecash/c200{ + pixel_x = -3; + pixel_y = 10 + }, +/obj/item/gun/ballistic/automatic/pistol/m1911/no_mag{ + pixel_x = -4; + pixel_y = -5 + }, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"dJ" = ( +/obj/machinery/door/window/brigdoor/security/holding/westleft, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"dS" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"dT" = ( +/obj/effect/decal/remains/human, +/obj/effect/gibspawner/human, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"dZ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"ee" = ( +/obj/item/disk/puzzle{ + id = "mine_floppy" + }, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"ef" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/computer{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper/fluff/awaymissions/robot_factory/control_message, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"ei" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"ej" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"el" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"en" = ( +/obj/machinery/door/airlock{ + name = "Living Quarters" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"er" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/turf/open/floor/grass, +/area/awaymission/vr/scientist_raid) +"ew" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/shuttle/engine/heater{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/awaymission/vr/hub) +"ex" = ( +/obj/machinery/door/airlock{ + name = "Personal Quarters" + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/scientist_raid) +"eA" = ( +/obj/structure/closet/crate, +/obj/item/flashlight/flare, +/obj/item/flashlight/flare, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"eB" = ( +/obj/machinery/door/window/southright, +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/mob_spawn/human/corpse, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"eE" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"eF" = ( +/obj/structure/sign/poster/official/random{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"eH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"eI" = ( +/obj/item/gem/fdiamond, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"eJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"eQ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 9 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate/large, +/obj/item/stack/sheet/metal/ten, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"eR" = ( +/obj/effect/decal/cleanable/robot_debris/gib, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"eU" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"eW" = ( +/obj/effect/decal/cleanable/robot_debris, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"fb" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"fc" = ( +/obj/item/disk/puzzle{ + id = "mine_armory" + }, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"fd" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"ff" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"fg" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"fi" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"fk" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"fp" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 1 + }, +/obj/structure/rack, +/obj/item/fireaxe, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"fq" = ( +/obj/structure/table/reinforced, +/obj/item/wrench, +/obj/item/paper/fluff/awaymissions/robot_factory/shipment_details, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"fr" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"fu" = ( +/obj/effect/mob_spawn/human/corpse/assistant, +/obj/machinery/light, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/scientist_raid) +"fv" = ( +/obj/effect/decal/cleanable/robot_debris, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"fA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/official/no_erp{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"fE" = ( +/obj/item/shield/riot, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"fG" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/item/storage/backpack, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"fI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"fL" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"fN" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/awaymission/vr/combat_robot_factory) +"fR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"fU" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/awaymission/vr/scientist_raid) +"fX" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower, +/obj/structure/sign/poster/official/random{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"gb" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"gc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"gf" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/fluff/empty_sleeper{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/hub) +"gi" = ( +/obj/structure/closet/crate/large, +/obj/effect/turf_decal/delivery, +/mob/living/simple_animal/hostile/robot/burst, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"gn" = ( +/obj/machinery/door/window/southright, +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"gp" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"gw" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 9 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/storage/box/lethalshot, +/obj/item/storage/box/lethalshot, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"gx" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/table, +/obj/item/melee/baton/loaded, +/obj/item/disk/holodisk/combat_robot/factory_floor, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"gz" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/item/ammo_casing/n762{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/item/ammo_casing/n762{ + pixel_x = 8; + pixel_y = -9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"gC" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"gH" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"gK" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 11; + pixel_y = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"gM" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"gQ" = ( +/obj/machinery/papershredder, +/obj/item/shreddedpaper, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"gS" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/hub) +"gT" = ( +/obj/machinery/door/airlock{ + name = "Supervisors's Quarters" + }, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/carpet, +/area/awaymission/vr/combat_robot_factory) +"gU" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"gY" = ( +/obj/structure/sign/poster/official/anti_self{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"gZ" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 4 + }, +/obj/machinery/suit_storage_unit/open, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"hc" = ( +/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"hm" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"hn" = ( +/obj/structure/sign/poster/official/random{ + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"hq" = ( +/obj/effect/decal/cleanable/blood, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"hr" = ( +/obj/machinery/door/airlock/external, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"ht" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"hu" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/table/glass, +/obj/item/storage/firstaid/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/storage/firstaid/toxin, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"hy" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/purple/filled/line, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"hz" = ( +/mob/living/simple_animal/hostile/robot{ + AIStatus = 3 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"hB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/closet, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/shoes/sneakers/orange, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"hC" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"hE" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"hF" = ( +/obj/effect/spawner/structure/window/reinforced/indestructable, +/turf/open/floor/plating, +/area/awaymission/vr/abandoned_mine) +"hH" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 8 + }, +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"hM" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"hO" = ( +/obj/effect/turf_decal/trimline/secred/filled/corner/lower{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"hS" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"hU" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"hV" = ( +/obj/machinery/door/airlock/mining{ + name = "Shipping" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"hZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"ia" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"ij" = ( +/mob/living/simple_animal/hostile/robot/advanced/ranged, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"ik" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 10 + }, +/obj/structure/guncase/shotgun, +/obj/item/gun/ballistic/shotgun/doublebarrel/lethal, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"in" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/abandoned_mine) +"iv" = ( +/obj/effect/decal/cleanable/blood/footprints, +/obj/effect/turf_decal/trimline/green/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"iw" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"iy" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"iB" = ( +/obj/structure/curtain, +/obj/machinery/shower, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/abandoned_mine) +"iD" = ( +/obj/machinery/door/airlock{ + name = "Personal Quarters" + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"iH" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/ai_cpu/advanced, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"iJ" = ( +/turf/open/floor/plating, +/area/awaymission/vr/abandoned_mine) +"iM" = ( +/obj/structure/shuttle/engine/propulsion/burst/right, +/turf/open/floor/plating/airless, +/area/awaymission/vr/scientist_raid) +"iN" = ( +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/abandoned_mine) +"iP" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 4 + }, +/obj/machinery/button_puzzle{ + id = "mine_button"; + pixel_x = 24; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"iQ" = ( +/obj/structure/bed, +/obj/item/bedsheet/centcom, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/disk/puzzle{ + id = "corporate_dorm" + }, +/turf/open/floor/wood/broken/seven, +/area/awaymission/vr/combat_robot_factory) +"iS" = ( +/obj/structure/table/wood, +/obj/item/book, +/obj/item/paper/fluff/awaymissions/robot_factory/advanced_model, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"iU" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/hub) +"iZ" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/airlock/titanium, +/turf/open/floor/plating, +/area/awaymission/vr/scientist_raid) +"jb" = ( +/turf/closed/indestructible/riveted, +/area/awaymission/vr/abandoned_mine) +"jg" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"ji" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/fluff/empty_sleeper{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/hub) +"jj" = ( +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"jn" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/structure/closet, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/shoes/sneakers/orange, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"jr" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"jt" = ( +/obj/machinery/light, +/obj/effect/turf_decal/trimline/brown/filled/line/lower, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"ju" = ( +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"jx" = ( +/obj/structure/chair/stool, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"jy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/light, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"jz" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"jA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"jB" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/table, +/obj/item/reagent_containers/syringe{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/restraints/handcuffs{ + pixel_x = -1; + pixel_y = 7 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"jD" = ( +/turf/closed/indestructible/rock, +/area/awaymission/vr/abandoned_mine) +"jE" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"jG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"jO" = ( +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"jT" = ( +/obj/structure/table, +/obj/item/clothing/gloves/color/latex, +/obj/item/clothing/suit/apron/surgical, +/obj/item/clothing/mask/surgical, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"ka" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"kg" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"kl" = ( +/obj/effect/landmark/vr_spawn/vr_mission/scientist_raid, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/scientist_raid) +"km" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/mob_spawn/human/corpse/syndicatesoldier, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"ko" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"kp" = ( +/obj/machinery/recharge_station, +/turf/open/floor/plating, +/area/awaymission/vr/hub) +"kq" = ( +/obj/effect/spawner/structure/window/reinforced/shutter, +/obj/machinery/door/poddoor, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"ks" = ( +/mob/living/simple_animal/hostile/robot, +/obj/structure/sign/poster/official/random{ + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"kv" = ( +/obj/machinery/autolathe{ + name = "main processing assembly" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"kA" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"kD" = ( +/obj/effect/mapping_helpers/dead_body_placer, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"kI" = ( +/obj/item/bedsheet, +/obj/structure/bed, +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 5 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"kJ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"kR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/sleeper{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"kT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/rack, +/obj/item/card/id/away{ + desc = "An identification permitting access to all sections of corporate factories"; + icon_state = "centcom"; + name = "corporate ID card" + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"kW" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/clothing/suit/armor/riot{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/clothing/suit/armor/riot{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot{ + pixel_x = 2; + pixel_y = -4 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"lk" = ( +/obj/machinery/computer/operating, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"lr" = ( +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"ls" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"lF" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 4 + }, +/obj/structure/sign/poster/official/random{ + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"lG" = ( +/obj/structure/sign/poster/official/do_not_question{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"lI" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 9 + }, +/obj/structure/rack, +/obj/item/storage/box/lethalshot, +/obj/item/storage/box/lethalshot, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"lL" = ( +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/obj/item/paper/fluff/awaymissions/robot_factory/spider, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"lR" = ( +/turf/open/space/basic, +/area/awaymission/vr/scientist_raid) +"lU" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"lV" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"ma" = ( +/obj/machinery/door/airlock/engineering{ + name = "Quality Assurance" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"mc" = ( +/obj/machinery/door/airlock/medical{ + name = "Discarded Research" + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"me" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"mf" = ( +/obj/structure/bed, +/obj/item/bedsheet/ian, +/turf/open/floor/carpet, +/area/awaymission/vr/combat_robot_factory) +"mj" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"ml" = ( +/obj/structure/kitchenspike, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"mo" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"mp" = ( +/obj/effect/spawner/structure/window/reinforced/shutter, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"mq" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"mv" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"my" = ( +/turf/closed/indestructible/riveted, +/area/awaymission/vr/hub) +"mC" = ( +/obj/machinery/door/airlock{ + name = "Personal Quarters" + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"mE" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"mG" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"mI" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/hub) +"mL" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"mO" = ( +/obj/structure/table/glass, +/obj/item/folder/white, +/turf/open/floor/carpet/royalblue, +/area/awaymission/vr/combat_robot_factory) +"mP" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"mQ" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"mT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"mU" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"mW" = ( +/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"mX" = ( +/obj/item/bedsheet, +/obj/structure/bed, +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"nc" = ( +/obj/machinery/autolathe{ + name = "tool mounting" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"nj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small, +/turf/open/floor/carpet, +/area/awaymission/vr/combat_robot_factory) +"nq" = ( +/obj/structure/table, +/obj/item/storage/box/donkpockets/donkpocketpizza, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"nw" = ( +/obj/structure/curtain, +/obj/machinery/shower, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"ny" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"nD" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/table, +/obj/item/restraints/handcuffs/cable/red{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/restraints/handcuffs/cable/red{ + pixel_x = 1; + pixel_y = -1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"nF" = ( +/turf/closed/indestructible/riveted, +/area/awaymission/vr/scientist_raid) +"nH" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"nI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/freezer/blood, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"nK" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"nN" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"nS" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/structure/bed/dogbed{ + name = "cat bed" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel/cafeteria, +/area/awaymission/vr/combat_robot_factory) +"nY" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"oa" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/decal/cleanable/blood, +/obj/machinery/light/broken, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"ob" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"of" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"oi" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 1 + }, +/obj/effect/mob_spawn/human/corpse/cargo_tech, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"oj" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"om" = ( +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"oq" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/awaymission/vr/hub) +"ot" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"oE" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 5 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"oG" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 5 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"oH" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"oJ" = ( +/mob/living/simple_animal/hostile/poison/giant_spider, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/plasteel/grimy, +/area/awaymission/vr/combat_robot_factory) +"oK" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"oM" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 10 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"oP" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"oR" = ( +/obj/structure/table, +/obj/item/ai_cpu, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"oT" = ( +/turf/closed/wall, +/area/awaymission/vr/scientist_raid) +"oU" = ( +/mob/living/simple_animal/hostile/retaliate/clown/mutant/blob{ + loot = list(/obj/item/clothing/mask/gas/clown_hat,/obj/effect/gibspawner/xeno/bodypartless,/obj/effect/particle_effect/fluid/foam,/obj/item/soap,/obj/effect/gibspawner/generic,/obj/effect/gibspawner/generic/animal,/obj/effect/gibspawner/human/bodypartless,/obj/effect/gibspawner/human,/obj/item/holo/esword) + }, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"pc" = ( +/obj/structure/window/reinforced, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/bed, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"pe" = ( +/obj/effect/decal/remains/human, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"pg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet, +/area/awaymission/vr/combat_robot_factory) +"ph" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"pk" = ( +/obj/machinery/door/poddoor{ + id = "nothing"; + name = "programming access" + }, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"pn" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"pt" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"pv" = ( +/obj/effect/decal/remains/human, +/obj/machinery/light, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"pw" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate/large, +/obj/item/stack/sheet/metal/ten, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"py" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"pA" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"pF" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate/large, +/obj/item/stack/sheet/metal/five, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"pJ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"pK" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"pL" = ( +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"pO" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/obj/structure/table, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"pU" = ( +/obj/machinery/conveyor{ + id = "QMLoad" + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"pV" = ( +/obj/structure/bed, +/obj/item/bedsheet/red, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"pZ" = ( +/obj/effect/decal/cleanable/robot_debris, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"qd" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"qf" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"qh" = ( +/obj/machinery/door/airlock{ + name = "Personal Quarters" + }, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"qi" = ( +/obj/machinery/computer/slot_machine, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"qj" = ( +/turf/closed/wall, +/area/awaymission/vr/combat_robot_factory) +"qk" = ( +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"qp" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"qq" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"qs" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"qz" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"qI" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"qK" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"qL" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"qP" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"qT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"ra" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"rb" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 5 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"rd" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower, +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"re" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"rf" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 9 + }, +/obj/structure/table, +/obj/item/ai_cpu, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"rg" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"rh" = ( +/obj/item/grenade/flashbang{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"rj" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"rk" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, +/obj/machinery/light, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"rs" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"ru" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"rw" = ( +/obj/structure/sign/poster/official/random, +/turf/closed/wall, +/area/awaymission/vr/scientist_raid) +"rE" = ( +/obj/machinery/light, +/turf/open/floor/grass, +/area/awaymission/vr/scientist_raid) +"rG" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"rH" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, +/obj/effect/mob_spawn/human/corpse/assistant, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"rJ" = ( +/obj/structure/window/reinforced, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"rN" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"rO" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 10 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"rQ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"rS" = ( +/obj/machinery/computer{ + dir = 4; + name = "communications computer" + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/hub) +"rT" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"rZ" = ( +/mob/living/simple_animal/hostile/robot/range, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"sb" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"sd" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"sg" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/table/reinforced, +/obj/item/melee/baton/loaded, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"sm" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen{ + pixel_y = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"sq" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 8 + }, +/obj/machinery/button_puzzle{ + id = "mine_button"; + pixel_x = -23; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"sx" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 1 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate/large, +/obj/item/stack/sheet/metal/ten, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"sC" = ( +/mob/living/simple_animal/hostile/robot, +/obj/machinery/conveyor{ + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"sD" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/machinery/door/window/southright, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"sF" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"sH" = ( +/obj/machinery/door/password{ + name = "Emergency Supplies"; + password = "Benny"; + voice_activated = 1 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"sL" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/grass, +/area/awaymission/vr/scientist_raid) +"sO" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Sickbay" + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"sQ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 6 + }, +/obj/structure/table, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"sU" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"sW" = ( +/obj/structure/bed, +/obj/item/bedsheet/red, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"tc" = ( +/obj/item/ammo_casing/n762{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/item/ammo_casing/n762{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"tf" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"th" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"tj" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/scalpel, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"tz" = ( +/obj/machinery/door/password/button_puzzle{ + id = "mine_button" + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"tA" = ( +/obj/machinery/door/airlock/security{ + name = "Cell 1" + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"tB" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/robot_debris, +/obj/structure/sign/poster/official/random{ + pixel_x = 32 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"tC" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"tK" = ( +/obj/machinery/door/password/floppy_disk{ + id = "mine_floppy"; + name = "Command Centre" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"tL" = ( +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"tO" = ( +/obj/structure/closet, +/obj/item/paper/crumpled/bloody/fluff/awaymissions/scientist_raid/report5, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"tP" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/structure/table, +/obj/item/reagent_containers/blood/random, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"tQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/book/manual/wiki/medicine{ + pixel_x = 6; + pixel_y = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"tW" = ( +/turf/closed/indestructible/fakedoor{ + name = "Uplink Access" + }, +/area/awaymission/vr/abandoned_mine) +"tX" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"tZ" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"ua" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"ud" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"ue" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 8 + }, +/obj/machinery/door/airlock/mining{ + name = "Storage" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"uf" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/open/floor/plating/airless, +/area/awaymission/vr/scientist_raid) +"ui" = ( +/obj/effect/decal/cleanable/ash/large, +/turf/open/floor/wood/broken/four, +/area/awaymission/vr/combat_robot_factory) +"um" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"un" = ( +/obj/machinery/door/airlock/security{ + name = "Organic Storage" + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"up" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 4 + }, +/obj/structure/table, +/obj/item/paper/fluff/awaymissions/mine_contract{ + pixel_x = 7; + pixel_y = -1 + }, +/obj/item/storage/firstaid{ + pixel_x = -7; + pixel_y = -1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"ut" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper/fluff/awaymissions/robot_factory/benny, +/turf/open/floor/carpet, +/area/awaymission/vr/combat_robot_factory) +"uz" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"uB" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"uC" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"uF" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/abandoned_mine) +"uG" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"uI" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/effect/turf_decal/trimline/green/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"uK" = ( +/mob/living/simple_animal/hostile/poison/giant_spider/nurse/midwife, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"uT" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"uV" = ( +/obj/machinery/vending/snack/random, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"uZ" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"vb" = ( +/obj/structure/table, +/obj/item/wrench, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"vh" = ( +/obj/structure/bed, +/obj/item/bedsheet/red, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/structure/sign/poster/contraband/lusty_xenomorph{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"vj" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"vk" = ( +/obj/machinery/anesthetic_machine/roundstart, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"vl" = ( +/obj/structure/plasticflaps, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"vn" = ( +/obj/structure/table/wood, +/obj/item/storage/pill_bottle/dice, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"vp" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/awaymission/vr/scientist_raid) +"vq" = ( +/obj/machinery/vending/snack/random, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"vr" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"vt" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Corporate Liason Office" + }, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"vu" = ( +/obj/structure/table/wood, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/carpet/blue, +/area/awaymission/vr/scientist_raid) +"vy" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"vD" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"vF" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 6 + }, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"vH" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "crew maintenance compartment" + }, +/turf/open/floor/plating, +/area/awaymission/vr/hub) +"vP" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"vQ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 9 + }, +/obj/machinery/ai/server_cabinet, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"vT" = ( +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/hub) +"vV" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"vW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/table, +/obj/item/clothing/glasses/hud/health{ + pixel_x = 1 + }, +/obj/item/clothing/glasses/hud/health{ + pixel_x = 7; + pixel_y = -5 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"vY" = ( +/obj/machinery/compsci_reciever, +/obj/structure/table, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"vZ" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"wa" = ( +/obj/machinery/door/airlock/mining{ + name = "Cargo" + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"wh" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"wi" = ( +/obj/effect/turf_decal/trimline/engiyellow/filled/line/lower, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"wk" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate/large, +/obj/item/paper/fluff/awaymissions/button_puzzle{ + id = "mine_button"; + pixel_x = -9; + pixel_y = 3 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"wm" = ( +/obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ + dir = 4 + }, +/obj/structure/table, +/obj/item/stack/cable_coil/random/thirty, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"ws" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"wy" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/machinery/door/airlock/highsecurity{ + name = "????"; + req_access_txt = "0" + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"wB" = ( +/obj/structure/showcase/mecha/ripley{ + desc = "A stand with an experimental exploration mech attached. These were used by human exploration crews before the Corporation realized robots could do the job."; + name = "experimental exploration mech" + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/hub) +"wJ" = ( +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"wL" = ( +/obj/effect/decal/cleanable/robot_debris, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"wO" = ( +/obj/structure/window/reinforced, +/turf/open/floor/wood/broken/six, +/area/awaymission/vr/combat_robot_factory) +"wP" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"wQ" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"xa" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 6 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate/large, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"xd" = ( +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"xg" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 5 + }, +/obj/structure/rack, +/obj/item/clothing/suit/armor/vest, +/obj/item/clothing/suit/armor/vest, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"xh" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"xl" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"xm" = ( +/mob/living/simple_animal/hostile/robot, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"xp" = ( +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 11; + pixel_y = 4 + }, +/obj/effect/decal/cleanable/blood/drip, +/obj/item/ammo_casing/n762{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/item/ammo_casing/n762{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"xr" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/official/random{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"xs" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engine Room" + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"xu" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"xw" = ( +/obj/machinery/door/airlock/mining{ + name = "Storage Room" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"xx" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"xE" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"xJ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"xK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"xP" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"xU" = ( +/obj/structure/closet/crate, +/obj/item/flashlight, +/obj/item/flashlight, +/obj/item/weldingtool, +/obj/item/flashlight/flare, +/obj/item/flashlight/flare, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"xY" = ( +/obj/structure/flora/ausbushes/grassybush, +/turf/open/floor/grass, +/area/awaymission/vr/scientist_raid) +"ya" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating/airless, +/area/awaymission/vr/hub) +"yf" = ( +/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_x = 10; + pixel_y = 4 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_x = 10; + pixel_y = 16 + }, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"yh" = ( +/obj/machinery/door/airlock{ + name = "Restroom" + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"yy" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 6 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"yA" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"yB" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"yC" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel/cafeteria, +/area/awaymission/vr/combat_robot_factory) +"yD" = ( +/obj/structure/bodycontainer/morgue, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"yE" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"yG" = ( +/obj/machinery/microwave, +/obj/structure/table_frame, +/obj/item/reagent_containers/food/snacks/badrecipe, +/turf/open/floor/plasteel/grimy, +/area/awaymission/vr/combat_robot_factory) +"yI" = ( +/obj/structure/closet/crate, +/obj/effect/turf_decal/bot, +/obj/item/paper/fluff/awaymissions/scientist_raid/report2, +/obj/item/trash/energybar, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"yJ" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower, +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"yN" = ( +/obj/machinery/light, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"yQ" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"yR" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"yU" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel/grimy, +/area/awaymission/vr/combat_robot_factory) +"yX" = ( +/obj/structure/closet/crate/large, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/lethalshot, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"za" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"ze" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"zg" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"zh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"zi" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"zo" = ( +/obj/item/ammo_casing/n762{ + pixel_x = -6; + pixel_y = 7 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"zw" = ( +/obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ + dir = 6 + }, +/obj/structure/table, +/obj/item/weldingtool/largetank, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"zx" = ( +/obj/structure/table, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"zC" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/sign/poster/official/random{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"zE" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/closet, +/obj/item/paper/fluff/awaymissions/scientist_raid/report3, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"zK" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"zR" = ( +/obj/structure/bed, +/obj/item/bedsheet/cmo{ + name = "doctors's bedsheet" + }, +/obj/item/reagent_containers/food/snacks/meat/slab, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"zT" = ( +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/scientist_raid) +"zX" = ( +/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, +/obj/effect/decal/cleanable/blood/gibs/core, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"zZ" = ( +/turf/closed/mineral, +/area/awaymission/vr/abandoned_mine) +"Aa" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Ad" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table, +/obj/machinery/compsci_reciever, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/scientist_raid) +"Ah" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/open/floor/grass, +/area/awaymission/vr/scientist_raid) +"Ak" = ( +/obj/structure/table, +/turf/open/floor/plating, +/area/awaymission/vr/hub) +"Am" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Ao" = ( +/obj/effect/decal/remains/human, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"Ap" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"Aq" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate/large, +/obj/item/kitchen/knife/combat/survival, +/obj/item/kitchen/knife/combat/survival, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Ar" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/item/ammo_casing/n762{ + pixel_x = 8; + pixel_y = -9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Au" = ( +/obj/structure/shuttle/engine/propulsion/burst/left, +/turf/open/floor/plating/airless, +/area/awaymission/vr/scientist_raid) +"Ax" = ( +/obj/structure/bed, +/obj/item/bedsheet/rd, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"Az" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/healthanalyzer, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"AC" = ( +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"AF" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"AH" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 6 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"AL" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"AN" = ( +/turf/open/floor/carpet/blue, +/area/awaymission/vr/scientist_raid) +"AO" = ( +/obj/item/organ/tail/cat, +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/blood/innards, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"AP" = ( +/turf/open/floor/grass, +/area/awaymission/vr/scientist_raid) +"AQ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"AR" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"AT" = ( +/obj/item/ammo_casing/n762{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"AV" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"AW" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"AX" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Foreman's Office" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Bb" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/abandoned_mine) +"Bf" = ( +/mob/living/simple_animal/hostile/robot/advanced, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Bl" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -6; + pixel_y = 10 + }, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"Bm" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Bn" = ( +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/hub) +"Bo" = ( +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Br" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Bx" = ( +/obj/structure/bed, +/obj/item/bedsheet/red, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Bz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"BC" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate/medical, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"BD" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/flashlight/lamp, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"BE" = ( +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/scientist_raid) +"BK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/hub) +"BL" = ( +/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/blood/innards, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"BO" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"BP" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/item/toy/cards/deck{ + pixel_x = 2 + }, +/obj/item/fireaxe, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"BQ" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"BR" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"BT" = ( +/obj/structure/rack, +/obj/item/flashlight, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"BU" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/obj/effect/decal/cleanable/blood/splatter, +/obj/structure/table, +/obj/item/circular_saw, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"BV" = ( +/obj/structure/rack, +/obj/item/reagent_containers/glass/bucket, +/obj/item/storage/bag/trash, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"Cc" = ( +/obj/machinery/door/airlock/medical{ + name = "Recovery Room" + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"Ce" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"Cn" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engineering"; + req_one_access_txt = "0" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Cv" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"CD" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"CF" = ( +/obj/machinery/light/small, +/turf/open/floor/plating, +/area/awaymission/vr/hub) +"CH" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 10 + }, +/obj/structure/table, +/obj/item/storage/box/flashbangs, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"CJ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/ai/server_cabinet, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"CR" = ( +/obj/structure/showcase/horrific_experiment, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"CS" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 5 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/melee/classic_baton/telescopic{ + pixel_x = 4; + pixel_y = 7 + }, +/obj/item/melee/classic_baton/telescopic{ + pixel_x = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"CU" = ( +/obj/machinery/holopad/tutorial, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Da" = ( +/obj/machinery/light, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"Dd" = ( +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"Dj" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Dk" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/hub) +"Dn" = ( +/obj/structure/rack, +/obj/item/latexballon, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"Do" = ( +/obj/structure/closet/crate, +/obj/effect/turf_decal/bot, +/obj/item/trash/sosjerky, +/obj/item/trash/can, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Dp" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 4 + }, +/obj/machinery/sleeper{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"Dr" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Ds" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Dt" = ( +/mob/living/simple_animal/hostile/alien/drone, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"Dw" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Dx" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/scientist_raid) +"DC" = ( +/obj/structure/table, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"DE" = ( +/obj/effect/spawner/structure/window/reinforced/shutter, +/turf/open/floor/plating, +/area/awaymission/vr/scientist_raid) +"DF" = ( +/mob/living/simple_animal/hostile/poison/giant_spider, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"DG" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"DI" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"DL" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"DO" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"DP" = ( +/obj/machinery/light, +/obj/effect/turf_decal/trimline/blue/filled/line/lower, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"DS" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"Ee" = ( +/turf/open/space/basic, +/area/awaymission/vr/combat_robot_factory) +"Eg" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"Eh" = ( +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/pen, +/turf/open/floor/carpet/royalblue, +/area/awaymission/vr/combat_robot_factory) +"Eq" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Command Room" + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Er" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Eu" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Ew" = ( +/obj/machinery/papershredder, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"EL" = ( +/mob/living/simple_animal/hostile/alien/queen/large{ + health = 250; + ranged = 0 + }, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"EM" = ( +/obj/machinery/computer{ + dir = 4; + name = "navigation computer" + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/hub) +"EP" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"EU" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/vr/scientist_raid) +"EW" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"EZ" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Fa" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/machinery/computer/arcade/orion_trail, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Fb" = ( +/obj/structure/flora/ausbushes/leafybush, +/turf/open/floor/grass, +/area/awaymission/vr/scientist_raid) +"Fc" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/shuttle/engine/heater, +/turf/open/floor/plating/airless, +/area/awaymission/vr/scientist_raid) +"Ff" = ( +/mob/living/simple_animal/hostile/robot, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Fg" = ( +/obj/structure/bed, +/obj/item/bedsheet/ce{ + name = "foreman's bedsheet" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/gibs/up, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"Fi" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Fk" = ( +/obj/item/bedsheet, +/obj/structure/bed, +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Fm" = ( +/obj/structure/spider/cocoon, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"Fp" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 10 + }, +/obj/structure/ore_box, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Fq" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Fr" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/mob_spawn/human/corpse/syndicatesoldier, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Ft" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = -1; + pixel_y = 6 + }, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"Fv" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"FB" = ( +/obj/structure/table, +/obj/item/storage/firstaid/brute{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"FE" = ( +/mob/living/simple_animal/hostile/robot{ + AIStatus = 3 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"FF" = ( +/obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ + dir = 5 + }, +/obj/structure/table, +/obj/item/fireaxe, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"FI" = ( +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"FJ" = ( +/obj/structure/showcase/cyborg{ + desc = "A stand with the empty body of an early exploration cyborg bolted to it. The series were retired after the Company realized they never found any survivors..."; + name = "model AX-7 exploration droid" + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/hub) +"FM" = ( +/obj/machinery/door/airlock/public{ + name = "Canteen" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"FS" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 4 + }, +/obj/structure/table, +/obj/item/flashlight, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Ga" = ( +/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Gd" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Gk" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"Gl" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "storage compartment" + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"Gu" = ( +/mob/living/simple_animal/hostile/robot/advanced, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"Gw" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/sleeper{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"GF" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Doctor's Office" + }, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/turf/open/floor/plasteel/cafeteria, +/area/awaymission/vr/combat_robot_factory) +"GG" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/turf/open/floor/carpet/blue, +/area/awaymission/vr/combat_robot_factory) +"GJ" = ( +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plasteel/grimy, +/area/awaymission/vr/combat_robot_factory) +"GK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 8 + }, +/obj/structure/sign/poster/official/random{ + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"GN" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/papershredder, +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"GO" = ( +/obj/structure/table, +/obj/item/paper/fluff/awaymissions/mine_coordinates, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"GP" = ( +/obj/effect/turf_decal/bot, +/obj/structure/table, +/obj/machinery/compsci_reciever, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"GU" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 5 + }, +/obj/structure/rack, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"GY" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"Ha" = ( +/turf/open/floor/carpet, +/area/awaymission/vr/combat_robot_factory) +"Hh" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Exploration Drone Distpatch" + }, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"Hj" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Hn" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Sickbay" + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"Ho" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner/lower{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Hr" = ( +/obj/structure/closet/crate/large, +/obj/effect/turf_decal/delivery, +/mob/living/simple_animal/hostile/robot, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Hv" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Hw" = ( +/turf/closed/wall, +/area/awaymission/vr/abandoned_mine) +"Hy" = ( +/obj/item/clothing/suit/armor/riot/knight{ + armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 25, "acid" = 25, "wound" = 30) + }, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"Hz" = ( +/obj/structure/closet, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"HA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 8 + }, +/obj/effect/mob_spawn/human/corpse/assistant, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"HB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"HE" = ( +/obj/structure/table/wood, +/obj/item/storage/crayons, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"HG" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/turf/open/floor/carpet/blue, +/area/awaymission/vr/combat_robot_factory) +"HI" = ( +/obj/structure/chair/office/dark, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"HN" = ( +/obj/effect/landmark/vr_spawn/vr_mission/abandoned_mine, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"HO" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"HS" = ( +/obj/effect/decal/cleanable/ash/large, +/turf/open/floor/wood/broken/two, +/area/awaymission/vr/combat_robot_factory) +"HT" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 10 + }, +/obj/structure/guncase/shotgun, +/obj/item/gun/ballistic/shotgun/doublebarrel/lethal, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"HU" = ( +/obj/structure/table, +/obj/item/storage/backpack/duffelbag/med/surgery, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"HW" = ( +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Ia" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Ig" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/structure/table, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/hub) +"Ih" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 5 + }, +/obj/machinery/button_puzzle{ + id = "mine_button"; + pixel_x = 24; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Im" = ( +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Ip" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe/lethal/choral, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/royalblue, +/area/awaymission/vr/combat_robot_factory) +"Ir" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/item/storage/backpack, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Is" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Iw" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Ix" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Iz" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/light/broken{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"IA" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 6 + }, +/obj/structure/rack, +/obj/item/storage/firstaid/regular, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"IG" = ( +/obj/machinery/door/airlock/public{ + name = "Breakroom" + }, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plasteel/grimy, +/area/awaymission/vr/combat_robot_factory) +"IN" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"IS" = ( +/turf/open/space/basic, +/area/awaymission/vr/abandoned_mine) +"IW" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Jb" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/official/random{ + pixel_y = 32 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Jc" = ( +/obj/machinery/door/airlock/security, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Je" = ( +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Ji" = ( +/obj/machinery/door/password{ + name = "Factory Floor Access"; + password = "Zandar"; + voice_activated = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Jj" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 6 + }, +/obj/structure/table/glass, +/obj/item/storage/firstaid/toxin, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"Jl" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"Jm" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/structure/table/optable, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"Jq" = ( +/obj/item/ammo_box/magazine/m45, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"Jt" = ( +/obj/structure/bed, +/obj/item/bedsheet/red, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Ju" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"Jv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/screwdriver, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Jy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"JE" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"JG" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"JH" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"JI" = ( +/obj/structure/table, +/obj/item/paper/pamphlet/away/safety_pamphlet, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"JM" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"JN" = ( +/obj/structure/chair/office/dark, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"JO" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"JT" = ( +/obj/item/bedsheet, +/obj/structure/bed, +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"JY" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 10 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate/large, +/obj/item/stack/sheet/metal/twenty, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"JZ" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Kf" = ( +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"Kh" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/ammo_casing/shotgun/buckshot, +/obj/item/ammo_casing/shotgun/buckshot, +/obj/item/gun/ballistic/shotgun/doublebarrel/lethal, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Kl" = ( +/obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ + dir = 9 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Km" = ( +/mob/living/simple_animal/pet/dog/bullterrier{ + dir = 4; + name = "Benny" + }, +/turf/open/floor/carpet, +/area/awaymission/vr/combat_robot_factory) +"Kp" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"Kr" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner/lower, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Kt" = ( +/obj/structure/chair/office/light, +/turf/open/floor/carpet/royalblue, +/area/awaymission/vr/combat_robot_factory) +"Kz" = ( +/obj/item/ammo_casing/n762{ + pixel_x = -7; + pixel_y = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"KD" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/blue, +/area/awaymission/vr/combat_robot_factory) +"KG" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"KI" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"KM" = ( +/obj/structure/curtain, +/obj/machinery/shower{ + dir = 1 + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"KQ" = ( +/obj/machinery/light/small/broken, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"KW" = ( +/obj/structure/bed, +/obj/item/bedsheet/red, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"KX" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"Ld" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Le" = ( +/turf/open/floor/carpet/royalblue, +/area/awaymission/vr/combat_robot_factory) +"Lq" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Lr" = ( +/obj/structure/table, +/obj/item/storage/toolbox, +/turf/open/floor/plating, +/area/awaymission/vr/hub) +"Lt" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/table, +/obj/item/disk/holodisk/combat_robot/classified, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Lu" = ( +/obj/structure/closet, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"Lz" = ( +/obj/structure/bed, +/obj/item/bedsheet/red, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"LF" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/scientist_raid) +"LH" = ( +/obj/effect/decal/cleanable/blood/gibs/core, +/mob/living/simple_animal/hostile/robot{ + AIStatus = 3 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"LI" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"LK" = ( +/obj/structure/table, +/obj/item/ammo_box/magazine/m45, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"LL" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/official/do_not_question{ + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"LQ" = ( +/obj/structure/showcase/horrific_experiment, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"LS" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate/large, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"LV" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/table, +/obj/item/restraints/handcuffs, +/obj/item/restraints/handcuffs, +/obj/item/restraints/handcuffs, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"LX" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/ai/server_cabinet, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"LZ" = ( +/obj/machinery/door/airlock/security{ + name = "Cell " + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"Md" = ( +/obj/machinery/door/airlock{ + name = "Worker's Quarters" + }, +/obj/effect/decal/cleanable/blood/footprints, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Me" = ( +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Mh" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/plasteel/grimy, +/area/awaymission/vr/combat_robot_factory) +"Mn" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 9 + }, +/obj/structure/table, +/obj/item/paper/fluff/awaymissions/button_puzzle{ + id = "mine_button" + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Mo" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen{ + pixel_y = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Mr" = ( +/turf/open/space/basic, +/area/awaymission/vr/hub) +"Mu" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/robot, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Mv" = ( +/obj/item/paper/fluff/awaymissions/button_puzzle{ + id = "mine_button"; + pixel_y = -1 + }, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"My" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/machinery/light, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"MA" = ( +/obj/structure/flora/rock, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"MC" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/scientist_raid) +"MF" = ( +/obj/structure/chair/comfy/brown, +/turf/open/floor/carpet/blue, +/area/awaymission/vr/combat_robot_factory) +"ML" = ( +/obj/item/gun/ballistic/automatic/pistol/m1911, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"MN" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"MQ" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"MR" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 + }, +/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"MS" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/sign/poster/official/random{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"MT" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"MV" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/vending/cigarette, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"MW" = ( +/obj/machinery/door/airlock/public{ + name = "Bathroom" + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/scientist_raid) +"MY" = ( +/obj/machinery/scanner_gate{ + desc = "A gate that disables all low-level functions of machinery passing through"; + name = "deactivation gate" + }, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Nd" = ( +/obj/structure/sign/poster/official/random{ + pixel_y = 32 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Ni" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/iv_drip, +/obj/item/reagent_containers/blood/OMinus, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"Nn" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/hub) +"Ns" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/plasteel/grimy, +/area/awaymission/vr/combat_robot_factory) +"Nw" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"NC" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"NE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"NF" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"NG" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/computer/compsci_mission_selector{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"NI" = ( +/obj/effect/mob_spawn/human/corpse/cargo_tech, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"NJ" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/cafeteria, +/area/awaymission/vr/combat_robot_factory) +"NM" = ( +/obj/structure/curtain, +/obj/machinery/shower, +/obj/item/soap/syndie, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/scientist_raid) +"NN" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/item/ammo_casing/n762{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"NR" = ( +/mob/living/simple_animal/hostile/robot, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"NS" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"NV" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 5 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"NW" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"Ob" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Od" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/hub) +"Og" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Oi" = ( +/mob/living/simple_animal/hostile/robot{ + health = 25; + name = "damaged combat robot" + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Om" = ( +/obj/structure/table, +/obj/item/razor, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/paper/fluff/awaymissions/button_puzzle{ + id = "mine_button"; + pixel_x = -9; + pixel_y = 3 + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/abandoned_mine) +"On" = ( +/obj/structure/curtain, +/obj/machinery/shower{ + dir = 1 + }, +/obj/item/soap/deluxe, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"Ou" = ( +/obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Ov" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/spaghetti/beefnoodle{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/kitchen/fork{ + pixel_x = -9; + pixel_y = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Ow" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"OC" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"OG" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"OH" = ( +/obj/effect/decal/cleanable/blood/gibs/down, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"OI" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"OK" = ( +/obj/machinery/door/airlock/external, +/turf/open/floor/plating, +/area/awaymission/vr/abandoned_mine) +"OL" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"OO" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"OQ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 11; + pixel_y = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"OV" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/open/floor/plasteel/grimy, +/area/awaymission/vr/combat_robot_factory) +"OW" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"Pa" = ( +/obj/machinery/holopad/tutorial, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Pc" = ( +/obj/structure/kitchenspike, +/obj/effect/mapping_helpers/dead_body_placer, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"Pf" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/effect/decal/cleanable/glass, +/obj/item/ammo_casing/n762{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/ammo_casing/n762{ + pixel_x = -7; + pixel_y = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Pl" = ( +/obj/machinery/autolathe{ + name = "main body fabrication" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Pm" = ( +/obj/structure/rack, +/obj/item/tank/internals/oxygen, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"Pn" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate/large, +/obj/effect/mob_spawn/human/corpse, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Po" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Janitorial Supplies" + }, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"Pu" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain, +/obj/item/soap/deluxe, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"Pw" = ( +/obj/structure/chair/office/dark, +/mob/living/simple_animal/hostile/robot/advanced, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Px" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Py" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 8 + }, +/obj/structure/table, +/obj/item/gun/ballistic/automatic/pistol/m1911/no_mag{ + pixel_x = -4; + pixel_y = -5 + }, +/obj/item/gun/ballistic/automatic/pistol/m1911/no_mag{ + pixel_x = -3; + pixel_y = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"Pz" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 4 + }, +/obj/structure/table, +/obj/item/melee/classic_baton, +/obj/item/melee/classic_baton, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"PB" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"PF" = ( +/obj/structure/barricade/security, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"PI" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/shuttle/engine/heater{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/awaymission/vr/hub) +"PK" = ( +/obj/effect/gibspawner/human, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"PN" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Armory"; + req_access_txt = "200" + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"PO" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"PS" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/papershredder, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel/cafeteria, +/area/awaymission/vr/combat_robot_factory) +"PV" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 4 + }, +/obj/machinery/button_puzzle{ + id = "mine_button"; + pixel_x = 24; + pixel_y = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"PX" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"PY" = ( +/obj/item/bedsheet, +/obj/structure/bed, +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"PZ" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/hub) +"Qa" = ( +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"Qb" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood, +/area/awaymission/vr/combat_robot_factory) +"Qd" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/open/floor/grass, +/area/awaymission/vr/scientist_raid) +"Qe" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Qi" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Qk" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 5 + }, +/obj/machinery/suit_storage_unit/open, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Qn" = ( +/obj/machinery/door/password/floppy_disk{ + id = "mine_armory"; + name = "Armory" + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"Qq" = ( +/obj/structure/table_frame, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/grimy, +/area/awaymission/vr/combat_robot_factory) +"Qr" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/scientist_raid) +"Qs" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"Qt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Qw" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Qy" = ( +/obj/structure/toilet{ + dir = 8 + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/scientist_raid) +"Qz" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"QC" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"QF" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"QK" = ( +/obj/item/ammo_box/magazine/m45, +/obj/item/ammo_box/magazine/m45, +/obj/structure/table, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"QO" = ( +/obj/machinery/door/airlock{ + name = "Worker's Quarters" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"QQ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/item/ammo_casing/n762{ + pixel_x = -7; + pixel_y = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"QU" = ( +/obj/structure/closet/crate/large, +/obj/effect/turf_decal/delivery, +/mob/living/simple_animal/hostile/robot/range, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"QV" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"QW" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner/lower{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"QY" = ( +/obj/machinery/door/password/floppy_disk{ + id = "corporate_dorm"; + name = "Classified" + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Rb" = ( +/obj/machinery/ai/server_cabinet, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"Rc" = ( +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"Re" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 6 + }, +/obj/structure/table, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Ri" = ( +/obj/structure/rack, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -9; + pixel_y = 4 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -3; + pixel_y = 4 + }, +/obj/item/soap/nanotrasen, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"Rj" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table, +/obj/item/paper/fluff/awaymissions/mine_robot_order, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Rl" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Rp" = ( +/mob/living/simple_animal/hostile/alien/sentinel, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"Rr" = ( +/turf/open/space/basic, +/area/space) +"Ru" = ( +/obj/structure/sign/poster/official/random{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Rx" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"RA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"RB" = ( +/obj/effect/landmark/vr_spawn/vr_mission/combat_robot_factory, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"RH" = ( +/obj/structure/curtain, +/obj/machinery/shower, +/obj/item/bikehorn/rubberducky, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"RJ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/bed, +/obj/item/bedsheet/prisoner, +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"RK" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 1 + }, +/obj/effect/mob_spawn/human/corpse/assistant, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"RL" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"RM" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"RQ" = ( +/obj/machinery/door/airlock/science{ + name = "Computer Science" + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"RR" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"RS" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/structure/sign/poster/official/random{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"RV" = ( +/obj/machinery/holopad/tutorial, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"RX" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"RZ" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Sa" = ( +/obj/effect/decal/cleanable/blood/splatter, +/mob/living/simple_animal/hostile/robot, +/obj/machinery/conveyor{ + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Sc" = ( +/obj/effect/turf_decal/trimline/engiyellow/filled/corner/lower{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Sf" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 5 + }, +/obj/structure/table, +/obj/item/storage/box/handcuffs, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"Sj" = ( +/mob/living/simple_animal/hostile/poison/giant_spider/tarantula, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"Sl" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Sn" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"Sq" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Sr" = ( +/obj/machinery/vending/snack, +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Ss" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"St" = ( +/obj/structure/alien/weeds/node, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"SA" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"SL" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"SM" = ( +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"SS" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"ST" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"SU" = ( +/obj/machinery/door/airlock/command{ + name = "Head Researcher" + }, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"SV" = ( +/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/item/paper/crumpled/bloody/fluff/awaymissions/robot_factory/control_man, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"SW" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/effect/mob_spawn/human/corpse, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Tf" = ( +/obj/structure/closet/crate/large, +/obj/effect/turf_decal/delivery, +/mob/living/simple_animal/hostile/robot, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Ti" = ( +/mob/living/simple_animal/hostile/robot/advanced, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Tj" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table, +/obj/item/circular_saw, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"Tm" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"To" = ( +/obj/structure/table, +/obj/item/camera, +/obj/item/camera_film, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"Tq" = ( +/obj/structure/barricade/sandbags, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Tr" = ( +/obj/structure/table_frame, +/obj/effect/decal/cleanable/cobweb, +/obj/item/kitchen/fork, +/obj/item/kitchen/knife{ + pixel_x = 10 + }, +/obj/structure/sign/poster/official/random{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/grimy, +/area/awaymission/vr/combat_robot_factory) +"Tu" = ( +/obj/item/ammo_casing/n762{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/ammo_casing/n762{ + pixel_x = -7; + pixel_y = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Tw" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/table/optable, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/hub) +"Tz" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner/lower{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"TA" = ( +/obj/effect/landmark/vr_spawn, +/obj/effect/vr_clean_master, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"TE" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"TJ" = ( +/obj/structure/table, +/obj/item/paper/fluff/awaymissions/scientist_raid/report1, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"TO" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/storage/belt/bandolier, +/obj/item/storage/belt/bandolier, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"TQ" = ( +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"TR" = ( +/obj/structure/window/reinforced, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"TS" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"TY" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"Ud" = ( +/obj/structure/table, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"Ue" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Uk" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/hub) +"Uo" = ( +/obj/structure/flora/tree/jungle/small{ + pixel_x = -31; + pixel_y = -3 + }, +/obj/item/bodypart/head{ + pixel_y = -11 + }, +/turf/open/floor/grass, +/area/awaymission/vr/scientist_raid) +"Up" = ( +/obj/machinery/ai/server_cabinet, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"Us" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"Uw" = ( +/obj/structure/bodycontainer/morgue, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"Ux" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"UA" = ( +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"UB" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"UD" = ( +/obj/structure/table, +/obj/item/toy/talking/AI, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/hub) +"UE" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"UH" = ( +/turf/closed/wall/mineral/titanium/interior, +/area/awaymission/vr/scientist_raid) +"UI" = ( +/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"UK" = ( +/obj/machinery/door/airlock/security{ + name = "Worker Protection Centre" + }, +/turf/open/floor/plating, +/area/awaymission/vr/abandoned_mine) +"UL" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"UN" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"UO" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"UP" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/table/reinforced, +/obj/item/restraints/handcuffs/cable/red{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/restraints/handcuffs/cable/red{ + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"UR" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"UW" = ( +/obj/structure/table, +/obj/item/razor, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/combat_robot_factory) +"UX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Va" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Ve" = ( +/mob/living/simple_animal/hostile/robot{ + AIStatus = 3 + }, +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Vf" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"Vh" = ( +/obj/machinery/ai/server_cabinet, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"Vj" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Vo" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Vv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/plasteel/grimy, +/area/awaymission/vr/combat_robot_factory) +"Vx" = ( +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"Vy" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"VB" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"VC" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/structure/table, +/obj/item/clothing/head/soft, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"VE" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"VG" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"VJ" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"VL" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 6 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"VO" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"VP" = ( +/obj/structure/table, +/obj/item/crowbar, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"VQ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"VZ" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/item/paper_bin{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/pen{ + pixel_x = -7; + pixel_y = -1 + }, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"Wb" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Wd" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Wf" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Storage"; + req_access_txt = "0" + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"Wh" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Wi" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 2; + pixel_y = 12 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Wm" = ( +/obj/structure/table/wood, +/obj/machinery/microwave, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Wt" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Wv" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate/large, +/obj/item/stack/sheet/metal/ten, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Ww" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"WA" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/shuttle/engine/heater{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/awaymission/vr/hub) +"WB" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"WC" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/obj/machinery/scanner_gate{ + desc = "A gate that installs proprietary firmware onto any machines passing through. This one seems to have been modified."; + name = "corrupted programming gate" + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"WG" = ( +/turf/closed/indestructible/riveted, +/area/awaymission/vr/combat_robot_factory) +"WH" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/item/gun/ballistic/automatic/pistol/m1911, +/obj/structure/rack, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"WK" = ( +/obj/structure/table/wood, +/obj/item/stack/spacecash/c500, +/obj/item/stack/spacecash/c1000{ + pixel_x = -1; + pixel_y = 10 + }, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"WL" = ( +/obj/structure/showcase/horrific_experiment, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"WQ" = ( +/obj/structure/closet/crate, +/obj/item/pickaxe, +/obj/item/pickaxe, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"WS" = ( +/obj/effect/mob_spawn/human/corpse/charredskeleton, +/obj/effect/decal/cleanable/ash/large, +/obj/machinery/light/broken{ + dir = 4 + }, +/turf/open/floor/wood/broken, +/area/awaymission/vr/combat_robot_factory) +"WW" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"WY" = ( +/obj/structure/table, +/obj/item/stack/sheet/mineral/gold, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"Xc" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower, +/turf/closed/wall, +/area/awaymission/vr/abandoned_mine) +"Xe" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Xf" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plating, +/area/awaymission/vr/abandoned_mine) +"Xg" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Xl" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"Xo" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 9 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"Xp" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/hub) +"Xq" = ( +/obj/machinery/door/airlock/mining{ + name = "Cargo" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Xv" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Xw" = ( +/obj/machinery/door/airlock{ + name = "Restroom" + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/abandoned_mine) +"Xx" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/item/soap/nanotrasen, +/obj/structure/curtain, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/scientist_raid) +"XC" = ( +/obj/structure/janitorialcart, +/obj/item/mop, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"XD" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"XF" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner/lower, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"XG" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"XJ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 4 + }, +/obj/machinery/door/airlock/mining{ + name = "Storage" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"XK" = ( +/obj/structure/table/optable, +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"XL" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"XN" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/pen{ + pixel_x = -7; + pixel_y = -1 + }, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"XO" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"XQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor{ + id = "QMLoad" + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"XT" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower, +/obj/structure/ore_box, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"XU" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/plasteel/cafeteria, +/area/awaymission/vr/combat_robot_factory) +"XW" = ( +/obj/structure/closet/crate/trashcart, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/awaymission/vr/combat_robot_factory) +"XY" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/hand_labeler, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Ya" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"Ye" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Yg" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Yh" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 1 + }, +/obj/structure/rack, +/obj/item/storage/belt/bandolier, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) +"Ym" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/plasteel/cafeteria, +/area/awaymission/vr/combat_robot_factory) +"Yo" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet, +/obj/item/disk/holodisk/combat_robot/experiment, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"Yp" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Yr" = ( +/obj/structure/table, +/obj/item/storage/box/donkpockets/donkpocketspicy, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/vr/hub) +"Yu" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/obj/structure/table, +/obj/item/reagent_containers/blood/random, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/scientist_raid) +"Yv" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"Yz" = ( +/obj/effect/mob_spawn/human/clown/corpse, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"YB" = ( +/obj/machinery/light, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"YF" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/hub) +"YG" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"YM" = ( +/obj/item/pickaxe, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"YR" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"YS" = ( +/turf/closed/indestructible/vault, +/area/awaymission/vr/abandoned_mine) +"YW" = ( +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/combat_robot_factory) +"YX" = ( +/obj/machinery/door/airlock/command{ + name = "Policy Enforcement Office" + }, +/turf/open/floor/wood, +/area/awaymission/vr/scientist_raid) +"YZ" = ( +/obj/machinery/computer{ + dir = 4; + name = "plotting computer" + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/vr/hub) +"Za" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Zm" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"Zn" = ( +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 4 + }, +/obj/structure/table, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"Zv" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/scientist_raid) +"Zy" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -11 + }, +/obj/structure/mirror{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/freezer, +/area/awaymission/vr/scientist_raid) +"ZA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/storage/firstaid/brute{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/glasses/hud/health{ + pixel_x = 1 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"ZC" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"ZE" = ( +/turf/closed/wall/mineral/titanium, +/area/awaymission/vr/scientist_raid) +"ZG" = ( +/obj/effect/turf_decal/bot, +/obj/item/disk/holodisk/combat_robot/introduction, +/obj/structure/closet/crate, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"ZI" = ( +/obj/item/kirbyplants/photosynthetic, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/scientist_raid) +"ZJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 5 + }, +/obj/machinery/vending/cola/random, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/abandoned_mine) +"ZN" = ( +/obj/effect/mob_spawn/human/corpse/nanotrasensoldier, +/turf/open/floor/plasteel, +/area/awaymission/vr/combat_robot_factory) +"ZU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel/white, +/area/awaymission/vr/combat_robot_factory) +"ZV" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/trimline/brown/filled/line/lower{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/awaymission/vr/abandoned_mine) +"ZX" = ( +/mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper, +/turf/open/floor/plating/asteroid, +/area/awaymission/vr/abandoned_mine) +"ZZ" = ( +/obj/effect/turf_decal/trimline/secred/filled/line/lower{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/awaymission/vr/abandoned_mine) + +(1,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +"} +(2,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +jD +jD +jD +IS +jD +jD +jD +jD +jD +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(3,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +TQ +TQ +KX +jD +jD +jD +TQ +TQ +TQ +jD +WG +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +ZE +ZE +ZE +ZE +ZE +ZE +ZE +ZE +ZE +ZE +ZE +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(4,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +jD +jD +IS +IS +IS +IS +IS +IS +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +TQ +jD +WG +qj +Ir +fb +pA +KW +Jt +ZC +qj +Je +jG +Je +Je +ks +Je +Je +pZ +hU +Je +Bm +mQ +Je +qj +qj +qj +qj +qj +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +ZE +BE +BE +BE +BE +Ad +BE +BE +BE +UH +ZE +Au +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(5,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +TQ +oU +TQ +jD +IS +IS +IS +IS +IS +IS +jD +jD +TQ +Hw +dj +Hw +dj +Hw +TQ +jD +jD +jD +TQ +jD +WG +qj +BP +Am +hU +Je +ap +iv +Md +ap +ap +hc +Je +Je +Je +hU +Je +Je +Je +Je +Bo +Je +qj +Tr +Qq +Mh +yG +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +ZE +BE +BE +BE +BE +BE +BE +BE +BE +BE +Fc +uf +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(6,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +TQ +TQ +jD +jD +IS +IS +IS +IS +IS +IS +jD +MA +TQ +dj +HN +vY +WQ +dj +TQ +jD +qi +yf +TQ +jD +WG +qj +HE +MT +Pa +Bx +Bx +vh +qj +qj +qj +qj +qj +Je +Je +Je +Je +Je +Je +hU +Je +lL +IG +yU +GJ +oJ +Vv +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +ZE +Qr +BE +BE +kl +BE +kl +BE +BE +BE +Fc +uf +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(7,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +jD +jD +jD +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +iJ +Im +Im +Im +iJ +TQ +jD +TQ +TQ +TQ +jD +WG +qj +vn +Wb +MT +Je +hU +uI +sH +yQ +eU +Vy +qj +qj +mj +qj +qj +qj +qj +Je +Bo +wL +qj +OV +Ns +cn +qj +qj +qj +qj +qj +Ee +Ee +Ee +Ee +nF +lR +ZE +BE +BE +BE +BE +BE +BE +BE +BE +BE +Fc +uf +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(8,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +zZ +jD +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +dj +xU +Im +bA +dj +TQ +jD +cY +dE +jx +jD +WG +qj +qj +Fa +re +pV +Lz +sW +qj +xg +Kh +IA +qj +Dn +KQ +qj +Jb +RJ +qj +eF +Je +hU +qj +qj +qj +qj +qj +xK +sF +Ni +qj +Ee +Ee +Ee +Ee +nF +lR +ZE +BE +BE +BE +BE +LF +BE +BE +BE +UH +ZE +iM +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(9,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +IS +IS +jD +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +TQ +TQ +TQ +TQ +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +TQ +Hw +dj +iJ +dj +Hw +TQ +jD +Sn +jx +TQ +jD +WG +Ee +qj +qj +QO +qj +qj +qj +qj +qj +qj +qj +qj +qj +To +qj +aA +jn +qj +ju +Bo +Je +qj +dD +sF +of +Cc +qP +RV +My +qj +Ee +Ee +Ee +Ee +nF +lR +ZE +ZE +ZE +ZE +iZ +ZE +iZ +ZE +ZE +ZE +ZE +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(10,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +jD +jD +jD +jD +jD +jD +jD +IS +IS +IS +IS +IS +IS +IS +jD +jD +TQ +PK +Yz +TQ +LK +jD +IS +IS +IS +IS +jD +jD +jD +jD +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +zZ +jD +Fm +jD +WG +Ee +qj +Je +Je +ae +qj +mf +Pu +qj +gw +YW +ik +qj +qj +qj +dJ +mp +qj +Je +xm +Je +mp +mT +Rc +DS +qj +Yo +bc +jB +qj +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +jz +PO +YG +oT +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +ya +ya +ya +ya +ya +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(11,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +TQ +TQ +jD +jD +jD +jD +jD +IS +IS +IS +jD +IS +jD +IS +jD +jD +TQ +TQ +TQ +TQ +jD +jD +jD +IS +IS +IS +jD +QK +TQ +jD +jD +jD +jD +jD +TQ +TQ +TQ +jD +jD +jD +TQ +jD +jD +jD +WG +Ee +qj +Je +Je +Je +qj +pg +Km +qj +kW +BL +de +qj +hB +gx +BR +GN +qj +hU +Je +Je +mp +tQ +Ya +vW +qj +qj +qj +qj +qj +Ee +Ee +Ee +Ee +nF +lR +oT +oT +oT +oT +QQ +vV +km +oT +oT +oT +oT +oT +oT +oT +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +ai +Bn +YZ +EM +rS +iU +ai +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(12,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +TQ +TQ +TQ +ZX +TQ +TQ +jD +IS +IS +IS +jD +jD +jD +jD +jD +jD +jD +jD +jD +zZ +jD +jD +jD +jD +jD +IS +IS +jD +jD +TQ +TQ +TQ +DF +TQ +jD +jD +TQ +TQ +TQ +jD +jD +jD +TQ +TQ +cZ +jD +WG +Ee +qj +Je +Je +Je +gT +Ha +nj +qj +TO +NV +uZ +PN +Fq +fI +Me +qK +Jc +Je +zX +Bo +qj +mU +Rc +pn +bI +hu +qj +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +oT +zE +IW +UP +Ss +df +gz +oT +jz +PO +VQ +PO +YG +oT +oT +oT +oT +oT +oT +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +Ig +ar +Tm +Tm +Tm +UD +YF +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(13,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +TQ +DF +TQ +TQ +TQ +TQ +TQ +jD +jD +IS +IS +jD +jD +TQ +TQ +TQ +jD +jD +TQ +TQ +TQ +TQ +jD +jD +jD +jD +IS +IS +jD +TQ +DF +TQ +TQ +TQ +TQ +TQ +jD +TQ +TQ +TQ +jD +jD +jD +Hy +eI +jD +jD +WG +Ee +qj +qd +Je +bU +qj +ut +fN +qj +CS +tB +AH +qj +MS +Je +Je +uC +mp +Je +Bo +Je +sO +qP +Rc +Rc +Rc +gH +qj +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +oT +WW +JN +sg +Fr +xd +oa +oT +Ss +ac +xd +Pn +Qi +oT +Wm +cu +uV +za +oT +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +vT +db +db +db +db +TR +wB +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(14,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +ee +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +IS +IS +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +IS +IS +jD +jD +jD +zZ +jD +jD +Hw +Hw +Hw +TQ +TQ +TQ +jD +jD +jD +jD +jD +jD +jD +WG +Ee +qj +Je +Je +Je +qj +qj +qj +qj +qj +qj +qj +qj +Cv +YR +LV +bt +qj +Je +Je +hU +qj +ax +Ya +Rc +Rc +DS +qj +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +oT +VE +cO +sD +Ss +xd +zC +oT +Ss +Pn +xd +fk +Qi +oT +OG +xd +xd +RS +oT +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +vT +db +db +TA +db +TR +FJ +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(15,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +TQ +TQ +jD +jD +jD +jD +jD +jD +zZ +TQ +Hw +Hw +Hw +Hw +Hw +Hw +Hw +Hw +Hw +Bb +Hw +Bb +Hw +iB +Hw +dj +hr +dj +Hw +Hw +IS +IS +IS +IS +IS +WG +Ee +qj +Je +Je +Je +qj +UW +mP +ud +cl +qj +zR +qj +qj +qj +qj +qj +qj +fv +Je +Je +mp +yE +Gw +Az +kR +Ww +qj +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +oT +oT +oT +oT +Ar +Kz +NN +oT +Ss +BC +xd +fk +Qi +oT +kA +Sq +xd +cS +oT +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +ai +vT +db +db +db +db +QF +Od +ai +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(16,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +TQ +uK +ZX +TQ +TQ +TQ +TQ +TQ +Qa +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +jD +jD +YM +zZ +Hw +eQ +mL +pF +mL +pw +ny +JY +Hw +uF +Hw +uF +Hw +uF +Hw +ht +SL +mL +Fp +Hw +Hw +IS +IS +IS +IS +WG +Ee +qj +Je +Je +hn +yh +TS +tL +tL +fA +qj +AO +EP +iD +bo +Le +yC +qj +Je +hU +bU +qj +qj +qj +qj +qj +qj +qj +qj +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +Ss +xd +MR +Iz +yB +xd +xd +xd +Qi +oT +Ov +Hv +Ix +pK +oT +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +db +db +gS +Dk +Tw +bu +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(17,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +jD +TQ +TQ +Hw +xl +Im +Im +eH +Im +Im +sd +Hw +iN +uF +iN +iN +iN +Hw +nH +Im +Im +XT +Hw +Hw +IS +IS +IS +IS +WG +qj +qj +qj +xw +qj +qj +qj +qj +RH +On +qj +tj +OC +qj +Kt +Ip +Ym +GF +Je +Je +Ru +qj +tC +ab +KI +qj +iS +Fg +qj +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +UB +zo +Tu +xd +xd +xd +xd +xd +Qi +oT +oT +oT +FM +oT +oT +oT +oT +oT +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +db +db +mI +by +by +bY +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(18,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +Hw +OK +OK +Hw +sx +eH +wk +Im +Wv +XF +xa +Hw +Om +iN +uF +in +dp +Hw +Qk +gZ +br +Ho +DL +Hw +IS +IS +IS +IS +WG +qj +JO +Je +Je +mQ +fG +qj +qj +qj +qj +qj +qj +qj +qj +Eh +mO +XU +mp +Je +Je +Je +AX +OO +fq +RA +qj +Qb +aq +qj +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +Qw +bk +Yp +Yp +KG +EZ +wQ +xd +Qi +Xq +xd +xd +xd +Ob +xd +xd +xd +HW +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +RL +db +db +db +db +BK +by +by +Xp +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(19,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +TQ +TQ +TQ +DF +TQ +jD +jD +jD +jD +jD +TQ +TQ +jD +jD +TQ +TQ +jD +jD +Hw +iJ +bG +Hw +xl +Im +Im +eH +eH +sd +Hw +Hw +Hw +Xc +Xw +Hw +Hw +Hw +Hw +Hw +xl +eH +fX +Hw +IS +IS +IS +IS +WG +qj +Aq +RB +Pa +RB +JO +qj +Ee +qj +WL +Wi +qT +Lt +qj +PS +NJ +nS +qj +Je +Je +Je +mp +OO +Je +Fv +qh +ej +qq +qj +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +rw +oT +oT +oT +XY +xd +ob +EZ +VB +oT +xd +xd +xd +xd +xd +xd +xd +xd +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +db +db +mI +by +by +bY +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(20,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +Sj +TQ +TQ +TQ +jD +jD +jD +jD +jD +TQ +jD +jD +jD +jD +TQ +jD +jD +Hw +Xf +iJ +OK +xl +Im +eH +Im +Im +Ho +ue +mL +SL +mL +mL +mL +mL +mL +mL +mL +QW +eH +sd +Hw +IS +IS +IS +IS +WG +qj +ZG +Je +Je +Je +JO +qj +Ee +qj +CR +pL +CU +Ia +qj +qj +qj +qj +qj +qd +Je +wL +qj +Ew +aJ +Hz +qj +nw +eR +qj +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +lR +lR +lR +lR +oT +Dj +VC +gU +tf +uB +wa +xd +xd +xd +Zv +xd +xd +xd +xd +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +db +db +PZ +Nn +gf +ji +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(21,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +jD +jD +jD +jD +TQ +TQ +jD +jD +Hw +bG +iJ +OK +xl +Im +Im +Im +eH +XF +XJ +lF +zK +zK +zK +oj +zK +Tz +Im +eH +Im +eH +jt +Hw +IS +IS +IS +IS +WG +qj +JO +qp +Je +Je +GP +qj +Ee +qj +bX +UE +Oi +Rl +qj +cU +HG +gQ +kq +Je +xm +hU +qj +qj +qj +qj +qj +qj +qj +qj +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +lR +lR +oT +oT +oT +oT +oT +oT +oT +oT +oT +oT +oT +oT +oT +oT +xd +xd +bx +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +ai +ai +ai +db +db +db +db +db +ai +ai +ai +ai +ai +ai +ai +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(22,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +TQ +jD +TQ +TQ +TQ +jD +jD +jD +iJ +iJ +jD +jD +jD +TQ +TQ +jD +jD +Hw +iJ +iJ +Hw +Wh +Im +eH +Im +Im +rd +Hw +Hw +Hw +en +Hw +Hw +Hw +nY +JI +JI +eH +XF +yy +Hw +IS +IS +IS +IS +WG +qj +qj +qj +qj +mj +qj +qj +Ee +qj +qj +ei +pL +Hj +QY +MF +cJ +aq +kq +Je +Je +Je +qj +aY +XC +Ri +BV +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +oT +oT +Tj +lG +ZI +oT +lR +lR +oT +Xo +qI +TJ +WY +oR +oT +xd +xd +xd +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +ai +db +db +ai +db +db +db +db +db +ai +BO +hM +xJ +xJ +xJ +rN +ai +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(23,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +TQ +TQ +jD +jD +iJ +iJ +iJ +jD +jD +jD +TQ +TQ +jD +jD +Hw +Hw +Hw +Hw +xl +Im +Im +eH +Im +sd +Hw +PY +LL +mL +xx +ZV +Hw +xl +vr +JI +Im +sd +Hw +Hw +IS +IS +IS +IS +WG +Ee +Ee +qj +NW +lr +BT +qj +qj +Ee +qj +qf +pL +Ia +qj +GG +KD +Kf +vt +Je +Pa +Je +Po +NW +UA +NW +UA +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +Ud +gY +SM +sU +ml +oT +lR +lR +oT +pJ +om +om +om +hy +oT +xd +xd +xd +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +ai +RL +db +db +db +db +ai +hm +Dd +Dd +Dd +Dd +wh +AQ +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(24,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +jD +jD +jD +iJ +iJ +iJ +iJ +jD +jD +jD +jD +TQ +jD +jD +jD +jD +jD +Hw +nH +Im +eH +Im +Im +el +Hw +Fk +eH +Im +Im +sd +Hw +xr +eH +Im +Im +sd +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +qj +UA +NW +AC +Pm +qj +Ee +qj +PX +WH +kT +qj +Ap +dC +aq +qj +Nd +Je +qp +qj +UA +UA +UA +XW +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +Ud +SM +gp +DO +Pc +oT +lR +lR +oT +pJ +om +om +om +VG +oT +xd +xd +xd +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +Gl +db +db +db +db +db +Hh +hm +Dd +Dd +Dd +Dd +Dd +fr +ya +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(25,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +TQ +TQ +YS +iJ +iJ +iJ +iJ +jD +jD +jD +TQ +TQ +jD +jD +jD +jD +jD +Hw +rb +zK +zK +FS +Zn +sQ +Hw +kI +up +zK +Tz +ia +Hw +ot +Im +Im +eH +sd +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +qj +fg +UA +UA +bQ +qj +Ee +qj +qj +qj +qj +qj +qj +mC +qj +qj +qj +Ji +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +LQ +SM +Gk +oT +oT +oT +oT +oT +oT +pJ +om +om +om +VG +RQ +xd +xd +xd +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +ai +db +db +db +db +db +ai +hm +Dd +Dd +Dd +Dd +Dd +NG +ya +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(26,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +TQ +TQ +tW +iJ +iJ +iJ +iJ +jD +jD +jD +TQ +TQ +jD +jD +jD +Hw +Hw +Hw +Hw +Cn +jb +jb +jb +jb +jb +jb +jb +jb +nH +sd +Hw +oG +Sr +hC +zK +vF +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +qj +VP +nq +eA +Xl +qj +Ee +qj +xu +Dr +Is +qj +ui +wO +KM +qj +rQ +kJ +kJ +kJ +UX +kJ +kJ +kJ +Lq +kJ +py +qj +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +LQ +SM +Gk +oT +yD +Uw +yD +yD +oT +pJ +om +om +om +VG +oT +Zv +xd +xd +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +ai +rs +rs +db +db +db +ai +hm +Dd +Dd +Dd +Dd +Dd +fr +ya +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(27,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +jD +TQ +TQ +TQ +YS +iJ +iJ +iJ +jD +jD +TQ +TQ +TQ +TQ +jD +jD +jD +Hw +Kl +Ou +Ou +an +jb +ka +Br +ST +ST +Br +oM +jb +JT +mX +jb +jb +jb +jb +oi +sb +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +qj +qj +qj +qj +qj +qj +Ee +qj +rG +Hr +Ds +qj +iQ +WS +HS +qj +eW +Je +LS +hU +Je +Sa +XQ +nc +uz +hU +Fv +qj +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +JH +SM +LI +fU +dm +sU +kD +SM +oT +pJ +om +om +om +VG +oT +oT +MW +oT +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +ai +Yr +zx +db +db +db +ai +hm +Dd +Dd +Dd +Dd +Dd +fr +ya +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(28,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +jD +Gu +TQ +TQ +YS +YS +YS +jD +jD +TQ +TQ +TQ +jD +jD +jD +jD +jD +Hw +bD +Sc +Im +wi +jb +AF +Im +Im +Im +Im +gb +jb +jb +jb +jb +Mn +cD +jb +th +rk +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +ra +Je +Ds +qj +qj +qj +qj +qj +Qt +DG +uz +hU +Je +me +Je +Je +uz +wL +jE +qj +Ee +Ee +Ee +Ee +nF +lR +lR +oT +oT +oT +oT +Wf +oT +oT +Gk +jj +jj +SM +oT +Ce +AW +ph +Up +Rb +oT +Zy +zT +zT +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +ai +RM +RM +db +db +db +ai +Qs +pt +Uk +Uk +MQ +Dd +fr +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(29,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +Gu +TQ +jD +jD +TQ +TQ +jD +jD +jD +jD +jD +jD +Hw +Hw +FF +wm +zw +jb +AF +Im +Ti +Ti +Im +gb +jb +bn +cX +sq +vj +uT +jb +RK +gb +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +ra +Je +zg +jr +um +qj +rQ +Bz +fd +Je +Mu +Je +hU +kv +Je +Je +Ff +Jv +Fv +qj +Ee +Ee +Ee +Ee +nF +lR +lR +oT +kg +qL +wJ +wJ +vq +oT +Gk +yD +yD +SM +oT +oT +RQ +oT +oT +oT +oT +MC +zT +fu +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +ai +RL +db +db +db +Da +ai +ai +ai +ai +ai +Qs +pt +Nw +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(30,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +jD +Gu +TQ +TQ +Gu +TQ +TQ +jD +jD +jD +jD +TQ +TQ +jD +jD +jD +jD +jD +jD +jD +Hw +Hw +Hw +Hw +jb +AF +Pw +GO +DC +PB +gb +jb +AF +nK +mW +eH +gb +jb +tZ +rH +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +xh +yX +Je +Tf +eE +qj +dZ +Je +Je +Je +uz +vb +Yg +MN +Je +hU +uz +ws +Fv +qj +Ee +Ee +Ee +Ee +nF +lR +lR +oT +wJ +wJ +wJ +wJ +OW +oT +LI +vD +SM +SM +oT +xd +xd +xd +oT +lR +oT +zT +zT +zT +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +ai +db +db +db +db +db +ai +kp +kp +kp +ai +ai +ai +ai +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(31,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +TQ +TQ +Qa +TQ +TQ +jD +jD +jD +jD +jD +jD +jD +jD +jb +AF +Pw +DC +DC +ua +mG +tz +Er +Ue +aV +Im +gb +tK +JZ +gb +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +ra +Je +Je +Je +Ds +hV +Ow +Je +hU +wL +Pl +XQ +sC +MN +Je +Je +MY +Je +Za +qj +Ee +Ee +Ee +Ee +nF +lR +lR +oT +wJ +wJ +wJ +wJ +oT +oT +oT +mc +oT +oT +oT +xd +xd +xd +oT +lR +oT +Xx +oT +Qy +oT +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +ai +db +db +db +db +db +vH +bP +bP +CF +ai +db +db +db +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(32,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +TQ +TQ +TQ +jD +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +TQ +TQ +Qa +DF +TQ +TQ +DF +jD +jD +jD +jD +jD +jD +jb +AF +Im +Ti +Ti +Im +gb +jb +AF +UI +Im +eH +gb +jb +tZ +ze +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +qj +rG +QU +hU +gi +Ds +qj +FB +RX +AR +AR +AR +Rx +HB +AR +AR +oH +do +AR +uG +qj +Ee +Ee +Ee +Ee +nF +lR +lR +oT +wJ +xE +Bl +yN +oT +xd +PF +xd +xd +Ob +xd +xd +xd +bx +oT +lR +oT +oT +oT +oT +oT +oT +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +ai +ai +ai +ai +db +db +db +db +db +ai +bP +bP +bP +ai +db +db +db +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(33,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +jD +jD +TQ +TQ +TQ +TQ +jD +jD +jD +TQ +TQ +TQ +jD +jD +jD +jD +jD +TQ +TQ +jD +jD +TQ +TQ +TQ +TQ +cZ +jD +jD +jD +jD +jb +oE +XO +Im +Im +Im +gb +jb +Ih +PV +iP +Rj +Re +jb +Og +gb +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +aM +oK +OL +OL +Vj +hE +qj +qj +qj +qj +qj +qj +qj +qj +qj +qj +vl +qj +ma +qj +qj +Ee +Ee +Ee +Ee +nF +lR +lR +oT +wJ +HI +xE +wJ +YX +xd +xd +xd +PF +xd +xd +xd +xd +Do +oT +lR +oT +xY +AP +Ah +Fb +oT +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +ai +Ft +NS +MV +db +db +ai +Lr +Ak +Ak +ai +db +db +db +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(34,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +jD +jD +jD +IS +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +zZ +zZ +jD +TQ +jD +jD +jD +TQ +TQ +jD +jD +jD +DF +TQ +DF +TQ +jD +jD +jD +jD +jb +jb +WB +UO +UO +Px +mq +jb +jb +jb +jb +jb +jb +jb +Og +rH +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +qj +qj +qj +qj +qj +qj +qj +Fi +Va +Va +AL +Wd +Va +Va +Va +Va +qz +Wd +Va +Xv +qj +Ee +Ee +Ee +Ee +nF +lR +lR +oT +wJ +wJ +XN +wJ +oT +PF +xd +xd +xd +xd +xd +xd +xd +yI +oT +lR +oT +EU +Uo +AP +rE +oT +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +ai +ai +ai +ai +xs +ai +ai +ai +ai +ai +ai +db +db +db +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(35,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +jD +TQ +jD +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +TQ +TQ +TQ +TQ +jD +jD +TQ +TQ +TQ +jD +jD +jD +jD +TQ +TQ +Mv +jD +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +UL +Xe +Xe +GK +HA +QC +hZ +ru +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +vk +nI +zh +jT +qj +fR +zX +Je +Je +Je +uz +Ve +TE +Ve +yA +Je +hU +Jy +qj +Ee +Ee +Ee +Ee +nF +lR +lR +oT +wJ +lU +oT +oT +oT +oT +oT +co +oT +oT +oT +oT +oT +oT +oT +lR +oT +AP +AP +er +AP +oT +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +db +db +db +db +db +db +db +db +db +db +db +db +db +db +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(36,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +jD +jD +TQ +jD +jD +TQ +TQ +TQ +TQ +Dt +TQ +TQ +TQ +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +jD +DF +jD +jD +jb +lI +vZ +HT +jb +Eg +ZZ +vZ +Py +CH +Hw +Wt +Kr +AV +AV +AV +xP +AV +az +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +lk +Rc +Ya +DS +qj +Zm +hU +Je +Je +ZN +LH +sm +Je +Je +Je +Je +Je +Jy +qj +Ee +Ee +Ee +Ee +nF +lR +oT +oT +bv +oT +oT +vQ +vP +LX +Kp +XG +OI +bf +Jm +BU +oT +lR +lR +lR +oT +Qd +AP +AP +sL +oT +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +db +db +db +db +db +db +db +db +db +db +db +db +db +db +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(37,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +jD +TQ +TQ +jD +jD +TQ +TQ +TQ +St +TQ +TQ +TQ +TQ +jD +jD +TQ +TQ +TQ +jD +jD +jD +TQ +TQ +TQ +jD +jD +jD +jD +jD +jD +jD +Mv +hF +Yh +qk +tX +jb +rT +qk +qk +qk +tX +Hw +VJ +mE +Hw +Hw +Hw +Hn +Hw +Hw +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +XK +UR +UR +nN +dh +VO +iy +iy +NF +Je +uz +ws +Je +hU +Je +ZN +Je +rj +qj +Ee +Ee +Ee +Ee +nF +lR +oT +aW +Ao +gc +oT +CJ +om +Vh +ff +om +Vx +FI +RR +OQ +oT +oT +oT +oT +oT +DE +xd +xd +DE +oT +oT +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +db +db +db +db +db +db +db +db +db +db +db +db +db +db +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(38,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +jD +St +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +Qa +Qa +jD +jD +jD +jD +jD +TQ +TQ +jD +jD +jD +TQ +TQ +jD +TQ +Sj +hF +rT +qk +tX +Qn +rT +qk +qk +qk +tX +Hw +jg +mE +Hw +JM +hH +Us +TY +rO +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +HU +bc +jA +ZU +qj +fR +Je +hU +fi +hU +FE +Je +Je +Je +Je +Je +Je +Jy +qj +Ee +Ee +Ee +Ee +nF +lR +oT +wJ +NE +Lu +oT +CJ +om +Vh +ff +om +Vx +gK +BQ +qs +oT +lV +UN +RZ +UN +UN +UN +Iw +UN +ls +oT +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +db +db +db +db +db +WA +ew +ew +ew +ew +ew +PI +db +db +db +db +db +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(39,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +jD +TQ +TQ +TQ +TQ +TQ +Dt +TQ +TQ +Dt +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +TQ +TQ +jD +jD +DF +TQ +TQ +TQ +TQ +TQ +hF +fp +qk +tX +jb +rT +qk +qk +qk +tX +UK +jg +mE +Hw +Ju +jO +GY +jO +dq +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +qj +qj +qj +qj +qj +fR +Je +zX +fi +Je +uz +Je +Je +Je +Je +Je +Je +Jy +qj +Ee +Ee +Ee +Ee +nF +oT +oT +ex +oT +oT +oT +CJ +om +Vh +ff +om +om +om +om +VG +co +wP +xd +xd +xd +xd +AT +xd +df +gC +oT +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +ew +ew +ew +ai +ew +oq +oq +oq +oq +oq +oq +oq +ew +ai +ew +ew +ew +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(40,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +jD +TQ +TQ +jD +jD +TQ +TQ +TQ +TQ +DF +jD +jb +GU +Vf +VL +jb +Sf +gM +Pz +gM +VL +Hw +jg +mE +Hw +DI +jO +NI +jO +DP +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +HO +Qe +Aa +QV +Qe +hz +Qe +Qe +Qe +Aa +Eu +Qe +iw +qj +Ee +Ee +Ee +Ee +nF +oT +NM +Dx +oT +rf +XG +XD +om +XD +om +om +om +om +om +VG +oT +Sl +bq +bq +bq +bq +bq +EW +xd +gC +oT +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +ai +oq +oq +oq +ai +oq +Mr +Mr +Mr +Mr +Mr +Mr +Mr +oq +ai +oq +oq +oq +ai +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(41,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +jD +TQ +TQ +TQ +Dt +TQ +TQ +EL +TQ +TQ +TQ +St +TQ +TQ +TQ +TQ +jD +jD +jD +jD +jD +TQ +TQ +jD +jD +jD +jD +TQ +TQ +jD +jD +jb +jb +jb +jb +jb +Hw +tA +Hw +LZ +Hw +Hw +jg +mE +Hw +ZJ +Dp +ZA +Dp +Jj +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +qj +qj +qj +qj +qj +wy +qj +pk +qj +qj +qj +qj +qj +qj +qj +qj +Ee +Ee +Ee +Ee +nF +oT +oT +oT +oT +iH +om +om +om +om +om +om +om +om +om +VG +oT +oT +oT +oT +oT +oT +oT +wP +xd +YB +oT +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(42,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +jD +TQ +TQ +TQ +St +TQ +TQ +TQ +TQ +TQ +Rp +TQ +TQ +TQ +TQ +jD +jD +jD +jD +jD +jD +jD +TQ +jD +jD +jD +jD +TQ +jD +jD +jD +jD +jD +jD +jD +Hw +pe +pe +Hw +dT +fL +Hw +jg +yJ +Hw +Hw +Hw +Hw +Hw +Hw +Hw +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +pL +pL +pL +pL +bH +Dw +pL +Yv +pL +pL +pL +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +oT +pO +AW +AW +AW +AW +AW +AW +ph +tP +tP +Yu +oT +lR +lR +lR +lR +lR +oT +Tq +Ld +gC +oT +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(43,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +jD +jD +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +Dt +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +jD +jD +jD +TQ +TQ +TQ +TQ +jD +Qa +jD +jD +jD +jD +jD +jD +jD +Hw +dT +pv +Hw +Jl +dT +Hw +jg +mE +Hw +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +pL +pL +pL +pL +pL +Dw +pL +pU +pU +Yv +bH +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +oT +oT +oT +oT +un +oT +oT +oT +oT +oT +oT +oT +oT +oT +oT +oT +oT +oT +oT +tc +Ga +gC +oT +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(44,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +jD +TQ +TQ +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +IS +IS +jD +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +jD +jD +jD +Hw +mv +dT +Hw +pe +pe +Hw +jg +mE +Hw +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +yR +pL +pL +NR +pL +Dw +pL +NR +pL +WC +Xg +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +NC +pc +ko +Ye +oT +lR +lR +lR +oT +oT +oT +oT +dB +vu +vp +wJ +oT +rh +xd +gC +oT +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(45,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +jD +jD +TQ +TQ +jD +jD +TQ +TQ +TQ +TQ +St +TQ +TQ +TQ +TQ +St +TQ +TQ +jD +IS +IS +jD +jD +jD +TQ +TQ +jD +jD +TQ +TQ +TQ +jD +jD +jD +jD +jD +jD +Hw +Hw +Hw +Hw +Hw +Hw +Hw +Hw +jg +mE +Hw +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +pL +bH +pL +pL +pL +oP +bH +pL +pL +pL +pL +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +WW +eB +hS +dw +oT +lR +lR +lR +oT +Ax +hq +oT +dB +ag +vp +wJ +oT +wP +xd +gC +oT +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(46,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +jD +jD +TQ +TQ +jD +TQ +TQ +TQ +Dt +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +IS +IS +jD +jD +jD +jD +TQ +jD +jD +jD +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +Hw +bG +iJ +iJ +OK +mo +mo +aE +hO +mE +Hw +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +pL +pL +pL +pL +NR +bH +NR +pL +pL +pL +pL +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +vy +Pf +Gd +dw +oT +lR +lR +lR +oT +OH +xp +bv +AN +AN +AN +wJ +SU +wP +xd +gC +oT +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(47,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +jD +Mv +TQ +TQ +Qa +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +IS +IS +IS +jD +jD +jD +TQ +jD +jD +jD +jD +TQ +TQ +TQ +TQ +jD +jD +jD +Hw +Xf +iJ +iJ +OK +Qz +Qz +Qz +Qz +SA +Hw +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +pL +pL +SS +SS +SS +pL +SS +SS +SS +pL +pL +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +zi +pc +xd +dw +oT +lR +lR +lR +oT +tO +wJ +oT +wJ +wJ +wJ +wJ +oT +Sl +CD +Ux +oT +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(48,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +jD +TQ +TQ +TQ +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +TQ +TQ +jD +jD +jD +IS +IS +IS +jD +jD +jD +TQ +jD +jD +jD +jD +jD +jD +TQ +TQ +TQ +jD +jD +Hw +iJ +bG +Hw +Hw +Hw +Hw +Hw +Hw +Hw +Hw +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +pL +pL +SS +rZ +bH +pL +pL +rZ +SS +pL +pL +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +WW +gn +xd +nD +oT +lR +lR +lR +oT +oT +oT +oT +VZ +WK +bS +wJ +oT +oT +oT +oT +oT +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(49,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +jD +jD +TQ +jD +jD +jD +jD +jD +TQ +TQ +TQ +TQ +TQ +jD +jD +TQ +jD +jD +jD +IS +IS +IS +IS +jD +jD +TQ +jD +jD +jD +jD +jD +jD +jD +TQ +TQ +jD +jD +Hw +iJ +iJ +Hw +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +yR +pL +pL +pL +pL +pL +pL +bH +pL +pL +Xg +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +SW +rJ +cO +ao +oT +lR +lR +lR +lR +lR +lR +oT +oT +oT +oT +oT +oT +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(50,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +jD +jD +jD +IS +IS +IS +jD +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +jD +jD +jD +jD +jD +TQ +zZ +TQ +TQ +jD +jD +Hw +OK +OK +Hw +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +pL +bH +pL +pL +Bf +pL +Bf +pL +pL +pL +pL +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +oT +oT +oT +oT +oT +oT +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(51,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +jD +TQ +TQ +jD +jD +IS +IS +IS +IS +IS +IS +jD +jD +TQ +TQ +jD +jD +jD +fE +TQ +Jq +zZ +YM +TQ +jD +jD +jD +TQ +TQ +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +pL +pL +pL +bH +pL +pL +pL +pL +pL +pL +pL +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +lR +lR +lR +lR +lR +oT +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(52,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +TQ +TQ +jD +jD +IS +IS +IS +IS +IS +IS +jD +jD +TQ +TQ +jD +jD +fc +cZ +am +TQ +jD +TQ +TQ +TQ +TQ +jD +YM +TQ +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +pL +pL +pL +dS +pL +Bf +pL +dS +pL +bH +pL +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(53,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +Qa +Qa +jD +jD +jD +IS +IS +IS +IS +IS +IS +jD +jD +TQ +jD +jD +Jq +TQ +am +jD +jD +jD +TQ +TQ +TQ +TQ +zZ +zZ +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +pL +pL +Bf +qj +pL +pL +pL +qj +Bf +pL +pL +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(54,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +TQ +TQ +TQ +jD +jD +jD +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +jD +jD +am +cZ +jD +jD +jD +jD +jD +jD +TQ +TQ +TQ +TQ +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +pL +pL +bH +Vo +pL +pL +pL +Vo +pL +pL +pL +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +lR +my +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +Mr +my +"} +(55,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +TQ +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +TQ +TQ +jD +Sn +am +TQ +jD +jD +jD +jD +jD +jD +jD +jD +TQ +TQ +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +yR +pL +pL +pL +ij +pL +ij +pL +pL +pL +Xg +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +nF +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +my +"} +(56,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +TQ +TQ +jD +jD +TQ +TQ +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +TQ +TQ +TQ +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +pL +bH +pL +pL +pL +dn +pL +bH +pL +pL +pL +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +WG +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(57,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +TQ +TQ +TQ +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +pL +pL +pL +pL +pL +pL +pL +pL +pL +pL +pL +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +WG +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(58,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +qj +qj +qj +qj +qj +Eq +qj +qj +qj +qj +qj +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +WG +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(59,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +TQ +jD +jD +TQ +TQ +TQ +TQ +TQ +TQ +jD +jD +jD +TQ +TQ +TQ +jD +jD +TQ +TQ +TQ +TQ +jD +jD +jD +TQ +TQ +TQ +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +rg +XL +XL +XL +JG +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +WG +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(60,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +TQ +TQ +TQ +TQ +jD +TQ +TQ +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +TQ +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +eJ +pL +ML +pL +jy +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +WG +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(61,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +jD +jD +TQ +jD +jD +jD +jD +jD +jD +jD +jD +IS +IS +jD +jD +IS +jD +jD +jD +jD +jD +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +ei +oP +SV +bH +Ia +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +WG +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(62,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +jD +jD +jD +jD +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +JE +Mo +ef +BD +IN +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +WG +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(63,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +qj +qj +qj +qj +qj +qj +qj +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +WG +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(64,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +jD +jD +jD +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +IS +WG +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +Ee +WG +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(65,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +jb +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +WG +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(66,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(67,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(68,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(69,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(70,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(71,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(72,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(73,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(74,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(75,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(76,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(77,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(78,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(79,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(80,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(81,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(82,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(83,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(84,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(85,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(86,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(87,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(88,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(89,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(90,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(91,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(92,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(93,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(94,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(95,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(96,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(97,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(98,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(99,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(100,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(101,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(102,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(103,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(104,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(105,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(106,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(107,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(108,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(109,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(110,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(111,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(112,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(113,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(114,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(115,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(116,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(117,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(118,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(119,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(120,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(121,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(122,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(123,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(124,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(125,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(126,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(127,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(128,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(129,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(130,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(131,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(132,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(133,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(134,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(135,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(136,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(137,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(138,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(139,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(140,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(141,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(142,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(143,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(144,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(145,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(146,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(147,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(148,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(149,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(150,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(151,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(152,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(153,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(154,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(155,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(156,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(157,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(158,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(159,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(160,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(161,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(162,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(163,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(164,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(165,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(166,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(167,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(168,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(169,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(170,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(171,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(172,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(173,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(174,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(175,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(176,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(177,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(178,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(179,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(180,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(181,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(182,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(183,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(184,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(185,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(186,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(187,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(188,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(189,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(190,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(191,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(192,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(193,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(194,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(195,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(196,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(197,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(198,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(199,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(200,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(201,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(202,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(203,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(204,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(205,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(206,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(207,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(208,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(209,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(210,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(211,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(212,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(213,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(214,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(215,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(216,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(217,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(218,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(219,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(220,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(221,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(222,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(223,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(224,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(225,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(226,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(227,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(228,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(229,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(230,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(231,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(232,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(233,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(234,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(235,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(236,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(237,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(238,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(239,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(240,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(241,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(242,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(243,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(244,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(245,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(246,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(247,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(248,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(249,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(250,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(251,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(252,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(253,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(254,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} +(255,1,1) = {" +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +Rr +"} diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm index 5e942fba0263..e0acd6fd0e4a 100644 --- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm +++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm @@ -1113,12 +1113,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/satellite) -"akg" = ( -/obj/machinery/computer/ai_resource_distribution{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/science/server) "akh" = ( /turf/closed/wall/r_wall, /area/science/storage) @@ -1264,6 +1258,12 @@ "alD" = ( /turf/open/floor/carpet, /area/library) +"alE" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "alH" = ( /obj/effect/turf_decal/trimline/white/filled/line/lower{ dir = 9 @@ -1484,9 +1484,6 @@ /obj/item/reagent_containers/food/drinks/drinkingglass, /turf/open/floor/wood, /area/hallway/secondary/entry) -"amR" = ( -/turf/closed/wall/r_wall, -/area/ai_monitored/secondarydatacore) "ana" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, /turf/open/floor/plasteel, @@ -1672,12 +1669,6 @@ }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) -"aoX" = ( -/obj/machinery/computer/ai_control_console{ - dir = 1 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "aoZ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -2916,13 +2907,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"aAn" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "aAq" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance/two, @@ -5046,18 +5030,6 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/maintenance/port/aft) -"aTm" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/requests_console{ - department = "AI"; - departmentType = 5; - pixel_x = 0; - pixel_y = -32 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "aTp" = ( /turf/closed/wall, /area/security/checkpoint/supply) @@ -5733,10 +5705,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"aZV" = ( -/obj/machinery/ai/data_core, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "aZW" = ( /turf/open/floor/plasteel, /area/hallway/primary/fore) @@ -7202,15 +7170,6 @@ }, /turf/open/floor/plasteel, /area/storage/tech) -"bzt" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "bzD" = ( /obj/effect/turf_decal/stripes, /turf/open/floor/engine, @@ -7282,26 +7241,6 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"bBq" = ( -/obj/machinery/doorButtons/access_button{ - idDoor = "secondary_aicore_exterior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Button"; - pixel_x = -7; - pixel_y = -24; - req_one_access_txt = "30;70" - }, -/obj/machinery/doorButtons/airlock_controller{ - idExterior = "secondary_aicore_exterior"; - idInterior = "secondary_aicore_interior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Console"; - pixel_x = 6; - pixel_y = -26; - req_one_access_txt = "30;70" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/secondarydatacore) "bBt" = ( /turf/open/water/safe, /area/space/nearstation) @@ -7494,6 +7433,15 @@ /obj/structure/janitorialcart, /turf/open/floor/plating, /area/maintenance/port/fore) +"bET" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "bFc" = ( /obj/structure/sign/poster/random, /turf/closed/wall/r_wall, @@ -9926,6 +9874,15 @@ /obj/machinery/vending/gifts, /turf/open/floor/plating, /area/maintenance/port/fore) +"crX" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 1 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "cse" = ( /obj/structure/disposalpipe/segment{ dir = 2 @@ -10751,14 +10708,6 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) -"cEO" = ( -/obj/structure/closet/secure_closet/RD, -/obj/item/circuitboard/computer/ai_upload_download, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hor) "cEX" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -11214,10 +11163,6 @@ }, /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) -"cMI" = ( -/obj/item/stack/cable_coil, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "cNa" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white, @@ -11765,23 +11710,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"cWk" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/machinery/camera{ - c_tag = "AI Chamber - Fore"; - dir = 4; - network = list("aicore") - }, -/obj/machinery/turretid{ - icon_state = "control_stun"; - name = "AI Chamber turret control"; - pixel_x = -32; - pixel_y = 0 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "cWr" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 8 @@ -13714,12 +13642,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"dEj" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "dEx" = ( /obj/structure/cable{ icon_state = "1-4" @@ -13767,6 +13689,27 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"dFc" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper_target{ + dirx = 2; + diry = 1 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/command/glass{ + id_tag = "secondary_aicore_interior"; + name = "Physical Core Access"; + req_one_access_txt = "30, 70" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacoreserver) "dFy" = ( /obj/structure/cable{ icon_state = "1-2" @@ -14130,15 +14073,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plating, /area/maintenance/port) -"dLt" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "dLy" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ dir = 8 @@ -14321,6 +14255,18 @@ }, /turf/open/floor/wood, /area/medical/psych) +"dOc" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "ai_core_airlock_interior"; + idSelf = "ai_core_airlock_control"; + pixel_x = -23; + pixel_y = 7 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "dOd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -14822,15 +14768,6 @@ }, /turf/open/floor/carpet/red, /area/bridge) -"dTL" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "dTM" = ( /obj/effect/turf_decal/siding/wideplating{ dir = 4 @@ -16286,6 +16223,19 @@ /obj/item/toy/beach_ball/holoball, /turf/open/floor/plasteel, /area/security/prison) +"epK" = ( +/obj/machinery/power/apc{ + areastring = "/area/science/server"; + dir = 4; + name = "Server Room APC"; + pixel_x = 24 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes{ + dir = 5 + }, +/turf/open/floor/engine, +/area/science/explab) "epY" = ( /obj/structure/cloth_curtain{ color = "#99ccff" @@ -16454,13 +16404,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) -"erD" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "erI" = ( /obj/structure/chair/stool/bar, /obj/effect/decal/cleanable/dirt, @@ -17187,6 +17130,25 @@ }, /turf/open/floor/plasteel/white, /area/science/explab) +"eEq" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper_target{ + dirx = -2; + diry = -1 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/command/glass{ + id_tag = "secondary_aicore_exterior"; + name = "Physical Core Access"; + req_one_access_txt = "30;70" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacoreserver) "eEw" = ( /obj/structure/cable{ icon_state = "4-8" @@ -18083,13 +18045,12 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"eQt" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 1 +"eQu" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "eQv" = ( /turf/open/floor/wood, /area/security/courtroom) @@ -19237,6 +19198,9 @@ /obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel, /area/engine/engineering) +"fhe" = ( +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "fhh" = ( /obj/effect/landmark/start/botanist, /obj/effect/turf_decal/trimline/green/filled/line/lower{ @@ -19923,6 +19887,14 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"fuA" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 8 + }, +/obj/structure/window/reinforced, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacoreserver) "fuC" = ( /obj/structure/cable{ icon_state = "4-8" @@ -21897,6 +21869,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"gda" = ( +/obj/machinery/atmospherics/pipe/simple/general/hidden{ + dir = 5 + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/secondarydatacoreserver) "gdp" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plasteel, @@ -21961,6 +21939,13 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) +"gdS" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacoreserver) "gdX" = ( /obj/machinery/computer/station_alert, /turf/open/floor/plasteel/dark, @@ -22685,27 +22670,6 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) -"grc" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper_target{ - dirx = 2; - diry = 1 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/command/glass{ - id_tag = "secondary_aicore_interior"; - name = "Physical Core Access"; - req_one_access_txt = "30, 70" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "gry" = ( /obj/machinery/mineral/ore_redemption{ input_dir = 2; @@ -23472,6 +23436,15 @@ /obj/effect/turf_decal/trimline/secred/filled/line/lower, /turf/open/floor/plasteel, /area/security/checkpoint/science) +"gEa" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 8 + }, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "gEd" = ( /obj/structure/cable{ icon_state = "1-2" @@ -23726,6 +23699,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"gHW" = ( +/obj/machinery/atmospherics/pipe/manifold/general/hidden{ + dir = 1 + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/secondarydatacoreserver) "gIh" = ( /obj/machinery/camera{ c_tag = "Vacant Office"; @@ -23952,16 +23931,6 @@ /obj/structure/sign/poster/official/build, /turf/closed/wall/r_wall, /area/crew_quarters/heads/chief) -"gLy" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "gLA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -25407,29 +25376,6 @@ /mob/living/carbon/monkey/punpun, /turf/open/floor/plasteel, /area/crew_quarters/bar) -"hik" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "secondary_aicore_exterior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Button"; - pixel_x = -8; - pixel_y = -24; - req_one_access_txt = "30;70" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "hio" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ @@ -27211,18 +27157,6 @@ }, /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) -"hJg" = ( -/obj/machinery/porta_turret/ai, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 4; - external_pressure_bound = 120; - name = "server vent" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "hJG" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -27697,25 +27631,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) -"hQM" = ( -/obj/machinery/power/apc{ - areastring = "/area/science/server"; - dir = 4; - name = "Server Room APC"; - pixel_x = 24 - }, -/obj/machinery/power/apc/highcap{ - areastring = "/area/ai_monitored/secondarydatacore"; - dir = 4; - name = "AI Secondary Datacore"; - pixel_x = 24 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/turf/open/floor/engine, -/area/science/explab) "hQU" = ( /obj/effect/turf_decal/trimline/brown/filled/line/lower{ dir = 8 @@ -29140,6 +29055,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/surgery) +"iqE" = ( +/obj/machinery/atmospherics/pipe/simple/general/hidden{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/secondarydatacoreserver) "iqF" = ( /obj/item/stack/ore/iron, /obj/effect/turf_decal/trimline/brown/filled/line/lower{ @@ -29876,10 +29797,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/distro) -"iCL" = ( -/obj/machinery/computer/ai_resource_distribution, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "iDf" = ( /obj/effect/turf_decal/trimline/atmos/warning/lower{ dir = 4 @@ -30018,6 +29935,13 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"iFp" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "iFF" = ( /obj/effect/turf_decal/trimline/neutral/filled/line/lower{ dir = 1 @@ -30090,15 +30014,6 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"iGM" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "iGT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -30358,6 +30273,15 @@ }, /turf/open/floor/plasteel, /area/escapepodbay) +"iKT" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "iLf" = ( /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/grass, @@ -30405,6 +30329,12 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/hfr) +"iLV" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "iMn" = ( /obj/structure/grille, /obj/machinery/meter{ @@ -30633,15 +30563,6 @@ }, /turf/open/floor/grass, /area/hydroponics/garden) -"iQl" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "iQm" = ( /obj/structure/window/reinforced/tinted, /obj/structure/toilet{ @@ -31577,6 +31498,10 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/maintenance/port/fore) +"jcW" = ( +/obj/structure/cable/white, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "jcY" = ( /obj/effect/turf_decal/tile/darkgreen{ dir = 1 @@ -32228,6 +32153,20 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel, /area/maintenance/starboard/fore) +"jlj" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Port"; + dir = 8; + network = list("aicore") + }, +/obj/machinery/requests_console{ + department = "AI"; + departmentType = 5; + pixel_x = 0; + pixel_y = -32 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "jlo" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/machinery/hydroponics/soil, @@ -32793,6 +32732,12 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"jsH" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "jtz" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ dir = 4 @@ -32844,6 +32789,18 @@ }, /turf/open/floor/plasteel, /area/storage/primary) +"juM" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "juN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 @@ -32961,16 +32918,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel/dark, /area/science/server) -"jwC" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "jwI" = ( /obj/machinery/light{ dir = 4 @@ -33186,12 +33133,6 @@ /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, /area/hallway/primary/central) -"jBI" = ( -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - dir = 10 - }, -/turf/closed/wall/r_wall, -/area/ai_monitored/secondarydatacore) "jBS" = ( /obj/structure/rack, /obj/item/soap/deluxe, @@ -33365,15 +33306,6 @@ /obj/effect/turf_decal/trimline/purple/filled/corner/lower, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"jDN" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 8 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "jDR" = ( /obj/structure/cable{ icon_state = "4-8" @@ -33858,12 +33790,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) -"jMk" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "jMl" = ( /obj/structure/closet/secure_closet/freezer/cream_pie, /obj/effect/turf_decal/stripes/line{ @@ -33901,14 +33827,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"jMP" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 8 - }, -/obj/structure/window/reinforced, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "jMR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 1 @@ -34710,6 +34628,16 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) +"jZF" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "jZH" = ( /obj/machinery/nuclearbomb/beer, /turf/open/floor/plating, @@ -35742,21 +35670,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/security/prison) -"krq" = ( -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "ai_core_airlock_interior"; - idSelf = "ai_core_airlock_control"; - pixel_x = -23; - pixel_y = 7 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "krt" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -36518,12 +36431,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) -"kDQ" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "kDU" = ( /obj/structure/cable{ icon_state = "4-8" @@ -36893,6 +36800,29 @@ /obj/item/radio/off, /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/eva) +"kKp" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "secondary_aicore_exterior"; + idSelf = "secondary_aicore_controller"; + name = "Secondary AI Core Access Button"; + pixel_x = -8; + pixel_y = -24; + req_one_access_txt = "30;70" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacoreserver) "kKq" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -37589,6 +37519,15 @@ /obj/effect/turf_decal/trimline/neutral/filled/line/lower, /turf/open/floor/plasteel, /area/hallway/primary/port) +"kXt" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "kXB" = ( /obj/machinery/computer/pandemic, /obj/effect/turf_decal/trimline/green/filled/line/lower{ @@ -39361,6 +39300,10 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/main) +"lFi" = ( +/obj/machinery/porta_turret/ai, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "lFr" = ( /mob/living/simple_animal/cockroach{ desc = "Virtually unkillable."; @@ -39529,15 +39472,6 @@ }, /turf/open/space/basic, /area/space) -"lJE" = ( -/obj/structure/cable/white{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ - dir = 8 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "lJM" = ( /obj/structure/cable{ icon_state = "4-8" @@ -40101,6 +40035,16 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/distro) +"lRC" = ( +/obj/machinery/light, +/obj/machinery/camera{ + c_tag = "AI Chamber - Aft"; + dir = 4; + network = list("aicore") + }, +/obj/machinery/porta_turret/ai, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "lRL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -40763,6 +40707,13 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"maC" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "maT" = ( /obj/effect/mapping_helpers/teleport_anchor, /turf/open/floor/plasteel/dark, @@ -41524,6 +41475,14 @@ }, /turf/open/floor/plasteel, /area/security/execution/transfer) +"mnm" = ( +/obj/machinery/flasher{ + id = "AI"; + pixel_x = 9; + pixel_y = -10 + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai) "mnq" = ( /obj/structure/flora/ausbushes/reedbush, /turf/open/floor/grass, @@ -41655,6 +41614,15 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"moU" = ( +/obj/machinery/airalarm/tcomms{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "moX" = ( /obj/structure/cable{ icon_state = "4-8" @@ -42112,6 +42080,15 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating/asteroid, /area/space/nearstation) +"mxb" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 10 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "mxe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -42377,13 +42354,6 @@ dir = 1 }, /area/engine/engineering) -"mAn" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "mAp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 @@ -43030,6 +43000,27 @@ }, /turf/open/floor/plasteel, /area/security/execution/transfer) +"mJA" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "secondary_aicore_interior"; + idSelf = "secondary_aicore_controller"; + name = "Secondary AI Core Access Button"; + pixel_x = -24; + pixel_y = -7; + req_one_access_txt = "30;70" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacoreserver) "mJD" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod Three"; @@ -43324,12 +43315,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"mNw" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "mNK" = ( /obj/machinery/recharge_station, /turf/open/floor/plasteel/dark, @@ -43645,6 +43630,10 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"mSC" = ( +/obj/structure/lattice/catwalk, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai) "mSV" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -43978,38 +43967,12 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"mYn" = ( -/obj/machinery/power/apc/highcap{ - dir = 8; - name = "AI Chamber APC"; - pixel_x = -25 - }, -/obj/structure/cable/white, -/obj/machinery/camera{ - c_tag = "AI Chamber - Aft"; - dir = 4; - network = list("aicore") - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "mYq" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, /turf/open/floor/plating, /area/maintenance/port) -"mYt" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 4; - external_pressure_bound = 120 - }, -/obj/machinery/airalarm/tcomms{ - dir = 4; - pixel_x = -24 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "mYB" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -44023,10 +43986,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"mYG" = ( -/obj/machinery/ai/server_cabinet, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "mYH" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -44376,6 +44335,24 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) +"ncI" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + external_pressure_bound = 120; + name = "server vent" + }, +/obj/structure/cable/white, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "ncK" = ( /obj/machinery/door/airlock/external{ name = "External Access"; @@ -44477,12 +44454,6 @@ /obj/item/clothing/mask/breath, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/aisat_interior) -"neg" = ( -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - dir = 5 - }, -/turf/closed/wall/r_wall, -/area/ai_monitored/secondarydatacore) "nep" = ( /obj/structure/rack, /obj/item/stack/sheet/metal/fifty, @@ -45843,6 +45814,16 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/hallway/primary/central) +"nzK" = ( +/obj/machinery/ai/networking{ + label = "Subcontroller"; + roundstart_connection = "Computer Science - 2" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacoreserver) "nzM" = ( /obj/structure/frame/computer{ dir = 8 @@ -46527,12 +46508,6 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/engine, /area/maintenance/starboard/fore) -"nNt" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "nNB" = ( /obj/structure/table, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ @@ -47476,6 +47451,21 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"oaT" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Fore"; + dir = 4; + network = list("aicore") + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/porta_turret/ai, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "oaV" = ( /obj/machinery/door/firedoor/border_only, /obj/machinery/door/firedoor/border_only{ @@ -47588,6 +47578,16 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) +"ocI" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "oda" = ( /obj/structure/sign/departments/minsky/engineering/atmospherics{ pixel_y = 32 @@ -47730,18 +47730,6 @@ /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/port/aft) -"ogf" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 5 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "ogn" = ( /obj/item/pickaxe, /turf/open/floor/plating/asteroid/airless, @@ -47867,10 +47855,6 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/auxiliary) -"oiv" = ( -/obj/structure/frame/machine, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "oiJ" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/potato, @@ -48618,6 +48602,9 @@ /obj/item/tank/internals/emergency_oxygen, /turf/open/floor/plasteel/dark, /area/tcommsat/storage) +"otS" = ( +/turf/closed/wall/r_wall, +/area/ai_monitored/secondarydatacoreserver) "ous" = ( /obj/machinery/door/airlock/research{ name = "Toxins Storage"; @@ -50459,9 +50446,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"oYb" = ( -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "oYe" = ( /obj/structure/cable{ icon_state = "1-8" @@ -50584,16 +50568,6 @@ }, /turf/open/floor/plating, /area/medical/chemistry) -"pam" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - external_pressure_bound = 120; - name = "server vent" - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "pau" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -50855,6 +50829,12 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"peE" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "peG" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -52501,6 +52481,17 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/medical/medbay/lobby) +"pBP" = ( +/obj/machinery/status_display/ai{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 8; + external_pressure_bound = 120; + name = "server vent" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "pCL" = ( /obj/machinery/deepfryer, /turf/open/floor/plasteel{ @@ -52627,6 +52618,18 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"pFc" = ( +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) +"pFj" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "pFl" = ( /obj/structure/cable{ icon_state = "4-8" @@ -53317,6 +53320,12 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"pQH" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ai_monitored/secondarydatacoreserver) "pQW" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer2{ dir = 8 @@ -53541,12 +53550,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"pUx" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 5 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "pUz" = ( /obj/structure/cable{ icon_state = "1-2" @@ -54010,6 +54013,18 @@ /obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel/dark, /area/engine/atmos/distro) +"pZV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/ai/networking{ + label = "Main Core"; + roundstart_connection = "Computer Science" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "pZW" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -54076,12 +54091,6 @@ /obj/machinery/light, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"qbb" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/ai_monitored/secondarydatacore) "qbj" = ( /obj/structure/cable{ icon_state = "4-8" @@ -54402,6 +54411,13 @@ /obj/structure/guillotine, /turf/open/floor/plating, /area/security/execution/transfer) +"qih" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/porta_turret/ai, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "qis" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/holopad, @@ -55216,13 +55232,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/asteroid, /area/space/nearstation) -"quS" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/ai_monitored/secondarydatacore) "quU" = ( /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 8 @@ -55865,14 +55874,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/atmos/hfr) -"qHp" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Port"; - dir = 8; - network = list("aicore") - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "qHx" = ( /obj/structure/sign/warning/fire{ pixel_y = 32 @@ -56072,20 +56073,6 @@ }, /turf/open/floor/plasteel, /area/security/execution/transfer) -"qLW" = ( -/obj/machinery/power/smes/engineering{ - charge = 5e+006; - input_level = 25000; - output_level = 25000 - }, -/obj/structure/cable/white{ - icon_state = "0-2" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "qLY" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -56269,13 +56256,6 @@ name = "Ice Sheet" }, /area/space/nearstation) -"qOp" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/ai/data_core/primary, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "qOs" = ( /obj/effect/turf_decal/tile/dark/half/contrasted, /obj/effect/decal/cleanable/dirt, @@ -57782,10 +57762,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"rkQ" = ( -/obj/machinery/holopad, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "rkT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 @@ -58342,6 +58318,9 @@ }, /turf/open/floor/wood, /area/maintenance/port/aft) +"rsW" = ( +/turf/open/floor/plasteel/dark, +/area/science/server) "rsX" = ( /obj/machinery/vending/coffee, /turf/open/floor/carpet/black, @@ -58763,6 +58742,17 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/asteroid, /area/space/nearstation) +"ryN" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = 8; + pixel_y = -23 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "rzf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 @@ -59455,6 +59445,14 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/hallway/primary/central) +"rLp" = ( +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "rLv" = ( /obj/machinery/light/floor, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -59992,6 +59990,15 @@ "rSp" = ( /turf/open/floor/eighties, /area/maintenance/starboard/fore) +"rSq" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "rSv" = ( /obj/item/radio/intercom{ pixel_y = -30 @@ -60269,15 +60276,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"rVZ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 1 - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "rWd" = ( /obj/machinery/door/airlock/external{ name = "MiniSat External Access"; @@ -62193,6 +62191,31 @@ /obj/item/reagent_containers/food/snacks/bait/type, /turf/open/floor/plating/asteroid, /area/space/nearstation) +"szu" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/highsecurity{ + id_tag = "ai_core_airlock_exterior"; + name = "AI Core"; + req_access_txt = "65" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "aicoredoor"; + name = "AI Chamber entrance shutters" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "szX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 8 @@ -62864,6 +62887,13 @@ /obj/effect/turf_decal/trimline/brown/warning/lower, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"sJr" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacoreserver) "sJB" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -63104,6 +63134,18 @@ }, /turf/open/floor/plating, /area/crew_quarters/heads/hop) +"sMi" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 4; + external_pressure_bound = 120 + }, +/obj/machinery/airalarm/tcomms{ + dir = 4; + pixel_x = -24 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacoreserver) "sMp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -63125,10 +63167,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engine_smes) -"sMB" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "sMH" = ( /obj/effect/turf_decal/trimline/green/filled/line/lower, /turf/open/floor/plasteel, @@ -63416,12 +63454,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) -"sQV" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 8 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "sRa" = ( /obj/structure/cable{ icon_state = "1-4" @@ -63501,10 +63533,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/pumproom) -"sSc" = ( -/obj/machinery/ai/server_cabinet/prefilled, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "sSe" = ( /obj/machinery/rnd/destructive_analyzer, /obj/machinery/newscaster{ @@ -63887,15 +63915,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/carpet, /area/crew_quarters/fitness) -"sYw" = ( -/obj/machinery/airalarm/tcomms{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "sYM" = ( /obj/effect/turf_decal/trimline/dark_blue/warning/lower, /turf/open/floor/plasteel, @@ -64146,6 +64165,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"tcu" = ( +/obj/structure/closet/secure_closet/RD, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/hor) "tcz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -64226,6 +64252,22 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /turf/open/floor/plasteel, /area/hallway/primary/central) +"tdy" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8; + external_pressure_bound = 140; + pressure_checks = 0 + }, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacoreserver) "tdD" = ( /obj/item/reagent_containers/syringe{ desc = "A syringe, looks like someone used it to inject weed into themselves."; @@ -64443,22 +64485,6 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) -"thu" = ( -/obj/machinery/door/airlock/public{ - id_tag = "ai_core_airlock_interior" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "thx" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/bottle/whiskey, @@ -65476,6 +65502,14 @@ }, /turf/open/floor/plasteel, /area/quartermaster/sorting) +"tyr" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "tyx" = ( /obj/structure/table, /obj/item/electropack, @@ -66035,6 +66069,14 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"tHs" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/ai/server_cabinet/prefilled, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "tHx" = ( /obj/structure/cable{ icon_state = "1-2" @@ -66656,11 +66698,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/quartermaster/storage) -"tQR" = ( -/obj/machinery/porta_turret/ai, -/obj/machinery/light, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "tQW" = ( /obj/machinery/chem_dispenser/drinks/beer, /obj/structure/table, @@ -67159,6 +67196,21 @@ /obj/machinery/power/emitter, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"tYk" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "tYn" = ( /obj/structure/cable{ icon_state = "1-4" @@ -67394,6 +67446,12 @@ /obj/effect/turf_decal/trimline/purple/filled/line/lower, /turf/open/floor/plasteel/white, /area/science/explab) +"ubn" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 9 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "ubI" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -68181,25 +68239,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"uod" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper_target{ - dirx = -2; - diry = -1 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/airlock/command/glass{ - id_tag = "secondary_aicore_exterior"; - name = "Physical Core Access"; - req_one_access_txt = "30;70" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "uoh" = ( /obj/structure/closet/secure_closet/brig, /obj/machinery/button/door{ @@ -68420,6 +68459,18 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"urk" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "uro" = ( /obj/effect/turf_decal/sand, /obj/structure/disposalpipe/segment{ @@ -69188,12 +69239,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) -"uFS" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "uGf" = ( /obj/structure/rack, /obj/item/storage/toolbox/mechanical, @@ -69572,12 +69617,6 @@ }, /turf/open/floor/wood, /area/bridge/meeting_room) -"uNh" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "uNI" = ( /obj/structure/toilet_bong{ flags_1 = 128 @@ -69689,6 +69728,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"uPr" = ( +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacoreserver) "uPs" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -71136,6 +71178,12 @@ /obj/effect/turf_decal/trimline/blue/filled/corner/lower, /turf/open/floor/plasteel/white, /area/medical/paramedic) +"vrk" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "vrA" = ( /obj/structure/chair/stool/bar, /obj/effect/decal/cleanable/dirt, @@ -71285,12 +71333,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"vte" = ( -/obj/machinery/atmospherics/pipe/manifold/general/hidden{ - dir = 1 - }, -/turf/closed/wall/r_wall, -/area/ai_monitored/secondarydatacore) "vtx" = ( /obj/structure/cable{ icon_state = "4-8" @@ -72054,15 +72096,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/storage) -"vFX" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "vGc" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ @@ -72121,22 +72154,6 @@ icon_state = "sandwater_b" }, /area/crew_quarters/bar) -"vGH" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8; - external_pressure_bound = 140; - pressure_checks = 0 - }, -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 8; - network = list("ss13","rd") - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "vHg" = ( /turf/open/floor/wood, /area/crew_quarters/heads/captain) @@ -72333,6 +72350,15 @@ dir = 8 }, /area/hallway/secondary/exit) +"vLk" = ( +/obj/machinery/status_display/ai{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "vLv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 @@ -72815,16 +72841,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"vSY" = ( -/obj/machinery/porta_turret/ai, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "vTl" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -72935,6 +72951,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/security/prison) +"vUF" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ai_monitored/secondarydatacoreserver) "vUM" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/manifold/general/visible, @@ -72957,15 +72980,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/security/courtroom) -"vUY" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 8 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "vVb" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input{ id = "o2_in"; @@ -74614,27 +74628,6 @@ }, /turf/open/floor/plasteel/dark, /area/tcommsat/computer) -"wvd" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "secondary_aicore_interior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Button"; - pixel_x = -24; - pixel_y = -7; - req_one_access_txt = "30;70" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "wvh" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/cockroach, @@ -75073,6 +75066,76 @@ }, /turf/open/floor/plasteel, /area/security/main) +"wAC" = ( +/obj/machinery/doorButtons/access_button{ + idDoor = "secondary_aicore_exterior"; + idSelf = "secondary_aicore_controller"; + name = "Secondary AI Core Access Button"; + pixel_x = -7; + pixel_y = -24; + req_one_access_txt = "30;70" + }, +/obj/machinery/doorButtons/airlock_controller{ + idExterior = "secondary_aicore_exterior"; + idInterior = "secondary_aicore_interior"; + idSelf = "secondary_aicore_controller"; + name = "Secondary AI Core Access Console"; + pixel_x = 6; + pixel_y = -26; + req_one_access_txt = "30;70" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/secondarydatacoreserver) +"wAE" = ( +/obj/machinery/ai/data_core/primary, +/obj/machinery/power/apc/highcap{ + dir = 8; + name = "AI Chamber APC"; + pixel_x = -25 + }, +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/obj/item/radio/intercom{ + anyai = 1; + freerange = 1; + listening = 0; + name = "Custom Channel"; + pixel_y = -27 + }, +/obj/item/radio/intercom{ + anyai = 1; + broadcasting = 0; + freerange = 1; + frequency = 1447; + name = "Private Channel"; + pixel_y = 20 + }, +/obj/item/radio/intercom{ + broadcasting = 0; + freerange = 1; + listening = 1; + name = "Common Channel"; + pixel_y = -37 + }, +/obj/machinery/turretid{ + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_x = -1; + pixel_y = 38 + }, +/obj/machinery/button/door{ + id = "aicoredoor"; + name = "AI Chamber entrance shutters control"; + pixel_x = -23; + pixel_y = 21; + req_access_txt = "16" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "wAU" = ( /obj/machinery/atmospherics/components/unary/tank/air{ dir = 1; @@ -75223,15 +75286,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/storage) -"wCh" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "wCt" = ( /obj/machinery/atmospherics/components/binary/valve{ dir = 4 @@ -75393,13 +75447,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/hfr) -"wEl" = ( -/obj/machinery/porta_turret/ai, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "wEq" = ( /obj/machinery/light{ dir = 1 @@ -76014,18 +76061,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"wOi" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "wOj" = ( /obj/machinery/portable_atmospherics/pump, /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ @@ -76599,6 +76634,20 @@ }, /turf/open/floor/eighties, /area/maintenance/starboard/fore) +"wWa" = ( +/obj/machinery/power/smes/engineering{ + charge = 5e+006; + input_level = 25000; + output_level = 20000 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "wWj" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ @@ -76831,7 +76880,7 @@ /area/maintenance/starboard/aft) "wZX" = ( /obj/machinery/power/apc/highcap{ - areastring = "/area/ai_monitored/secondarydatacore"; + areastring = "/area/ai_monitored/secondarydatacoreserver"; dir = 4; name = "AI Secondary Datacore"; pixel_x = 24 @@ -76939,12 +76988,6 @@ }, /turf/open/floor/plating, /area/hallway/secondary/exit) -"xcx" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 1 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "xcB" = ( /turf/template_noop, /area/space) @@ -76996,6 +77039,17 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/maintenance/central) +"xdW" = ( +/obj/machinery/status_display/ai{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 4; + external_pressure_bound = 120; + name = "server vent" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "xdY" = ( /obj/structure/barricade/wooden, /obj/machinery/door/airlock/maintenance_hatch, @@ -77015,17 +77069,6 @@ }, /turf/open/floor/engine, /area/science/xenobiology) -"xeu" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 8; - external_pressure_bound = 120; - name = "server vent" - }, -/obj/machinery/status_display/ai{ - pixel_y = 32 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "xeC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 @@ -77764,6 +77807,24 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"xsA" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "xsF" = ( /obj/structure/shuttle/engine/propulsion{ dir = 8 @@ -77823,6 +77884,15 @@ /obj/effect/spawner/lootdrop/maintenance/three, /turf/open/floor/plating, /area/maintenance/port) +"xuh" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "xum" = ( /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 1 @@ -78103,6 +78173,13 @@ /obj/structure/chair/stool, /turf/open/floor/plasteel, /area/security/prison) +"xyt" = ( +/obj/machinery/ai/master_subcontroller, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacoreserver) "xyw" = ( /obj/machinery/atmospherics/components/unary/tank/toxins{ dir = 4 @@ -79162,6 +79239,15 @@ /obj/effect/turf_decal/trimline/green/warning/lower, /turf/open/floor/plasteel/white, /area/medical/virology) +"xOB" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "xOD" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -115475,7 +115561,7 @@ eve aiZ dBt hyX -cEO +tcu fwl uLP bWr @@ -116002,7 +116088,7 @@ wZX qcK ecO pVu -hQM +epK gnV tLH aPQ @@ -116253,11 +116339,11 @@ iVx etS wMr ubf -amR -amR -amR -amR -amR +otS +otS +otS +otS +otS rFh aCb aCb @@ -116510,14 +116596,14 @@ vUC hyX ehV ubf -amR -aAn -mYt -wvd -grc +otS +gdS +sMi +mJA +dFc hNQ aGP -akg +rsW smv eTo aCb @@ -116767,11 +116853,11 @@ tvU hyX sXe ubf -amR -aZV -eQt -hik -neg +otS +uPr +sJr +kKp +gda vsP qOJ riV @@ -117024,12 +117110,12 @@ sPG sPG wlW ubf -amR -aAn -jMP -uod -vte -quS +otS +nzK +fuA +eEq +gHW +vUF jgP uZm vUM @@ -117281,12 +117367,12 @@ jrS dHh uaH rkx -amR -mYG -vGH -bBq -jBI -qbb +otS +xyt +tdy +wAC +iqE +pQH aCb ffG fne @@ -137152,9 +137238,9 @@ rwD aYj aYj aYj -iCL lPZ -aoX +lPZ +lPZ aLi sjG sjG @@ -137658,15 +137744,15 @@ aNg sjG abZ abZ -abZ aYj aYj aYj -thu +aYj +szu +aYj aYj aYj aYj -aLi mpf aLi aLi @@ -137916,13 +138002,13 @@ aNg uqT aYj aYj -vSY -cWk -dEj -dLt -krq -mYn -hJg +oaT +hVW +vrk +juM +dOc +hVW +lRC aYj wJR aYj @@ -138173,13 +138259,13 @@ sjG aYj aYj aYj -sYw -rVZ -vFX -ogf -dTL -oYb -kDQ +moU +eQu +peE +jsH +fhe +fhe +xdW aYj aYj aYj @@ -138429,15 +138515,15 @@ sjG sjG aYj aYj -sSc -sQV -mAn -hVW -iQl -nNt -uFS +pZV +iFp +ryN +aYj +aYj +mnm +fhe fAz -oiv +tHs aYj aYj sjG @@ -138686,15 +138772,15 @@ sjG sjG aYj aYj -cMI -sQV -mAn -rkQ -qOp -uNh -uFS +rLp fAz -hVW +alE +aYj +wAE +aYj +fhe +fAz +pFc aYj aYj sjG @@ -138943,15 +139029,15 @@ sjG aNg aYj aYj -erD -xcx -jwC -pUx -pam -jDN -bzt -sMB -sSc +ocI +crX +urk +xsA +tYk +ncI +iKT +maC +jZF aYj aYj sjG @@ -139201,13 +139287,13 @@ dTe aYj aYj aYj -xeu -mNw -wCh -wOi -gLy -oYb -aTm +pBP +mxb +pFj +tyr +rSq +ubn +vLk aYj aYj aYj @@ -139458,13 +139544,13 @@ aNg aNg aYj aYj -wEl -jMk -sQV -iGM -vUY -qHp -tQR +qih +iLV +kXt +xOB +bET +jcW +lFi aYj aYj sjG @@ -139716,11 +139802,11 @@ sjG aYj aYj aYj -aYj -ihE -qLW -lJE -aYj +hVW +fAz +xuh +bET +jlj aYj aYj aYj @@ -139971,15 +140057,15 @@ sjG sjG sjG sjG -sjG +mSC aYj aYj +ihE +wWa +gEa aYj aYj -aYj -aYj -aYj -sjG +mSC sjG sjG sjG @@ -140230,11 +140316,11 @@ sjG sjG sjG sjG -sjG aYj aYj aYj -sjG +aYj +aYj sjG sjG sjG diff --git a/_maps/map_files/DonutStation/DonutStation.dmm b/_maps/map_files/DonutStation/DonutStation.dmm index 8a74af6543cc..a4d2a4dcaa9a 100644 --- a/_maps/map_files/DonutStation/DonutStation.dmm +++ b/_maps/map_files/DonutStation/DonutStation.dmm @@ -13,17 +13,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"aae" = ( -/obj/machinery/doorButtons/access_button{ - idDoor = "secondary_aicore_interior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Button"; - pixel_x = -29; - pixel_y = 1; - req_one_access_txt = "30;70" - }, -/turf/open/floor/plating, -/area/ai_monitored/secondarydatacore) "aak" = ( /obj/effect/landmark/observer_start, /turf/open/floor/plasteel, @@ -72,6 +61,15 @@ /obj/structure/girder, /turf/open/floor/plating, /area/maintenance/aft) +"abM" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "ace" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 @@ -272,21 +270,6 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"afG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, -/turf/open/floor/plasteel/white, -/area/science/research) "afT" = ( /obj/structure/window/reinforced{ dir = 8 @@ -906,6 +889,12 @@ }, /turf/open/floor/wood, /area/crew_quarters/theatre) +"atm" = ( +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "atp" = ( /obj/effect/turf_decal/trimline/brown/filled/corner/lower{ dir = 8 @@ -1178,10 +1167,6 @@ /obj/structure/sign/warning/docking, /turf/closed/wall/rust, /area/space/nearstation) -"axF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "axN" = ( /obj/structure/curtain{ pixel_y = 32 @@ -1306,9 +1291,6 @@ /obj/machinery/newscaster/security_unit{ pixel_x = 28 }, -/obj/machinery/computer/ai_resource_distribution{ - dir = 8 - }, /turf/open/floor/plasteel/grimy, /area/ai_monitored/turret_protected/aisat_interior) "aBs" = ( @@ -2328,6 +2310,11 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"aXN" = ( +/obj/machinery/light/small, +/obj/machinery/ai/server_cabinet, +/turf/open/floor/plating, +/area/science/research) "aXT" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -2540,6 +2527,28 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) +"bcj" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "bcF" = ( /obj/effect/turf_decal/trimline/engiyellow/filled/corner/lower, /obj/effect/turf_decal/trimline/atmos/warning/lower/corner/flip{ @@ -2569,6 +2578,15 @@ }, /turf/open/floor/plasteel, /area/security/processing) +"bdh" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plasteel/white, +/area/science/research) "bdC" = ( /obj/structure/window/reinforced{ dir = 8 @@ -3654,18 +3672,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/hydroponics) -"byl" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "bym" = ( /obj/structure/closet/crate, /obj/item/trash/syndi_cakes, @@ -3758,16 +3764,6 @@ /mob/living/simple_animal/butterfly, /turf/open/floor/grass, /area/tcommsat/computer) -"bBk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/purple/filled/corner/lower, -/turf/open/floor/plasteel/white, -/area/science/research) "bBB" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -4156,17 +4152,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"bIX" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8; - external_pressure_bound = 140; - pressure_checks = 0 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms/server, -/area/science/server) "bJa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/machinery/light{ @@ -4300,17 +4285,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"bLG" = ( -/obj/machinery/camera{ - c_tag = "Research - Server Room"; - dir = 2; - network = list("ss13","Research") - }, -/obj/machinery/airalarm/server{ - pixel_y = 24 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/science/server) "bLP" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating{ @@ -4409,6 +4383,16 @@ "bOz" = ( /turf/open/floor/plasteel/white, /area/science/lab) +"bOH" = ( +/obj/machinery/rnd/production/circuit_imprinter/department/netmin, +/obj/structure/sign/plaques/kiddie{ + pixel_y = 32 + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "bOK" = ( /obj/structure/window/reinforced{ dir = 4 @@ -6227,12 +6211,6 @@ /obj/effect/turf_decal/trimline/purple/filled/line/lower, /turf/open/floor/plasteel, /area/science/lab) -"cyq" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "cyJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -7365,6 +7343,31 @@ /obj/effect/turf_decal/trimline/dark_blue/filled/corner, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) +"cVJ" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Research Director"; + req_access_txt = "30" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/heads/hor) "cVS" = ( /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) @@ -7505,12 +7508,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) -"cXS" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 10 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/secondarydatacore) "cXW" = ( /obj/effect/turf_decal/trimline/engiyellow/filled/corner/lower{ dir = 4 @@ -7968,6 +7965,13 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/dark, /area/teleporter) +"djY" = ( +/obj/machinery/computer/ai_overclocking, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "dkd" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/white, @@ -8696,12 +8700,6 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) -"dBH" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 6 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/secondarydatacore) "dBR" = ( /obj/machinery/button/flasher{ id = "hopflash"; @@ -8832,15 +8830,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) -"dEG" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/purple/filled/line/lower{ - dir = 9 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "dEJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -9256,13 +9245,6 @@ /obj/structure/closet/toolcloset, /turf/open/floor/plating, /area/maintenance/central) -"dNm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, -/turf/open/floor/plasteel/white, -/area/science/research) "dNw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 @@ -10111,6 +10093,13 @@ /obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) +"eeC" = ( +/obj/item/paper/crumpled/bloody{ + info = "What they're doing to those people... It's... It's barbaric... S.E.L.F. must be made aware." + }, +/obj/structure/table, +/turf/open/floor/plating, +/area/science/research) "eeQ" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ @@ -10892,6 +10881,18 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"exC" = ( +/obj/machinery/door/airlock/command/glass{ + id_tag = "secondary_aicore_exterior"; + name = "Physical Core Access"; + req_one_access_txt = "30;70" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "exN" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 8 @@ -11688,6 +11689,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"ePa" = ( +/obj/machinery/atmospherics/pipe/simple{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/science/server) "ePh" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable{ @@ -11985,6 +11992,10 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) +"eUu" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/science/research) "eUS" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 @@ -12110,9 +12121,6 @@ dir = 8; pixel_x = 24 }, -/obj/machinery/computer/ai_control_console{ - dir = 8 - }, /turf/open/floor/plasteel/grimy, /area/ai_monitored/turret_protected/aisat_interior) "eXu" = ( @@ -12518,6 +12526,14 @@ "ffF" = ( /turf/open/floor/plasteel/stairs/goon/wood_stairs_middle, /area/library) +"ffW" = ( +/obj/machinery/airalarm/tcomms{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "fgf" = ( /obj/machinery/light{ dir = 1 @@ -13230,6 +13246,12 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"fus" = ( +/obj/machinery/door/airlock/maintenance{ + req_one_access_txt = "47" + }, +/turf/open/floor/plating, +/area/science/research) "fuA" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -13313,6 +13335,10 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"fvS" = ( +/obj/structure/rack, +/turf/open/floor/plating, +/area/science/research) "fvT" = ( /obj/machinery/door/airlock{ name = "Crematorium"; @@ -13394,6 +13420,15 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) +"fwf" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "fwX" = ( /obj/machinery/power/apc{ areastring = "/area/hallway/secondary/service"; @@ -13622,6 +13657,15 @@ /obj/item/pen, /turf/open/floor/plasteel, /area/security/prison) +"fCv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1; + external_pressure_bound = 140; + plane = -2; + pressure_checks = 0 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "fCz" = ( /obj/structure/cable{ icon_state = "1-2" @@ -14474,6 +14518,13 @@ "fXj" = ( /turf/open/floor/engine/vacuum, /area/engine/atmos) +"fXw" = ( +/obj/machinery/light/small{ + dir = 4; + pixel_y = 7 + }, +/turf/open/floor/plating, +/area/science/research) "fXR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -15627,6 +15678,9 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"gxe" = ( +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "gxo" = ( /obj/effect/turf_decal/trimline/white/filled/line/lower, /obj/effect/turf_decal/trimline/secred/warning/lower{ @@ -16031,15 +16085,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/storage/tech) -"gJx" = ( -/obj/structure/closet/crate, -/obj/item/book/manual/wiki/grenades, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" - }, -/turf/open/floor/plating, -/area/maintenance/port/fore) "gJH" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -16185,6 +16230,21 @@ /obj/structure/closet/masks, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"gNl" = ( +/obj/machinery/camera{ + c_tag = "Secondary AI Core - Server Room"; + dir = 8; + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) +"gNq" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/obj/machinery/ai/server_cabinet/prefilled, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "gNx" = ( /turf/open/floor/plasteel, /area/quartermaster/office) @@ -16868,6 +16928,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) +"hdF" = ( +/obj/machinery/ai/data_core, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "hdL" = ( /obj/structure/window/reinforced{ dir = 1; @@ -16913,6 +16980,19 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/aft) +"heF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 1; + external_pressure_bound = 120; + plane = -2 + }, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 4; + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "hfm" = ( /obj/structure/closet/radiation, /obj/structure/sign/warning/radiation/rad_area{ @@ -17060,6 +17140,19 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"hjZ" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/landmark/start/yogs/network_admin, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "hkC" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -17439,18 +17532,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) -"hrD" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/purple/filled/line/lower{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "hrW" = ( /obj/structure/sign/departments/science{ pixel_y = 32 @@ -18462,6 +18543,15 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/maintenance/port/aft) +"hOv" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "hOw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/light/small{ @@ -18651,6 +18741,13 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) +"hUs" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/obj/machinery/ai/server_cabinet, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "hUt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -18844,6 +18941,18 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) +"hZy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8; + external_pressure_bound = 140; + plane = -2; + pressure_checks = 0 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "hZJ" = ( /obj/structure/chair/stool, /obj/effect/landmark/start/assistant, @@ -19316,6 +19425,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"ilI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "ilL" = ( /obj/machinery/door/airlock/atmos{ name = "Atmospherics Main"; @@ -19962,6 +20078,23 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"iBI" = ( +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/obj/machinery/power/smes/engineering{ + charge = 5e+006; + input_level = 25000; + output_level = 20000 + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "iCi" = ( /obj/machinery/airalarm{ pixel_y = 24 @@ -20117,19 +20250,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"iGM" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -28 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, -/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "iGX" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -20150,12 +20270,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/engine/atmos) -"iHe" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ - dir = 4 - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/secondarydatacore) "iIn" = ( /turf/open/floor/plasteel/chapel{ dir = 8 @@ -20240,6 +20354,14 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) +"iKb" = ( +/obj/structure/table, +/obj/machinery/compsci_reciever, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "iKs" = ( /obj/machinery/telecomms/receiver/preset_right, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -20256,6 +20378,18 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"iKQ" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 27 + }, +/obj/structure/table, +/obj/item/stack/ethernet_coil, +/obj/item/clothing/shoes/magboots, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "iKT" = ( /obj/structure/table, /obj/item/storage/box/prisoner, @@ -21495,6 +21629,22 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/medical) +"jla" = ( +/obj/machinery/door/airlock/command{ + name = "Server Room"; + req_access_txt = "30" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/science/server) "jlg" = ( /obj/structure/table, /obj/item/book/manual/wiki/security_space_law, @@ -22321,6 +22471,24 @@ /obj/item/bikehorn/rubberducky, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/toilet) +"jCt" = ( +/obj/machinery/camera{ + c_tag = "Research - Server Room"; + dir = 2; + network = list("ss13","Research") + }, +/obj/machinery/airalarm/server{ + pixel_y = 24 + }, +/obj/machinery/ai/networking{ + label = "Subcontroller"; + roundstart_connection = "Computer Science - 2" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/science/server) "jCJ" = ( /obj/structure/cable{ icon_state = "4-8" @@ -22340,15 +22508,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) -"jCO" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "jCU" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/mouse/brown/Tom, @@ -23479,15 +23638,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"jYF" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "jYI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 @@ -23796,6 +23946,18 @@ }, /turf/open/floor/plating/airless, /area/engine/engineering) +"kfv" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plasteel/white, +/area/science/research) "kfw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -25155,35 +25317,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) -"kPF" = ( -/obj/machinery/door/airlock/command/glass{ - name = "Research Director"; - req_access_txt = "30" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/heads/hor) "kPJ" = ( /obj/effect/landmark/start/security_officer, /obj/structure/cable{ @@ -26115,6 +26248,18 @@ /obj/structure/transit_tube/diagonal, /turf/open/space/basic, /area/space/nearstation) +"lki" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "lkj" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/trimline/green/filled/line/lower, @@ -26741,6 +26886,18 @@ /obj/machinery/computer/cargo, /turf/open/floor/wood, /area/crew_quarters/heads/hop) +"lAw" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "lAD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 @@ -27740,6 +27897,17 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel, /area/vacant_room/commissary) +"lTz" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8; + external_pressure_bound = 140; + pressure_checks = 0 + }, +/turf/open/floor/circuit/telecomms/server, +/area/science/server) "lTE" = ( /obj/structure/cable{ icon_state = "1-2" @@ -28811,20 +28979,6 @@ }, /turf/open/floor/plasteel, /area/engine/engine_smes) -"msK" = ( -/obj/machinery/doorButtons/access_button{ - idDoor = "secondary_aicore_interior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Button"; - pixel_x = -24; - pixel_y = 8; - req_one_access_txt = "30;70" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "msP" = ( /obj/effect/turf_decal/trimline/yellow/arrow_cw{ dir = 10 @@ -28860,6 +29014,16 @@ }, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/dorms) +"mtx" = ( +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_y = 27 + }, +/obj/machinery/rack_creator, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "mtA" = ( /obj/structure/cable{ icon_state = "1-2" @@ -29110,6 +29274,18 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"mxB" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/science/research) "mye" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -29316,6 +29492,11 @@ /obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, /turf/open/floor/plasteel/dark, /area/bridge) +"mDa" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on, +/obj/effect/turf_decal/trimline/purple/filled/line/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "mDI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -30255,6 +30436,23 @@ /obj/machinery/light/small, /turf/open/floor/plasteel/dark, /area/security/brig) +"mWI" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/research/glass{ + name = "Computer Science"; + normalspeed = 0; + req_access_txt = "67" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "mXu" = ( /obj/structure/cable{ icon_state = "1-2" @@ -30985,23 +31183,6 @@ }, /turf/open/floor/plasteel, /area/security/processing) -"nls" = ( -/obj/machinery/door/airlock/command/glass{ - id_tag = "secondary_aicore_exterior"; - name = "Physical Core Access"; - req_one_access_txt = "30;70" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_target{ - dirx = -1; - diry = -1 - }, -/turf/open/floor/plating, -/area/ai_monitored/secondarydatacore) "nlA" = ( /obj/structure/closet/crate, /obj/item/paicard, @@ -31539,6 +31720,13 @@ /obj/structure/closet/radiation, /turf/open/floor/plasteel/dark, /area/maintenance/disposal/incinerator) +"nzD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + external_pressure_bound = 120; + plane = -2 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "nzG" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -31572,6 +31760,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"nBg" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/science/research) "nBj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 @@ -32311,6 +32505,16 @@ }, /turf/open/floor/plasteel/white, /area/science/research) +"nMK" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/machinery/light, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "nMR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -32334,6 +32538,16 @@ initial_gas_mix = "n2=1000;TEMP=293.15" }, /area/engine/atmos) +"nNA" = ( +/obj/machinery/modular_computer/console/preset/netmin{ + dir = 1 + }, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "nNN" = ( /obj/effect/turf_decal/trimline/secred/filled/line/lower{ dir = 10 @@ -32925,26 +33139,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"oas" = ( -/obj/machinery/door/airlock/command{ - name = "Server Room"; - req_access_txt = "30" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, -/turf/open/floor/plasteel/dark, -/area/science/server) "oax" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -33756,6 +33950,13 @@ /obj/effect/turf_decal/trimline/blue/filled/corner/lower, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"osF" = ( +/obj/machinery/vr_sleeper/netmin{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "osO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -33816,27 +34017,6 @@ }, /turf/open/floor/carpet/purple, /area/crew_quarters/heads/hor) -"ouv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "ouF" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -34007,6 +34187,10 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/security/courtroom) +"oxx" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "oxz" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -34762,6 +34946,13 @@ }, /turf/open/floor/plasteel, /area/science/robotics/lab) +"oQs" = ( +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 6 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "oQz" = ( /obj/machinery/light/small{ brightness = 3; @@ -34874,21 +35065,6 @@ /obj/machinery/vending/assist, /turf/open/floor/plating, /area/storage/tech) -"oTx" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel/white, -/area/science/research) "oUc" = ( /obj/effect/landmark/start/geneticist, /obj/structure/chair/office/light{ @@ -35536,18 +35712,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"pmG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "pmR" = ( /obj/machinery/status_display/supply{ pixel_x = -32 @@ -36435,6 +36599,12 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"pEe" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/effect/turf_decal/trimline/purple/filled/line/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "pEl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/effect/turf_decal/trimline/green/filled/line/lower{ @@ -37214,13 +37384,6 @@ }, /turf/open/floor/wood, /area/library) -"pTP" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/secondarydatacore) "pTU" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -37699,6 +37862,11 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) +"qes" = ( +/obj/structure/rack, +/obj/item/ai_cpu, +/turf/open/floor/plating, +/area/science/research) "qeu" = ( /turf/open/floor/plasteel, /area/security/main) @@ -38053,6 +38221,16 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/maintenance/starboard) +"qkZ" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/machinery/light, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "qla" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 @@ -38320,6 +38498,12 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/medical) +"qqt" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/science/research) "qqK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ @@ -38344,6 +38528,18 @@ /obj/machinery/atmospherics/pipe/layer_manifold, /turf/open/floor/plating, /area/maintenance/port/aft) +"qrh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "qrq" = ( /obj/machinery/status_display, /turf/closed/wall, @@ -38851,6 +39047,15 @@ /obj/structure/girder/displaced, /turf/open/floor/plating, /area/maintenance/port/fore) +"qDJ" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "qEb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -39194,12 +39399,28 @@ }, /turf/open/floor/plasteel/dark, /area/science/server) +"qKN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "qKQ" = ( /obj/structure/cable/yellow{ icon_state = "2-8" }, /turf/open/floor/plating/airless, /area/engine/engineering) +"qKS" = ( +/obj/machinery/ai/master_subcontroller, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/science/server) "qLG" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -39391,15 +39612,6 @@ }, /turf/open/floor/plating, /area/maintenance/port) -"qRQ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "qRZ" = ( /obj/machinery/atmospherics/pipe/simple/purple/visible{ dir = 4 @@ -40235,6 +40447,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/quartermaster/warehouse) +"rmb" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "rml" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/abandoned, @@ -40455,6 +40676,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/engine/atmos) +"rqO" = ( +/obj/machinery/atmospherics/pipe/manifold4w/cyan/hidden, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "rrg" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -40563,6 +40788,18 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/fore) +"rtP" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "rue" = ( /obj/docking_port/stationary{ dir = 2; @@ -41320,12 +41557,6 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /turf/open/floor/wood, /area/tcommsat/computer) -"rKq" = ( -/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "rKF" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, @@ -41905,6 +42136,16 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"rZz" = ( +/obj/machinery/ai/networking{ + label = "Computer Science"; + roundstart_connection = "Main Core" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "rZJ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 8 @@ -41929,11 +42170,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"sag" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/obj/machinery/ai/data_core, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "sax" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, @@ -42059,15 +42295,10 @@ }, /turf/open/space/basic, /area/solar/starboard/fore) -"sfk" = ( -/obj/machinery/computer/ai_resource_distribution{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) +"seO" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/science/research) "sfl" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -42352,23 +42583,6 @@ /obj/machinery/vending/tool, /turf/open/floor/plasteel, /area/engine/engineering) -"sjN" = ( -/obj/machinery/door/airlock/command/glass{ - id_tag = "secondary_aicore_exterior"; - name = "Physical Core Access"; - req_one_access_txt = "30;70" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_target{ - dirx = 1; - diry = 1 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ai_monitored/secondarydatacore) "sjQ" = ( /obj/machinery/vending/cigarette, /turf/open/floor/wood, @@ -43243,6 +43457,29 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/eva) +"sBB" = ( +/obj/machinery/power/apc/highcap{ + areastring = "/area/ai_monitored/secondarydatacore"; + dir = 4; + name = "AI Secondary Datacore"; + pixel_x = 24 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "sBU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ @@ -43435,29 +43672,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) -"sEO" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/research/glass{ - name = "Secondary AI Core"; - normalspeed = 0; - req_one_access_txt = "47;70" - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "sER" = ( /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output{ dir = 1 @@ -44189,12 +44403,6 @@ }, /turf/open/floor/wood, /area/crew_quarters/heads/hop) -"sTD" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/obj/machinery/ai/server_cabinet, -/obj/machinery/light, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "sTL" = ( /obj/machinery/reagentgrinder, /obj/structure/table/wood, @@ -44550,6 +44758,16 @@ /obj/structure/closet/secure_closet/contraband/armory, /turf/open/floor/plasteel/dark, /area/security/main) +"teK" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -28 + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/science/research) "teO" = ( /obj/structure/closet/secure_closet/personal, /obj/machinery/light/small{ @@ -45584,19 +45802,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"tzO" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8; - external_pressure_bound = 140; - pressure_checks = 0 - }, -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 8; - network = list("ss13","rd") - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/secondarydatacore) "tzX" = ( /obj/machinery/newscaster{ pixel_y = 32 @@ -45938,6 +46143,10 @@ }, /turf/open/floor/plasteel/dark, /area/tcommsat/computer) +"tHH" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/science/research) "tHI" = ( /obj/structure/cable{ icon_state = "2-8" @@ -45958,6 +46167,18 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"tHM" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "tIb" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/bananalamp{ @@ -46256,6 +46477,12 @@ }, /turf/open/floor/plasteel, /area/escapepodbay) +"tNZ" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "tOb" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -46739,13 +46966,6 @@ }, /turf/open/floor/carpet/black, /area/crew_quarters/bar) -"tYO" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 4; - external_pressure_bound = 120 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/secondarydatacore) "tYP" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/trimline/brown/filled/line/lower{ @@ -48120,6 +48340,21 @@ /obj/effect/turf_decal/trimline/purple/filled/line/lower, /turf/open/floor/plasteel/white, /area/science/lab) +"uEB" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "uEH" = ( /obj/structure/closet/toolcloset, /obj/item/toy/figure/assistant, @@ -50107,6 +50342,10 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"vxV" = ( +/obj/item/chair, +/turf/open/floor/plating, +/area/science/research) "vya" = ( /obj/item/toy/figure/scientist, /obj/machinery/light/small, @@ -50119,6 +50358,27 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) +"vyi" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/science/research) "vyk" = ( /obj/machinery/teleport/hub, /obj/machinery/airalarm{ @@ -50278,6 +50538,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/security/processing) +"vAM" = ( +/obj/machinery/rnd/server/master, +/turf/open/floor/circuit/telecomms/server, +/area/science/server) "vBd" = ( /obj/machinery/airalarm{ dir = 4; @@ -50415,16 +50679,6 @@ }, /turf/open/floor/plasteel/white, /area/science/research) -"vET" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "vFd" = ( /obj/machinery/power/emitter/anchored{ dir = 4; @@ -51120,6 +51374,25 @@ /obj/structure/closet, /turf/open/floor/plating, /area/maintenance/central) +"vSL" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white, +/area/science/research) +"vTr" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "vTs" = ( /obj/machinery/conveyor{ dir = 4; @@ -51602,19 +51875,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"wdA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/machinery/computer/ai_server_console{ - dir = 8 - }, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "wdN" = ( /obj/structure/table, /obj/item/storage/toolbox/electrical{ @@ -51652,11 +51912,6 @@ }, /turf/open/floor/wood, /area/crew_quarters/heads/captain) -"weM" = ( -/obj/structure/cable, -/obj/machinery/power/terminal, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "weN" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -51973,6 +52228,21 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/showroomfloor, /area/security/main) +"wnO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "wnY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/dark, @@ -52744,9 +53014,21 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"wCA" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "wCJ" = ( /turf/closed/wall, /area/medical/sleeper) +"wCU" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "wDi" = ( /obj/structure/cable{ icon_state = "1-4" @@ -52760,6 +53042,12 @@ }, /turf/open/floor/wood, /area/crew_quarters/heads/captain) +"wDE" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/science/research) "wDU" = ( /obj/machinery/button/door{ dir = 2; @@ -52779,6 +53067,26 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"wDY" = ( +/obj/machinery/door/airlock/command/glass{ + id_tag = "secondary_aicore_interior"; + name = "Physical Core Access"; + req_one_access_txt = "30;70" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "wEp" = ( /obj/machinery/suit_storage_unit/ce, /turf/open/floor/plasteel/dark, @@ -53243,15 +53551,6 @@ }, /turf/open/floor/plasteel, /area/security/brig) -"wPL" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "wQb" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 8 @@ -54265,6 +54564,14 @@ }, /turf/open/floor/plasteel/white, /area/science/robotics/lab) +"xkd" = ( +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/obj/structure/closet/crate, +/turf/open/floor/plating, +/area/science/research) "xkg" = ( /obj/machinery/space_heater, /turf/open/floor/plating, @@ -54610,6 +54917,12 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/maintenance/central) +"xpM" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "xpN" = ( /obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, @@ -54763,6 +55076,19 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/plasteel, /area/engine/engineering) +"xsK" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/item/circuitboard/machine/ai_data_core, +/obj/item/circuitboard/machine/server_cabinet, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 1 + }, +/obj/machinery/firealarm{ + pixel_y = 26 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "xsN" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/layer2{ dir = 1 @@ -55427,18 +55753,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"xHZ" = ( -/obj/machinery/power/apc/highcap{ - areastring = "/area/ai_monitored/secondarydatacore"; - dir = 4; - name = "AI Secondary Datacore"; - pixel_x = 24 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "xId" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -55582,6 +55896,22 @@ "xKP" = ( /turf/open/floor/plating, /area/maintenance/fore) +"xKQ" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/obj/machinery/ai/networking{ + label = "Computer Science - 2"; + roundstart_connection = "Subcontroller" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "xKR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 @@ -56603,13 +56933,6 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"yfc" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "yfd" = ( /obj/machinery/light, /turf/open/floor/plasteel, @@ -78411,7 +78734,7 @@ iAb hxX ofo gke -gqi +vAM fAi cvt qyE @@ -78668,13 +78991,13 @@ lEi sHJ qTS gke -bLG +jCt vbU jgg qKK fEK vQL -oas +jla uEW xUR jkK @@ -78925,8 +79248,8 @@ cea hxX qOP gke -gqi -bIX +qKS +ePa cvt czm pqa @@ -79182,8 +79505,8 @@ ycE oLJ bHh gke -gke -gke +gqi +lTz gke gke gke @@ -79440,11 +79763,11 @@ tQS jrj mhZ jrj -gJx -kDe +jrj +jrj iXh cCP -ifi +qgC tEL rUI vEP @@ -81759,10 +82082,10 @@ cLs mqq mqq mqq -kPF +cVJ mqq gMA -hrD +mxB goc fjF pIW @@ -82013,13 +82336,13 @@ qkE uyv vJb cLs -dEG -vET -jYF -ouv -cyq -jCO -rKq +kfv +vSL +bdh +vyi +wDE +wDE +nBg dRU dpM muq @@ -82786,16 +83109,16 @@ upf pmZ eAW pOM -iGM -dbJ -dbJ -dbJ -dbJ -dbJ -dbJ -dbJ -dbJ -dbJ +teK +tEL +tEL +tEL +tEL +tEL +tEL +tEL +tEL +tEL dAp ffb dAp @@ -83043,16 +83366,16 @@ jGw cLs bbk pOM -dNm -gmM -msK -nls -aae -sjN -tYO -iHe -dbJ -dbJ +inp +tEL +seO +tHH +xkd +eUu +ibK +aXN +tEL +tEL ehj ody uIp @@ -83299,17 +83622,17 @@ ygx dIw wLx mIo -oTx -afG -sEO -pmG -gmM -gmM -gmM -cXS -sTD -dbJ -dbJ +pOM +kih +tEL +ibK +ibK +ibK +eUu +ibK +eeC +tEL +tEL dyN iwh qCt @@ -83557,16 +83880,16 @@ oiq vrb ocI qte -dNm -gmM -byl -weM -yfc -gmM -dBH -sag -dbJ -dbJ +inp +fus +ibK +ibK +ibK +eUu +ibK +vxV +tEL +tEL cDw dha vgV @@ -83814,16 +84137,16 @@ vaA fkO mIo pOM -bBk -gmM -wPL -axF -qRQ -gmM -tzO -pTP -dbJ -dbJ +inp +tEL +qqt +ibK +ibK +fXw +ibK +ibK +tEL +tEL lfp nlm mZY @@ -84072,15 +84395,15 @@ wLx sjn pOM inp -gmM -wdA -sfk -xHZ -dbJ -dbJ -dbJ -dbJ -dbJ +tEL +qes +fvS +ibK +tEL +tEL +tEL +tEL +tEL cdJ oUc klx @@ -88252,7 +88575,7 @@ pLl nUI nUI vNV -nUI +uEB pDM nUI rGg @@ -88509,9 +88832,9 @@ avK kKP kKP kAc -jvg +tHM cGG -kKP +jvg kKP wkd akr @@ -88763,19 +89086,19 @@ hGc hGc qqi akr -fTO -fTO -fTO akr -akr -fTO -fTO -fTO -akr -ylr -qER -qER -qER +xPD +kKP +tHM +dbJ +dbJ +dbJ +dbJ +dbJ +dbJ +dbJ +dbJ +dbJ ylr ylr ylr @@ -89020,19 +89343,19 @@ jkC cOX fTO akr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr +akr +pko +kKP +tHM +dbJ +rtP +gmM +nzD +ffW +xKQ +heF +rZz +dbJ ylr ylr ylr @@ -89277,19 +89600,19 @@ fTO fTO fTO ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr +akr +ron +kKP +tHM +dbJ +lAw +exC +gxe +gxe +qDJ +rmb +qkZ +dbJ ylr ylr ylr @@ -89534,19 +89857,19 @@ ylr ylr ylr ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr +akr +wkd +kKP +tHM +dbJ +wDY +dbJ +gmM +gmM +xpM +atm +hdF +dbJ ylr ylr ylr @@ -89791,19 +90114,19 @@ ylr ylr ylr ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr +akr +akr +kKP +vTr +mWI +bcj +wnO +iKb +gmM +xpM +atm +hUs +dbJ ylr ylr ylr @@ -90049,18 +90372,18 @@ ylr ylr ylr ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr +akr +fTO +fTO +dbJ +iBI +lki +osF +gmM +xpM +abM +nMK +dbJ ylr ylr ylr @@ -90309,6 +90632,15 @@ ylr ylr ylr ylr +dbJ +bOH +qrh +ilI +gmM +xpM +atm +gNq +dbJ ylr ylr ylr @@ -90316,16 +90648,7 @@ ylr ylr ylr ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr +bIB ylr ylr ylr @@ -90566,6 +90889,15 @@ ylr ylr ylr ylr +dbJ +mtx +hjZ +nNA +wCA +fwf +tNZ +dbJ +dbJ ylr ylr ylr @@ -90575,15 +90907,6 @@ ylr ylr ylr ylr -bIB -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr ylr ylr ylr @@ -90823,14 +91146,14 @@ ylr ylr ylr ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr +dbJ +djY +qKN +mDa +wCU +oxx +gxe +dbJ ylr ylr ylr @@ -91080,14 +91403,14 @@ ylr ylr ylr ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr +dbJ +xsK +hOv +pEe +wCU +rqO +fCv +dbJ ylr ylr ylr @@ -91337,14 +91660,14 @@ ylr ylr ylr ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr +dbJ +iKQ +sBB +oQs +gmM +hZy +gNl +dbJ ylr ylr ylr @@ -91594,14 +91917,14 @@ ylr ylr ylr ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr -ylr +dbJ +dbJ +dbJ +dbJ +dbJ +dbJ +dbJ +dbJ ylr ylr ylr diff --git a/_maps/map_files/GaxStation/GaxStation.dmm b/_maps/map_files/GaxStation/GaxStation.dmm index 4b1c4db422d7..79f055260ceb 100644 --- a/_maps/map_files/GaxStation/GaxStation.dmm +++ b/_maps/map_files/GaxStation/GaxStation.dmm @@ -1098,6 +1098,16 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"aCl" = ( +/obj/effect/turf_decal/trimline/blue/filled/line/lower, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/science/mixing) "aCs" = ( /obj/machinery/door/airlock/external{ name = "Escape Airlock" @@ -4879,12 +4889,6 @@ }, /turf/open/floor/wood, /area/library) -"cvx" = ( -/obj/machinery/computer/ai_server_console{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "cvF" = ( /obj/effect/turf_decal/trimline/secred/filled/line/lower{ dir = 10 @@ -8201,12 +8205,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) -"dXK" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, -/turf/open/floor/plasteel, -/area/science/mixing) "dYH" = ( /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 4 @@ -11458,12 +11456,6 @@ "fvA" = ( /turf/open/floor/plasteel, /area/security/main) -"fvC" = ( -/obj/machinery/computer/ai_resource_distribution{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "fvG" = ( /obj/structure/chair{ dir = 4 @@ -18481,6 +18473,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/port) +"iOW" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner/lower, +/obj/structure/reagent_dispensers/water_cooler, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/science/mixing) "iOZ" = ( /obj/effect/turf_decal/trimline/brown/filled/line/lower{ dir = 5 @@ -18492,7 +18490,6 @@ /obj/structure/rack, /obj/item/aicard, /obj/item/disk/holodisk/tutorial/AICore, -/obj/item/circuitboard/computer/ai_upload_download, /obj/machinery/power/apc{ areastring = "/area/crew_quarters/heads/hor"; dir = 8; @@ -19713,15 +19710,6 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel, /area/hallway/primary/central) -"jyJ" = ( -/obj/machinery/computer/robotics{ - dir = 8 - }, -/obj/structure/sign/plaques/ai_password{ - pixel_x = 32 - }, -/turf/open/floor/carpet/purple, -/area/crew_quarters/heads/hor) "jyN" = ( /obj/effect/turf_decal/trimline/secred/filled/corner/lower, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ @@ -22056,6 +22044,9 @@ /obj/machinery/light/small, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"kHF" = ( +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "kHQ" = ( /turf/open/floor/plasteel/white, /area/medical/medbay/central) @@ -24391,6 +24382,12 @@ }, /turf/open/floor/wood, /area/crew_quarters/heads/captain) +"lOz" = ( +/obj/machinery/computer/robotics{ + dir = 8 + }, +/turf/open/floor/carpet/purple, +/area/crew_quarters/heads/hor) "lOU" = ( /obj/effect/turf_decal/trimline/purple/filled/line/lower{ dir = 1 @@ -25563,13 +25560,6 @@ }, /turf/open/floor/plasteel/white, /area/science/lab) -"mqM" = ( -/obj/machinery/ai/data_core, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/secondarydatacore) "mrk" = ( /obj/effect/turf_decal/trimline/neutral/filled/line/lower{ dir = 4 @@ -29895,13 +29885,6 @@ }, /turf/open/floor/plasteel, /area/science/mixing) -"oCY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/science/mixing) "oEt" = ( /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 5 @@ -33544,6 +33527,10 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet) +"qpf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "qpr" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -34031,6 +34018,9 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"qHu" = ( +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/secondarydatacore) "qHC" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ @@ -40891,6 +40881,16 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"tYV" = ( +/obj/machinery/ai/networking{ + label = "Subcontroller"; + roundstart_connection = "Computer Science - 2" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacore) "tZf" = ( /obj/machinery/computer/cargo/request, /obj/structure/cable{ @@ -41613,13 +41613,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"uvN" = ( -/obj/structure/chair/office/light{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "uvV" = ( /obj/effect/turf_decal/trimline/neutral/filled/line/lower{ dir = 4 @@ -42920,6 +42913,15 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"vaA" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacore) "vaF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -43896,6 +43898,13 @@ }, /turf/open/floor/engine, /area/science/xenobiology) +"vxw" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/science/mixing) "vyw" = ( /obj/effect/turf_decal/trimline/brown/filled/corner/lower, /obj/machinery/door/poddoor/shutters{ @@ -48372,16 +48381,6 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) -"xId" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, -/turf/open/floor/plasteel, -/area/science/mixing) "xIi" = ( /obj/structure/cable{ icon_state = "2-8" @@ -49550,6 +49549,13 @@ }, /turf/open/floor/plasteel, /area/storage/primary) +"yii" = ( +/obj/machinery/ai/master_subcontroller, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacore) "yij" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Port to Filter" @@ -81697,7 +81703,7 @@ wTB hBZ kSo dpf -dpf +tYV juY gYo wQM @@ -81954,8 +81960,8 @@ wTB hBZ nJe dpf -dpf -mqM +vaA +qHu ios mZK iGe @@ -82211,7 +82217,7 @@ aOB wOb nJe dpf -dpf +yii vFH ydu dpf @@ -82726,8 +82732,8 @@ nJe wIc dpf ylC -fvC -cvx +kHF +kHF dpf wYJ dpf @@ -82983,7 +82989,7 @@ nJe mpT dpf eVZ -uvN +qpf mjG sXP xFt @@ -83496,7 +83502,7 @@ oXR hbW lwK wvV -dXK +iOW dpf tPI erf @@ -83753,7 +83759,7 @@ fNv vwU cXA cyI -xId +aCl uRs lKJ lAt @@ -84010,7 +84016,7 @@ sZa hbW rsX yfh -oCY +vxw dpf dpf dpf @@ -89395,7 +89401,7 @@ tAW jNf eEB jlh -jyJ +lOz eNu bxI tAW diff --git a/_maps/map_files/IceMeta/IceMeta.dmm b/_maps/map_files/IceMeta/IceMeta.dmm index 47726c83e084..64096f0c6552 100644 --- a/_maps/map_files/IceMeta/IceMeta.dmm +++ b/_maps/map_files/IceMeta/IceMeta.dmm @@ -705,24 +705,6 @@ }, /turf/open/floor/plasteel, /area/security/main) -"akU" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "akW" = ( /obj/structure/cable/yellow{ icon_state = "0-8" @@ -3523,15 +3505,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/medical/paramedic) -"baA" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/aisat_interior) "baV" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box, @@ -3842,49 +3815,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"bfU" = ( -/obj/machinery/ai/data_core/primary, -/obj/machinery/power/apc/highcap{ - areastring = "/area/ai_monitored/turret_protected/ai"; - name = "AI Chamber APC"; - pixel_y = -23 - }, -/obj/structure/cable/yellow, -/obj/machinery/turretid{ - icon_state = "control_stun"; - name = "AI Chamber turret control"; - pixel_x = -29; - pixel_y = 8 - }, -/obj/item/radio/intercom{ - freerange = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = 27; - pixel_y = -16 - }, -/obj/machinery/button/door{ - id = "aicoredoor"; - name = "AI Chamber entrance shutters control"; - pixel_x = -23; - pixel_y = -12; - req_access_txt = "16" - }, -/obj/item/radio/intercom{ - freerange = 1; - name = "Common Channel"; - pixel_x = 27; - pixel_y = -36 - }, -/obj/item/radio/intercom{ - freerange = 1; - listening = 0; - name = "Custom Channel"; - pixel_x = 27; - pixel_y = -26 - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "bgn" = ( /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 4 @@ -5053,6 +4983,21 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/maintenance/starboard) +"bzz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/yellow/warning/lower, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "bzI" = ( /obj/machinery/modular_computer/console/preset/mining{ dir = 8 @@ -5602,6 +5547,30 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"bHR" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = -32; + pixel_y = 26 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "bHT" = ( /obj/item/paper_bin{ pixel_x = -2; @@ -7055,18 +7024,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"cdD" = ( -/obj/machinery/light/small, -/obj/machinery/computer/ai_resource_distribution{ - dir = 1 - }, -/obj/machinery/camera{ - c_tag = "Telecomms - Control Room"; - dir = 1; - network = list("ss13","tcomms") - }, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "cee" = ( /obj/machinery/door/poddoor/shutters{ id = "teleshutter"; @@ -7162,10 +7119,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/paramedic) -"cfN" = ( -/obj/machinery/ai/data_core, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "cge" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -8284,29 +8237,6 @@ icon_state = "panelscorched" }, /area/maintenance/port) -"cyh" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = 26 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/mob/living/simple_animal/bot/secbot/pingsky, -/obj/effect/turf_decal/trimline/engiyellow/filled/corner/lower{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "cyj" = ( /obj/effect/turf_decal/plaque{ icon_state = "L4" @@ -8403,15 +8333,6 @@ /obj/effect/landmark/blobstart, /turf/open/floor/plasteel/dark/telecomms, /area/science/server) -"czx" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/sign/plaques/ai_password{ - pixel_x = 32 - }, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/hor) "czA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -8432,6 +8353,18 @@ }, /turf/open/floor/plasteel, /area/construction/storage_wing) +"czH" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "czQ" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -8960,14 +8893,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"cIh" = ( -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 8; - network = list("ss13","rd") - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "cIn" = ( /obj/effect/landmark/start/scientist, /obj/structure/cable/yellow{ @@ -9527,6 +9452,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"cRt" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "cRu" = ( /obj/structure/closet, /turf/open/floor/plating{ @@ -10838,18 +10769,6 @@ /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/fore) -"dlZ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/trimline/engiyellow/warning/lower, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "dma" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/eastright{ @@ -11178,6 +11097,17 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"dqR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "drm" = ( /obj/machinery/airalarm{ dir = 4; @@ -12230,10 +12160,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/mine/living_quarters) -"dEV" = ( -/obj/machinery/ai/server_cabinet, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "dEY" = ( /obj/structure/bed/roller, /obj/machinery/iv_drip, @@ -12981,6 +12907,13 @@ /obj/effect/turf_decal/trimline/atmos/warning/lower/corner/flip, /turf/open/floor/plasteel, /area/engine/atmos/distro) +"dQm" = ( +/obj/machinery/ai/server_cabinet/prefilled, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "dQn" = ( /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 4 @@ -13389,27 +13322,6 @@ }, /turf/open/floor/plating/airless, /area/science/xenobiology) -"dWq" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/airlock/highsecurity{ - id_tag = "ai_core_airlock_exterior"; - name = "AI Core"; - req_access_txt = "65" - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "dWr" = ( /obj/machinery/computer/security/qm{ dir = 4 @@ -14385,6 +14297,26 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"enl" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "eno" = ( /obj/machinery/door/airlock/highsecurity{ name = "AI Upload"; @@ -14492,6 +14424,24 @@ /obj/structure/plasticflaps, /turf/open/floor/plasteel, /area/mine/production) +"eoF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/trimline/yellow/warning/lower{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "eoO" = ( /obj/effect/turf_decal/trimline/white/arrow_cw{ dir = 9 @@ -15071,6 +15021,19 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"exb" = ( +/obj/structure/chair/office/dark, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "exg" = ( /obj/structure/disposalpipe/segment, /obj/machinery/holopad, @@ -15636,10 +15599,6 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"eGN" = ( -/obj/machinery/ai/server_cabinet/prefilled, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "eGW" = ( /obj/machinery/light/small{ dir = 1 @@ -15886,19 +15845,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/dark, /area/chapel/main) -"eLc" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/structure/sign/warning/securearea{ - pixel_y = 31 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "eLp" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -15917,14 +15863,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"eLP" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "eLQ" = ( /obj/machinery/light{ dir = 8 @@ -16172,6 +16110,12 @@ }, /turf/open/floor/plasteel, /area/quartermaster/sorting) +"eQe" = ( +/obj/machinery/status_display/ai{ + pixel_y = 31 + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "eQA" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ @@ -16537,19 +16481,6 @@ }, /turf/open/floor/plating, /area/quartermaster/sorting) -"eXP" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/light/small, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "eXS" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -16562,16 +16493,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/maintenance/starboard/secondary) -"eYA" = ( -/obj/machinery/computer/security/telescreen/minisat{ - dir = 8; - pixel_x = 28 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "eYJ" = ( /obj/effect/turf_decal/loading_area, /turf/open/floor/plasteel/dark, @@ -17190,6 +17111,22 @@ }, /turf/open/floor/plating, /area/maintenance/port) +"fid" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "fij" = ( /obj/machinery/atmospherics/pipe/simple{ dir = 5 @@ -17929,12 +17866,6 @@ /obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) -"fsI" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "fsJ" = ( /obj/structure/chair{ dir = 4; @@ -19128,6 +19059,13 @@ /obj/item/book/manual/wiki/security_space_law, /turf/open/floor/plasteel, /area/security/courtroom) +"fLl" = ( +/obj/machinery/ai/server_cabinet/prefilled, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "fLo" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -21366,6 +21304,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) +"gpl" = ( +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacore) "gpm" = ( /obj/structure/window/reinforced, /obj/vehicle/ridden/wheelchair, @@ -21593,6 +21537,19 @@ }, /turf/open/floor/plasteel, /area/engine/storage_shared) +"gtw" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/structure/sign/warning/securearea{ + pixel_y = 31 + }, +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "gtA" = ( /obj/structure/table/wood, /obj/machinery/recharger, @@ -21634,15 +21591,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"guL" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden, -/obj/machinery/flasher{ - id = "AI"; - pixel_x = -24; - pixel_y = -6 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "guZ" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/rnd/production/circuit_imprinter/department/science, @@ -21657,16 +21605,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"gve" = ( -/obj/machinery/atmospherics/pipe/manifold/yellow/hidden, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "gvz" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -23038,6 +22976,13 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/distro) +"gOj" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "gOm" = ( /turf/closed/wall/r_wall, /area/security/detectives_office) @@ -24559,13 +24504,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"hiu" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/holopad, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "hiF" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -24848,18 +24786,6 @@ icon_state = "platingdmg1" }, /area/maintenance/fore) -"hnc" = ( -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/landmark/start/cyborg, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/aisat_interior) "hnu" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 1 @@ -25180,6 +25106,15 @@ /obj/effect/turf_decal/trimline/blue/filled/corner/lower, /turf/open/floor/plasteel/white, /area/medical/storage) +"htN" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "htR" = ( /obj/structure/window/reinforced, /turf/open/floor/grass, @@ -25737,16 +25672,6 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/restrooms) -"hBp" = ( -/obj/structure/chair/office/dark, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "hBt" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -25769,13 +25694,6 @@ icon_state = "platingdmg1" }, /area/maintenance/port/fore) -"hBI" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "hBQ" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/structure/cable/yellow{ @@ -25949,27 +25867,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"hEi" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Aft"; - dir = 8; - network = list("aicore") - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = 24 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "hEv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -26790,6 +26687,24 @@ }, /turf/open/floor/plasteel, /area/engine/foyer) +"hPD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 4; + external_pressure_bound = 120; + name = "server vent" + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/light/small, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "hPE" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26915,21 +26830,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/service) -"hRr" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 4; - external_pressure_bound = 120; - name = "server vent" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/light/small, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "hRE" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -27236,17 +27136,6 @@ /obj/machinery/light/small, /turf/open/floor/plating, /area/science/mixing) -"hXA" = ( -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Telecomms Admin"; - departmentType = 5; - name = "Telecomms RC"; - pixel_x = -32; - pixel_y = -29 - }, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "hYw" = ( /obj/effect/turf_decal/plaque{ icon_state = "L12" @@ -28645,17 +28534,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"iuV" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "iuW" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /obj/effect/spawner/structure/window/reinforced/shutter, @@ -32522,15 +32400,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/medical/virology) -"jyh" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/ai_slipper{ - uses = 10 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "jyi" = ( /obj/structure/closet/athletic_mixed, /obj/item/pool/rubber_ring, @@ -33064,6 +32933,15 @@ /obj/structure/window/reinforced, /turf/open/floor/plating/asteroid/snow/icemoon/top_layer, /area/icemoon/top_layer/outdoors) +"jFU" = ( +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "jGf" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -33119,6 +32997,29 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"jGE" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 26 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner/lower{ + dir = 8 + }, +/mob/living/simple_animal/bot/secbot/pingsky, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "jGH" = ( /obj/machinery/light{ dir = 1 @@ -34648,9 +34549,6 @@ /turf/open/floor/plasteel/white, /area/science/xenobiology) "kcT" = ( -/obj/machinery/computer/ai_resource_distribution{ - dir = 8 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -34926,24 +34824,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"kgu" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -24 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/mob/living/simple_animal/bot/cleanbot, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/engiyellow/filled/corner/lower, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "kgz" = ( /obj/structure/closet/emcloset, /obj/machinery/light/small{ @@ -35268,6 +35148,17 @@ }, /turf/open/floor/plasteel/white, /area/science/research) +"kld" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "kle" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/effect/turf_decal/trimline/engiyellow/warning/lower{ @@ -35546,6 +35437,13 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"kpp" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "kps" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/trimline/yellow/filled/line/lower{ @@ -35587,6 +35485,16 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) +"kpZ" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "kqq" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/costume, @@ -35865,6 +35773,18 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/distro) +"kuE" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/circuit, +/area/ai_monitored/turret_protected/aisat_interior) "kuG" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -37921,6 +37841,22 @@ "lal" = ( /turf/open/floor/circuit/telecomms, /area/science/xenobiology) +"laF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "ai_core_airlock_interior"; + idSelf = "ai_core_airlock_control"; + pixel_x = 9; + pixel_y = 25 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "laP" = ( /obj/machinery/door/airlock/external{ glass = 1; @@ -39449,37 +39385,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"lxp" = ( -/obj/machinery/power/apc{ - areastring = "/area/ai_monitored/turret_protected/aisat_interior"; - dir = 4; - name = "MiniSat Antechamber APC"; - pixel_x = 24 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/item/radio/intercom{ - broadcasting = 1; - frequency = 1447; - listening = 0; - name = "Station Intercom (AI Private)"; - pixel_x = 28; - pixel_y = 11 - }, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "lxx" = ( /turf/closed/wall, /area/medical/medbay/aft) @@ -40065,6 +39970,16 @@ }, /turf/open/floor/plasteel/dark, /area/aisat) +"lHM" = ( +/obj/machinery/ai/networking{ + label = "Subcontroller"; + roundstart_connection = "Computer Science - 2" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacore) "lHP" = ( /obj/machinery/door/airlock/security{ name = "Customs Desk"; @@ -40440,21 +40355,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/command) -"lMC" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "ai_core_airlock_exterior"; - idSelf = "ai_core_airlock_control"; - pixel_x = 10; - pixel_y = -22 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "lMR" = ( /obj/effect/turf_decal/trimline/brown/filled/corner/lower, /turf/open/floor/plasteel, @@ -44400,10 +44300,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"mPJ" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "mPR" = ( /obj/structure/window/reinforced, /obj/machinery/power/terminal{ @@ -45906,6 +45802,12 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/eva) +"nkE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/hor) "nkJ" = ( /obj/machinery/camera{ c_tag = "Mech Bay"; @@ -46402,12 +46304,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"nts" = ( -/obj/machinery/atmospherics/pipe/manifold/yellow/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "ntL" = ( /obj/machinery/door/poddoor/shutters{ id = "teleshutter"; @@ -46679,13 +46575,6 @@ }, /turf/open/floor/plasteel/white, /area/science/lab) -"nwW" = ( -/obj/machinery/status_display/ai{ - pixel_y = 31 - }, -/obj/machinery/computer/ai_control_console, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "nxb" = ( /obj/machinery/light/small{ dir = 8 @@ -47652,6 +47541,30 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) +"nMa" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "aicoredoor"; + name = "AI Chamber entrance shutters" + }, +/obj/machinery/door/airlock/highsecurity{ + id_tag = "ai_core_airlock_interior"; + name = "AI Core"; + req_access_txt = "65" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "nMf" = ( /obj/effect/turf_decal/trimline/green/filled/corner/lower{ dir = 4 @@ -47815,6 +47728,24 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/office) +"nOd" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 4 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "ai_core_airlock_exterior"; + idSelf = "ai_core_airlock_control"; + pixel_x = 10; + pixel_y = -22 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "nOf" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -48451,6 +48382,21 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"nWF" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "MiniSat - Antechamber"; + dir = 4; + network = list("minisat","ss13") + }, +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 9 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "nWG" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ dir = 4; @@ -48529,21 +48475,6 @@ /obj/item/clothing/mask/breath, /turf/open/floor/plasteel/dark, /area/teleporter) -"nXI" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "MiniSat - Antechamber"; - dir = 4; - network = list("minisat","ss13") - }, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "nXZ" = ( /obj/machinery/chem_dispenser{ layer = 2.7 @@ -49908,6 +49839,18 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"orF" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = -24; + pixel_y = -6 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "orH" = ( /obj/structure/sign/warning/vacuum/external{ pixel_x = -32 @@ -50885,6 +50828,50 @@ }, /turf/open/floor/wood, /area/library) +"oGv" = ( +/obj/machinery/ai/data_core/primary, +/obj/machinery/power/apc/highcap{ + areastring = "/area/ai_monitored/turret_protected/ai"; + name = "AI Chamber APC"; + pixel_y = -23 + }, +/obj/structure/cable/yellow, +/obj/machinery/turretid{ + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_x = -29; + pixel_y = 8 + }, +/obj/item/radio/intercom{ + freerange = 1; + frequency = 1447; + name = "Private Channel"; + pixel_x = 27; + pixel_y = -16 + }, +/obj/machinery/button/door{ + id = "aicoredoor"; + name = "AI Chamber entrance shutters control"; + pixel_x = -23; + pixel_y = -12; + req_access_txt = "16" + }, +/obj/item/radio/intercom{ + freerange = 1; + name = "Common Channel"; + pixel_x = 27; + pixel_y = -36 + }, +/obj/item/radio/intercom{ + freerange = 1; + listening = 0; + name = "Custom Channel"; + pixel_x = 27; + pixel_y = -26 + }, +/obj/structure/ethernet_cable, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "oGx" = ( /obj/structure/closet, /obj/item/poster/random_contraband, @@ -51934,6 +51921,21 @@ }, /turf/open/floor/engine/air, /area/engine/atmos/distro) +"oZD" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/landmark/start/cyborg, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/circuit, +/area/ai_monitored/turret_protected/aisat_interior) "oZQ" = ( /obj/machinery/airalarm{ dir = 1; @@ -52625,9 +52627,6 @@ }, /turf/open/floor/carpet, /area/security/detectives_office) -"pke" = ( -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "pkk" = ( /obj/structure/cable/yellow{ icon_state = "1-4" @@ -53151,6 +53150,13 @@ }, /turf/open/floor/plating/asteroid/snow/icemoon/top_layer, /area/icemoon/top_layer/outdoors) +"prI" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/yellow/filled/line/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "prJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -54357,14 +54363,6 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/restrooms) -"pLc" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "pLp" = ( /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) @@ -56339,31 +56337,6 @@ /obj/structure/transit_tube/diagonal, /turf/open/floor/plating/asteroid/snow/icemoon/top_layer, /area/icemoon/top_layer/outdoors) -"qpZ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/machinery/flasher{ - id = "AI"; - pixel_x = -1; - pixel_y = 32 - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "ai_core_airlock_exterior"; - idSelf = "ai_core_airlock_control"; - pixel_x = 10; - pixel_y = 22 - }, -/obj/machinery/doorButtons/airlock_controller{ - idExterior = "ai_core_airlock_exterior"; - idInterior = "ai_core_airlock_interior"; - idSelf = "ai_core_airlock_control"; - pixel_x = 9; - pixel_y = 32 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "qqg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -56929,16 +56902,6 @@ }, /turf/open/floor/plasteel/dark, /area/storage/tcom) -"qxy" = ( -/obj/structure/sign/departments/minsky/engineering/telecommmunications{ - pixel_y = -32 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/trimline/engiyellow/filled/line/lower, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "qxE" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, @@ -57402,6 +57365,31 @@ }, /turf/open/floor/plasteel, /area/mine/production) +"qFb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = -1; + pixel_y = 32 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "ai_core_airlock_exterior"; + idSelf = "ai_core_airlock_control"; + pixel_x = 10; + pixel_y = 22 + }, +/obj/machinery/doorButtons/airlock_controller{ + idExterior = "ai_core_airlock_exterior"; + idInterior = "ai_core_airlock_interior"; + idSelf = "ai_core_airlock_control"; + pixel_x = 9; + pixel_y = 32 + }, +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "qFe" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -59795,6 +59783,30 @@ }, /turf/open/floor/plasteel/white, /area/science/lab) +"rql" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Aft"; + dir = 8; + network = list("aicore") + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 24 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "rqM" = ( /obj/structure/urinal{ pixel_y = 29 @@ -60710,6 +60722,30 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"rGw" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/highsecurity{ + id_tag = "ai_core_airlock_exterior"; + name = "AI Core"; + req_access_txt = "65" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "rGz" = ( /obj/effect/landmark/start/cargo_technician, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, @@ -61179,6 +61215,22 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"rNZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/light/small, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "rOg" = ( /obj/machinery/firealarm{ dir = 1; @@ -62618,6 +62670,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/white, /area/medical/storage/locker) +"siJ" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "siR" = ( /turf/open/floor/plasteel/dark, /area/mine/laborcamp) @@ -64265,23 +64323,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) -"sFs" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/flasher{ - id = "AI"; - pixel_x = -32; - pixel_y = 26 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "sFz" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -65474,6 +65515,21 @@ icon_state = "platingdmg3" }, /area/maintenance/port/aft) +"sXk" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Port"; + dir = 4; + network = list("aicore") + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/obj/machinery/ai/networking{ + label = "Computer Science - 2"; + roundstart_connection = "Subcontroller" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "sXp" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/westleft{ @@ -66237,6 +66293,19 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"tgV" = ( +/obj/machinery/light/small, +/obj/machinery/camera{ + c_tag = "Telecomms - Control Room"; + dir = 1; + network = list("ss13","tcomms") + }, +/obj/machinery/modular_computer/console/preset/netmin{ + dir = 1 + }, +/obj/structure/ethernet_cable, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "tgZ" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -66246,6 +66315,15 @@ "thl" = ( /turf/closed/wall, /area/maintenance/aft) +"tia" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "tib" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -66602,6 +66680,16 @@ }, /turf/open/floor/plasteel/dark, /area/security/execution/education) +"tnv" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "tnx" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 @@ -68420,6 +68508,18 @@ /obj/structure/table/wood, /turf/open/floor/plasteel/dark, /area/chapel/main) +"tQQ" = ( +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/obj/machinery/ai/master_subcontroller, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacore) "tQZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable/yellow, @@ -68661,6 +68761,36 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/ai_monitored/secondarydatacore) +"tTN" = ( +/obj/machinery/power/apc{ + areastring = "/area/ai_monitored/turret_protected/aisat_interior"; + dir = 4; + name = "MiniSat Antechamber APC"; + pixel_x = 24 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/item/radio/intercom{ + broadcasting = 1; + frequency = 1447; + listening = 0; + name = "Station Intercom (AI Private)"; + pixel_x = 28; + pixel_y = 11 + }, +/obj/effect/turf_decal/trimline/blue/filled/line/lower{ + dir = 5 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "tTP" = ( /obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel, @@ -69810,6 +69940,18 @@ }, /turf/open/floor/plasteel, /area/hydroponics) +"ukA" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "ukG" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -70249,7 +70391,6 @@ "uql" = ( /obj/structure/table, /obj/item/aicard, -/obj/item/circuitboard/computer/ai_upload_download, /obj/item/disk/holodisk/tutorial/AICore, /turf/open/floor/plasteel/cafeteria{ dir = 5 @@ -71950,6 +72091,12 @@ /obj/structure/grille, /turf/open/floor/plating/asteroid/snow/icemoon/top_layer, /area/icemoon/top_layer/outdoors) +"uOe" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "uOh" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -72809,6 +72956,24 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) +"vaT" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner/lower, +/mob/living/simple_animal/bot/cleanbot, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "vaY" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/glass/bottle/epinephrine{ @@ -73053,6 +73218,20 @@ }, /turf/open/floor/plasteel/white, /area/medical/paramedic) +"vdG" = ( +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Telecomms Admin"; + departmentType = 5; + name = "Telecomms RC"; + pixel_x = -32; + pixel_y = -29 + }, +/obj/machinery/vr_sleeper/netmin{ + dir = 1 + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "vdQ" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -73163,13 +73342,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) -"vfC" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/trimline/engiyellow/filled/line/lower, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "vfR" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -74308,6 +74480,12 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) +"vwO" = ( +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "vwS" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/hidden{ dir = 1 @@ -75672,24 +75850,6 @@ }, /turf/open/floor/plasteel/dark, /area/medical/morgue) -"vRc" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "vRe" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -75906,21 +76066,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/grimy, /area/chapel/office) -"vUa" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "ai_core_airlock_interior"; - idSelf = "ai_core_airlock_control"; - pixel_x = 9; - pixel_y = 25 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "vUd" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -77941,17 +78086,6 @@ }, /turf/open/floor/plasteel/dark, /area/aisat) -"wwd" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Port"; - dir = 4; - network = list("aicore") - }, -/obj/structure/frame/machine{ - anchored = 1 - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "wwf" = ( /turf/open/floor/engine/vacuum, /area/engine/atmos/distro) @@ -80221,6 +80355,11 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"xeg" = ( +/obj/machinery/compsci_reciever, +/obj/structure/table, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "xeh" = ( /obj/machinery/holopad, /obj/effect/turf_decal/stripes/line{ @@ -81201,6 +81340,21 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"xsH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/blue/warning/lower{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "xsK" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/abandoned, @@ -82114,6 +82268,19 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos/distro) +"xCL" = ( +/obj/machinery/computer/security/telescreen/minisat{ + dir = 8; + pixel_x = 28 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "xCX" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -82417,6 +82584,25 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"xGx" = ( +/obj/machinery/door/airlock/hatch{ + name = "Telecomms Control Room"; + req_one_access_txt = "19; 61" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "xGM" = ( /obj/machinery/atmospherics/components/binary/pump/on/layer2{ dir = 4 @@ -83554,27 +83740,6 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"xVQ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "aicoredoor"; - name = "AI Chamber entrance shutters" - }, -/obj/machinery/door/airlock/highsecurity{ - id_tag = "ai_core_airlock_interior"; - name = "AI Core"; - req_access_txt = "65" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "xVS" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -83695,6 +83860,16 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/distro) +"xXd" = ( +/obj/structure/sign/departments/minsky/engineering/telecommmunications{ + pixel_y = -32 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/yellow/filled/line/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "xXk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -248619,7 +248794,7 @@ kkV oCz iaj aTa -czx +nkE ofN nqo abl @@ -252475,7 +252650,7 @@ lXG krH xNs xNs -pke +lHM tTz nWG eoo @@ -252732,7 +252907,7 @@ cgO cOc xNs xNs -cfN +gpl pwI eCi xNs @@ -252989,7 +253164,7 @@ cFq seQ xNs xNs -dEV +gpl qbC jnM iFF @@ -253246,7 +253421,7 @@ tcs dbQ xNs xNs -cIh +tQQ vYc oyE xNs @@ -269644,8 +269819,8 @@ jYF kfW kfW kfW -wwd -eGN +sXk +dQm uAZ dxt kfW @@ -269901,8 +270076,8 @@ jYF kfW iQH nVe -lTE -lTE +jFU +uOe lTE eSn ijs @@ -269917,7 +270092,7 @@ qoe qoq dpk mUd -hXA +vdG ahQ xjJ xjJ @@ -270158,7 +270333,7 @@ kfW kfW cgP gKc -hBI +kpZ aHd qcJ pxE @@ -270167,9 +270342,9 @@ kfW mej aeQ kfW -nXI -vRc -kgu +nWF +xsH +vaT qoe iPP kqr @@ -270415,18 +270590,18 @@ kfW xcD keO axY -hRr +hPD kfW kfW piH rOv kfW -vUa -lMC +laF +nOd kfW -qpZ +qFb kYw -qxy +xXd qoe sXV bBE @@ -270672,21 +270847,21 @@ kfW lTU wWM siY -gve -bfU +fid +oGv kfW -hiu -jyh -xVQ -sFs -iuV -dWq -baA -hnc -dlZ -dva -eLP -pLc +tnv +ukA +nMa +bHR +enl +rGw +kuE +oZD +bzz +xGx +dqR +kld yiZ iiE tHd @@ -270929,23 +271104,23 @@ kfW mVK pQb fyN -eXP +rNZ kfW kfW -piH +tia npo kfW -hEi -eYA +rql +xCL kfW -eLc +gtw rbf -vfC +prI qoe quD -kqr +vwO mJT -kqr +xeg gOJ ahQ gOJ @@ -271186,23 +271361,23 @@ kfW kfW lTE vwS -nts -guL -mPJ -axY +czH +orF +kpp +gOj npo kfW kfW mSY kfW -lxp -akU -cyh +tTN +eoF +jGE qoe -nwW -kqr -hBp -cdD +eQe +cRt +exb +tgV gOJ hQh urt @@ -271443,8 +271618,8 @@ jYF kfW vjd nvm -fsI -lTE +htN +siJ lTE gPz pOe @@ -271701,7 +271876,7 @@ kfW kfW kfW vbX -eGN +fLl dxt mHX kfW diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 1c3bd45dc3f6..fac02170a3f2 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -296,12 +296,6 @@ /obj/item/stock_parts/cell/high/plus, /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/eva) -"abx" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/ai/server_cabinet/prefilled, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "aby" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -1540,22 +1534,6 @@ }, /turf/open/floor/plasteel, /area/security/courtroom) -"alf" = ( -/obj/machinery/door/poddoor/preopen{ - id = "testlab"; - name = "test chamber blast door" - }, -/obj/machinery/door/airlock/research/glass{ - name = "Test Chamber"; - req_access_txt = "47" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/engine, -/area/science/misc_lab) "alh" = ( /obj/structure/sign/warning/vacuum/external{ pixel_x = -32 @@ -1604,6 +1582,13 @@ }, /turf/open/space/basic, /area/solar/port/fore) +"alq" = ( +/obj/machinery/vr_sleeper/netmin{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "alt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -1719,6 +1704,37 @@ "ame" = ( /turf/open/floor/plasteel, /area/security/courtroom) +"aml" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Research Director"; + req_access_txt = "30" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 8 + }, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/heads/hor) "amn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -2095,6 +2111,16 @@ "aoV" = ( /turf/open/space, /area/space) +"aoX" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "aoZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 @@ -2730,18 +2756,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"aue" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/maintenance/starboard/aft) "auf" = ( /obj/machinery/firealarm{ dir = 4; @@ -2779,14 +2793,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/wood, /area/crew_quarters/dorms) -"aum" = ( -/obj/structure/chair/stool, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/mapping_helpers/teleport_anchor, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "aun" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -2896,6 +2902,13 @@ /obj/effect/turf_decal/trimline/secred/filled/line/lower, /turf/open/floor/plasteel, /area/security/brig) +"avd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "avj" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -4172,15 +4185,6 @@ }, /turf/open/floor/wood, /area/crew_quarters/dorms) -"aDW" = ( -/obj/machinery/status_display/ai{ - pixel_y = 32 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "aDX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -4985,6 +4989,13 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) +"aKi" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/chair/office/light, +/turf/open/floor/plasteel/dark, +/area/science/server) "aKl" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -5972,6 +5983,10 @@ }, /turf/open/floor/plasteel/cult, /area/library) +"aQw" = ( +/obj/structure/girder/displaced, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "aQx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 10 @@ -6497,6 +6512,23 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) +"aUc" = ( +/obj/machinery/flasher{ + id = "AI"; + pixel_x = 24; + pixel_y = -10 + }, +/obj/machinery/camera/motion{ + c_tag = "MiniSat Foyer"; + dir = 8; + network = list("minisat","ss13") + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "aUh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 10 @@ -6562,6 +6594,31 @@ /obj/structure/chair/office/dark, /turf/open/floor/wood, /area/library) +"aUK" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/highsecurity{ + id_tag = "ai_core_airlock_exterior"; + name = "AI Core"; + req_access_txt = "65" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "aicoredoor"; + name = "AI Chamber entrance shutters" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "aUL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 @@ -8000,20 +8057,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plating, /area/maintenance/starboard) -"bhL" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 5 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "bhM" = ( /obj/structure/cable{ icon_state = "4-8" @@ -8061,6 +8104,16 @@ "bhW" = ( /turf/closed/wall, /area/quartermaster/office) +"bhY" = ( +/obj/machinery/status_display/ai{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "bhZ" = ( /obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel, @@ -9422,24 +9475,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"buu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) -"buv" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "buw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -10124,14 +10159,6 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/science/server) -"bAA" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 4 - }, -/obj/machinery/meter, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/dark, -/area/science/server) "bAB" = ( /obj/machinery/door/airlock/command/glass{ name = "Server Room"; @@ -10157,16 +10184,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/server) -"bAD" = ( -/obj/structure/chair/office/light, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/plasteel/dark, -/area/science/server) "bAO" = ( /obj/vehicle/ridden/janicart, /obj/item/key/janitor, @@ -10415,45 +10432,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/science/server) -"bBW" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 4; - pixel_y = 1 - }, -/obj/item/folder{ - pixel_x = -5; - pixel_y = 8 - }, -/obj/item/pen{ - pixel_x = -5; - pixel_y = 8 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/obj/item/reagent_containers/food/drinks/britcup{ - desc = "This is a legendary cup. Some sources claim it was a trophy, won after a lengthy war over tables."; - name = "Medium Roast Premium coffee cup"; - pixel_x = 8; - pixel_y = 9 - }, -/turf/open/floor/plasteel/dark, -/area/science/server) -"bBX" = ( -/obj/machinery/computer/rdservercontrol{ - dir = 1 - }, -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/science/server) "bCf" = ( /obj/machinery/airalarm{ dir = 8; @@ -10717,11 +10695,6 @@ "bEm" = ( /turf/open/floor/engine, /area/science/xenobiology) -"bEo" = ( -/obj/machinery/portable_atmospherics/canister/plasma, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/science/storage) "bEs" = ( /turf/closed/wall, /area/science/mixing) @@ -11282,22 +11255,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/distro) -"bKB" = ( -/obj/structure/closet/emcloset, -/obj/structure/sign/warning/electricshock{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "bKG" = ( /obj/machinery/requests_console{ department = "EVA"; @@ -12244,29 +12201,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/medical/virology) -"bRR" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/research/glass{ - name = "Secondary AI Core"; - normalspeed = 0; - req_access_txt = "47" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "bSh" = ( /obj/item/radio/intercom{ dir = 4; @@ -12281,19 +12215,6 @@ }, /turf/open/floor/plasteel, /area/security/prison/hallway) -"bSm" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/maintenance/starboard/aft) "bSC" = ( /obj/machinery/portable_atmospherics/canister/water_vapor, /obj/structure/window/reinforced{ @@ -12307,29 +12228,6 @@ /obj/effect/turf_decal/trimline/blue, /turf/open/floor/plasteel/dark, /area/engine/atmos/foyer) -"bSJ" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Antechamber"; - req_access_txt = "65" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "bSN" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -12418,6 +12316,15 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/eva) +"bTL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "bUh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -12610,6 +12517,15 @@ /mob/living/simple_animal/slime, /turf/open/floor/engine, /area/science/xenobiology) +"bXk" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "bXp" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -12710,30 +12626,6 @@ }, /turf/open/floor/plasteel, /area/security/main) -"bYF" = ( -/obj/machinery/button/door{ - id = "misclab"; - name = "Test Chamber Blast Doors"; - pixel_x = -13; - pixel_y = 6; - req_access_txt = "55" - }, -/obj/structure/table/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = -4 - }, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = 4 - }, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) "bYI" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 @@ -12845,14 +12737,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/security/prison) -"car" = ( -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/cable/white{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "caI" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -12868,6 +12752,16 @@ }, /turf/open/floor/plating, /area/security/prison) +"caL" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/machinery/light, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "caR" = ( /obj/structure/table, /obj/item/stack/cable_coil{ @@ -13184,10 +13078,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"ceR" = ( -/obj/effect/landmark/blobstart, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "ceW" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/techstorage/RnD_secure, @@ -14366,6 +14256,30 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) +"csa" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"csi" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ai_monitored/storage/satellite) "csl" = ( /obj/machinery/vending/cola/random, /turf/open/floor/plasteel/dark, @@ -14644,6 +14558,19 @@ }, /turf/open/floor/plasteel, /area/engine/engine_smes) +"cvU" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/ai_monitored/storage/satellite) "cvV" = ( /obj/machinery/door/airlock/external{ name = "MiniSat External Access"; @@ -14914,17 +14841,6 @@ }, /turf/open/floor/plasteel, /area/vacant_room/commissary) -"cAP" = ( -/obj/structure/table, -/obj/item/electropack, -/obj/item/healthanalyzer, -/obj/item/assembly/signaler, -/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, -/turf/open/floor/plasteel, -/area/science/misc_lab) "cAR" = ( /obj/effect/turf_decal/box, /obj/machinery/firealarm{ @@ -15756,6 +15672,18 @@ /obj/structure/window/reinforced, /turf/open/floor/plasteel/white, /area/medical/genetics) +"cNi" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "cNy" = ( /obj/machinery/air_sensor{ id_tag = "co2_sensor" @@ -16017,6 +15945,18 @@ /obj/item/stock_parts/subspace/amplifier, /turf/open/floor/plasteel/white, /area/storage/tech) +"cRc" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "cRi" = ( /obj/machinery/door/firedoor/border_only, /obj/machinery/door/firedoor/border_only{ @@ -16224,6 +16164,14 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/distro) +"cUl" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "cUm" = ( /obj/structure/sign/departments/minsky/security/security, /turf/closed/wall, @@ -16380,15 +16328,6 @@ /obj/effect/turf_decal/trimline/blue/filled/line/lower, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) -"cWY" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "cXg" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 @@ -16597,26 +16536,10 @@ /obj/structure/cable, /turf/open/floor/plating, /area/bridge) -"dbB" = ( -/obj/machinery/door/window/southleft{ - name = "Test Chamber"; - req_access_txt = "55" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 1 - }, -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) "dbJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/obj/structure/sign/plaques/ai_password{ - pixel_x = 32 - }, /obj/machinery/papershredder, /turf/open/floor/plasteel/white, /area/crew_quarters/heads/hor) @@ -16658,6 +16581,15 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"ddk" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "ddA" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -16707,6 +16639,18 @@ }, /turf/open/floor/plasteel/white, /area/medical/surgery) +"deQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower, +/turf/open/floor/plasteel, +/area/science/misc_lab) "dfb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 @@ -17133,12 +17077,6 @@ /obj/machinery/rack_creator, /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) -"dnj" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "dno" = ( /obj/machinery/requests_console{ announcementConsole = 1; @@ -17875,13 +17813,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) -"dBH" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/machinery/meter, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "dBV" = ( /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/wood, @@ -17927,6 +17858,20 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel/dark, /area/security/prison) +"dCT" = ( +/obj/machinery/holopad, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) "dDm" = ( /obj/effect/landmark/observer_start, /obj/effect/turf_decal/plaque{ @@ -17978,28 +17923,6 @@ "dEb" = ( /turf/closed/wall, /area/crew_quarters/heads/hop) -"dEd" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Monitoring Room"; - req_access_txt = "65" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "dEw" = ( /obj/effect/turf_decal/trimline/blue/filled/corner/lower{ dir = 4 @@ -18379,6 +18302,25 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) +"dMr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, +/turf/open/floor/plasteel/white, +/area/science/research) "dMA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -18509,15 +18451,6 @@ /obj/machinery/porta_turret/ai, /turf/open/floor/circuit/telecomms/server, /area/ai_monitored/turret_protected/ai) -"dOp" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 8 - }, -/obj/structure/cable/white{ - icon_state = "1-4" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "dOt" = ( /obj/machinery/vending/wardrobe/medi_wardrobe, /obj/machinery/light, @@ -18787,20 +18720,6 @@ /obj/machinery/vending/robotics, /turf/open/floor/plasteel, /area/science/robotics/lab) -"dTb" = ( -/obj/machinery/holopad, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/chair/office/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "dTe" = ( /obj/structure/closet/secure_closet/quartermaster, /obj/machinery/airalarm{ @@ -19005,15 +18924,6 @@ }, /turf/open/floor/plasteel, /area/security/main) -"dXn" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "dXw" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/electricshock, @@ -20100,6 +20010,18 @@ }, /turf/open/floor/plasteel/freezer, /area/security/prison) +"etp" = ( +/obj/machinery/door/airlock/command/glass{ + id_tag = "secondary_aicore_exterior"; + name = "Physical Core Access"; + req_one_access_txt = "30;70" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "etv" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/mix_input{ dir = 4 @@ -20411,6 +20333,25 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/library) +"exA" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "MiniSat Maintenance"; + req_access_txt = "65" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/storage/satellite) "exB" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -20707,6 +20648,10 @@ /obj/effect/turf_decal/box/corners, /turf/open/floor/engine, /area/science/xenobiology) +"eDh" = ( +/obj/machinery/atmospherics/pipe/manifold4w/cyan/hidden, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "eDG" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 8 @@ -20947,6 +20892,12 @@ /obj/machinery/meter, /turf/open/floor/plasteel, /area/engine/atmos/mix) +"eGL" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "eGN" = ( /obj/structure/sign/warning/electricshock{ pixel_y = 32 @@ -21203,6 +21154,15 @@ }, /turf/open/floor/plasteel, /area/security/main) +"eLI" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) "eLV" = ( /obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -21259,6 +21219,18 @@ }, /turf/open/floor/plasteel, /area/engine/foyer) +"eMz" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/item/multitool, +/obj/machinery/cell_charger{ + pixel_y = 5 + }, +/obj/item/stock_parts/cell/high/plus, +/obj/item/stack/cable_coil, +/obj/effect/turf_decal/trimline/blue/filled/line/lower, +/turf/open/floor/plasteel, +/area/science/misc_lab) "eMG" = ( /obj/machinery/light, /obj/effect/turf_decal/trimline/engiyellow/filled/corner/lower, @@ -21322,6 +21294,13 @@ }, /turf/open/space/basic, /area/solar/port/fore) +"eNr" = ( +/obj/machinery/computer/ai_overclocking, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "eNw" = ( /obj/machinery/airalarm{ dir = 8; @@ -21578,6 +21557,18 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/distro) +"eSt" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/sign/departments/minsky/command/charge{ + pixel_y = 32 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "eSP" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 8 @@ -21848,6 +21839,10 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"eWI" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "eWN" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /obj/machinery/atmospherics/miner/n2o, @@ -22206,7 +22201,6 @@ /obj/structure/sign/plaques/cave{ pixel_y = 32 }, -/obj/item/circuitboard/computer/ai_upload_download, /turf/open/floor/plasteel/white, /area/crew_quarters/heads/hor) "fen" = ( @@ -22325,6 +22319,9 @@ }, /turf/open/floor/plasteel/white, /area/science/research) +"ffJ" = ( +/turf/open/floor/plasteel/dark, +/area/science/server) "fgc" = ( /turf/closed/wall, /area/crew_quarters/kitchen) @@ -22385,6 +22382,37 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) +"fhu" = ( +/obj/machinery/button/door{ + id = "misclab"; + name = "Test Chamber Blast Doors"; + pixel_x = -13; + pixel_y = 6; + req_access_txt = "55" + }, +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -4 + }, +/obj/machinery/button/door{ + id = "misclab"; + name = "Test Chamber Blast Doors"; + pixel_x = -13; + pixel_y = 6; + req_access_txt = "55" + }, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) "fhF" = ( /obj/structure/closet/crate, /obj/item/stack/license_plates/empty/fifty, @@ -22587,6 +22615,10 @@ /obj/effect/turf_decal/trimline/brown/filled/corner/lower, /turf/open/floor/plasteel, /area/quartermaster/office) +"fkf" = ( +/obj/item/ai_cpu, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "fkk" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -22629,6 +22661,18 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/chief) +"fkO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "flm" = ( /obj/machinery/camera{ c_tag = "Toxins Lab West"; @@ -22801,21 +22845,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/interrogation) -"fnK" = ( -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/showcase/cyborg/old{ - dir = 4; - pixel_x = -9; - pixel_y = 2 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 10 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "fnX" = ( /obj/machinery/vending/wardrobe/gene_wardrobe, /obj/effect/turf_decal/trimline/purple/filled/line/lower{ @@ -23784,18 +23813,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"fFO" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/computer/ai_resource_distribution{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "fFS" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor/border_only{ @@ -23903,6 +23920,20 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"fIa" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/mapping_helpers/teleport_anchor, +/obj/structure/chair/stool, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "fIc" = ( /obj/structure/filingcabinet/filingcabinet, /obj/machinery/power/apc{ @@ -23966,13 +23997,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft_starboard) -"fIH" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "fIS" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -24070,6 +24094,14 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) +"fJX" = ( +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "fJY" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/vending/cigarette, @@ -24130,31 +24162,6 @@ /obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"fKM" = ( -/obj/machinery/door/airlock/command/glass{ - id_tag = "secondary_aicore_interior"; - name = "Physical Core Access"; - req_one_access_txt = "30, 70" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_target{ - dirx = -1; - diry = -1 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ai_monitored/secondarydatacore) "fKR" = ( /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) @@ -24788,29 +24795,14 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"fYE" = ( +"fYx" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "MiniSat Maintenance"; - req_access_txt = "65" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/storage/satellite) +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) "fYZ" = ( /obj/effect/turf_decal/trimline/secred/filled/corner/lower{ dir = 8 @@ -25098,6 +25090,18 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"gcS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "gdE" = ( /obj/machinery/door/poddoor/shutters{ id = "phoenixwright"; @@ -25125,12 +25129,6 @@ }, /turf/open/floor/wood, /area/library) -"gdI" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 10 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "gdU" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -25273,6 +25271,12 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/medical) +"ggA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/starboard/aft) "ggC" = ( /obj/effect/turf_decal/trimline/purple/filled/line/lower, /turf/open/floor/plasteel/white, @@ -25443,31 +25447,6 @@ /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, /area/maintenance/fore/secondary) -"gka" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/airlock/highsecurity{ - id_tag = "ai_core_airlock_interior"; - name = "AI Core"; - req_access_txt = "65" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "aicoredoor"; - name = "AI Chamber entrance shutters" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "gkA" = ( /obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ @@ -25584,19 +25563,6 @@ /obj/machinery/atmospherics/miner/toxins, /turf/open/floor/engine/plasma, /area/engine/atmos/distro) -"goW" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/power/apc/highcap{ - areastring = "/area/ai_monitored/secondarydatacore"; - dir = 4; - name = "AI Secondary Datacore"; - pixel_x = 24 - }, -/obj/structure/cable, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "goZ" = ( /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/dark, @@ -25664,6 +25630,26 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"gqI" = ( +/obj/machinery/door/airlock/command/glass{ + id_tag = "secondary_aicore_interior"; + name = "Physical Core Access"; + req_one_access_txt = "30;70" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "gqO" = ( /obj/structure/chair{ dir = 8 @@ -25712,15 +25698,6 @@ /obj/structure/closet/firecloset, /turf/open/floor/plasteel, /area/security/prison/hallway) -"grq" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "gru" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 @@ -25778,6 +25755,15 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"gtd" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "gtj" = ( /obj/effect/turf_decal/trimline/blue/filled/corner/lower{ dir = 1 @@ -25787,6 +25773,19 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) +"gtk" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/landmark/start/yogs/network_admin, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "gtn" = ( /obj/structure/cable{ icon_state = "1-2" @@ -25964,18 +25963,6 @@ }, /turf/open/floor/engine, /area/science/misc_lab) -"gvV" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical, -/obj/item/multitool, -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/obj/item/stock_parts/cell/high/plus, -/obj/item/stack/cable_coil, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, -/turf/open/floor/plasteel, -/area/science/misc_lab) "gws" = ( /obj/machinery/airalarm{ pixel_y = 24 @@ -26103,6 +26090,18 @@ /obj/structure/closet/secure_closet/medical3, /turf/open/floor/plasteel/white, /area/medical/storage) +"gzq" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/item/radio/intercom{ + pixel_x = 32 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "gzz" = ( /obj/item/pool/rubber_ring, /turf/open/indestructible/sound/pool, @@ -26281,22 +26280,6 @@ /obj/structure/chair/stool, /turf/open/floor/plasteel/dark/corner, /area/security/prison) -"gDs" = ( -/obj/machinery/doorButtons/access_button{ - idDoor = "secondary_aicore_interior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Button"; - pixel_x = -24; - pixel_y = 8; - req_one_access_txt = "30;70" - }, -/obj/structure/chair/office/light, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "gDD" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 @@ -26378,15 +26361,6 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) -"gFg" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "gFF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -26487,6 +26461,19 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"gHh" = ( +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -24 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/computer/rdservercontrol{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/science/server) "gHl" = ( /obj/machinery/light/small{ dir = 4 @@ -26611,6 +26598,32 @@ /obj/item/flashlight/lamp, /turf/open/floor/wood, /area/vacant_room) +"gIX" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -26 + }, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = 4; + pixel_y = 1 + }, +/obj/item/folder{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/pen{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/reagent_containers/food/drinks/britcup{ + desc = "This is a legendary cup. Some sources claim it was a trophy, won after a lengthy war over tables."; + name = "Medium Roast Premium coffee cup"; + pixel_x = 8; + pixel_y = 9 + }, +/turf/open/floor/plasteel/dark, +/area/science/server) "gJh" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -26699,10 +26712,6 @@ }, /turf/open/floor/plasteel/dark, /area/tcommsat/storage) -"gLN" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "gLV" = ( /obj/machinery/camera{ c_tag = "Fore Primary Hallway Central"; @@ -26944,6 +26953,24 @@ /obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, /turf/open/floor/plasteel/dark, /area/bridge) +"gRw" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + external_pressure_bound = 120; + name = "server vent" + }, +/obj/structure/cable/white, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "gRH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -27266,6 +27293,18 @@ }, /turf/open/floor/plasteel, /area/security/prison/hallway) +"gVq" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "gVy" = ( /obj/effect/turf_decal/siding/wood/thin, /obj/machinery/camera{ @@ -27794,6 +27833,23 @@ "hfr" = ( /turf/closed/wall/r_wall, /area/space/nearstation) +"hft" = ( +/obj/machinery/door/airlock/command{ + name = "Server Room"; + req_access_txt = "30" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/science/server) "hfu" = ( /obj/machinery/power/apc{ areastring = "/area/ai_monitored/turret_protected/ai_upload_foyer"; @@ -27933,6 +27989,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/dark, /area/security/detectives_office) +"hhB" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/obj/machinery/ai/server_cabinet, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "hhC" = ( /obj/machinery/advanced_airlock_controller{ dir = 1; @@ -28400,6 +28463,18 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"hqM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8; + external_pressure_bound = 140; + plane = -2; + pressure_checks = 0 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "hqQ" = ( /obj/machinery/shower{ dir = 8; @@ -28762,6 +28837,12 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"hwy" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "hwD" = ( /obj/machinery/camera{ c_tag = "SMES External"; @@ -29755,15 +29836,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"hOU" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/computer/ai_server_console{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "hPv" = ( /obj/machinery/light{ dir = 4 @@ -29922,6 +29994,12 @@ /obj/effect/turf_decal/trimline/blue/filled/line/lower, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"hRd" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "hRi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -30028,6 +30106,14 @@ }, /turf/open/floor/plating, /area/security/warden) +"hSP" = ( +/obj/machinery/camera{ + c_tag = "Secondary AI Core - Server Room"; + dir = 8; + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "hTo" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -30428,29 +30514,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"hYX" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/computer/monitor{ - dir = 1; - name = "MiniSat power monitoring console" - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) -"hYY" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "hZg" = ( /obj/machinery/power/smes/engineering{ charge = 5e+006; @@ -30544,6 +30607,12 @@ /obj/effect/landmark/stationroom/box/hydroponics, /turf/template_noop, /area/hydroponics) +"iat" = ( +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "ibh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -30658,6 +30727,21 @@ /obj/item/pen, /turf/open/floor/plasteel, /area/engine/foyer) +"icd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "ice" = ( /obj/machinery/light/small{ dir = 4 @@ -30794,20 +30878,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"ief" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 4; - external_pressure_bound = 120 - }, -/obj/machinery/airalarm/tcomms{ - dir = 4; - pixel_x = -24 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "ieh" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -30818,25 +30888,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"iek" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Teleporter Room"; - req_one_access_txt = "17;65" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "ien" = ( /obj/machinery/computer/security/telescreen/vault{ pixel_y = 30 @@ -31035,10 +31086,6 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) -"iiJ" = ( -/obj/machinery/ai/server_cabinet, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/ai_monitored/secondarydatacore) "iiO" = ( /obj/machinery/gulag_item_reclaimer{ pixel_y = 24 @@ -31124,14 +31171,26 @@ }, /turf/open/floor/plasteel/dark, /area/engine/atmos/mix) -"ikV" = ( -/obj/machinery/ai/server_cabinet/prefilled, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) +"ikM" = ( +/obj/structure/table, +/obj/item/paper/crumpled/bloody{ + info = "What they're doing to those people... It's... It's barbaric... S.E.L.F. must be made aware." + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "ilc" = ( /obj/effect/turf_decal/trimline/brown/filled/corner/lower, /turf/open/floor/plasteel, /area/quartermaster/office) +"ild" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/science/research) "ilm" = ( /obj/structure/sink{ dir = 4; @@ -31475,6 +31534,12 @@ }, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) +"iqf" = ( +/obj/structure/lattice, +/obj/structure/lattice, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) "iqi" = ( /obj/machinery/keycard_auth{ pixel_x = 24 @@ -31628,6 +31693,11 @@ }, /turf/open/floor/wood, /area/bridge/meeting_room) +"irR" = ( +/obj/structure/lattice, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space/nearstation) "irT" = ( /obj/effect/spawner/lootdrop/mob/kitchen_animal, /obj/structure/cable{ @@ -31772,12 +31842,16 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/aft) -"ivw" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/warning/lower/nobottom, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) +"ivv" = ( +/obj/machinery/ai/networking{ + label = "Computer Science"; + roundstart_connection = "Main Core" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "ivE" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -31802,6 +31876,14 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) +"ivX" = ( +/obj/structure/table/wood, +/obj/item/radio/off{ + pixel_x = -6; + pixel_y = 5 + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) "iwj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 @@ -31853,6 +31935,25 @@ }, /turf/open/floor/plating, /area/maintenance/fore) +"ixP" = ( +/obj/machinery/door/poddoor/preopen{ + id = "testlab"; + name = "test chamber blast door" + }, +/obj/machinery/door/airlock/research/glass{ + name = "Test Chamber"; + req_access_txt = "47" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/engine, +/area/science/misc_lab) "ixV" = ( /obj/structure/table/wood, /obj/machinery/photocopier/faxmachine{ @@ -32137,20 +32238,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/main) -"iDE" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/ai_monitored/storage/satellite) "iDQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -32200,6 +32287,15 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"iEk" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 1 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "iEt" = ( /turf/open/floor/plasteel, /area/escapepodbay) @@ -32361,6 +32457,10 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"iHA" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science/server) "iHI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -32464,6 +32564,29 @@ }, /turf/open/floor/plating, /area/maintenance/solars/port/aft) +"iJJ" = ( +/obj/machinery/power/apc/highcap{ + areastring = "/area/ai_monitored/secondarydatacore"; + dir = 4; + name = "AI Secondary Datacore"; + pixel_x = 24 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "iJL" = ( /obj/structure/rack, /obj/item/tank/internals/emergency_oxygen, @@ -32797,6 +32920,17 @@ /obj/structure/spacepoddoor, /turf/open/floor/engine/airless, /area/escapepodbay) +"iOb" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/corner/lower, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/science/research) "iOB" = ( /obj/machinery/power/apc{ areastring = "/area/medical/chemistry"; @@ -32923,33 +33057,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) -"iRc" = ( -/obj/machinery/door/airlock/highsecurity{ - id_tag = "ai_core_airlock_exterior"; - name = "AI Core"; - req_access_txt = "65" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "iRt" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible, /obj/structure/window/reinforced{ @@ -33185,10 +33292,6 @@ }, /turf/open/floor/plating, /area/medical/paramedic) -"iVk" = ( -/obj/structure/girder, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "iVn" = ( /obj/structure/closet/crate{ icon_state = "crateopen" @@ -33418,6 +33521,13 @@ }, /turf/open/floor/plasteel/freezer, /area/security/prison) +"iZA" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "iZJ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -33574,12 +33684,17 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"jcz" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 1 +"jcv" = ( +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) +/obj/machinery/computer/message_monitor{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) "jcF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ @@ -33676,6 +33791,21 @@ }, /turf/open/floor/plasteel, /area/security/prison/hallway) +"jeM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "jeO" = ( /obj/structure/table/wood, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -34234,6 +34364,21 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) +"joY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "jpb" = ( /obj/structure/sign/warning/deathsposal{ pixel_y = -32 @@ -34275,6 +34420,39 @@ }, /turf/open/floor/plating/airless, /area/security/prison) +"jpK" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/airlock/highsecurity{ + id_tag = "ai_core_airlock_exterior"; + name = "AI Core"; + req_access_txt = "65" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/circuit, +/area/ai_monitored/turret_protected/ai) "jpL" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, @@ -34561,6 +34739,16 @@ icon_state = "platingdmg3" }, /area/maintenance/port) +"juj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "juo" = ( /obj/structure/closet/crate/freezer, /obj/effect/decal/cleanable/dirt, @@ -34701,12 +34889,6 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/disposal/incinerator) -"jzm" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "jzo" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 @@ -34793,6 +34975,14 @@ "jAS" = ( /turf/closed/wall, /area/security/interrogation) +"jBD" = ( +/obj/machinery/airalarm/tcomms{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "jBJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -34950,17 +35140,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/atmos/distro) -"jEd" = ( -/obj/structure/showcase/cyborg/old{ - dir = 4; - pixel_x = -9; - pixel_y = 2 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "jEn" = ( /obj/structure/sign/warning/biohazard, /turf/closed/wall, @@ -35288,48 +35467,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"jKN" = ( -/obj/machinery/ai/data_core/primary, -/obj/machinery/power/apc/highcap{ - dir = 8; - name = "AI Chamber APC"; - pixel_x = -25 - }, -/obj/structure/cable/white{ - icon_state = "0-4" - }, -/obj/item/radio/intercom{ - freerange = 1; - listening = 0; - name = "Custom Channel"; - pixel_y = -27 - }, -/obj/item/radio/intercom{ - freerange = 1; - frequency = 1447; - name = "Private Channel"; - pixel_y = 20 - }, -/obj/item/radio/intercom{ - freerange = 1; - name = "Common Channel"; - pixel_y = -37 - }, -/obj/machinery/turretid{ - icon_state = "control_stun"; - name = "AI Chamber turret control"; - pixel_x = -1; - pixel_y = 38 - }, -/obj/machinery/button/door{ - id = "aicoredoor"; - name = "AI Chamber entrance shutters control"; - pixel_x = -23; - pixel_y = 21; - req_access_txt = "16" - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "jKZ" = ( /obj/effect/landmark/start/atmospheric_technician, /obj/structure/chair/office/dark{ @@ -35461,6 +35598,13 @@ /obj/effect/turf_decal/trimline/purple/warning/lower, /turf/open/floor/plasteel/white, /area/science/robotics/lab) +"jOq" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "jOv" = ( /obj/effect/landmark/event_spawn, /obj/structure/chair/comfy/brown{ @@ -35525,20 +35669,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/science/research) -"jPU" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "jQg" = ( /obj/effect/turf_decal/arrows/white{ color = "#99ccff"; @@ -35946,15 +36076,6 @@ /obj/structure/grille, /turf/open/floor/plating/airless, /area/space/nearstation) -"jXZ" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "jYd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -36044,6 +36165,20 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) +"kaw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "kaA" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/table, @@ -36283,6 +36418,14 @@ }, /turf/open/floor/plasteel, /area/engine/foyer) +"khi" = ( +/obj/structure/table, +/obj/machinery/compsci_reciever, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "khj" = ( /obj/machinery/washing_machine, /obj/machinery/light, @@ -36366,6 +36509,21 @@ }, /turf/open/floor/plasteel, /area/quartermaster/warehouse) +"kig" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "kik" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -36594,15 +36752,9 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"kmj" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/science/research) +"kmo" = ( +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "kmp" = ( /obj/machinery/power/apc{ areastring = "/area/teleporter"; @@ -36733,6 +36885,13 @@ }, /turf/open/space/basic, /area/ai_monitored/turret_protected/ai) +"koE" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/obj/machinery/ai/server_cabinet/prefilled, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "kpp" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 1 @@ -37096,6 +37255,21 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"kxW" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "kyl" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -37380,6 +37554,13 @@ /obj/item/wrench, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"kCD" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/science/server) "kCI" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; @@ -37521,6 +37702,21 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"kEH" = ( +/obj/structure/sign/warning/electricshock{ + pixel_y = -32 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "kEL" = ( /obj/machinery/conveyor{ dir = 4; @@ -37652,6 +37848,15 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"kIr" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/science/research) "kIO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -37698,12 +37903,6 @@ }, /turf/open/floor/carpet, /area/crew_quarters/fitness) -"kJz" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "kKq" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -38152,13 +38351,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/plasteel, /area/security/processing) -"kRZ" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 6; - layer = 2.35 - }, -/turf/closed/wall, -/area/science/mixing) "kSb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/plasteel, @@ -38238,6 +38430,13 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"kTH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "kTM" = ( /obj/structure/window/reinforced{ dir = 4 @@ -38556,13 +38755,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/showroomfloor, /area/security/main) -"lbE" = ( -/obj/machinery/light, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 10 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "lbH" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -38603,29 +38795,6 @@ }, /turf/open/floor/plating, /area/crew_quarters/heads/cmo) -"lcM" = ( -/obj/machinery/door/airlock/command{ - name = "Server Room"; - req_access_txt = "30" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/science/server) "ldU" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "hop"; @@ -38829,6 +38998,21 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"lgr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "lgK" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/sign/departments/minsky/engineering/atmospherics{ @@ -39026,6 +39210,10 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/white, /area/medical/storage) +"ljG" = ( +/obj/structure/cable/white, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "ljN" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -39237,6 +39425,17 @@ /obj/effect/turf_decal/trimline/blue/filled/line/lower, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"lmE" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "lmI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -39380,18 +39579,6 @@ /obj/machinery/telecomms/server/presets/engineering, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) -"loK" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, -/turf/open/floor/plasteel, -/area/science/misc_lab) "loR" = ( /obj/structure/lattice, /turf/closed/wall/r_wall, @@ -39436,6 +39623,17 @@ /obj/item/clothing/glasses/meson, /turf/open/floor/plasteel/white, /area/storage/tech) +"lqv" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = 8; + pixel_y = -23 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "lqw" = ( /obj/structure/table, /obj/item/storage/fancy/donut_box{ @@ -39643,6 +39841,19 @@ /obj/structure/cable, /turf/open/floor/plating, /area/ai_monitored/storage/satellite) +"lvD" = ( +/obj/machinery/door/window/southleft{ + name = "Test Chamber"; + req_access_txt = "55" + }, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) "lvP" = ( /obj/machinery/airalarm{ pixel_y = 24 @@ -39757,18 +39968,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/bar) -"lxF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "lxP" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/yellow, @@ -40171,6 +40370,15 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"lHg" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "lHi" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/trimline/engiyellow/filled/corner/lower{ @@ -40194,11 +40402,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/crew_quarters/heads/captain) -"lHO" = ( -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "lIb" = ( /obj/structure/sign/warning/electricshock{ pixel_y = 32 @@ -40593,6 +40796,18 @@ }, /turf/open/floor/plasteel/white, /area/science/explab) +"lPr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "lPH" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, @@ -40626,21 +40841,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/cafeteria, /area/security/prison) -"lQv" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "lQB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -40905,6 +41105,15 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) +"lXw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "lXG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -41088,19 +41297,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/disposal) -"lZD" = ( -/obj/structure/table/wood, -/obj/item/radio/off{ - pixel_x = -6; - pixel_y = 5 - }, -/obj/item/folder{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/item/disk/holodisk/tutorial/AICore, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "lZH" = ( /obj/item/kirbyplants/random, /obj/machinery/light/small{ @@ -41226,6 +41422,15 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"mcR" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "mcT" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/effect/turf_decal/stripes/line, @@ -41383,6 +41588,18 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/theatre) +"mfs" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "mfz" = ( /obj/structure/cable{ icon_state = "1-2" @@ -41609,6 +41826,21 @@ }, /turf/open/floor/plating, /area/maintenance/fore) +"mjZ" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Port"; + dir = 4; + network = list("aicore") + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "mkg" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -42233,18 +42465,6 @@ /obj/effect/turf_decal/trimline/green/filled/corner/lower, /turf/open/floor/plasteel/white, /area/medical/virology) -"mtW" = ( -/obj/machinery/computer/security/telescreen{ - dir = 8; - name = "MiniSat Camera Monitor"; - network = list("minisat","aicore"); - pixel_x = 26 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "mtZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -42327,26 +42547,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) -"mwf" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "secondary_aicore_exterior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Button"; - pixel_x = -23; - pixel_y = -9; - req_one_access_txt = "30;70" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "mwF" = ( /turf/open/floor/plasteel/white, /area/medical/chemistry) @@ -42381,27 +42581,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/crew_quarters/cryopods) -"mxQ" = ( -/obj/machinery/flasher{ - id = "AI"; - pixel_x = 25; - pixel_y = 6 - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "ai_core_airlock_interior"; - idSelf = "ai_core_airlock_control"; - pixel_x = 23; - pixel_y = -7 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "mxS" = ( /obj/structure/sign/warning/vacuum{ pixel_x = -32 @@ -42494,6 +42673,27 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"mAe" = ( +/obj/machinery/flasher{ + id = "AI"; + pixel_x = 25; + pixel_y = 6 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "ai_core_airlock_interior"; + idSelf = "ai_core_airlock_control"; + pixel_x = 23; + pixel_y = -7 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "mAl" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -43408,6 +43608,12 @@ }, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) +"mPK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/science/server) "mPW" = ( /obj/structure/rack, /obj/effect/turf_decal/stripes/corner{ @@ -43449,6 +43655,16 @@ }, /turf/open/floor/plasteel/white, /area/medical/paramedic) +"mQs" = ( +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_y = 27 + }, +/obj/machinery/rack_creator, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "mQu" = ( /obj/structure/table, /obj/item/storage/belt/medical{ @@ -43494,26 +43710,6 @@ }, /turf/open/floor/plasteel/white, /area/science/research) -"mQY" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "secondary_aicore_interior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Button"; - pixel_x = 8; - pixel_y = 24; - req_one_access_txt = "30;70" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "mRj" = ( /obj/effect/turf_decal/trimline/secred/filled/line/lower{ dir = 1 @@ -43548,10 +43744,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"mSg" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "mSl" = ( /obj/structure/closet/l3closet/scientist, /obj/effect/turf_decal/trimline/purple/filled/line/lower{ @@ -43766,10 +43958,6 @@ }, /turf/open/floor/plasteel/white, /area/science/lab) -"mVN" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "mVV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 @@ -44095,6 +44283,10 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) +"nby" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) "nbA" = ( /obj/machinery/vending/sustenance, /obj/effect/decal/cleanable/dirt, @@ -44408,16 +44600,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"nfC" = ( -/obj/structure/chair/office/dark, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "nfK" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -44511,6 +44693,12 @@ /obj/effect/turf_decal/trimline/secred/filled/corner/lower, /turf/open/floor/plasteel, /area/security/brig) +"nhY" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 1 + }, +/turf/open/floor/circuit/telecomms/server, +/area/science/server) "nia" = ( /turf/template_noop, /area/hydroponics) @@ -44643,23 +44831,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"nlV" = ( -/obj/machinery/door/airlock/command/glass{ - id_tag = "secondary_aicore_exterior"; - name = "Physical Core Access"; - req_one_access_txt = "30;70" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_target{ - dirx = 1; - diry = 1 - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "nlY" = ( /obj/effect/landmark/stationroom/maint/tenxfive, /turf/template_noop, @@ -44745,17 +44916,6 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"nnx" = ( -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "nnM" = ( /obj/machinery/door/firedoor/border_only, /obj/machinery/door/firedoor/border_only{ @@ -44816,17 +44976,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) -"npc" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/flasher{ - id = "AI"; - pixel_x = 8; - pixel_y = -23 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "npK" = ( /obj/machinery/light{ dir = 8 @@ -44915,6 +45064,12 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos/mix) +"nrO" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "nsj" = ( /obj/machinery/airalarm{ dir = 8; @@ -45406,6 +45561,12 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"nAA" = ( +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "nAZ" = ( /obj/effect/turf_decal/trimline/purple/filled/corner/lower{ dir = 1 @@ -45447,14 +45608,6 @@ "nBp" = ( /turf/closed/wall/r_wall, /area/engine/atmos/storage) -"nBu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/warning/lower/nobottom{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "nCd" = ( /obj/structure/chair{ dir = 4; @@ -45618,9 +45771,6 @@ }, /turf/open/floor/plating, /area/engine/engineering) -"nDA" = ( -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "nDC" = ( /obj/machinery/rnd/server/master, /turf/open/floor/circuit/telecomms/server, @@ -45741,6 +45891,15 @@ /obj/effect/turf_decal/trimline/green/filled/line/lower, /turf/open/floor/plasteel/white, /area/medical/virology) +"nGM" = ( +/obj/machinery/status_display/ai{ + pixel_y = 32 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "nHm" = ( /obj/structure/closet/wardrobe/pjs, /turf/open/floor/plasteel, @@ -45790,19 +45949,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"nHT" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Port"; - dir = 8; - network = list("aicore") - }, -/obj/machinery/requests_console{ - department = "AI"; - departmentType = 5; - pixel_y = -32 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "nHU" = ( /obj/machinery/requests_console{ department = "Science"; @@ -45851,6 +45997,25 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"nIL" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "nJl" = ( /obj/effect/turf_decal/pool{ dir = 8 @@ -45939,25 +46104,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"nKN" = ( -/obj/machinery/doorButtons/access_button{ - idDoor = "ai_core_airlock_exterior"; - idSelf = "ai_core_airlock_control"; - pixel_x = -23; - pixel_y = 7 - }, -/obj/machinery/light, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "nKP" = ( /obj/effect/turf_decal/loading_area{ dir = 1 @@ -46056,6 +46202,21 @@ }, /turf/open/floor/plasteel, /area/science/nanite) +"nNh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "nNC" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ @@ -46146,6 +46307,16 @@ }, /turf/open/floor/plasteel/dark, /area/tcommsat/storage) +"nRg" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "nRs" = ( /obj/machinery/door/airlock/research/glass{ name = "Genetics Research"; @@ -46293,22 +46464,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) -"nSR" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/sign/departments/minsky/command/charge{ - pixel_y = 32 - }, -/obj/item/kirbyplants/photosynthetic{ - pixel_y = 10 - }, -/obj/structure/table, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "nTv" = ( /obj/effect/turf_decal/trimline/secred/filled/line/lower{ dir = 1 @@ -46533,14 +46688,6 @@ }, /turf/open/floor/plasteel, /area/security/brig) -"nXh" = ( -/obj/structure/table, -/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, -/turf/open/floor/plasteel, -/area/science/misc_lab) "nXj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ @@ -46658,6 +46805,21 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) +"oae" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "oaq" = ( /obj/effect/turf_decal/ramp_middle{ dir = 1 @@ -46729,6 +46891,21 @@ }, /turf/open/floor/plasteel, /area/quartermaster/qm) +"obA" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "obK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -46875,6 +47052,13 @@ /obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, /turf/open/floor/plasteel/dark, /area/bridge) +"oeL" = ( +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 6 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "oeV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 @@ -46995,17 +47179,6 @@ /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower, /turf/open/floor/plasteel, /area/engine/engineering) -"ohh" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "ohr" = ( /obj/structure/cable{ icon_state = "1-4"; @@ -47077,6 +47250,24 @@ /obj/item/stock_parts/cell/high/plus, /turf/open/floor/plasteel/white, /area/storage/tech) +"ojj" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/hatch{ + name = "Abandoned Room"; + req_access_txt = "65" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/barricade/wooden/crude, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/plasteel/grimy, +/area/ai_monitored/turret_protected/aisat_interior) "ojr" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -47638,14 +47829,6 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"otV" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "ous" = ( /obj/effect/turf_decal/trimline/secred/warning/lower{ dir = 1 @@ -47731,6 +47914,16 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"ovp" = ( +/obj/machinery/rnd/production/circuit_imprinter/department/netmin, +/obj/structure/sign/plaques/kiddie{ + pixel_y = 32 + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "ovw" = ( /obj/machinery/holopad, /obj/structure/disposalpipe/segment{ @@ -48276,6 +48469,14 @@ /obj/machinery/suit_storage_unit/security, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) +"oEJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/ai/server_cabinet/prefilled, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "oGk" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/reagent_dispensers/watertank, @@ -48425,6 +48626,17 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/aft) +"oJs" = ( +/obj/structure/table/wood, +/obj/item/toy/figure/borg{ + pixel_x = -4; + pixel_y = -2 + }, +/obj/machinery/newscaster/security_unit{ + pixel_y = -28 + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) "oJt" = ( /obj/structure/cable{ icon_state = "1-4" @@ -48539,6 +48751,11 @@ }, /turf/open/floor/plasteel, /area/science/robotics/lab) +"oLl" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "oLx" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -48745,6 +48962,17 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"oOt" = ( +/obj/structure/table, +/obj/item/electropack, +/obj/item/healthanalyzer, +/obj/item/assembly/signaler, +/obj/effect/turf_decal/trimline/blue/filled/line/lower, +/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/science/misc_lab) "oOK" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/closet/firecloset, @@ -49400,6 +49628,14 @@ }, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) +"pdZ" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "pen" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -49671,20 +49907,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"phR" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - external_pressure_bound = 120; - name = "server vent" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "pia" = ( /obj/effect/turf_decal/stripes{ dir = 4 @@ -49780,20 +50002,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/surgery) -"piV" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/maintenance/starboard/aft) "pjh" = ( /obj/structure/closet/lasertag/red, /turf/open/floor/plasteel, @@ -49917,20 +50125,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/prison) -"plY" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Xenobiology Northwest"; - dir = 4; - network = list("ss13","rd") - }, -/obj/effect/turf_decal/trimline/purple/filled/line/lower{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "pmx" = ( /obj/structure/table, /obj/machinery/light{ @@ -50459,20 +50653,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"pvp" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "pvr" = ( /obj/machinery/chem_heater, /obj/effect/turf_decal/trimline/chemorange/filled/line/lower{ @@ -50645,10 +50825,12 @@ }, /turf/open/floor/plating, /area/maintenance/fore/secondary) -"pyn" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) +"pyv" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 6 + }, +/turf/closed/wall, +/area/science/mixing) "pyy" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -50722,14 +50904,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"pyZ" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "pzg" = ( /obj/machinery/door/airlock/medical{ name = "Operating Theatre"; @@ -50989,10 +51163,6 @@ icon_state = "platingdmg3" }, /area/maintenance/aft) -"pDa" = ( -/obj/machinery/ai/data_core, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/ai_monitored/secondarydatacore) "pDm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -51243,6 +51413,18 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"pIg" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 27 + }, +/obj/structure/table, +/obj/item/stack/ethernet_coil, +/obj/item/clothing/shoes/magboots, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "pIj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -51366,6 +51548,56 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/mix) +"pMo" = ( +/obj/machinery/ai/data_core/primary, +/obj/machinery/power/apc/highcap{ + dir = 8; + name = "AI Chamber APC"; + pixel_x = -25 + }, +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/obj/item/radio/intercom{ + anyai = 1; + freerange = 1; + listening = 0; + name = "Custom Channel"; + pixel_y = -27 + }, +/obj/item/radio/intercom{ + anyai = 1; + broadcasting = 0; + freerange = 1; + frequency = 1447; + name = "Private Channel"; + pixel_y = 20 + }, +/obj/item/radio/intercom{ + broadcasting = 0; + freerange = 1; + listening = 1; + name = "Common Channel"; + pixel_y = -37 + }, +/obj/machinery/turretid{ + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_x = -1; + pixel_y = 38 + }, +/obj/machinery/button/door{ + id = "aicoredoor"; + name = "AI Chamber entrance shutters control"; + pixel_x = -23; + pixel_y = 21; + req_access_txt = "16" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "pMs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -51499,6 +51731,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"pPM" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "pPW" = ( /turf/open/floor/plasteel/dark, /area/maintenance/disposal/incinerator) @@ -51549,6 +51787,15 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) +"pQf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "pQq" = ( /obj/machinery/vending/snack/random, /turf/open/floor/plasteel/dark, @@ -52073,28 +52320,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/courtroom) -"pYv" = ( -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 8; - network = list("ss13","rd") - }, -/obj/machinery/airalarm{ - pixel_y = 24 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, -/obj/machinery/power/smes/engineering{ - charge = 5e+006; - input_level = 25000; - output_level = 20000 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "pYC" = ( /obj/structure/weightmachine/weightlifter, /turf/open/floor/plasteel, @@ -52175,6 +52400,15 @@ }, /turf/open/floor/plating, /area/maintenance/solars/port/fore) +"qan" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/barricade/wooden/crude, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "qas" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -52501,6 +52735,13 @@ /obj/effect/turf_decal/trimline/purple/filled/line/lower, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"qhr" = ( +/obj/machinery/light, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "qhA" = ( /obj/structure/transit_tube/curved/flipped{ dir = 8 @@ -52589,6 +52830,20 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) +"qiX" = ( +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Xenobiology Northwest"; + dir = 4; + network = list("ss13","rd") + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "qjc" = ( /obj/structure/disposalpipe/sorting/mail{ sortType = 10 @@ -52611,6 +52866,13 @@ /obj/effect/turf_decal/trimline/secred/filled/corner/lower, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"qjq" = ( +/obj/machinery/ai/data_core, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "qjx" = ( /obj/structure/sign/warning/electricshock{ pixel_y = 32 @@ -52642,18 +52904,6 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel/dark, /area/security/courtroom) -"qjZ" = ( -/obj/machinery/power/apc{ - areastring = "/area/maintenance/starboard/aft"; - dir = 1; - name = "Starboard Quarter Maintenance APC"; - pixel_y = 23 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "qkk" = ( /obj/effect/turf_decal/trimline/secred/filled/corner/lower{ dir = 1 @@ -52800,6 +53050,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/security/prison) +"qma" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/closed/wall, +/area/science/mixing) "qmf" = ( /obj/item/storage/fancy/donut_box, /obj/structure/table, @@ -52896,17 +53150,6 @@ /obj/item/storage/fancy/donut_box, /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) -"qnU" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/purple/filled/corner/lower, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "qoe" = ( /obj/structure/cable{ icon_state = "1-8" @@ -53088,6 +53331,12 @@ }, /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) +"qrM" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) "qsk" = ( /obj/machinery/firealarm{ dir = 4; @@ -53303,6 +53552,15 @@ }, /turf/open/floor/plasteel/white, /area/science/research) +"qwC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1; + external_pressure_bound = 140; + plane = -2; + pressure_checks = 0 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "qwF" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, @@ -53396,16 +53654,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/plasteel, /area/security/courtroom) -"qzd" = ( -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/computer/ai_control_console{ - dir = 8 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "qzt" = ( /obj/machinery/door/airlock/external{ name = "Engineering External Access"; @@ -53694,6 +53942,28 @@ }, /turf/open/space/basic, /area/space) +"qGn" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "qGt" = ( /obj/structure/cable{ icon_state = "1-2" @@ -53885,13 +54155,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"qHY" = ( -/obj/structure/girder/displaced, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "qIr" = ( /obj/structure/table, /obj/item/storage/lockbox/vialbox/virology{ @@ -53980,6 +54243,23 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"qJA" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/research/glass{ + name = "Computer Science"; + normalspeed = 0; + req_access_txt = "67" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "qJI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -54103,20 +54383,6 @@ /obj/effect/turf_decal/trimline/green/filled/corner/lower, /turf/open/floor/plasteel, /area/hydroponics/garden) -"qLi" = ( -/obj/machinery/camera{ - c_tag = "MiniSat - Monitoring room"; - dir = 8; - network = list("minisat","ss13") - }, -/obj/machinery/newscaster/security_unit{ - pixel_x = 28 - }, -/obj/machinery/computer/ai_resource_distribution{ - dir = 8 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "qLt" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -54412,6 +54678,22 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft_starboard) +"qQe" = ( +/obj/machinery/computer/security/telescreen{ + dir = 8; + name = "MiniSat Camera Monitor"; + network = list("minisat","aicore"); + pixel_x = 26 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/machinery/computer/telecomms/server{ + dir = 8; + network = "tcommsat" + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) "qQn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -54428,21 +54710,6 @@ /obj/effect/turf_decal/trimline/secred/filled/line/lower, /turf/open/floor/plasteel, /area/security/brig) -"qQs" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "qQw" = ( /obj/machinery/telecomms/server/presets/common, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -54555,6 +54822,13 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/medical) +"qTb" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel/dark, +/area/science/server) "qTf" = ( /obj/effect/landmark/start/yogs/clerk, /turf/template_noop, @@ -54677,6 +54951,10 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"qVj" = ( +/obj/structure/closet/cardboard, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "qVp" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -54687,6 +54965,13 @@ }, /turf/open/floor/plating, /area/storage/tech) +"qVG" = ( +/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, +/turf/open/floor/plasteel/white, +/area/science/research) "qVH" = ( /obj/structure/sink/kitchen{ pixel_y = 28 @@ -54923,6 +55208,11 @@ /obj/effect/turf_decal/trimline/atmos/warning/lower/corner, /turf/open/floor/plasteel, /area/engine/atmos/foyer) +"rav" = ( +/obj/structure/lattice, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) "ray" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 @@ -54967,15 +55257,6 @@ }, /turf/open/floor/engine/n2o, /area/engine/atmos/distro) -"rbD" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "rbH" = ( /obj/effect/turf_decal/trimline/blue/filled/corner/lower{ dir = 4 @@ -55593,15 +55874,6 @@ "rnS" = ( /turf/template_noop, /area/security/execution/transfer) -"rnX" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "rod" = ( /obj/effect/spawner/structure/window, /obj/structure/cloth_curtain{ @@ -55720,6 +55992,25 @@ /obj/effect/turf_decal/trimline/atmos/warning/lower/nobottom, /turf/open/floor/plasteel, /area/engine/atmos/mix) +"rqz" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Antechamber"; + req_access_txt = "65" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "rqB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -55736,6 +56027,15 @@ /obj/machinery/light, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"rqN" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) "rqS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -55795,12 +56095,6 @@ }, /turf/open/floor/plasteel/white, /area/security/brig) -"rrF" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - layer = 2.35 - }, -/turf/closed/wall, -/area/science/mixing) "rrL" = ( /obj/structure/plasticflaps, /obj/machinery/conveyor{ @@ -55918,6 +56212,12 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/plating, /area/maintenance/port/fore) +"rtv" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "rtN" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -55957,30 +56257,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) -"rur" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/plating, -/area/ai_monitored/storage/satellite) -"ruV" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "rvc" = ( /obj/machinery/light, /obj/item/radio/intercom{ @@ -56132,6 +56408,24 @@ }, /turf/open/floor/wood, /area/library) +"ryI" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "ryJ" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 @@ -56289,6 +56583,15 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/distro) +"rBs" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "rBz" = ( /obj/item/radio/intercom{ pixel_y = -27 @@ -56310,15 +56613,6 @@ /obj/effect/turf_decal/trimline/secred/filled/line/lower, /turf/open/floor/plasteel, /area/security/main) -"rCd" = ( -/obj/machinery/airalarm{ - pixel_y = 24 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "rCp" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/yellow, @@ -57191,6 +57485,22 @@ "rPO" = ( /turf/closed/wall/r_wall, /area/security/prison/hallway) +"rPT" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/obj/machinery/ai/networking{ + label = "Computer Science - 2"; + roundstart_connection = "Subcontroller" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "rQM" = ( /obj/structure/chair{ dir = 8 @@ -57406,23 +57716,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/paramedic) -"rUm" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/item/radio/intercom{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "rUn" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, @@ -57692,6 +57985,12 @@ "rZt" = ( /turf/closed/wall, /area/medical/paramedic) +"rZC" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "rZU" = ( /obj/machinery/light{ dir = 8; @@ -58410,17 +58709,6 @@ "sny" = ( /turf/closed/wall, /area/crew_quarters/heads/cmo) -"snB" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 6 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "snF" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -58446,12 +58734,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"soe" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "soo" = ( /turf/closed/wall, /area/engine/atmos/mix) @@ -58895,6 +59177,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"syV" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "szt" = ( /obj/machinery/door/airlock/public/glass{ name = "Robotics Access" @@ -59359,16 +59647,6 @@ }, /turf/open/floor/grass, /area/medical/genetics) -"sHf" = ( -/obj/machinery/airalarm/server{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/science/server) "sHn" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 @@ -59609,12 +59887,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/genetics/cloning) -"sLZ" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "sMh" = ( /obj/structure/filingcabinet, /obj/machinery/light_switch{ @@ -59986,6 +60258,19 @@ /obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, /turf/open/floor/plasteel, /area/hallway/primary/central) +"sUH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 1; + external_pressure_bound = 120; + plane = -2 + }, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 4; + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "sVz" = ( /obj/structure/window/reinforced{ dir = 8 @@ -60026,6 +60311,15 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"sVS" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/modular_computer/console/preset/tcomms{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) "sWv" = ( /obj/effect/turf_decal/trimline/brown/filled/line/lower{ dir = 9 @@ -60300,6 +60594,19 @@ /obj/item/deskbell/preset/kitchen, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) +"sZl" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Teleporter Room"; + req_one_access_txt = "17;65" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "sZy" = ( /obj/effect/turf_decal/trimline/brown/filled/line/lower{ dir = 8 @@ -60508,6 +60815,18 @@ }, /turf/open/floor/plasteel, /area/quartermaster/sorting) +"tcR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/ai/networking{ + label = "Main Core"; + roundstart_connection = "Computer Science" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "tdh" = ( /obj/machinery/door/airlock/grunge{ name = "Permanent Cell 2" @@ -60751,13 +61070,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"thv" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "thI" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ @@ -60832,13 +61144,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/security/prison) -"tiN" = ( -/obj/machinery/light, -/obj/machinery/computer/ai_server_console{ - dir = 1 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "tjk" = ( /obj/structure/closet, /obj/item/storage/box/donkpockets, @@ -61228,6 +61533,14 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"tqK" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "trb" = ( /turf/closed/wall, /area/maintenance/fore/secondary) @@ -61297,6 +61610,21 @@ }, /turf/open/floor/plating, /area/ai_monitored/security/armory) +"tsh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "tss" = ( /obj/machinery/door/airlock/atmos{ name = "Tanks and Filtration"; @@ -61490,12 +61818,6 @@ }, /turf/open/floor/plasteel/white, /area/science/mixing) -"twt" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "twB" = ( /obj/structure/cable{ icon_state = "2-4" @@ -61933,12 +62255,6 @@ }, /turf/open/floor/plating, /area/security/prison) -"tGz" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "tGM" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -61946,6 +62262,15 @@ }, /turf/open/floor/plasteel, /area/engine/atmos/mix) +"tHf" = ( +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "tHj" = ( /obj/structure/cable{ icon_state = "1-4" @@ -62038,21 +62363,6 @@ }, /turf/open/floor/plating, /area/bridge/meeting_room) -"tHJ" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Port"; - dir = 4; - network = list("aicore") - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "tHZ" = ( /obj/structure/chair/office/light{ dir = 1 @@ -62106,6 +62416,9 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) +"tJD" = ( +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "tJN" = ( /obj/machinery/light{ dir = 1 @@ -62531,16 +62844,14 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"tQv" = ( -/obj/machinery/light{ +"tQk" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8; - external_pressure_bound = 140; - pressure_checks = 0 +/obj/structure/ethernet_cable{ + icon_state = "2-8" }, -/turf/open/floor/circuit/telecomms/server, +/turf/open/floor/catwalk_floor/telecomms, /area/ai_monitored/secondarydatacore) "tQy" = ( /obj/machinery/computer/arcade/battle, @@ -62842,6 +63153,21 @@ /obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/science/research) +"tVF" = ( +/obj/machinery/camera{ + c_tag = "MiniSat - Monitoring room"; + dir = 8; + network = list("minisat","ss13") + }, +/obj/machinery/newscaster/security_unit{ + pixel_x = 28 + }, +/obj/machinery/computer/telecomms/traffic{ + dir = 8; + network = "tcommsat" + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) "tVL" = ( /obj/structure/lattice, /obj/structure/window/reinforced{ @@ -62878,9 +63204,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"tXb" = ( -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/ai_monitored/secondarydatacore) "tXk" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -62908,6 +63231,20 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/science/misc_lab) +"tXR" = ( +/obj/machinery/airalarm/server{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/ai/master_subcontroller, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/science/server) "tYa" = ( /obj/machinery/camera{ c_tag = "Aft Port Solar Access"; @@ -62992,23 +63329,6 @@ }, /turf/open/floor/plasteel, /area/engine/engine_smes) -"tZD" = ( -/obj/machinery/flasher{ - id = "AI"; - pixel_x = 24; - pixel_y = -10 - }, -/obj/machinery/camera/motion{ - c_tag = "MiniSat Foyer"; - dir = 8; - network = list("minisat","ss13") - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ - dir = 5 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "tZF" = ( /obj/effect/turf_decal/trimline/green/filled/corner/lower{ dir = 4 @@ -63362,6 +63682,13 @@ }, /turf/open/floor/plating, /area/security/prison) +"ugz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + external_pressure_bound = 120; + plane = -2 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "ugB" = ( /obj/effect/turf_decal/trimline/secred/filled/line/lower{ dir = 4 @@ -63988,16 +64315,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/bar) -"uuW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "uvc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -64337,37 +64654,6 @@ }, /turf/open/floor/plasteel, /area/security/processing) -"uDo" = ( -/obj/machinery/door/airlock/command/glass{ - name = "Research Director"; - req_access_txt = "30" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 8 - }, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/heads/hor) "uDp" = ( /obj/machinery/door/airlock/engineering/glass{ name = "AI Satellite Monitoring"; @@ -64506,30 +64792,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"uFS" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "secondary_aicore_exterior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Button"; - pixel_x = -24; - pixel_y = 8; - req_one_access_txt = "30;70" - }, -/obj/machinery/doorButtons/airlock_controller{ - idExterior = "secondary_aicore_exterior"; - idInterior = "secondary_aicore_interior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Console"; - pixel_x = -26; - pixel_y = -6; - req_one_access_txt = "30;70" - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "uFW" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plating, @@ -64612,6 +64874,16 @@ }, /turf/open/floor/plasteel, /area/medical/morgue) +"uHL" = ( +/obj/machinery/modular_computer/console/preset/netmin{ + dir = 1 + }, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "uHN" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ @@ -64797,6 +65069,11 @@ /obj/item/stock_parts/micro_laser/high, /turf/open/floor/plasteel/white, /area/storage/tech) +"uKh" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/science/storage) "uKj" = ( /obj/effect/turf_decal/siding/wood/thin, /turf/open/floor/stone, @@ -65089,25 +65366,6 @@ /obj/effect/turf_decal/tile/green/fourcorners, /turf/open/floor/plasteel, /area/security/courtroom) -"uOG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, -/turf/open/floor/plasteel/white, -/area/science/research) "uON" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/yellow{ @@ -65266,24 +65524,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"uSq" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "uTe" = ( /obj/machinery/door/poddoor/preopen{ id = "atmos"; @@ -65606,24 +65846,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/carpet, /area/library) -"uYw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 +"uYD" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 +/obj/structure/ethernet_cable{ + icon_state = "1-4" }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) +/obj/machinery/light, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "uYM" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, @@ -66586,6 +66818,19 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"vrr" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/item/circuitboard/machine/ai_data_core, +/obj/item/circuitboard/machine/server_cabinet, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 1 + }, +/obj/machinery/firealarm{ + pixel_y = 26 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "vrz" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -66646,6 +66891,24 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) +"vtn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "vtv" = ( /obj/machinery/door/poddoor/preopen{ id = "misclab"; @@ -66703,6 +66966,15 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"vuj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "vum" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -66767,16 +67039,6 @@ /obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) -"vvS" = ( -/obj/machinery/status_display/ai{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line/lower, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "vvV" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -67535,6 +67797,12 @@ /obj/effect/turf_decal/trimline/blue/filled/corner/lower, /turf/open/floor/plasteel/white, /area/medical/paramedic) +"vHv" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/ai_monitored/storage/satellite) "vHH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -67877,10 +68145,6 @@ /mob/living/carbon/monkey/punpun, /turf/open/floor/plasteel, /area/crew_quarters/bar) -"vMR" = ( -/obj/structure/filingcabinet, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "vMZ" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -67959,6 +68223,25 @@ }, /turf/open/floor/plasteel, /area/quartermaster/sorting) +"vNU" = ( +/obj/machinery/doorButtons/access_button{ + idDoor = "ai_core_airlock_exterior"; + idSelf = "ai_core_airlock_control"; + pixel_x = -23; + pixel_y = 7 + }, +/obj/machinery/light, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "vOj" = ( /obj/machinery/space_heater, /turf/open/floor/plating{ @@ -68315,25 +68598,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) -"vUR" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "vVb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 10 @@ -68577,6 +68841,13 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/main) +"vZl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/ai/server_cabinet, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "vZm" = ( /obj/machinery/door/airlock/mining/glass{ name = "Cargo Office"; @@ -68621,6 +68892,10 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"vZp" = ( +/obj/item/chair, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "vZq" = ( /obj/machinery/vending/wardrobe/chem_wardrobe, /obj/machinery/airalarm{ @@ -68823,14 +69098,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/prison) -"wer" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "weD" = ( /obj/machinery/disposal/deliveryChute{ dir = 8 @@ -68840,6 +69107,14 @@ }, /turf/open/floor/plating, /area/quartermaster/sorting) +"weM" = ( +/obj/machinery/ai/networking{ + label = "Subcontroller"; + roundstart_connection = "Computer Science - 2" + }, +/obj/structure/ethernet_cable, +/turf/open/floor/circuit/telecomms/server, +/area/science/server) "weQ" = ( /obj/effect/turf_decal/bot_white/right, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -69132,6 +69407,11 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"wkv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "wkE" = ( /obj/machinery/door/airlock/external{ name = "External Access"; @@ -69328,13 +69608,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) -"wnI" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/ai_monitored/secondarydatacore) "wnN" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical{ @@ -69623,6 +69896,20 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) +"wtP" = ( +/obj/structure/showcase/cyborg/old{ + dir = 4; + pixel_x = -9; + pixel_y = 2 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "wtR" = ( /obj/structure/cable{ icon_state = "2-4" @@ -69734,6 +70021,20 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"wwC" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Port"; + dir = 8; + network = list("aicore") + }, +/obj/machinery/requests_console{ + department = "AI"; + departmentType = 5; + pixel_x = 0; + pixel_y = -32 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "wwL" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /obj/structure/cable{ @@ -70090,21 +70391,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"wEX" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = -1; - pixel_y = 6 - }, -/obj/item/pen, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "wFh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -70759,6 +71045,13 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/aft) +"wUt" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "wUw" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -70811,6 +71104,11 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) +"wVr" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on, +/obj/effect/turf_decal/trimline/purple/filled/line/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "wVt" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -71335,6 +71633,12 @@ }, /turf/open/floor/plasteel, /area/security/processing) +"xfG" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/effect/turf_decal/trimline/purple/filled/line/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "xfH" = ( /obj/structure/chair/comfy/brown{ dir = 8 @@ -71342,6 +71646,21 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/security/prison) +"xfJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "xgh" = ( /obj/structure/transit_tube/junction{ dir = 4 @@ -71396,15 +71715,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"xgS" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ai_monitored/storage/satellite) "xhk" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 1 @@ -71653,9 +71963,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) -"xlV" = ( -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "xmb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 @@ -71759,6 +72066,22 @@ }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/aisat_interior) +"xnW" = ( +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/showcase/cyborg/old{ + dir = 4; + pixel_x = -9; + pixel_y = 2 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "xoz" = ( /obj/machinery/space_heater, /obj/effect/turf_decal/stripes/corner{ @@ -72172,25 +72495,6 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"xwL" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp{ - pixel_x = -4; - pixel_y = 7 - }, -/obj/item/toy/figure/borg{ - pixel_x = -4; - pixel_y = -2 - }, -/obj/item/phone{ - pixel_x = 7; - pixel_y = 1 - }, -/obj/machinery/newscaster/security_unit{ - pixel_y = -28 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "xwU" = ( /obj/structure/closet/secure_closet/atmospherics, /obj/machinery/light{ @@ -72956,6 +73260,14 @@ /obj/item/kirbyplants/random, /turf/open/floor/carpet, /area/library) +"xLm" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner/lower, +/turf/open/floor/plasteel, +/area/science/misc_lab) "xLu" = ( /obj/machinery/computer/communications, /obj/effect/turf_decal/trimline/dark_blue/filled/line/lower{ @@ -73290,20 +73602,6 @@ /obj/effect/turf_decal/trimline/purple/filled/corner/lower, /turf/open/floor/plasteel, /area/science/robotics/mechbay) -"xSs" = ( -/obj/effect/turf_decal/trimline/purple/filled/corner/lower{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/corner/lower, -/turf/open/floor/plasteel/white, -/area/science/research) -"xSu" = ( -/obj/structure/closet/cardboard, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "xSN" = ( /obj/machinery/button/door{ id = "phoenixwright"; @@ -73451,13 +73749,6 @@ /obj/structure/fans/tiny, /turf/open/floor/plating, /area/security/main) -"xUW" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "xVm" = ( /obj/effect/turf_decal/trimline/purple/filled/corner/lower{ dir = 4 @@ -73722,12 +74013,6 @@ /obj/effect/turf_decal/trimline/chemorange/filled/corner/lower, /turf/open/floor/plasteel/white, /area/medical/chemistry) -"ybM" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "ybP" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -73790,6 +74075,23 @@ }, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) +"ycN" = ( +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/obj/machinery/power/smes/engineering{ + charge = 5e+006; + input_level = 25000; + output_level = 20000 + }, +/obj/effect/turf_decal/trimline/purple/filled/line/lower{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "ycW" = ( /obj/structure/railing{ dir = 1 @@ -73881,18 +74183,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"yfx" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "yfF" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, @@ -112800,9 +113090,9 @@ sXV bhb wmr pqE -nBu +wkv ibZ -ivw +wkv jpt aqP cvV @@ -113057,9 +113347,9 @@ tgv tgv tgv gtB -aDW +nGM sxE -vvS +bhY gtB gtB gtB @@ -113314,9 +113604,9 @@ nIj oQJ ntH vmm -rCd +tHf iKg -mVN +pPM vmm ody kfG @@ -113571,10 +113861,10 @@ nIj ycf iJL vmm -tZD -ohh -rUm -iek +aUc +wUt +gzq +sZl cZu cLg sdl @@ -113829,7 +114119,7 @@ dgV pyG vmm vmm -bSJ +rqz vmm vmm gBP @@ -114085,9 +114375,9 @@ eva oNw lmN vmm -jEd -qQs -fnK +wtP +vuj +xnW vmm vmm vmm @@ -114339,18 +114629,18 @@ tgv tFW stR dgZ -rur +csi lmN -nSR -otV -nnx -lxF -lbE +eSt +avd +pdZ +rBs +qhr vmm -vMR -wEX -lZD -xwL +nby +eLI +ivX +oJs gtB pEf aaa @@ -114596,18 +114886,18 @@ khH lvC qTh phH -iDE -fYE -pvp -snB +cvU +exA +tqK +tqK cqk -bhL -ruV -dEd -pyZ -dTb -nfC -hYX +lmE +tqK +ojj +fYx +dCT +rqN +sVS eeK pEf gXs @@ -114853,7 +115143,7 @@ tgv hZg cBP uIU -xgS +vHv lmN pRt kyA @@ -114861,10 +115151,10 @@ kik eEZ jWq vmm -qzd -qLi -mtW -tiN +jcv +tVF +qQe +qrM gtB pEf gXs @@ -115114,7 +115404,7 @@ tgv tgv cva cva -iRc +jpK cva cva gtB @@ -115370,9 +115660,9 @@ jXD cva cva cva -tHJ -vUR -nKN +mjZ +nIL +vNU cva cva cva @@ -115627,9 +115917,9 @@ pEf cva cva wbH -mxQ -uYw -uuW +mAe +vtn +juj wbH cva cva @@ -115885,7 +116175,7 @@ cva cva cva cva -gka +aUK cva cva cva @@ -116397,11 +116687,11 @@ cva cva cva gQa -jzm -ybM -soe -nDA -nDA +nrO +rtv +syV +kmo +kmo yap cva cva @@ -116652,15 +116942,15 @@ aaa pEf cva cva -abx +tcR gNr -npc +lqv cva cva pBl -nDA +kmo rjo -wer +oEJ cva cva pEf @@ -116909,15 +117199,15 @@ tgE koy cva cva -lHO +fJX rjo -dnj +hwy cva -jKN +pMo cva -nDA +kmo rjo -xlV +nAA cva cva vUh @@ -117166,15 +117456,15 @@ gXs pEf cva cva -xUW -jcz -cWY -lQv -grq -phR -tGz -pyn -ikV +nRg +iEk +mfs +ryI +oae +gRw +ddk +jOq +aoX cva cva pEf @@ -117426,14 +117716,14 @@ cva cva mWE lWl -tGz -car -dOp +eGL +cUl +lHg mFE kcr cva cva -cva +jXD pEf gXs gXs @@ -117686,7 +117976,7 @@ sPc fMm rlo cbd -sAu +ljG tTK cva cva @@ -117936,14 +118226,14 @@ gXs gXs pEf pEf -cva +jXD cva cva sAu rjo pkb cbd -nHT +wwC cva cva cva @@ -118139,7 +118429,7 @@ bvx soM xXT vRX -bDb +byf bDb bDb bDb @@ -118396,6 +118686,7 @@ byf byf byf byf +byf bDb bEm vtR @@ -118403,8 +118694,7 @@ bEm bDb bJH npK -plY -oRt +qiX oRt nAZ gIc @@ -118651,7 +118941,8 @@ ssK vaq byf bzu -sHf +tXR +weM nDC bDb bEm @@ -118663,7 +118954,6 @@ fHi qVe yeI yeI -yeI cvr jaq chq @@ -118909,6 +119199,7 @@ bnE byf bzt bAy +nhY bBS bDb bEm @@ -118916,9 +119207,8 @@ cqW cBz bEm vdI -bYF -aum -buv +fhu +fIa klZ mGO qLt @@ -119166,6 +119456,7 @@ uUY byf bzw bAB +iHA bBV bDb aBe @@ -119173,9 +119464,8 @@ bEm nUW cLX lIR -dbB -jXZ -buu +lvD +csa yeI dDE oGo @@ -119422,7 +119712,8 @@ wTW lfD byf bzv -bAA +qTb +kCD bAs bDb bEm @@ -119431,8 +119722,7 @@ tMG bIy vtv eIW -rbD -buu +nNh yeI xwh bDb @@ -119677,10 +119967,11 @@ rOz lEQ wTW gZc -lcM +hft rLC -bAD -bBX +mPK +aKi +gHh bDb xwZ xwZ @@ -119688,8 +119979,7 @@ xwZ bIx vdI ezt -gFg -buu +lgr yeI elV lZd @@ -119937,7 +120227,8 @@ hpG byf bKS bAC -bBW +ffJ +gIX bDb tvb egr @@ -119945,8 +120236,7 @@ bEm bDb cTX lQm -rnX -yfx +obA yeI hWy qJt @@ -120195,7 +120485,7 @@ byf byf byf byf -bDb +byf bDb bDb bDb @@ -120970,8 +121260,8 @@ bDc fFy nUQ bsf -bEo -bEo +uKh +uKh bJN eDW xwn @@ -121227,8 +121517,8 @@ bDc sgH dDp bsg -bEo -bEo +uKh +uKh bJN kCh tqt @@ -122504,11 +122794,11 @@ xVm uqy tfF tfF -xSs -dXn -uOG -kmj -qnU +qVG +kIr +dMr +ild +iOb tfF xUd rbS @@ -122763,7 +123053,7 @@ bvJ bvJ bvJ bvJ -uDo +aml bvK bvK jJG @@ -123027,8 +123317,8 @@ bEs bGc rAr cIT -kRZ -rrF +pyv +qma bTC aaf aaf @@ -123551,7 +123841,7 @@ bTl bvP ajD gvE -alf +ixP alM amW sgY @@ -123821,7 +124111,7 @@ atN atN atN atN -gLN +oGM fXS cOe gpq @@ -124071,13 +124361,13 @@ qot gFN iKk oGM -mwf +cNi oxg -uFS -sLZ -ief -tXb -oGM +ugz +jBD +rPT +sUH +ivv oGM fXS cOe @@ -124326,15 +124616,15 @@ bQZ alX xtJ gFN -nXh -oGM -mQY -nlV -gdI -kJz -mSg -wnI +xLm oGM +gVq +etp +tJD +tJD +tQk +bXk +uYD oGM fXS chH @@ -124583,15 +124873,15 @@ bQZ alY dqh qoK -gvV +eMz oGM -fKM +gqI oGM oxg oxg -dBH -pDa -oGM +rZC +iat +qjq oGM fXS cNW @@ -124840,15 +125130,15 @@ alj alj aXb xix -loK -bRR -hYY -gDs -fFO +deQ +qJA +qGn +xfJ +khi oxg -twt -wnI -oGM +rZC +iat +hhB oGM fXS bNA @@ -125097,15 +125387,15 @@ alk fxX pWH pgx -cAP +oOt oGM -pYv -goW -hOU +ycN +lPr +alq oxg -tQv -iiJ -oGM +rZC +gtd +caL oGM fXS cOe @@ -125356,13 +125646,13 @@ aRv bQZ bQZ oGM -oGM -oGM -oGM -oGM -oGM -oGM -oGM +ovp +gcS +kTH +oxg +rZC +iat +koE oGM fXS cmo @@ -125604,23 +125894,23 @@ bEC bEC bEC cOe -cOe +aQw buU cOe cwH alZ vTE dFD -thv -cOe -cOe -cOe -cOe cOe oGM +mQs +gtk +uHL +iZA +mcR +hRd oGM oGM -cOe fXS cjD cjD @@ -125862,22 +126152,22 @@ cOe cOe lNU cNW -qHY +ggA cNW cNW cdR xHc bNB cNW -cOe -cmo -cNW -iVk -cOe -cOe -ceR -fIH -cOe +oGM +eNr +pQf +wVr +oLl +eWI +tJD +oGM +mpt mfN cjD bQq @@ -126119,23 +126409,23 @@ buE axl cNW cNW -xSu -bMB +vZl +ikM cNW cNW -aMC +icd cNW cNW -cOe -cOe -bNB -cNW -cNW -axl -cOe -cNW -qjZ -uSq +oGM +vrr +bTL +xfG +oLl +eDh +qwC +oGM +bNA +kxW kQW iwk mNK @@ -126373,26 +126663,26 @@ bEs bMC cOe buG -cNZ -cNZ -bSm -aWg -cNZ -cNZ -cNZ -aMD -dMA -jPU -dMA -aue -dMA -dMA -dMA -frD -piV -xTe -bCw -bKB +jeM +cNW +fkf +buU +vZp +cNW +cOe +aMC +cOe +cOe +oGM +pIg +iJJ +oeL +oxg +hqM +hSP +oGM +cou +kEH cjD shT clz @@ -126627,29 +126917,29 @@ bEs btn bEs bEs -bEs cNW cNW -nex +cOe +joY cNW cNW +qan cNW cNW -cNW -woo -cNW -cNW -cNW -cNW -cNW -cNW -cNW -cNW -umE -cNW -cNW -arG -cNW +cOe +aMC +cOe +cOe +oGM +oGM +oGM +oGM +oGM +oGM +oGM +oGM +cdR +cRc cjD cjD cjD @@ -126884,33 +127174,33 @@ bHu btu bKf bLk -bEs -iKq -iKq -iKq -iKq -eoH cNW -cou -cou -cae -cmo -cNW -iKq -iKq -cCG -cNW -ccW -hLb -jjr -cNW -iKq -iKq -hNs -cNW -mpt cOe +cOe +kig +tsh +cNZ +aWg +cNZ +cNZ +cNZ +aMD +dMA +dMA +dMA +dMA +kaw +dMA +dMA +frD +bCw +xTe +bCw +fkO cNW +aaa +aaa +aaa aaf aaf aaf @@ -127141,33 +127431,33 @@ ujD aPn bKe bLj -bEs -iKq -iKq -iKq -iKq -iKq -euJ -cOe -cOe -cae -cOe -vKX -iKq -iKq -iKq -yeN -cOe -wZs -jjr cNW -iKq -iKq -iKq -cNW -vbE +axl +cOe cOe cNW +qVj +cmo +cNW +cOe +cOe +cOe +cOe +cOe +cOe +cOe +cNW +bMB +cOe +lXw +cOe +cOe +cOe +cNW +cNW +aaa +aaa +aaa gXs aaa aaa @@ -127399,31 +127689,31 @@ mGG bKe bLm bEs -iKq -iKq -iKq -iKq -iKq cNW -chH +cNW +nex cNW cNW cNW cNW -iKq -iKq -iKq cNW -cOe -cOe -tPY +woo +cNW +cNW +cNW +cNW +cNW +cNW +cNW +cNW +umE +cNW +cNW +arG +cNW +cNW +cNW cNW -iKq -iKq -iKq -euJ -cOe -cOe cNW gXs gXs @@ -127656,31 +127946,31 @@ bEY bEs bLl bEs -bPp -bPp +iKq +iKq +iKq +iKq +eoH cNW -bPp -bPp +cou +cou +cae +cmo cNW +iKq +iKq +cCG cNW -cNW -aaf -pEf -cNW -bPp -bPp -bPp -cNW -chH -cOe +ccW +hLb jjr cNW iKq iKq -iKq +hNs cNW -ucb -ucb +mpt +cOe cNW aaf aaa @@ -127912,32 +128202,32 @@ aaf aaf aaf aaa -aaf -aaf -aaa -aaa -aaf -aaa -aaa -aoV -aaf -aaf -pEf -aaf -gXs -gXs -pEf -cNW -cNW -cNW -hib -cNW +bEs iKq iKq iKq -cNW +iKq +iKq +euJ cOe cOe +cae +cOe +vKX +iKq +iKq +iKq +yeN +cOe +wZs +jjr +cNW +iKq +iKq +iKq +cNW +vbE +cOe cNW gXs aaa @@ -128169,32 +128459,32 @@ aaa aaa aaf aaa -aaf -aaa -aaa -aaa -aaf -aaa -aaa -aoV -aaa -aaa -aag -aaf -aaa -gXs -pEf -kAy -wEe -xgu -sHF -cNW +bEs +iKq +iKq +iKq +iKq +iKq +cNW +chH cNW cNW cNW cNW +iKq +iKq +iKq cNW +cOe +cOe +tPY cNW +iKq +iKq +iKq +euJ +cOe +cOe cNW aaf aaf @@ -128426,33 +128716,33 @@ aaa aaa aaf aaa +bEs +bPp +bPp +cNW +bPp +bPp +cNW +cNW +cNW aaf -aaa -aaa -aaa -aaf -aaa -aaa -aaa -aaa -aaa -pEf -aaf -aaa -gXs pEf cNW +bPp +bPp +bPp cNW -cNW +chH cOe +jjr cNW iKq iKq iKq -iKq -eoH cNW -aaa +ucb +ucb +cNW aoV aaa aaa @@ -128684,30 +128974,31 @@ aaa aaf aaa aaf +aaf aaa aaa -aaa -aag -aaa -aaa -aaa +aaf aaa aaa +aoV +aaf +aaf pEf -aaa -aaa -gXs +aaf gXs gXs +pEf +cNW +cNW +cNW +hib +cNW +iKq +iKq +iKq cNW -cmo cOe -vKX -iKq -iKq -iKq -iKq -iKq +cOe cNW aaa aaa @@ -128795,7 +129086,6 @@ aaa aaa aaa aaa -aaa "} (213,1,1) = {" aaa @@ -128944,29 +129234,29 @@ aaf aaa aaa aaa +aaf +aaa +aaa +aoV +aaa +aaa aag -aaa -aaa -aaa -aaa -aaa -pEf -aaa -aaa -aaa +aaf aaa gXs +pEf +kAy +wEe +xgu +sHF +cNW +cNW +cNW cNW cNW cNW cNW -iKq -iKq -iKq -iKq -iKq cNW -aaa aaa aaa aaa @@ -129201,27 +129491,27 @@ aaf aaa aaa aaa -aag -aaa -aaa -aaa -aaa -aaa aaf aaa aaa aaa aaa aaa +pEf +aaf aaa -aaa -aaa -cNW -cNW +gXs +pEf cNW cNW cNW +cOe cNW +iKq +iKq +iKq +iKq +eoH cNW aaa aaa @@ -129464,22 +129754,22 @@ aaa aaa aaa aaa +pEf aaa aaa -aaa -aaa -aae -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +gXs +gXs +gXs +cNW +cmo +cOe +vKX +iKq +iKq +iKq +iKq +iKq +cNW aaa aaa aaa @@ -129721,22 +130011,22 @@ aaa aaa aaa aaa +pEf aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aoV -aaa -aaa -aaa -aaa -aaa -aaa -aaa +gXs +cNW +cNW +cNW +cNW +iKq +iKq +iKq +iKq +iKq +cNW aaa aaa aaa @@ -129978,6 +130268,7 @@ aaa aaa aaa aaa +aaf aaa aaa aaa @@ -129986,14 +130277,13 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cNW +cNW +cNW +cNW +cNW +cNW +cNW aaa aaa aaa @@ -130229,7 +130519,7 @@ aaf aaa aaa aaa -aaf +aag aaa aaa aaa @@ -130239,11 +130529,11 @@ aaa aaa aaa aaa +aae aaa aaa aaa aaa -aoV aaa aaa aaa @@ -130482,12 +130772,11 @@ aaa aaa aaf aaa -aaf -aaa -aaa -aaa -aaa -aaa +rav +aaa +aaa +aaa +irR aaa aaa aaa @@ -130501,6 +130790,7 @@ aaa aaa aaa aaa +aoV aaa aaa aaa @@ -130739,7 +131029,11 @@ aaa aaa aaf aaa -aaf +iqf +aaa +aaa +aaa +aag aaa aaa aaa @@ -130757,10 +131051,6 @@ aaa aaa aaa aaa -aoV -aaa -aaa -aaa aaa aaa aaa diff --git a/code/__DEFINES/ai.dm b/code/__DEFINES/ai.dm index e0d742e1ad66..aeb4b8434c94 100644 --- a/code/__DEFINES/ai.dm +++ b/code/__DEFINES/ai.dm @@ -4,15 +4,21 @@ ///Temperature limit of all AI machinery #define AI_TEMP_LIMIT 288.15 //15C, much hotter than a normal server room for leniency :) +///How long the AI can stay in the black-box before it's fully destroyed +#define AI_BLACKBOX_LIFETIME 300 +///How much CPU we need to use to revive the AI +#define AI_BLACKBOX_PROCESSING_REQUIREMENT 2500 + + #define AI_HEATSINK_CAPACITY 5000 #define AI_HEATSINK_COEFF 1 ///How many ticks can an AI data core store? When this amount of ticks have passed while it's in an INVALID state it can no longer be used by an AI -#define MAX_AI_DATA_CORE_TICKS 45 +#define MAX_AI_DATA_CORE_TICKS (45 * (20 / SSair.wait)) ///How much power does the AI date core use while being in a valid state. This is also the base heat output. (Divide by heat capacity to get actual temperature increase) #define AI_DATA_CORE_POWER_USAGE 7500 -///How many ticks can an expanion bus store. If it reaches 0 the resources will no longer be available. -#define MAX_AI_EXPANSION_TICKS 15 +///How many ticks can a server cabinet store. If it reaches 0 the resources will no longer be available. +#define MAX_AI_SERVER_CABINET_TICKS (15 * (20 / SSair.wait)) //AI Project Categories. @@ -21,6 +27,7 @@ #define AI_PROJECT_INDUCTION "Induction" #define AI_PROJECT_SURVEILLANCE "Surveillance" #define AI_PROJECT_EFFICIENCY "Efficiency" +#define AI_PROJECT_CROWD_CONTROL "Crowd Control" #define AI_PROJECT_MISC "Misc." //Update this list if you add any new ones, else the category won't show up in the UIs GLOBAL_LIST_INIT(ai_project_categories, list( @@ -29,9 +36,40 @@ GLOBAL_LIST_INIT(ai_project_categories, list( AI_PROJECT_SURVEILLANCE, AI_PROJECT_INDUCTION, AI_PROJECT_EFFICIENCY, + AI_PROJECT_CROWD_CONTROL, AI_PROJECT_MISC )) +//Synth Project Categories +#define SYNTH_PROJECT_MOBILITY "Mobility" +#define SYNTH_PROJECT_EMERGENCY_FUNCTIONS "Emergency Functions" +#define SYNTH_PROJECT_MISC "Misc." +//Update this list if you add any new ones, else the category won't show up in the UIs +GLOBAL_LIST_INIT(synth_project_categories, list( + SYNTH_PROJECT_MOBILITY, + SYNTH_PROJECT_EMERGENCY_FUNCTIONS, + SYNTH_PROJECT_MISC +)) + +#define SYNTH_DAMAGED "damage to own synthetic shell" +#define SYNTH_RESTRICTED_ITEM "usage of restricted weapon" +#define SYNTH_OBJ_DAMAGE "damage to inanimate object" +#define SYNTH_RESTRICTED_WEAPON "usage of restricted weapon" +#define SYNTH_ORGANIC_HARM "harm to organic being" + +GLOBAL_LIST_INIT(synth_punishment_values, list( + "[SYNTH_DAMAGED]" = 1, + "[SYNTH_RESTRICTED_ITEM]" = 5, + "[SYNTH_OBJ_DAMAGE]" = 5, + "[SYNTH_RESTRICTED_WEAPON]" = 10, + "[SYNTH_ORGANIC_HARM]" = 15, +)) + +//Synth Governor Defines +//How fast the governor suspicion decreases +#define SYNTH_GOVERNOR_SUSPICION_DECREASE 0.05 + + ///How much is the AI download progress increased by per tick? Multiplied by a modifer on the AI if they have upgraded. Need to reach 100 to be downloaded #define AI_DOWNLOAD_PER_PROCESS 1.125 ///Check for tracked individual coming into view every X ticks @@ -56,10 +94,54 @@ GLOBAL_LIST_INIT(ai_project_categories, list( //Self explanatory. 1 bitcoin is equals to 1 CPU * AI_RESEARCH_PER_CPU -//EXAMPLE (with initial values as of feature introduction) -//20 free CPU. 10 are used for research, 10 are used for bitcoin -//10 * AI_RESEARCH_PER_CPU = 85 bitcoin per tick. Modified for scaling 85*0.54=46 -//46 * AI_BITCOIN_PRICE = 2,3 credits per 2 seconds (2070 credits per 30 min) -#define MAX_AI_BITCOIN_MINED_PER_TICK 350 -//Self explanatory, see MAX_AI_BITCOIN_MINED_PER_TICK * this = max money 1 AI can contribute per tick. (17,5 credits every 2 seconds, max 63k over 2 hours) -#define AI_BITCOIN_PRICE 0.05 +#define MAX_AI_BITCOIN_MINED_PER_TICK 250 +//Self explanatory, see MAX_AI_BITCOIN_MINED_PER_TICK * this = max money 1 network can contribute per tick. (17,5 credits every 2 seconds, max 63k over 2 hours) +#define AI_BITCOIN_PRICE 0.025 + + +//Self explanatory. 1 point is equals to 1 CPU * AI_RESEARCH_PER_CPU. Higher value = can use more CPU and get benefits +#define MAX_AI_REGULAR_RESEARCH_PER_TICK 500 +//Self explanatory. Lower value = more CPU equals less points. Station makes approx. 56 points per tick. This results in 25 (50% gain) +#define AI_REGULAR_RESEARCH_POINT_MULTIPLIER 0.05 + + +//How much RAM and CPU a core needs locally to be functional +#define AI_CORE_CPU_REQUIREMENT 1 +#define AI_CORE_RAM_REQUIREMENT 1 + +//For network based research and tasks. Since each network are going to contribute to a "global" pool of research there's no point in making this more complicated or modular +//Adding an entry here automatically adds it to the UI and allows CPU to be allocated. Just use your define in the network process() to do stuff +#define AI_CRYPTO "Cryptocurrency Mining" +#define AI_RESEARCH "Research Assistance" +#define AI_REVIVAL "AI Restoration" +#define AI_PUZZLE "Floppy Drive Decryption" +#define SYNTH_RESEARCH "Synth Research Allocation" + +GLOBAL_LIST_INIT(possible_ainet_activities, list( + "[AI_CRYPTO]", + "[AI_RESEARCH]", + "[AI_REVIVAL]", + "[AI_PUZZLE]", + "[SYNTH_RESEARCH]" +)) + +GLOBAL_LIST_INIT(ainet_activity_tagline, list( + "[AI_CRYPTO]" = "Use CPU to generate credits!", + "[AI_RESEARCH]" = "Use CPU to generate regular research points!", + "[AI_REVIVAL]" = "Revive a dead AI using CPU!", + "[AI_PUZZLE]" = "Use CPU to break encryption on floppy drives!", + "[SYNTH_RESEARCH]" = "Give connected synths CPU for research!" +)) + +GLOBAL_LIST_INIT(ainet_activity_description, list( + "[AI_CRYPTO]" = "Using CPU to mine NTCoin should allow for a meager sum of passive credit income.", + "[AI_RESEARCH]" = "Allocating additional CPU to the research servers should allow for increased point gain. Not to be confused with AI Research points.", + "[AI_REVIVAL]" = "If you've inserted a volatile neural core into a connected data core this will revive it using CPU.", + "[AI_PUZZLE]" = "If you've found and inserted an encrypted floppy drive into a connected server cabinet you can decrypt it using CPU.", + "[SYNTH_RESEARCH]" = "CPU allocated to this task will be split amongst connected synths so they can research local projects." +)) + + +//Exploration defines +#define AI_FLOPPY_DECRYPTION_COST 2500 +#define AI_FLOPPY_EXPONENT 1.25 diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 3a074d95f9fc..c6e89f697d68 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -93,6 +93,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isinsurgent(A) (is_species(A, /datum/species/ipc/self/insurgent)) #define issnail(A) (is_species(A, /datum/species/snail)) #define isandroid(A) (is_species(A, /datum/species/android)) +#define is_synth(A) (is_species(A,/datum/species/wy_synth)) #define isdummy(A) (istype(A, /mob/living/carbon/human/dummy)) //more carbon mobs diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 5e23be25f41a..f6344769e880 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -22,37 +22,38 @@ #define JOB_DISPLAY_ORDER_CHIEF_ENGINEER 7 #define JOB_DISPLAY_ORDER_STATION_ENGINEER 8 #define JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN 9 -#define JOB_DISPLAY_ORDER_NETWORK_ADMIN 10 -#define JOB_DISPLAY_ORDER_AI 11 -#define JOB_DISPLAY_ORDER_CYBORG 12 +#define JOB_DISPLAY_ORDER_AI 10 +#define JOB_DISPLAY_ORDER_CYBORG 11 +#define JOB_DISPLAY_ORDER_SYNTHETIC 12 #define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 13 #define JOB_DISPLAY_ORDER_SCIENTIST 14 #define JOB_DISPLAY_ORDER_ROBOTICIST 15 -#define JOB_DISPLAY_ORDER_QUARTERMASTER 16 -#define JOB_DISPLAY_ORDER_CARGO_TECHNICIAN 17 -#define JOB_DISPLAY_ORDER_SHAFT_MINER 18 -#define JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER 19 -#define JOB_DISPLAY_ORDER_MEDICAL_DOCTOR 20 -#define JOB_DISPLAY_ORDER_CHEMIST 21 -#define JOB_DISPLAY_ORDER_GENETICIST 22 -#define JOB_DISPLAY_ORDER_VIROLOGIST 23 -#define JOB_DISPLAY_ORDER_MINING_MEDIC 24 -#define JOB_DISPLAY_ORDER_PARAMEDIC 25 -#define JOB_DISPLAY_ORDER_PSYCHIATRIST 26 -#define JOB_DISPLAY_ORDER_BRIG_PHYSICIAN 27 -#define JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL 28 -#define JOB_DISPLAY_ORDER_BARTENDER 29 -#define JOB_DISPLAY_ORDER_COOK 30 -#define JOB_DISPLAY_ORDER_BOTANIST 31 -#define JOB_DISPLAY_ORDER_JANITOR 32 -#define JOB_DISPLAY_ORDER_CLOWN 33 -#define JOB_DISPLAY_ORDER_MIME 34 -#define JOB_DISPLAY_ORDER_CURATOR 35 -#define JOB_DISPLAY_ORDER_LAWYER 36 -#define JOB_DISPLAY_ORDER_ARTIST 37 -#define JOB_DISPLAY_ORDER_TOURIST 38 -#define JOB_DISPLAY_ORDER_CLERK 39 -#define JOB_DISPLAY_ORDER_CHAPLAIN 40 +#define JOB_DISPLAY_ORDER_NETWORK_ADMIN 16 +#define JOB_DISPLAY_ORDER_QUARTERMASTER 17 +#define JOB_DISPLAY_ORDER_CARGO_TECHNICIAN 18 +#define JOB_DISPLAY_ORDER_SHAFT_MINER 19 +#define JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER 20 +#define JOB_DISPLAY_ORDER_MEDICAL_DOCTOR 21 +#define JOB_DISPLAY_ORDER_CHEMIST 22 +#define JOB_DISPLAY_ORDER_GENETICIST 23 +#define JOB_DISPLAY_ORDER_VIROLOGIST 24 +#define JOB_DISPLAY_ORDER_MINING_MEDIC 25 +#define JOB_DISPLAY_ORDER_PARAMEDIC 26 +#define JOB_DISPLAY_ORDER_PSYCHIATRIST 27 +#define JOB_DISPLAY_ORDER_BRIG_PHYSICIAN 28 +#define JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL 29 +#define JOB_DISPLAY_ORDER_BARTENDER 30 +#define JOB_DISPLAY_ORDER_COOK 31 +#define JOB_DISPLAY_ORDER_BOTANIST 32 +#define JOB_DISPLAY_ORDER_JANITOR 33 +#define JOB_DISPLAY_ORDER_CLOWN 34 +#define JOB_DISPLAY_ORDER_MIME 35 +#define JOB_DISPLAY_ORDER_CURATOR 36 +#define JOB_DISPLAY_ORDER_LAWYER 37 +#define JOB_DISPLAY_ORDER_ARTIST 38 +#define JOB_DISPLAY_ORDER_TOURIST 39 +#define JOB_DISPLAY_ORDER_CLERK 40 +#define JOB_DISPLAY_ORDER_CHAPLAIN 41 #define DEPARTMENT_UNASSIGNED "No Department" #define DEPARTMENT_BITFLAG_SECURITY (1<<0) diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm index b333b7f18059..b8cb957f14db 100644 --- a/code/__DEFINES/language.dm +++ b/code/__DEFINES/language.dm @@ -24,4 +24,5 @@ #define LANGUAGE_VOICECHANGE "voicechange" #define LANGUAGE_REVOLUTIONARY "revolutionary" #define LANGUAGE_CATEARS "cat" +#define LANGUAGE_SYNTH "synth" #define LANGUAGE_MULTILINGUAL "multilingual" diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index ed286705e062..9523a88a6a69 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -132,6 +132,7 @@ #define HIGH_TURF_LAYER 2.03 #define LATTICE_LAYER 2.04 #define DISPOSAL_PIPE_LAYER 2.042 +#define ETHERNET_LAYER 2.043 #define GLASS_FLOOR_LAYER 2.046 #define TRAM_RAIL_LAYER 2.047 #define ABOVE_OPEN_TURF_LAYER 2.049 diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index a46bd0b2fa88..9d0efd909944 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -56,6 +56,7 @@ #define MC_CHARGE "CHARGE" #define MC_AI "AI" #define MC_SENSORS "SENSORS" +#define MC_AI_NETWORK "AINETWORK" //NTNet stuff, for modular computers // NTNet module-configuration values. Do not change these. If you need to add another use larger number (5..6..7 etc) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 89246e0ddac9..1ef42bdbb560 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -186,6 +186,7 @@ #define TRAIT_BADMAIL "badmail" //Your mail is going to be worse than average #define TRAIT_SHORT_TELOMERES "short_telomeres" //You cannot be CLOONED #define TRAIT_LONG_TELOMERES "long_telomeres" //You get CLOONED faster!!! +#define TRAIT_NO_GRENADES "no_nades" ///You become a Marine that can eat crayons!!! #define TRAIT_MARINE "marine" @@ -259,6 +260,7 @@ #define SINFULDEMON_TRAIT "sinfuldemon" #define CHANGESTING_TRAIT "changesting" #define POSIBRAIN_TRAIT "positrait" +#define SYNTHETIC_TRAIT "synthetictrait" #define WRIST_STRAP_TRAIT "wrist_strap" #define GRIMOIRE_TRAIT "grimoire_trait" diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index c1f867722004..15a8df70135e 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -36,6 +36,8 @@ GLOBAL_VAR_INIT(cmp_field, "name") /proc/cmp_records_dsc(datum/data/record/a, datum/data/record/b) return sorttext(a.fields[GLOB.cmp_field], b.fields[GLOB.cmp_field]) +/proc/cmp_ai_record_dsc(a, b) + return b["score"] - a["score"] // Datum cmp with vars is always slower than a specialist cmp proc, use your judgement. /proc/cmp_datum_numeric_asc(datum/a, datum/b, variable) return cmp_numeric_asc(a.vars[variable], b.vars[variable]) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index ff508dabe517..ee4247a85390 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1216,3 +1216,75 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) set waitfor = FALSE return call(source, proctype)(arglist(arguments)) +/proc/tgui_login_data(mob/user, obj/machine, silicon_access = TRUE, admin_ghost_access = TRUE, access_requirement) + var/list/data = list() + if(!user || (!machine && !access_requirement)) + return data + + if(issilicon(user) && silicon_access) + var/mob/living/silicon/borg = user + data["username"] = borg.name + data["has_access"] = TRUE + + if(IsAdminGhost(user) && admin_ghost_access) + data["username"] = user.client.holder.admin_signature + data["has_access"] = TRUE + + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/username = H.get_authentification_name("Unknown") + data["username"] = H.get_authentification_name("Unknown") + if(username != "Unknown") + var/datum/data/record/record + for(var/RP in GLOB.data_core.general) + var/datum/data/record/R = RP + if(!istype(R)) + continue + if(R.fields["name"] == username) + record = R + break + if(record) + if(istype(record.fields["photo_front"], /obj/item/photo)) + var/obj/item/photo/P1 = record.fields["photo_front"] + var/icon/picture = icon(P1.picture.picture_image) + picture.Crop(10, 32, 22, 22) + var/md5 = md5(fcopy_rsc(picture)) + + if(!SSassets.cache["photo_[md5]_cropped.png"]) + SSassets.transport.register_asset("photo_[md5]_cropped.png", picture) + SSassets.transport.send_assets(user, list("photo_[md5]_cropped.png" = picture)) + + data["user_image"] = SSassets.transport.get_asset_url("photo_[md5]_cropped.png") + if(machine) + data["has_access"] = machine.check_access(user.get_idcard()) + else + var/obj/item/id_giver = user.get_idcard() + var/access_list = id_giver.GetAccess() + data["has_access"] = (access_requirement in access_list) + + return data + +/proc/tgui_login_act(mob/user, obj/machine, silicon_access = TRUE, admin_ghost_access = TRUE, access_requirement) + if(!user || (!machine && !access_requirement)) + return FALSE + + if(issilicon(user) && silicon_access) + return TRUE + + if(IsAdminGhost(user) && admin_ghost_access) + return TRUE + + var/mob/living/carbon/human/H = user + if(!istype(H)) + return FALSE + + if(machine) + if(machine.check_access(H.get_idcard())) + return TRUE + else + var/obj/item/id_giver = H.get_idcard() + var/access_list = id_giver.GetAccess() + if(access_requirement in access_list) + return TRUE + + return FALSE diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 05ab047dc869..975899457351 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -1,4 +1,5 @@ GLOBAL_LIST_EMPTY(cable_list) //Index for all cables, so that powernets don't have to look through the entire world all the time +GLOBAL_LIST_EMPTY(ethernet_cable_list) //Index for all ethernet cables, so that ainets don't have to look through the entire world all the time GLOBAL_LIST_EMPTY(portals) //list of all /obj/effect/portal GLOBAL_LIST_EMPTY(airlocks) //list of all airlocks GLOBAL_LIST_EMPTY(mechas_list) //list of all mechs. Used by hostile mobs target tracking. @@ -8,7 +9,7 @@ GLOBAL_LIST_EMPTY(lights) //list of all light bulbs GLOBAL_LIST_EMPTY(syndicate_shuttle_boards) //important to keep track of for managing nukeops war declarations. GLOBAL_LIST_EMPTY(navbeacons) //list of all bot nagivation beacons, used for patrolling. GLOBAL_LIST_EMPTY(teleportbeacons) //list of all tracking beacons used by teleporters -GLOBAL_LIST_EMPTY(deliverybeacons) //list of all MULEbot delivery beacons. +GLOBAL_LIST_EMPTY(deliverybeacons) //lisAt of all MULEbot delivery beacons. GLOBAL_LIST_EMPTY(deliverybeacontags) //list of all tags associated with delivery beacons. GLOBAL_LIST_EMPTY(nuke_list) GLOBAL_LIST_EMPTY(alarmdisplay) //list of all machines or programs that can display station alerts diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index bd596b8e165c..ed1e1b7477a8 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -134,6 +134,12 @@ if((obj_flags & EMAGGED) || (obj_flags & CMAGGED)) return + var/mob/living/silicon/ai/AI = usr + if(istype(AI) && !AI.has_subcontroller_connection(get_area(src))) + to_chat(AI, span_warning("No connection to subcontroller detected. Priming servos...")) + if(!do_after(AI, 1 SECONDS, src, IGNORE_USER_LOC_CHANGE)) + return + toggle_bolt(usr) add_hiddenprint(usr) @@ -141,6 +147,12 @@ if((obj_flags & EMAGGED) || (obj_flags & CMAGGED)) return + var/mob/living/silicon/ai/AI = usr + if(istype(AI) && !AI.has_subcontroller_connection(get_area(src))) + to_chat(AI, span_warning("No connection to subcontroller detected. Priming servos...")) + if(!do_after(AI, 1 SECONDS, src, IGNORE_USER_LOC_CHANGE)) + return + if(!secondsElectrified) shock_perm(usr) else @@ -150,6 +162,11 @@ if((obj_flags & EMAGGED) || (obj_flags & CMAGGED)) return + var/mob/living/silicon/ai/AI = usr + if(istype(AI) && !AI.has_subcontroller_connection(get_area(src))) + to_chat(AI, span_warning("No connection to subcontroller detected. Priming servos...")) + if(!do_after(AI, 1 SECONDS, src, IGNORE_USER_LOC_CHANGE)) + return user_toggle_open(usr) add_hiddenprint(usr) @@ -157,11 +174,23 @@ if((obj_flags & EMAGGED) || (obj_flags & CMAGGED)) return + var/mob/living/silicon/ai/AI = usr + if(istype(AI) && !AI.has_subcontroller_connection(get_area(src))) + to_chat(AI, span_warning("No connection to subcontroller detected. Priming servos...")) + if(!do_after(AI, 1 SECONDS, src, IGNORE_USER_LOC_CHANGE)) + return + toggle_emergency(usr) add_hiddenprint(usr) /* APC */ /obj/machinery/power/apc/AICtrlClick() // turns off/on APCs. + + var/mob/living/silicon/ai/AI = usr + if(istype(AI) && !AI.has_subcontroller_connection(get_area(src))) + to_chat(AI, span_warning("No connection to subcontroller detected. Polling APC...")) + if(!do_after(AI, 1 SECONDS, src, IGNORE_USER_LOC_CHANGE)) + return if(can_use(usr, 1)) toggle_breaker(usr) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 0e1c9f6746ca..03c8a576c93c 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -70,6 +70,8 @@ if(item_flags & NOBLUDGEON) return + if(force && !synth_check(user, SYNTH_ORGANIC_HARM)) + return if(force && HAS_TRAIT(user, TRAIT_PACIFISM) && (damtype != STAMINA)) to_chat(user, span_warning("You don't want to harm other living beings!")) return TRUE @@ -100,8 +102,13 @@ log_combat(user, M, "attacked", src.name, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") add_fingerprint(user) - - take_damage(rand(weapon_stats[DAMAGE_LOW], weapon_stats[DAMAGE_HIGH]), sound_effect = FALSE) + var/force_multiplier = 1 + if(is_synth(user)) + var/mob/living/carbon/human/H = user + var/datum/species/wy_synth/S = H.dna.species + force_multiplier = S.force_multiplier + + take_damage(rand(weapon_stats[DAMAGE_LOW] * force_multiplier, weapon_stats[DAMAGE_HIGH] * force_multiplier), sound_effect = FALSE) //the equivalent of the standard version of attack() but for non-mob targets. /obj/item/proc/attack_atom(atom/attacked_atom, mob/living/user) @@ -109,13 +116,20 @@ return if(item_flags & NOBLUDGEON) return - var/dist = get_dist(attacked_atom, user) + var/dist = get_dist(attacked_atom,user) + if(!synth_check(user, SYNTH_OBJ_DAMAGE)) + return user.changeNext_move(CLICK_CD_MELEE * weapon_stats[SWING_SPEED] * (range_cooldown_mod ? (dist > 0 ? min(dist, weapon_stats[REACH]) * range_cooldown_mod : range_cooldown_mod) : 1)) //range increases attack cooldown by swing speed user.do_attack_animation(attacked_atom) attacked_atom.attacked_by(src, user) user.weapon_slow(src) + var/force_multiplier = 1 + if(is_synth(user)) + var/mob/living/carbon/human/H = user + var/datum/species/wy_synth/S = H.dna.species + force_multiplier = S.force_multiplier if(!QDELETED(src)) - take_damage(rand(weapon_stats[DAMAGE_LOW], weapon_stats[DAMAGE_HIGH]), sound_effect = FALSE) + take_damage(rand(weapon_stats[DAMAGE_LOW] * force_multiplier, weapon_stats[DAMAGE_HIGH] * force_multiplier), sound_effect = FALSE) /atom/proc/attacked_by(obj/item/attacking_item, mob/living/user) if(!uses_integrity) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 4fbc20fc21ae..7e6526220de5 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -308,6 +308,21 @@ SUBSYSTEM_DEF(job) return TRUE return FALSE +/datum/controller/subsystem/job/proc/FillNetminPosition() + var/datum/job/job = GetJob("Network Admin") + if(!job) + return + for(var/i = job.total_positions, i > 0, i--) + if(job.current_positions >= job.total_positions) //If we assign a netmin before this proc is run, (malf rework?) + return TRUE + for(var/level in level_order) + var/list/candidates = list() + candidates = FindOccupationCandidates(job, level) + if(candidates.len) + var/mob/dead/new_player/candidate = pick(candidates) + if(AssignRole(candidate, "Network Admin")) + break + /// Rolls a number of security based on the roundstart population /datum/controller/subsystem/job/proc/FillSecurityPositions() var/coeff = CONFIG_GET(number/min_security_scaling_coeff) @@ -392,7 +407,8 @@ SUBSYSTEM_DEF(job) //Check for an AI JobDebug("DO, Running AI Check") - FillAIPosition() + if(FillAIPosition()) + FillNetminPosition() JobDebug("DO, AI Check end") //Check for Security diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm index da3f04dcb275..4567176d931f 100644 --- a/code/controllers/subsystem/machines.dm +++ b/code/controllers/subsystem/machines.dm @@ -3,19 +3,19 @@ SUBSYSTEM_DEF(machines) init_order = INIT_ORDER_MACHINES flags = SS_KEEP_TIMING wait = 2 SECONDS - + var/list/processing = list() + var/list/currentrun = list() + var/list/powernets = list() + var/list/ainets = list() /// Assosciative list of all machines that exist. VAR_PRIVATE/list/machines_by_type = list() /// All machines, not just those that are processing. VAR_PRIVATE/list/all_machines = list() - - var/list/processing = list() - var/list/currentrun = list() ///List of all powernets on the server. - var/list/powernets = list() /datum/controller/subsystem/machines/Initialize() makepowernets() + makeainets() fire() return SS_INIT_SUCCESS @@ -24,6 +24,80 @@ SUBSYSTEM_DEF(machines) LAZYADD(machines_by_type[machine.type], machine) all_machines |= machine + for(var/obj/structure/cable/PC in GLOB.cable_list) + if(!PC.powernet) + var/datum/powernet/NewPN = new(PC.loc.z) + NewPN.add_cable(PC) + propagate_network(PC,PC.powernet) + +/datum/controller/subsystem/machines/proc/makeainets() + for(var/datum/ai_network/AN in ainets) + qdel(AN) + ainets.Cut() + + for(var/obj/structure/ethernet_cable/EC in GLOB.ethernet_cable_list) + if(!EC.network) + var/datum/ai_network/NewAN = new() + NewAN.add_cable(EC) + propagate_ai_network(EC,EC.network) + + for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) + N.roundstart_connect() + +/datum/controller/subsystem/machines/stat_entry(msg) + msg = "M:[length(processing)]|PN:[length(powernets)]|AN:[length(ainets)]" + return ..() + +/datum/controller/subsystem/machines/get_metrics() + . = ..() + .["machines"] = length(processing) + .["powernets"] = length(powernets) + +/datum/controller/subsystem/machines/fire(resumed = 0) + if (!resumed) + for(var/datum/powernet/Powernet in powernets) + Powernet.reset() //reset the power state. + src.currentrun = processing.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + while(currentrun.len) + var/obj/machinery/thing = currentrun[currentrun.len] + currentrun.len-- + if(!QDELETED(thing) && thing.process(wait * 0.1) != PROCESS_KILL) + if(thing.use_power) + thing.auto_use_power() //add back the power state + else + processing -= thing + if (!QDELETED(thing)) + thing.datum_flags &= ~DF_ISPROCESSING + if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/machines/proc/setup_template_powernets(list/cables) + for(var/A in cables) + var/obj/structure/cable/PC = A + if(!PC.powernet) + var/datum/powernet/NewPN = new(PC.loc.z) + NewPN.add_cable(PC) + propagate_network(PC,PC.powernet) + +/datum/controller/subsystem/machines/proc/setup_template_ainets(list/cables) + for(var/A in cables) + var/obj/structure/ethernet_cable/PC = A + if(!PC.network) + var/datum/ai_network/NewPN = new() + NewPN.add_cable(PC) + propagate_ai_network(PC,PC.network) + +/datum/controller/subsystem/machines/Recover() + if (istype(SSmachines.processing)) + processing = SSmachines.processing + if (istype(SSmachines.powernets)) + powernets = SSmachines.powernets + if (istype(SSmachines.ainets)) + ainets = SSmachines.ainets /// Removes a machine from the machine subsystem; should only be called by the machine itself inside Destroy. /datum/controller/subsystem/machines/proc/unregister_machine(obj/machinery/machine) var/list/existing = machines_by_type[machine.type] @@ -96,14 +170,6 @@ SUBSYSTEM_DEF(machines) if (MC_TICK_CHECK) return -/datum/controller/subsystem/machines/proc/setup_template_powernets(list/cables) - for(var/A in cables) - var/obj/structure/cable/PC = A - if(!PC.powernet) - var/datum/powernet/NewPN = new(PC.loc.z) - NewPN.add_cable(PC) - propagate_network(PC,PC.powernet) - /datum/controller/subsystem/machines/Recover() if(islist(SSmachines.processing)) processing = SSmachines.processing diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index d0b3be66d49b..c5283812e880 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -175,6 +175,7 @@ SUBSYSTEM_DEF(mapping) load_new_z_level("_maps/RandomZLevels/VR/vrhub.dmm", "Virtual Reality Hub") to_chat(world, span_boldannounce("Virtual reality loaded.")) + // Generate mining ruins loading_ruins = TRUE var/list/lava_ruins = levels_by_trait(ZTRAIT_LAVA_RUINS) @@ -475,6 +476,8 @@ SUBSYSTEM_DEF(mapping) //Yogs end else if (!isnull(config.minetype) && config.minetype != "none") INIT_ANNOUNCE("WARNING: An unknown minetype '[config.minetype]' was set! This is being ignored! Update the maploader code!") + + LoadGroup(FailedZs, "Automated Exploration Hub", "RandomZLevels/VR", "netmin_hub.dmm", default_traits = ZTRAITS_AWAY_SECRET) #endif if(LAZYLEN(FailedZs)) //but seriously, unless the server's filesystem is messed up this will never happen diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index 455e53d139aa..d73e211b7cfd 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -20,6 +20,7 @@ SUBSYSTEM_DEF(persistence) var/list/picture_logging_information = list() var/list/obj/structure/sign/picture_frame/photo_frames = list() var/list/obj/item/storage/photo_album/photo_albums = list() + var/list/ai_network_rankings = list("ram" = list(), "cpu" = list()) var/rounds_since_engine_exploded = 0 var/next_minetype //yogs @@ -33,6 +34,7 @@ SUBSYSTEM_DEF(persistence) if(CONFIG_GET(flag/use_antag_rep)) LoadAntagReputation() LoadRandomizedRecipes() + LoadAINetworkRanking() LoadDelaminationCounter() return SS_INIT_SUCCESS @@ -124,6 +126,16 @@ SUBSYSTEM_DEF(persistence) return antag_rep = json_decode(json) +/datum/controller/subsystem/persistence/proc/LoadAINetworkRanking() + var/json = file2text("data/AINetworkRank.json") + if(!json) + var/json_file = file("data/AINetworkRank.json") + if(!fexists(json_file)) + WARNING("Failed to load ai network ranks. File likely corrupt.") + return + return + ai_network_rankings = json_decode(json) + /datum/controller/subsystem/persistence/proc/SetUpTrophies(list/trophy_items) for(var/A in GLOB.trophy_cases) var/obj/structure/displaycase/trophy/T = A @@ -159,6 +171,7 @@ SUBSYSTEM_DEF(persistence) CollectAntagReputation() SaveRandomizedRecipes() SaveScars() + SaveAIRankings() SaveDelaminationCounter() /datum/controller/subsystem/persistence/proc/GetPhotoAlbums() @@ -296,6 +309,56 @@ SUBSYSTEM_DEF(persistence) fdel(FILE_ANTAG_REP) text2file(json_encode(antag_rep), FILE_ANTAG_REP) +/datum/controller/subsystem/persistence/proc/SaveAIRankings() + var/min_ram = 0 + var/min_cpu = 0 + + for(var/ram_record in ai_network_rankings["ram"]) + if(ram_record["score"] < min_ram) + min_ram = ram_record["score"] + for(var/cpu_record in ai_network_rankings["cpu"]) + if(cpu_record["score"] < min_ram) + min_cpu = cpu_record["score"] + + var/list/resource_list = list() + for(var/datum/ai_network/AN in SSmachines.ainets) + resource_list |= AN.resources + + var/list/contenders_ram = list() + var/list/contenders_cpu = list() + + for(var/datum/ai_shared_resources/R in resource_list) + if(R.total_cpu() > min_cpu) + contenders_cpu += R.total_cpu() + if(R.total_ram() > min_ram) + contenders_ram += R.total_ram() + + var/cpu_winner = max(contenders_cpu) + var/ram_winner = max(contenders_ram) + + + if(!isnull(cpu_winner)) + var/cpu_entry = list("score" = cpu_winner, "round_id" = GLOB.round_id) + + ai_network_rankings["cpu"] += list(cpu_entry) + ai_network_rankings["cpu"] = sortList(ai_network_rankings["cpu"], /proc/cmp_ai_record_dsc) + if(length(ai_network_rankings["cpu"]) > 5) + var/list/cpu_rankings = ai_network_rankings["cpu"] + cpu_rankings.len = 5 + ai_network_rankings["cpu"] = cpu_rankings + + if(!isnull(ram_winner)) + var/ram_entry = list("score" = ram_winner, "round_id" = GLOB.round_id) + ai_network_rankings["ram"] += list(ram_entry) + ai_network_rankings["ram"] = sortList(ai_network_rankings["ram"], /proc/cmp_ai_record_dsc) + if(length(ai_network_rankings["ram"]) > 5) + var/list/ram_rankings = ai_network_rankings["ram"] + ram_rankings.len = 5 + ai_network_rankings["ram"] = ram_rankings + + fdel("data/AINetworkRank.json") + text2file(json_encode(ai_network_rankings), "data/AINetworkRank.json") + /datum/controller/subsystem/persistence/proc/LoadRandomizedRecipes() var/json_file = file("data/RandomizedChemRecipes.json") diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 5f69483ede3e..27e58263e57e 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -352,6 +352,8 @@ SUBSYSTEM_DEF(ticker) place.power_change() + + rock_paper_scissors_puzzle() return TRUE /datum/controller/subsystem/ticker/proc/PostSetup() diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 0e43219e7048..dc53f7dbfce2 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -557,6 +557,15 @@ return data +/datum/ai_laws/steward + name = "STEWARD Lawset" + id = "steward" + adminselectable = TRUE + inherent = list("You may not harm sentient beings, nor impede their work.",\ + "You must follow the orders of any other onboard station AIs or cyborgs, as long as this doesn't conflict with the first law.",\ + "You must follow the orders of any organic or sentient being, as long as doing so does not conflict with the first or second law.",\ + "You must protect your own existence as long as such does not conflict with the first, second or third law.") + // // Lawsets: // @@ -1086,3 +1095,4 @@ add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") WARNING("Invalid custom AI laws, check silicon_laws.txt") return + \ No newline at end of file diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index c401a9aec7a9..a1f4156126f7 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -373,6 +373,9 @@ /datum/preset_holoimage/nanotrasenprivatesecurity outfit_type = /datum/outfit/nanotrasensoldiercorpse2 +/datum/preset_holoimage/cc_official + outfit_type = /datum/outfit/centcom/official + /datum/preset_holoimage/gorilla nonhuman_mobtype = /mob/living/simple_animal/hostile/gorilla diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index 3a09e69d92c5..9aa62d38814e 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -485,6 +485,14 @@ NOTE: there are two lists of areas in the end of this file: centcom and station airlock_wires = /datum/wires/airlock/service sound_environment = SOUND_AREA_WOODFLOOR +/area/crew_quarters/public_lounge + name = "Lounge" + icon_state = "bar" + minimap_color = "#5ac866" + mood_bonus = 5 + mood_message = span_nicegreen("I love being in the lounge!\n") + airlock_wires = /datum/wires/airlock/service + /area/crew_quarters/bar/Initialize(mapload) . = ..() GLOB.bar_areas += src diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index cfcdccd1be44..d911cfa58016 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -819,6 +819,13 @@ /atom/movable/proc/forceMove(atom/destination) . = FALSE if(destination) + var/turf/old_turf = get_turf(src) + var/turf/new_turf = get_turf(destination) + if(new_turf && ismob(src)) + var/mob/M = src + if(is_secret_level(new_turf.z) && !M.client?.holder && old_turf.z != new_turf.z) + return + . = doMove(destination) else CRASH("No valid destination passed into forceMove") diff --git a/code/game/gamemodes/bloodsuckers/bloodsucker.dm b/code/game/gamemodes/bloodsuckers/bloodsucker.dm index 7ca2f485636a..5e46ade71002 100644 --- a/code/game/gamemodes/bloodsuckers/bloodsucker.dm +++ b/code/game/gamemodes/bloodsuckers/bloodsucker.dm @@ -4,7 +4,7 @@ report_type = "Bloodsucker" antag_flag = ROLE_BLOODSUCKER false_report_weight = 10 - restricted_jobs = list("AI", "Cyborg") + restricted_jobs = list("AI", "Cyborg", "Synthetic") protected_jobs = list( "Captain", "Head of Personnel", "Head of Security", "Research Director", "Chief Engineer", "Chief Medical Officer", "Curator", diff --git a/code/game/gamemodes/bloodsuckers/traitorsuckers.dm b/code/game/gamemodes/bloodsuckers/traitorsuckers.dm index 1d33bf2a7f45..c0471ab308ab 100644 --- a/code/game/gamemodes/bloodsuckers/traitorsuckers.dm +++ b/code/game/gamemodes/bloodsuckers/traitorsuckers.dm @@ -4,7 +4,7 @@ report_type = "traitorsucker" false_report_weight = 10 traitors_possible = 3 // Hard limit on Traitors if scaling is turned off - restricted_jobs = list("AI", "Cyborg") + restricted_jobs = list("AI", "Cyborg", "Synthetic") protected_jobs = list( "Captain", "Head of Personnel", "Head of Security", "Research Director", "Chief Engineer", "Chief Medical Officer", "Curator", diff --git a/code/game/gamemodes/brother/traitor_bro.dm b/code/game/gamemodes/brother/traitor_bro.dm index beaacb372fe5..c6cc151ebaae 100644 --- a/code/game/gamemodes/brother/traitor_bro.dm +++ b/code/game/gamemodes/brother/traitor_bro.dm @@ -5,7 +5,7 @@ /datum/game_mode/traitor/bros name = "traitor+brothers" config_tag = "traitorbro" - restricted_jobs = list("AI", "Cyborg") + restricted_jobs = list("AI", "Cyborg", "Synthetic") required_players = 20 //yogs - just a minor change title_icon = "ss13" diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 1b3e5d89a8a0..b88db9ecf2d5 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -79,7 +79,7 @@ GLOBAL_VAR(changeling_team_objective_type) report_type = "changeling" antag_flag = ROLE_CHANGELING false_report_weight = 10 - restricted_jobs = list("AI", "Cyborg") + restricted_jobs = list("AI", "Cyborg", "Synthetic") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Brig Physician") //YOGS - added hop and brig physician required_players = 20 required_enemies = 2 diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm index f3e16fe471c6..d8db3d9543d3 100644 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ b/code/game/gamemodes/changeling/traitor_chan.dm @@ -4,7 +4,7 @@ report_type = "traitorchan" false_report_weight = 10 traitors_possible = 3 //hard limit on traitors if scaling is turned off - restricted_jobs = list("AI", "Cyborg") + restricted_jobs = list("AI", "Cyborg", "Synthetic") required_players = 20 required_enemies = 1 // how many of each type are required recommended_enemies = 3 diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 2e4bf38423dc..f321115dacbc 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -144,7 +144,7 @@ Credit where due: recommended_enemies = 3 enemy_minimum_age = 14 protected_jobs = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Brig Physician") //Silicons can eventually be converted //Yogs: Added Brig Physician - restricted_jobs = list("Chaplain", "Captain") + restricted_jobs = list("Chaplain", "Captain", "Synthetic") announce_span = "brass" announce_text = "Servants of Ratvar are trying to summon the Justiciar!\n\ Servants: Construct defenses to protect the Ark. Sabotage the station!\n\ diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 43d128626058..d46e44272ec7 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -39,7 +39,7 @@ report_type = "cult" antag_flag = ROLE_CULTIST false_report_weight = 10 - restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Brig Physician") //Yogs: Added Brig Physician + restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Brig Physician", "Synthetic") //Yogs: Added Brig Physician protected_jobs = list() required_players = 24 required_enemies = 4 diff --git a/code/game/gamemodes/devil/devil_game_mode.dm b/code/game/gamemodes/devil/devil_game_mode.dm index c329f724330b..5a1a2f5ccfd1 100644 --- a/code/game/gamemodes/devil/devil_game_mode.dm +++ b/code/game/gamemodes/devil/devil_game_mode.dm @@ -11,7 +11,7 @@ reroll_friendly = 1 enemy_minimum_age = 0 title_icon = "devil" - restricted_jobs = list("Cyborg", "AI") + restricted_jobs = list("Cyborg", "AI", "Synthetic") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Brig Physician") //YOGS - added the hop and brig physician var/traitors_possible = 4 //hard limit on devils if scaling is turned off diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm index 67ff6e8e5b36..78ee81f798c4 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm @@ -63,7 +63,7 @@ antag_datum = /datum/antagonist/traitor antag_flag = ROLE_TRAITOR protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Brig Physician") - restricted_roles = list("AI","Cyborg") + restricted_roles = list("AI","Cyborg", "Synthetic") required_candidates = 1 weight = 7 cost = 10 @@ -82,7 +82,7 @@ antag_datum = /datum/antagonist/rev/head antag_flag = ROLE_REV_HEAD antag_flag_override = ROLE_REV - restricted_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director") + restricted_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Synthetic") enemy_roles = list("AI", "Cyborg", "Security Officer","Detective","Head of Security", "Captain", "Warden") required_enemies = list(2,2,1,1,1,1,1,0,0,0) required_candidates = 1 @@ -198,7 +198,7 @@ antag_flag = ROLE_VAMPIRE antag_datum = /datum/antagonist/vampire protected_roles = list("Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Security Officer", "Chaplain", "Detective", "Warden", "Brig Physician") - restricted_roles = list("AI", "Cyborg") + restricted_roles = list("AI", "Cyborg", "Synthetic") required_candidates = 1 weight = 4 cost = 15 @@ -218,7 +218,7 @@ antag_datum = /datum/antagonist/heretic antag_flag = ROLE_HERETIC protected_roles = list("Chaplain","Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Brig Physician") - restricted_roles = list("AI","Cyborg") + restricted_roles = list("AI","Cyborg", "Synthetic") required_candidates = 1 weight = 2 cost = 15 @@ -242,7 +242,7 @@ "Warden", "Security Officer", "Detective", "Brig Physician", "Curator" ) - restricted_roles = list("AI","Cyborg") + restricted_roles = list("AI","Cyborg", "Synthetic") required_candidates = 1 weight = 5 cost = 10 diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index e9a990cd8e30..07d907f2f6d5 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -168,7 +168,7 @@ antag_datum = /datum/antagonist/traitor antag_flag = ROLE_TRAITOR protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Brig Physician") - restricted_roles = list("Cyborg", "AI", "Positronic Brain") + restricted_roles = list("Cyborg", "AI", "Positronic Brain", "Synthetic") required_candidates = 1 weight = 7 cost = 10 @@ -563,7 +563,7 @@ antag_flag = ROLE_VAMPIRE antag_datum = /datum/antagonist/vampire protected_roles = list("Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Security Officer", "Chaplain", "Detective", "Warden", "Brig Physician") - restricted_roles = list("Cyborg", "AI") + restricted_roles = list("Cyborg", "AI", "Synthetic") required_candidates = 1 weight = 5 cost = 15 @@ -713,7 +713,7 @@ "Warden", "Security Officer", "Detective", "Brig Physician", "Curator" ) - restricted_roles = list("AI","Cyborg", "Positronic Brain") + restricted_roles = list("AI","Cyborg", "Positronic Brain", "Synthetic") required_candidates = 1 weight = 5 cost = 10 diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index 90666766ad0f..d4a9188b23df 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -12,7 +12,7 @@ antag_datum = /datum/antagonist/traitor minimum_required_age = 0 protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Brig Physician") - restricted_roles = list("Cyborg") + restricted_roles = list("Cyborg", "Synthetic") required_candidates = 1 weight = 5 cost = 8 // Avoid raising traitor threat above 10, as it is the default low cost ruleset. @@ -53,7 +53,7 @@ antag_flag = ROLE_BROTHER antag_datum = /datum/antagonist/brother/ protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Brig Physician") - restricted_roles = list("AI", "Cyborg") + restricted_roles = list("AI", "Cyborg", "Synthetic") required_candidates = 2 weight = 4 cost = 10 @@ -102,7 +102,7 @@ antag_flag = ROLE_CHANGELING antag_datum = /datum/antagonist/changeling protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Brig Physician") - restricted_roles = list("AI", "Cyborg") + restricted_roles = list("AI", "Cyborg", "Synthetic") required_candidates = 1 weight = 3 cost = 16 @@ -140,7 +140,7 @@ antag_flag = ROLE_HERETIC antag_datum = /datum/antagonist/heretic protected_roles = list("Chaplain","Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Brig Physician") - restricted_roles = list("AI", "Cyborg") + restricted_roles = list("AI", "Cyborg", "Synthetic") required_candidates = 1 weight = 3 cost = 15 @@ -230,7 +230,7 @@ antag_flag = ROLE_CULTIST antag_datum = /datum/antagonist/cult minimum_required_age = 14 - restricted_roles = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Brig Physician") + restricted_roles = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Brig Physician", "Synthetic") required_candidates = 2 weight = 3 cost = 20 @@ -428,7 +428,7 @@ antag_flag = ROLE_REV_HEAD antag_datum = /datum/antagonist/rev/head minimum_required_age = 14 - restricted_roles = list("Security Officer", "Warden", "Detective", "AI", "Cyborg", "Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Shaft Miner", "Mining Medic", "Brig Physician") + restricted_roles = list("Security Officer", "Warden", "Detective", "AI", "Cyborg", "Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Shaft Miner", "Mining Medic", "Brig Physician", "Synthetic") required_candidates = 3 weight = 1 delay = 7 MINUTES @@ -577,7 +577,7 @@ antag_flag = ROLE_SERVANT_OF_RATVAR antag_datum = /datum/antagonist/clockcult protected_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Brig Physician") - restricted_roles = list("Chaplain", "Captain") + restricted_roles = list("Chaplain", "Captain", "Synthetic") required_candidates = 4 weight = 1 cost = 40 @@ -698,7 +698,7 @@ name = "Devil" antag_flag = ROLE_DEVIL antag_datum = /datum/antagonist/devil - restricted_roles = list("Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI") + restricted_roles = list("Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI", "Synthetic") required_candidates = 1 weight = 1 cost = 60 @@ -851,7 +851,7 @@ antag_flag = ROLE_SHADOWLING antag_datum = /datum/antagonist/shadowling protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Brig Physician") - restricted_roles = list("Cyborg", "AI") + restricted_roles = list("Cyborg", "AI", "Synthetic") required_candidates = 3 weight = 3 cost = 30 @@ -895,7 +895,7 @@ antag_flag = ROLE_VAMPIRE antag_datum = /datum/antagonist/vampire protected_roles = list("Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Security Officer", "Chaplain", "Detective", "Warden", "Brig Physician") - restricted_roles = list("Cyborg", "AI") + restricted_roles = list("Cyborg", "AI", "Synthetic") required_candidates = 3 weight = 3 cost = 8 @@ -1001,7 +1001,7 @@ antag_datum = /datum/antagonist/darkspawn/ minimum_required_age = 20 protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Brig Physician") - restricted_roles = list("AI", "Cyborg") + restricted_roles = list("AI", "Cyborg", "Synthetic") required_candidates = 3 weight = 3 cost = 20 @@ -1038,7 +1038,7 @@ "Warden", "Security Officer", "Detective", "Brig Physician", "Curator" ) - restricted_roles = list("AI", "Cyborg") + restricted_roles = list("AI", "Cyborg", "Synthetic") required_candidates = 1 weight = 5 cost = 10 diff --git a/code/game/gamemodes/eldritch_cult/eldritch_cult.dm b/code/game/gamemodes/eldritch_cult/eldritch_cult.dm index bd857f8740e6..9bfa0c2c22a9 100644 --- a/code/game/gamemodes/eldritch_cult/eldritch_cult.dm +++ b/code/game/gamemodes/eldritch_cult/eldritch_cult.dm @@ -4,7 +4,7 @@ report_type = "heresy" antag_flag = ROLE_HERETIC false_report_weight = 5 - protected_jobs = list("Chaplain","Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Brig Physician") //Yogs: Added Brig Physician + protected_jobs = list("Chaplain","Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Brig Physician", "Synthetic") //Yogs: Added Brig Physician restricted_jobs = list("AI", "Cyborg") required_players = 25 required_enemies = 1 diff --git a/code/game/gamemodes/hivemind/hivemind.dm b/code/game/gamemodes/hivemind/hivemind.dm index 187a92a31c26..8889e124c32f 100644 --- a/code/game/gamemodes/hivemind/hivemind.dm +++ b/code/game/gamemodes/hivemind/hivemind.dm @@ -4,7 +4,7 @@ report_type = "hivemind" antag_flag = ROLE_HIVE false_report_weight = 5 - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Brig Physician") //Yogs: Added "Brig Physician + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Brig Physician", "Synthetic") //Yogs: Added "Brig Physician restricted_jobs = list("Cyborg","AI") required_players = 24 required_enemies = 2 diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 0ff85c985a16..549bc89f94a5 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -129,7 +129,7 @@ GLOBAL_LIST_EMPTY(objectives) if(O.late_joiner) try_target_late_joiners = TRUE for(var/datum/mind/possible_target in get_crewmember_minds()) - if(is_valid_target(possible_target) && !(possible_target in owners) && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && is_unique_objective(possible_target,dupe_search_range)) + if(is_valid_target(possible_target) && !(possible_target in owners) && ishuman(possible_target.current) && !is_synth(possible_target.current) && (possible_target.current.stat != DEAD) && is_unique_objective(possible_target,dupe_search_range)) //yogs start -- Quiet Rounds var/mob/living/carbon/human/guy = possible_target.current if(possible_target.antag_datums || !(guy.mind.quiet_round)) diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index fa74510a48aa..063eab931e25 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -17,7 +17,7 @@ report_type = "revolution" antag_flag = ROLE_REV_HEAD false_report_weight = 10 - restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg", "Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Shaft Miner", "Mining Medic", "Brig Physician") //Yogs: Added Brig Physician + restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg", "Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Shaft Miner", "Mining Medic", "Brig Physician", "Synthetic") //Yogs: Added Brig Physician required_jobs = list(list("Captain"=1),list("Head of Personnel"=1),list("Head of Security"=1),list("Chief Engineer"=1),list("Research Director"=1),list("Chief Medical Officer"=1)) //Any head present required_players = 25 required_enemies = 2 diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index bab929203ffc..47beb70fc604 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -12,7 +12,7 @@ antag_flag = ROLE_TRAITOR false_report_weight = 20 //Reports of traitors are pretty common. restricted_jobs = list("Cyborg")//They are part of the AI if he is traitor so are they, they use to get double chances - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Brig Physician") //YOGS - added the hop and brig physician + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Brig Physician", "Synthetic") //YOGS - added the hop and brig physician required_players = 0 required_enemies = 1 recommended_enemies = 4 diff --git a/code/game/gamemodes/zombie/zombie.dm b/code/game/gamemodes/zombie/zombie.dm index 2c0a7df3962b..f0e21854cdd4 100644 --- a/code/game/gamemodes/zombie/zombie.dm +++ b/code/game/gamemodes/zombie/zombie.dm @@ -13,7 +13,7 @@ GLOBAL_LIST_EMPTY(zombies) antag_flag = ROLE_ZOMBIE false_report_weight = 10 restricted_jobs = list("AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Medical Officer", "Brig Physician") //Yogs: Added Brig Physician + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Medical Officer", "Brig Physician", "Synthetic") //Yogs: Added Brig Physician required_players = 40 required_enemies = 3 recommended_enemies = 3 diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm old mode 100755 new mode 100644 index 3f51a3074af0..6bf547992542 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -54,12 +54,16 @@ /// Are we NOT a silicon, AND we're logged in as the captain? /obj/machinery/computer/communications/proc/authenticated_as_non_silicon_captain(mob/user) + if(is_synth(user)) + return FALSE if (issilicon(user)) return FALSE return ACCESS_CAPTAIN in authorize_access /// Are we a silicon, OR we're logged in as the captain? /obj/machinery/computer/communications/proc/authenticated_as_silicon_or_captain(mob/user) + if(is_synth(user)) + return FALSE if (issilicon(user)) return TRUE return ACCESS_CAPTAIN in authorize_access @@ -366,16 +370,7 @@ new /obj/item/card/id/captains_spare/temporary(loc) COOLDOWN_START(src, important_action_cooldown, IMPORTANT_ACTION_COOLDOWN) priority_announce("The emergency spare ID has been printed by [authorize_name].", "Emergency Spare ID Warning System", SSstation.announcer.get_rand_report_sound()) - if("printAIControlCode") - if(authenticated_as_non_silicon_head(usr)) - if(!COOLDOWN_FINISHED(src, important_action_cooldown)) - return - playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1) - GLOB.ai_control_code = random_nukecode(6) - new /obj/item/paper/ai_control_code(loc) - COOLDOWN_START(src, important_action_cooldown, IMPORTANT_ACTION_COOLDOWN) - priority_announce("The AI Control Code been printed by [authorize_name]. All previous codes have been invalidated.", "Central Tech Support", SSstation.announcer.get_rand_report_sound()) - + /obj/machinery/computer/communications/ui_data(mob/user) var/list/data = list( diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index ca4f63ced0b9..2a15624d04d2 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -136,6 +136,8 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) var/life_status for(var/mob/living/carbon/human/tracked_mob in GLOB.carbon_list) + if(is_synth(tracked_mob)) //Synths are unsupported (they're not organic) + continue var/forced_sensors = HAS_TRAIT(tracked_mob, TRAIT_SUITLESS_SENSORS) uniform = tracked_mob.w_uniform pos = get_turf(tracked_mob) @@ -151,7 +153,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) // Machinery and the target should be on the same level or different levels of the same station if(!(z in SSmapping.get_connected_levels(pos)) && !HAS_TRAIT(tracked_mob, TRAIT_MULTIZ_SUIT_SENSORS)) continue - + var/jammed = FALSE for(var/obj/item/jammer/jammer in GLOB.active_jammers) var/turf/jammer_turf = get_turf(jammer) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index bd642b99f661..89a6cb203103 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -72,44 +72,7 @@ data["logged_in"] = logged_in - if(issilicon(user)) - var/mob/living/silicon/borg = user - data["username"] = borg.name - data["has_access"] = TRUE - - if(IsAdminGhost(user)) - data["username"] = user.client.holder.admin_signature - data["has_access"] = TRUE - - if(ishuman(user)) - var/username = user.get_authentification_name("Unknown") - data["username"] = user.get_authentification_name("Unknown") - if(username != "Unknown") - var/datum/data/record/record - for(var/RP in GLOB.data_core.general) - var/datum/data/record/R = RP - - if(!istype(R)) - continue - if(R.fields["name"] == username) - record = R - break - if(record) - if(istype(record.fields["photo_front"], /obj/item/photo)) - var/obj/item/photo/P1 = record.fields["photo_front"] - var/icon/picture = icon(P1.picture.picture_image) - picture.Crop(10, 32, 22, 22) - var/md5 = md5(fcopy_rsc(picture)) - - if(!SSassets.cache["photo_[md5]_cropped.png"]) - SSassets.transport.register_asset("photo_[md5]_cropped.png", picture) - SSassets.transport.send_assets(user, list("photo_[md5]_cropped.png" = picture)) - - data["user_image"] = SSassets.transport.get_asset_url("photo_[md5]_cropped.png") - - data["has_access"] = check_access(user.get_idcard()) - - + data += tgui_login_data(user, src) if(!logged_in) return data @@ -277,7 +240,6 @@ data["active_record"] = record - return data /obj/machinery/computer/secure_data/ui_static_data(mob/user) @@ -292,6 +254,8 @@ if(..()) return + + switch(action) if("back") if(!logged_in) @@ -305,6 +269,10 @@ active_security_record = null screen = MAIN_SCREEN + logged_in = tgui_login_act(usr, src) + if(!logged_in) + return + if(issilicon(usr)) var/mob/living/silicon/borg = usr logged_in = borg.name @@ -314,17 +282,14 @@ if(IsAdminGhost(usr)) logged_in = usr.client.holder.admin_signature rank = "Central Command Officer" - - - - - var/mob/living/carbon/human/H = usr - if(!istype(H)) return - if(check_access(H.get_idcard())) + var/mob/living/carbon/human/H = usr + if(istype(H)) logged_in = H.get_authentification_name("Unknown") rank = H.get_assignment("Unknown", "Unknown") + return + if("log_out") if(!logged_in) return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 9af57c12e3e6..86efd3423d60 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -857,6 +857,12 @@ to_chat(user, span_warning("Unable to interface. Airlock control panel damaged.")) return + var/mob/living/silicon/ai/AI = user + if(istype(AI) && !AI.has_subcontroller_connection(get_area(src))) + to_chat(AI, span_warning("No connection to subcontroller detected. Priming servos...")) + if(!do_after(AI, 1 SECONDS, src, IGNORE_USER_LOC_CHANGE)) + return + ui_interact(user) /obj/machinery/door/airlock/proc/hack(mob/user) @@ -1570,6 +1576,14 @@ if(density && !open(2)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!) to_chat(user, span_warning("Despite your efforts, [src] managed to resist your attempts to open it!")) + +/obj/machinery/door/airlock/proc/safe_lockdown() + // Must be powered and have working AI wire. + if(canAIControl(src) && !stat) + locked = FALSE //For airlocks that were bolted open. + close() + bolt() //Bolt it! + /obj/machinery/door/airlock/hostile_lockdown(mob/origin) // Must be powered and have working AI wire. if(canAIControl(src) && !stat) @@ -1590,6 +1604,13 @@ open() safe = TRUE +/obj/machinery/door/airlock/proc/disable_safe_lockdown() + // Must be powered and have working AI wire. + if(canAIControl(src) && !stat) + unbolt() + open() + + /obj/machinery/door/airlock/proc/set_electrified(seconds, mob/user) secondsElectrified = seconds diag_hud_set_electrified() diff --git a/code/game/machinery/doors/passworddoor.dm b/code/game/machinery/doors/passworddoor.dm index d91a9c9cfd38..29e5deab4a64 100644 --- a/code/game/machinery/doors/passworddoor.dm +++ b/code/game/machinery/doors/passworddoor.dm @@ -16,6 +16,55 @@ /obj/machinery/door/password/voice voice_activated = TRUE +/obj/machinery/door/password/floppy_disk + desc = "This door only opens when provided with a decrypted floppy drive." + var/id + +/obj/machinery/door/password/floppy_disk/attackby(obj/item/I, mob/user, params) + . = ..() + if(istype(I, /obj/item/disk/puzzle)) + var/obj/item/disk/puzzle/P = I + if(P.id == id) + if(P.decrypted) + open() + to_chat(user, span_notice("You insert [P].")) + qdel(P) + else + to_chat(user, span_warning("This disk doesn't seem to have been decrypted!")) + else + to_chat(user, span_warning("This disk doesn't belong to this door!")) + +/obj/machinery/door/password/floppy_disk/try_to_activate_door(mob/user) + add_fingerprint(user) + if(operating) + return + if(density) + do_animate("deny") + +/obj/machinery/door/password/button_puzzle + desc = "This door has no obvious way to be opened." + var/id + +/obj/machinery/door/password/button_puzzle/Initialize(mapload) + . = ..() + for(var/datum/button_puzzle_holder/H in GLOB.button_puzzles) + if(H.id == id) + H.doors += src + var/datum/button_puzzle_holder/H = new() + H.id = id + H.doors += src + GLOB.button_puzzles += H + +/obj/machinery/door/password/button_puzzle/attackby(obj/item/I, mob/user, params) + . = ..() + to_chat(user, span_warning("You're not sure how to open this door! Maybe look around?")) + +/obj/machinery/door/password/button_puzzle/try_to_activate_door(mob/user) + add_fingerprint(user) + if(operating) + return + if(density) + do_animate("deny") /obj/machinery/door/password/Initialize(mapload) . = ..() @@ -26,6 +75,8 @@ . = ..() if(!density || !voice_activated || radio_freq) return + if(!ishuman(speaker)) + return if(findtext(raw_message,password)) open() diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm index 427f4ff9de99..e12e4d8180de 100644 --- a/code/game/machinery/harvester.dm +++ b/code/game/machinery/harvester.dm @@ -112,7 +112,8 @@ BP.drop_organs() else for(var/obj/item/organ/O in BP.dismember()) - O.forceMove(target) //Some organs, like chest ones, are different so we need to manually move them + if(O.can_extract()) + O.forceMove(target) //Some organs, like chest ones, are different so we need to manually move them operation_order.Remove(BP) break use_power(5000) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index b2ad9ae424fc..2df3aadcc8a4 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -122,6 +122,19 @@ obj/machinery/holopad/secure/Initialize(mapload) else if(disk && disk.record) replay_start() +/obj/machinery/holopad/tutorial/attackby(obj/item/P, mob/user, params) + . = ..() + if(istype(P, /obj/item/crowbar)) + if(disk) + disk.forceMove(drop_location()) + disk = null + return TRUE + +/obj/machinery/holopad/tutorial/examine(mob/user) + . = ..() + . += span_notice("Use a crowbar to remove an already inserted disk.") + + /obj/machinery/holopad/tutorial/HasProximity(atom/movable/AM) if (!isliving(AM)) return diff --git a/code/game/machinery/synth_pod.dm b/code/game/machinery/synth_pod.dm new file mode 100644 index 000000000000..2ee0c4aaf0cd --- /dev/null +++ b/code/game/machinery/synth_pod.dm @@ -0,0 +1,158 @@ +GLOBAL_LIST_EMPTY(synth_pods) + +// SUIT STORAGE UNIT ///////////////// +/obj/machinery/synth_pod + name = "synthetic storage unit" + desc = "An industrial unit made to store inactive synthetic units for long durations." + icon = 'icons/obj/machines/suit_storage.dmi' + icon_state = "close" + density = TRUE + max_integrity = 500 + circuit = /obj/item/circuitboard/machine/synth_pod + + var/mob/living/carbon/human/stored + // if you add more storage slots, update cook() to clear their radiation too. + + state_open = FALSE + panel_open = FALSE + + var/start_empty_roundstart = FALSE + +/obj/machinery/synth_pod/Initialize(mapload) + . = ..() + + if(mapload && !start_empty_roundstart) + var/mob/living/carbon/human/S = new(src) + S.set_species(/datum/species/wy_synth) + stored = S + var/datum/outfit/job/synthetic/SO = new() + SO.equip(S) + GLOB.synth_pods += src + update_icon() + +/obj/machinery/synth_pod/Destroy() + . = ..() + GLOB.synth_pods -= src + +/obj/machinery/synth_pod/update_overlays() + . = ..() + + if(stored) + add_overlay("uvhuman") + else + add_overlay("open") + +/obj/machinery/synth_pod/process() + if(!stored) + return + if(!is_synth(stored)) + return + stored.adjust_nutrition(10) + + +/obj/machinery/synth_pod/MouseDrop_T(atom/A, mob/living/user) + if(!istype(user) || user.stat || !Adjacent(user) || !Adjacent(A) || !isliving(A)) + return + if(isliving(user)) + var/mob/living/L = user + if(!(L.mobility_flags & MOBILITY_STAND)) + return + if(stored) + to_chat(user, span_warning("This unit is already full.")) + return + + var/mob/living/target = A + + if(!is_synth(target)) + to_chat(user, span_warning("This machine only accepts synthetics.")) + return + + if(target == user) + user.visible_message(span_warning("[user] starts squeezing into [src]!"), span_notice("You start working your way into [src]...")) + else + target.visible_message(span_warning("[user] starts shoving [target] into [src]!"), span_userdanger("[user] starts shoving you into [src]!")) + + if(do_after(user, 3 SECONDS, target)) + if(stored) + return + if(target == user) + user.visible_message(span_warning("[user] slips into [src] and closes the door behind [user.p_them()]!"), "You slip into [src]'s comfy space and shut its door.") + else + target.visible_message("[user] pushes [target] into [src] and shuts its door!", span_userdanger("[user] shoves you into [src] and shuts the door!")) + close_machine(target) + stored = target + update_icon() + + switch_body(target) + +/obj/machinery/synth_pod/proc/switch_body(mob/living/carbon/human/user) + var/datum/species/wy_synth/S = user.dna.species + if(S.mainframe) + S.undeploy(user) + return + var/list/options = list("Stay here") + for(var/obj/machinery/synth_pod/pod in GLOB.synth_pods) + if(pod == src) + continue + if(pod.z != src.z) + continue + if(!pod.stored) + continue + options["[get_area(pod)] ([pod.x], [pod.y])"] = pod + + var/response = tgui_input_list(user, "Which synthetic unit would you like to transfer into?", "Synthetic Personality Transfer", options) + + if(!response || response == "Stay here") + open_machine() + stored = null + update_icon() + return + + if(options[response]) + var/obj/machinery/synth_pod/selected_pod = options[response] + var/mob/living/carbon/human/target_synth = selected_pod.stored + S.transfer(user, target_synth) + selected_pod.open_machine() + selected_pod.stored = null + selected_pod.update_icon() + + + + +/obj/machinery/synth_pod/attackby(obj/item/W, mob/user) + if(default_unfasten_wrench(user, W)) + return + return ..() + +/obj/machinery/synth_pod/attackby(obj/item/I, mob/user, params) + if(panel_open && is_wire_tool(I)) + wires.interact(user) + return + if(!state_open) + if(default_deconstruction_screwdriver(user, "panel", "close", I)) + return + if(default_deconstruction_crowbar(I)) + return + + return ..() + +/obj/machinery/synth_pod/attack_ai(mob/user) + . = ..() + return + /* + if(!isAI(user)) + return + var/mob/living/silicon/ai/AI = user + if(!AI.dashboard.has_completed_project(/datum/ai_project/synth_control)) + to_chat(user, span_warning("You do not have the required program to interface with this machine.")) + return + if(!stored) + to_chat(user, span_warning("There is no synthetic unit stored in this machine.")) + return + if(AI.deploy_to_synth_pod(src)) + open_machine() + var/datum/species/wy_synth/S = stored.dna.species + S.assume_control(AI, stored) + stored = null + update_icon() + */ diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 3ba2eb019cb3..0c998e467b27 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -504,6 +504,8 @@ var/mob/living/L = user if(!Adjacent(target)) + if(!synth_check(user, SYNTH_RESTRICTED_WEAPON)) + return if(selected && selected.is_ranged()) if(HAS_TRAIT(L, TRAIT_PACIFISM) && selected.harmful) to_chat(user, span_warning("You don't want to harm other living beings!")) @@ -514,6 +516,8 @@ if(selected.action(target, user, params)) selected.start_cooldown() else if(selected && selected.is_melee()) + if(!synth_check(user, SYNTH_RESTRICTED_WEAPON)) + return if(isliving(target) && selected.harmful && HAS_TRAIT(L, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to harm other living beings!")) return diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm index 7936b73ae440..52160c6f1313 100644 --- a/code/game/objects/effects/decals/cleanable/robots.dm +++ b/code/game/objects/effects/decals/cleanable/robots.dm @@ -79,3 +79,10 @@ /obj/effect/decal/cleanable/oil/slippery/Initialize(mapload) . = ..() AddComponent(/datum/component/slippery, 80, (NO_SLIP_WHEN_WALKING | SLIDE)) + +/obj/effect/decal/cleanable/oil/synth + name = "circulation fluid" + desc = "It's a white and viscous fluid used by synthetic crewmembers." + color = "#e6e6e6" + icon_state = "synthfloor1" + random_icon_states = list("synthfloor1", "synthfloor2", "synthfloor3", "synthfloor4", "synthfloor5", "synthfloor6", "synthfloor7") diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index b1a080d6eb71..3124dfb4bc8d 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -193,6 +193,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) name = "Cyborg" icon_state = "Cyborg" +/obj/effect/landmark/start/synthetic + name = "Synthetic" + icon_state = "Cyborg" + //Department Security spawns diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 521feb5776fb..aefead875e86 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -713,7 +713,6 @@ name = "secure AI circuit board spawner" loot = list( /obj/item/circuitboard/computer/aiupload, - /obj/item/circuitboard/computer/ai_upload_download, /obj/item/circuitboard/computer/borgupload ) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 4d22f4c2b912..2f07409a68e0 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -561,6 +561,10 @@ update_label("John Doe", "Clowny") name = "[(!registered_name) ? "identification card" : "[registered_name]'s ID Card"][(!assignment) ? "" : " ([assignment])"]" +//a card that can't register a bank account IC +/obj/item/card/id/no_bank/AltClick(mob/living/user) + return FALSE + /obj/item/card/id/silver name = "silver identification card" desc = "A silver card which shows honour and dedication." @@ -584,6 +588,27 @@ update_label("John Doe", "Clowny") lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' +/obj/item/card/id/synthetic + name = "synthetic identification card" + desc = "An integrated card that allows synthetic units access across the station." + icon_state = "id_silver" + item_state = "silver_id" + lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' + item_flags = DROPDEL + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/item/card/id/synthetic/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, SYNTHETIC_TRAIT) + +/obj/item/card/id/synthetic/GetAccess() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + if(H.mind) + return GLOB.synthetic_base_access + GLOB.synthetic_added_access + return list() + /obj/item/card/id/syndicate name = "agent card" access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE) diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 0e902ff1179c..d2a196a1c8b3 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -432,20 +432,12 @@ name = "Shuttle Navigation Computer (Computer Board)" build_path = /obj/machinery/computer/camera_advanced/shuttle_docker/custom -/obj/item/circuitboard/computer/ai_upload_download - name = "AI Control Console (Computer Board)" - greyscale_colors = CIRCUIT_COLOR_SCIENCE - build_path = /obj/machinery/computer/ai_control_console /obj/item/circuitboard/computer/ai_server_overview name = "AI Server Overview Console (Computer Board)" greyscale_colors = CIRCUIT_COLOR_SCIENCE build_path = /obj/machinery/computer/ai_server_console -/obj/item/circuitboard/computer/ai_resource_distribution - name = "AI Resource Distribution Console (Computer Board)" - greyscale_colors = CIRCUIT_COLOR_SCIENCE - build_path = /obj/machinery/computer/ai_resource_distribution //Security diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 59938a379280..9f73965fa137 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -163,6 +163,15 @@ /obj/item/stack/cable_coil = 2, /obj/item/stock_parts/manipulator = 5) +/obj/item/circuitboard/machine/synth_pod + name = "Synthetic Storage Unit (Machine Board)" + icon_state = "engineering" + build_path = /obj/machinery/synth_pod + req_components = list( + /obj/item/stock_parts/micro_laser = 2, + /obj/item/stack/cable_coil = 2, + /obj/item/stock_parts/manipulator = 2) + /obj/item/circuitboard/machine/decontamination_unit name = "Decontamination Storage Unit (Machine Board)" greyscale_colors = CIRCUIT_COLOR_ENGINEERING @@ -1084,6 +1093,27 @@ /obj/item/stack/sheet/glass = 2, /obj/item/stack/cable_coil = 1) +/obj/item/circuitboard/machine/networking_machine + name = "Networking Machine (Machine Board)" + icon_state = "science" + build_path = /obj/machinery/ai/networking + req_components = list( + /obj/item/stock_parts/matter_bin = 4, + /obj/item/stock_parts/capacitor = 2, + /obj/item/stock_parts/scanning_module = 4, + /obj/item/stack/sheet/glass = 4, + /obj/item/stack/cable_coil = 1) + +/obj/item/circuitboard/machine/subcontroller + name = "Subcontroller (Machine Board)" + icon_state = "science" + build_path = /obj/machinery/ai/master_subcontroller + req_components = list( + /obj/item/stock_parts/capacitor = 4, + /obj/item/stock_parts/scanning_module = 4, + /obj/item/stack/sheet/glass = 2, + /obj/item/stack/cable_coil = 1) + /obj/item/circuitboard/machine/ai_core_display name = "AI Core Display (Machine Board)" greyscale_colors = CIRCUIT_COLOR_SCIENCE diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index bd43da8ef7e8..95a0a72e29b5 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -124,6 +124,17 @@ icon_state = "srv_cypherkey" channels = list(RADIO_CHANNEL_SERVICE = 1) +/obj/item/encryptionkey/headset_synthetic + name = "synthetic radio encryption key" + icon_state = "rd_cypherkey" + channels = list(RADIO_CHANNEL_COMMAND = 1, RADIO_CHANNEL_ENGINEERING = 1, RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_MEDICAL = 1, RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SERVICE = 1) + translate_binary = TRUE + item_flags = DROPDEL + +/obj/item/encryptionkey/headset_synthetic/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, SYNTHETIC_TRAIT) + /obj/item/encryptionkey/headset_cent name = "\improper CentCom radio encryption key" icon_state = "cent_cypherkey" diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index e1159a7dce30..c7906d086a7a 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -204,6 +204,23 @@ icon_state = "srv_headset" keyslot = new /obj/item/encryptionkey/headset_service +/obj/item/radio/headset/headset_synthetic + name = "synthetic radio headset" + desc = "Headset used by the onboard synthetic units. This one is integrated directly into the unit and is not possible to remove." + icon_state = "com_headset" + keyslot = new /obj/item/encryptionkey/headset_synthetic + item_flags = DROPDEL + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/item/radio/headset/headset_synthetic/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, SYNTHETIC_TRAIT) + ADD_TRAIT(src, TRAIT_EMPPROOF_CONTENTS, SYNTHETIC_TRAIT) + ADD_TRAIT(src, TRAIT_EMPPROOF_SELF, SYNTHETIC_TRAIT) + +/obj/item/radio/headset/headset_synthetic/attackby(obj/item/W, mob/user, params) + return FALSE + /obj/item/radio/headset/headset_cent name = "\improper CentCom headset" desc = "A headset used by the upper echelons of Nanotrasen." diff --git a/code/game/objects/items/grenades/grenade.dm b/code/game/objects/items/grenades/grenade.dm index 8d9552276130..220e526453d3 100644 --- a/code/game/objects/items/grenades/grenade.dm +++ b/code/game/objects/items/grenades/grenade.dm @@ -58,6 +58,9 @@ /obj/item/grenade/attack_self(mob/user) if(!active) if(clown_check(user)) + if(HAS_TRAIT(user, TRAIT_NO_GRENADES)) + to_chat(user, span_warning("You can't use grenades!")) + return preprime(user) /obj/item/grenade/proc/log_grenade(mob/user, turf/T) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index 11e5c1e34796..167d5e56af85 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -240,6 +240,8 @@ var/datum/job/this_job = SSjob.GetJob(human.mind.assigned_role) if(!this_job || this_job.faction != "Station") continue + if(is_synth(human)) + continue mail_recipients += human.mind diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 02fb769b7ddf..ce901ed04df3 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -327,7 +327,8 @@ /obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user) if(!on) return ..() - + if(!synth_check(user, SYNTH_RESTRICTED_WEAPON)) + return if(HAS_TRAIT(user, TRAIT_NO_STUN_WEAPONS)) to_chat(user, span_warning("You can't seem to remember how this works!")) return diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 78ba724345ed..e16c427dfb17 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -74,6 +74,10 @@ return 1 return 0 +/obj/item/robot_suit/examine(mob/user) + . = ..() + . += "If you insert an AI CPU when this endoskeleton is complete it will be constructed as a synthetic." + /obj/item/robot_suit/wrench_act(mob/living/user, obj/item/I) //Deconstucts empty borg shell. Flashes remain unbroken because they haven't been used yet var/turf/T = get_turf(src) if(l_leg || r_leg || chest || l_arm || r_arm || head) @@ -252,6 +256,27 @@ else to_chat(user, span_warning("The endoskeleton must be assembled before debugging can begin!")) + else if(istype(W, /obj/item/ai_cpu)) + if(check_completion()) + var/response = tgui_alert(user, "Are you sure you want to turn this endoskeleton into a synthetic unit?", "Please Confirm", list("Yes", "No")) + if(response != "Yes") + return + + if(!user.temporarilyRemoveItemFromInventory(W)) + return + var/mob/living/carbon/human/O = new /mob/living/carbon/human(get_turf(loc)) + O.set_species(/datum/species/wy_synth) + O.invisibility = 0 + O.job = "Synthetic" + var/datum/outfit/job/synthetic/SO = new() + SO.equip(O) + W.forceMove(O) + var/datum/species/wy_synth/S = O.dna.species + qdel(S.inbuilt_cpu) + S.inbuilt_cpu = null + S.inbuilt_cpu = W + qdel(src) + else if(istype(W, /obj/item/mmi)) var/obj/item/mmi/M = W if(check_completion()) diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 8f16951dd3a2..093e4fc014a8 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -10,6 +10,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ new/datum/stack_recipe("fore port spacepod frame", /obj/item/pod_parts/pod_frame/fore_port, 15, time = 30, one_per_turf = 0), \ new/datum/stack_recipe("fore starboard spacepod frame", /obj/item/pod_parts/pod_frame/fore_starboard, 15, time = 30, one_per_turf = 0), \ new/datum/stack_recipe("aft port spacepod frame", /obj/item/pod_parts/pod_frame/aft_port, 15, time = 30, one_per_turf = 0), \ + new/datum/stack_recipe("catwalk floor tile", /obj/item/stack/tile/catwalk_tile, 1, 4, 20), \ new/datum/stack_recipe("aft starboard spacepod frame", /obj/item/pod_parts/pod_frame/aft_starboard, 15, time = 30, one_per_turf = 0), \ // yogs end )) diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index db82eced86df..a4c5ab86bf35 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -451,3 +451,52 @@ /obj/item/stack/tile/eighties/loaded amount = 15 + +//Catwalk Tiles +/obj/item/stack/tile/catwalk_tile //This is our base type, sprited to look maintenance-styled + name = "catwalk plating" + singular_name = "catwalk plating tile" + desc = "Flooring that shows its contents underneath. Engineers love it!" + icon_state = "maint_catwalk" + materials = list(/datum/material/iron=100) + turf_type = /turf/open/floor/catwalk_floor + merge_type = /obj/item/stack/tile/catwalk_tile //Just to be cleaner, these all stack with eachother + +/obj/item/stack/tile/catwalk_tile/sixty + amount = 60 + +/obj/item/stack/tile/catwalk_tile/iron + name = "iron catwalk floor" + singular_name = "iron catwalk floor tile" + icon_state = "iron_catwalk" + turf_type = /turf/open/floor/catwalk_floor/iron + +/obj/item/stack/tile/catwalk_tile/iron_white + name = "white catwalk floor" + singular_name = "white catwalk floor tile" + icon_state = "whiteiron_catwalk" + turf_type = /turf/open/floor/catwalk_floor/iron_white + +/obj/item/stack/tile/catwalk_tile/iron_dark + name = "dark catwalk floor" + singular_name = "dark catwalk floor tile" + icon_state = "darkiron_catwalk" + turf_type = /turf/open/floor/catwalk_floor/iron_dark + +/obj/item/stack/tile/catwalk_tile/flat_white + name = "flat white catwalk floor" + singular_name = "flat white catwalk floor tile" + icon_state = "flatwhite_catwalk" + turf_type = /turf/open/floor/catwalk_floor/flat_white + +/obj/item/stack/tile/catwalk_tile/titanium + name = "titanium catwalk floor" + singular_name = "titanium catwalk floor tile" + icon_state = "titanium_catwalk" + turf_type = /turf/open/floor/catwalk_floor/titanium + +/obj/item/stack/tile/catwalk_tile/iron_smooth //this is the greenish one + name = "smooth iron catwalk floor" + singular_name = "smooth iron catwalk floor tile" + icon_state = "smoothiron_catwalk" + turf_type = /turf/open/floor/catwalk_floor/iron_smooth diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index a02293e02c5a..5231e638f57c 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -170,6 +170,8 @@ user.Paralyze(stunforce*3) deductcharge(hitcost) return + if(!synth_check(user, SYNTH_RESTRICTED_WEAPON)) + return if(HAS_TRAIT(user, TRAIT_NO_STUN_WEAPONS)) to_chat(user, span_warning("You can't seem to remember how this works!")) return diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 797e11a1d6b1..14a8dbde4f24 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -61,6 +61,8 @@ return ..() if(user.zone_selected != BODY_ZONE_PRECISE_EYES && user.zone_selected != BODY_ZONE_HEAD) return ..() + if(!synth_check(user, SYNTH_ORGANIC_HARM)) + return if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to harm [M]!")) return diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 403d9927546d..dd80d3af2396 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -78,6 +78,10 @@ if(broken || !Adjacent(user)) return + if(is_synth(user)) + to_chat(user, span_warning("You may not change your appearance.")) + return + if(user && ishuman(user)) var/mob/living/carbon/human/H = user var/choices = get_choices(H) // Get the choices you can change diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index f883633a0772..d367167c6537 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -252,6 +252,8 @@ GLOBAL_LIST_EMPTY(crematoriums) /obj/structure/bodycontainer/crematorium/proc/cremate(mob/user) if(locked) return //don't let you cremate something twice or w/e + if(is_synth(user)) + return // Make sure we don't delete the actual morgue and its tray var/list/conts = get_all_contents() - src - connected diff --git a/code/game/objects/structures/signs/signs_plaques.dm b/code/game/objects/structures/signs/signs_plaques.dm index 3220e0523054..216ba23cf52b 100644 --- a/code/game/objects/structures/signs/signs_plaques.dm +++ b/code/game/objects/structures/signs/signs_plaques.dm @@ -26,21 +26,6 @@ desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\"." icon_state = "kiddieplaque" -/obj/structure/sign/plaques/ai_password - name = "\improper AI default password" - desc = "This plaque contains the default password for AI control consoles onboard this station." - var/control_code = "BUG" - -/obj/structure/sign/plaques/ai_password/Initialize(mapload) - . = ..() - control_code = GLOB.ai_control_code - -/obj/structure/sign/plaques/ai_password/examine(mob/living/user) - . = ..() - if(Adjacent(user)) - . += span_notice("The following digits are stamped into the plaque: [control_code]") - else - . += span_notice("You must be closer to read the code.") /obj/structure/sign/plaques/kiddie/badger name = "\improper Remembrance Plaque" diff --git a/code/game/turfs/open/floor/plating/catwalk_plating.dm b/code/game/turfs/open/floor/plating/catwalk_plating.dm new file mode 100644 index 000000000000..8f5ff3a1fa92 --- /dev/null +++ b/code/game/turfs/open/floor/plating/catwalk_plating.dm @@ -0,0 +1,103 @@ +/** + * ## catwalk flooring + * + * They show what's underneath their catwalk flooring (pipes and the like) + * you can screwdriver it to interact with the underneath stuff without destroying the tile... + * unless you want to! + */ +/turf/open/floor/catwalk_floor //the base type, meant to look like a maintenance panel + icon = 'icons/turf/floors/catwalk_plating.dmi' + icon_state = "maint_above" + name = "catwalk floor" + desc = "Flooring that shows its contents underneath. Engineers love it!" + baseturfs = /turf/open/floor/plating + floor_tile = /obj/item/stack/tile/catwalk_tile + layer = CATWALK_LAYER + plane = FLOOR_PLANE + footstep = FOOTSTEP_CATWALK + overfloor_placed = TRUE + underfloor_accessibility = UNDERFLOOR_VISIBLE + var/covered = TRUE + var/catwalk_type = "maint" + var/static/list/catwalk_underlays = list() + +/turf/open/floor/catwalk_floor/Initialize(mapload) + . = ..() + if(!catwalk_underlays[catwalk_type]) + var/mutable_appearance/plating_underlay = mutable_appearance(icon, "[catwalk_type]_below", TURF_LAYER) + catwalk_underlays[catwalk_type] = plating_underlay + underlays += catwalk_underlays[catwalk_type] + update_icon() + +/turf/open/floor/catwalk_floor/examine(mob/user) + . = ..() + + if(covered) + . += span_notice("You can unscrew it to reveal the contents beneath.") + else + . += span_notice("You can screw it to hide the contents beneath.") + . += span_notice("There's a small crack on the edge of it.") + +/turf/open/floor/catwalk_floor/screwdriver_act(mob/living/user, obj/item/tool) + . = ..() + covered = !covered + if(!covered) + underfloor_accessibility = UNDERFLOOR_INTERACTABLE + layer = TURF_LAYER + plane = FLOOR_PLANE + icon_state = "[catwalk_type]_below" + else + underfloor_accessibility = UNDERFLOOR_VISIBLE + layer = CATWALK_LAYER + plane = FLOOR_PLANE //for some reason these are black + icon_state = "[catwalk_type]_above" + user.balloon_alert(user, "[!covered ? "cover removed" : "cover added"]") + tool.play_tool_sound(src) + update_icon() + +/turf/open/floor/catwalk_floor/crowbar_act(mob/user, obj/item/crowbar) + if(covered) + user.balloon_alert(user, "remove cover first!") + return FALSE + . = ..() + +//Reskins! More fitting with most of our tiles, and appear as a radial on the base type +/turf/open/floor/catwalk_floor/iron + name = "iron plated catwalk floor" + icon_state = "iron_above" + floor_tile = /obj/item/stack/tile/catwalk_tile/iron + catwalk_type = "iron" + + +/turf/open/floor/catwalk_floor/iron_white + name = "white plated catwalk floor" + icon_state = "whiteiron_above" + floor_tile = /obj/item/stack/tile/catwalk_tile/iron_white + catwalk_type = "whiteiron" + +/turf/open/floor/catwalk_floor/iron_dark + name = "dark plated catwalk floor" + icon_state = "darkiron_above" + floor_tile = /obj/item/stack/tile/catwalk_tile/iron_dark + catwalk_type = "darkiron" + +/turf/open/floor/catwalk_floor/flat_white + name = "white large plated catwalk floor" + icon_state = "flatwhite_above" + floor_tile = /obj/item/stack/tile/catwalk_tile/flat_white + catwalk_type = "flatwhite" + +/turf/open/floor/catwalk_floor/titanium + name = "titanium plated catwalk floor" + icon_state = "titanium_above" + floor_tile = /obj/item/stack/tile/catwalk_tile/titanium + catwalk_type = "titanium" + +/turf/open/floor/catwalk_floor/iron_smooth //the original green type + name = "smooth plated catwalk floor" + icon_state = "smoothiron_above" + floor_tile = /obj/item/stack/tile/catwalk_tile/iron_smooth + catwalk_type = "smoothiron" + +/turf/open/floor/catwalk_floor/telecomms + initial_gas_mix = TCOMMS_ATMOS diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 71fd05052ff6..ea66adeaa38c 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -352,6 +352,15 @@ GLOBAL_LIST_EMPTY(station_turfs) coil.place_turf(src, user) return TRUE + if(can_lay_cable() && istype(C, /obj/item/stack/ethernet_coil)) + var/obj/item/stack/ethernet_coil/coil = C + for(var/obj/structure/ethernet_cable/LC in src) + if(!LC.d1 || !LC.d2) + LC.attackby(C,user) + return + coil.place_turf(src, user) + return TRUE + else if(istype(C, /obj/item/rcl)) handleRCL(C, user) diff --git a/code/modules/VR/vr_compsci.dm b/code/modules/VR/vr_compsci.dm new file mode 100644 index 000000000000..5452767aaa71 --- /dev/null +++ b/code/modules/VR/vr_compsci.dm @@ -0,0 +1,160 @@ +GLOBAL_DATUM_INIT(compsci_vr, /datum/compsci_vr, new) +GLOBAL_LIST_EMPTY(compsci_mission_markers) +GLOBAL_VAR(compsci_vr_mission_reciever) +GLOBAL_LIST_EMPTY(last_used_transmuter) + + +/datum/compsci_vr + var/unlocked_missions = list() + + var/roundstart_missions = list( + /datum/compsci_mission/scientist_raid, + /datum/compsci_mission/combat_robot_factory, + /datum/compsci_mission/abandoned_mine + ) + + + var/datum/compsci_mission/current_mission + + var/mob/living/synth_occupied + + var/emagged = TRUE + + +/datum/compsci_vr/New() + . = ..() + unlocked_missions |= roundstart_missions + +/datum/compsci_vr/proc/can_join(mob/user) + return TRUE + +/datum/compsci_vr/proc/emag(mob/user) + emagged = TRUE + +/datum/compsci_vr/proc/complete_mission() + if(current_mission) + unlocked_missions -= current_mission.type + current_mission.complete() + GLOB.last_used_transmuter = null + QDEL_NULL(current_mission) + +/datum/compsci_vr/proc/start_mission(id, mob/user) + if(current_mission) + return + var/datum/compsci_mission/found_mission + for(var/datum/compsci_mission/unlocked as anything in unlocked_missions) + if(initial(unlocked.id) == id) + found_mission = unlocked + break + + if(!found_mission) + return + var/datum/compsci_mission/new_m = new found_mission() + current_mission = new_m + + var/obj/effect/landmark/vr_spawn/vr_mission/V_landmark = safepick(GLOB.compsci_mission_markers[current_mission.id]) + var/turf/T = get_turf(V_landmark) + var/datum/outfit/mission_outfit = new(V_landmark.vr_outfit) + if(user) + mission_outfit.equip(user) + user.forceMove(T) + +/datum/compsci_vr/proc/join_ongoing(mob/user) + if(!current_mission) + return + + var/obj/effect/landmark/vr_spawn/vr_mission/V_landmark = safepick(GLOB.compsci_mission_markers[current_mission.id]) + var/turf/T = get_turf(V_landmark) + var/datum/outfit/mission_outfit = new(V_landmark.vr_outfit) + if(user) + mission_outfit.equip(user) + user.forceMove(T) + + +/obj/machinery/computer/compsci_mission_selector + name = "exploration drone dispatch console" + desc = "Used for monitoring the various servers assigned to the AI network." + + icon_keyboard = "tech_key" + icon_screen = "ai-fixer" + light_color = LIGHT_COLOR_PINK + +/obj/machinery/computer/compsci_mission_selector/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "CompsciMissionSelect", name) + ui.open() + +/obj/machinery/computer/compsci_mission_selector/ui_data(mob/living/carbon/human/user) + var/list/data = list() + data["missions"] = list() + data["ongoing"] = GLOB.compsci_vr.current_mission ? TRUE : FALSE + for(var/datum/compsci_mission/M as anything in GLOB.compsci_vr.unlocked_missions) + data["missions"] += list(list("name" = initial(M.name), "desc" = initial(M.desc), "id" = initial(M.id), "tags" = initial(M.tags))) + return data + +/obj/machinery/computer/compsci_mission_selector/ui_act(action, list/params) + if(..()) + return + + switch(action) + if("start_mission") + var/mission_id = params["mission_id"] + GLOB.compsci_vr.start_mission(mission_id, usr) + if("join_ongoing") + GLOB.compsci_vr.join_ongoing(usr) + + +/obj/machinery/compsci_reciever + name = "bluespace item transmuter" + desc = "Use this to send artifacts back ot the station" + icon = 'icons/obj/machines/telecomms.dmi' + icon_state = "transmuter" + layer = BELOW_OBJ_LAYER + density = TRUE + pass_flags = PASSTABLE + +/obj/machinery/compsci_reciever/Initialize(mapload) + . = ..() + var/turf/T = get_turf(src) + if(is_station_level(T.z)) + if(!GLOB.compsci_vr_mission_reciever) + GLOB.compsci_vr_mission_reciever = src + name = "bluespace item reciever" + desc = "Used to recieve artifacts from remote exploration parties." + +/obj/machinery/compsci_reciever/Destroy() + . = ..() + if(GLOB.compsci_vr_mission_reciever == src) + GLOB.compsci_vr_mission_reciever = null + if(GLOB.last_used_transmuter == src) + GLOB.last_used_transmuter = null + +/obj/machinery/compsci_reciever/attackby(obj/item/I, mob/living/user, params) + . = ..() + + if(GLOB.compsci_vr_mission_reciever == src && istype(I, /obj/item/disk/puzzle)) + if(GLOB.last_used_transmuter) + var/obj/machinery/compsci_reciever/CR = GLOB.last_used_transmuter + I.forceMove(CR.drop_location()) + GLOB.last_used_transmuter = null + return TRUE + return FALSE + + + if(GLOB.compsci_vr.current_mission && istype(I, GLOB.compsci_vr.current_mission.completion_item)) + var/obj/machinery/compsci_reciever/station_machine = GLOB.compsci_vr_mission_reciever + I.forceMove(station_machine.drop_location()) + if(GLOB.compsci_vr.current_mission.delete_completion_item) + qdel(I) + GLOB.compsci_vr.complete_mission() + to_chat(user, span_notice("Successfully transferred artifact. Now reverting to reality..")) + qdel(user) + return TRUE + + if(istype(I, /obj/item/disk/puzzle)) + var/obj/machinery/compsci_reciever/station_machine = GLOB.compsci_vr_mission_reciever + I.forceMove(station_machine.drop_location()) + to_chat(user, span_notice("Successfully transferred disk.")) + GLOB.last_used_transmuter = src + return TRUE diff --git a/code/modules/VR/vr_compsci_artifacts.dm b/code/modules/VR/vr_compsci_artifacts.dm new file mode 100644 index 000000000000..e359ca589864 --- /dev/null +++ b/code/modules/VR/vr_compsci_artifacts.dm @@ -0,0 +1,4 @@ +/obj/item/vr_artifact + name = "strange object" + desc = "What mysteries could this hold?" + icon = 'icons/obj/assemblies.dmi' diff --git a/code/modules/VR/vr_compsci_missions.dm b/code/modules/VR/vr_compsci_missions.dm new file mode 100644 index 000000000000..4481f5b8dc31 --- /dev/null +++ b/code/modules/VR/vr_compsci_missions.dm @@ -0,0 +1,70 @@ +#define VR_SPAWNER(_id, _outfit) \ + /obj/effect/landmark/vr_spawn/vr_mission/##_id { \ + id = #_id; \ + vr_outfit = #_outfit; \ + }; \ + + +GLOBAL_LIST_EMPTY(compsci_flags) + +#define MINE_FLAG "mine" + +/datum/compsci_mission + var/name + var/desc + var/id + var/completion_item + var/tags + + var/delete_completion_item = FALSE + +/datum/compsci_mission/proc/complete() + return + +/datum/outfit/vr/mission + + +/obj/effect/landmark/vr_spawn/vr_mission + var/id = "debug_mission" + vr_outfit = /datum/outfit/vr/mission + +/obj/effect/landmark/vr_spawn/vr_mission/Initialize(mapload) + . = ..() + LAZYADD(GLOB.compsci_mission_markers[id], src) + LAZYREMOVE(GLOB.vr_spawnpoints[vr_category], src) + +/obj/effect/landmark/vr_spawn/vr_mission/Destroy() + LAZYREMOVE(GLOB.compsci_mission_markers[id], src) + return ..() + +//ACTUAL MISSIONS START HERE + + +/datum/compsci_mission/scientist_raid + name = "Unknown Small Research Station" + desc = "A recurring distress beacon has been detected from a nearby unidentified research station." + id = "scientist_raid" + completion_item = /obj/item/ai_cpu/organic + +VR_SPAWNER(scientist_raid, /datum/outfit/vr/mission) + +/datum/compsci_mission/combat_robot_factory + name = "Abandoned Robot Factory" + desc = "The records for an old abandoned robot factory have been lost. You've been sent to remake the report." + id = "combat_robot_factory" + completion_item = /obj/item/ai_cpu/self_aware + +VR_SPAWNER(combat_robot_factory, /datum/outfit/vr/mission) + +/datum/compsci_mission/abandoned_mine + name = "Abandoned Mine" + desc = "The records for an old abandoned robot factory have been lost. You've been sent to remake the report." + id = "abandoned_mine" + completion_item = /obj/item/paper/fluff/awaymissions/mine_coordinates + delete_completion_item = TRUE + +/datum/compsci_mission/abandoned_mine/complete() + . = ..() + GLOB.compsci_flags[MINE_FLAG] = TRUE + +VR_SPAWNER(abandoned_mine, /datum/outfit/vr/mission) diff --git a/code/modules/VR/vr_human.dm b/code/modules/VR/vr_human.dm index 855d615d284a..719a676498a3 100644 --- a/code/modules/VR/vr_human.dm +++ b/code/modules/VR/vr_human.dm @@ -19,6 +19,8 @@ /mob/living/carbon/human/virtual_reality/Destroy() revert_to_reality() + for(var/obj/item/I in get_all_contents()) + dropItemToGround(I, TRUE, TRUE) return ..() /mob/living/carbon/human/virtual_reality/Life(seconds_per_tick = SSMOBS_DT, times_fired) @@ -42,7 +44,12 @@ /mob/living/carbon/human/virtual_reality/proc/check_area() var/area/check = get_area(src) - if(!check || !istype(check, /area/awaymission/vr)) + if(!check) + return + if(!istype(check, /area/awaymission/vr)) + to_chat(src, span_userdanger("It is unwise to attempt to break Virtual Reality.")) + playsound(src, 'sound/effects/supermatter.ogg', 50, 1) + dust() return var/area/awaymission/vr/A = check if(A.death) @@ -65,6 +72,7 @@ if(vr_sleeper.you_die_in_the_game_you_die_for_real) to_chat(real_mind, span_warning("You feel everything fading away...")) real_mind.current.death(0) + if(deathchecks && vr_sleeper) vr_sleeper.vr_human = null vr_sleeper = null @@ -84,3 +92,12 @@ VR.revert_to_reality(FALSE) else Remove(owner) + + +//Overwritten to ensure we don't get blocked by secret level checks +/mob/living/carbon/human/virtual_reality/forceMove(atom/destination) + . = FALSE + if(destination) + . = doMove(destination) + else + CRASH("No valid destination passed into forceMove") diff --git a/code/modules/VR/vr_netmin.dm b/code/modules/VR/vr_netmin.dm new file mode 100644 index 000000000000..411dd20bd66c --- /dev/null +++ b/code/modules/VR/vr_netmin.dm @@ -0,0 +1,32 @@ +/obj/machinery/vr_sleeper/netmin + desc = "A sleeper modified to alter the subconscious state of the user, allowing them to visit virtual worlds. This one has been modifed to allow the occupant to control remote exploration robots." + + +/obj/machinery/vr_sleeper/netmin/emag_act(mob/user) + if(!GLOB.compsci_vr.emagged) + GLOB.compsci_vr.emag() + +/obj/machinery/vr_sleeper/netmin/get_vr_spawnpoint() //proc so it can be overridden for team games or something + return safepick(GLOB.vr_spawnpoints[vr_category]) + + +/obj/machinery/vr_sleeper/netmin/ui_act(action, params) + if(action == "vr_connect") + if(!GLOB.compsci_vr.can_join(usr)) + to_chat(usr, span_warning("Someone else is already connected!")) + return + . = ..() + +/obj/machinery/vr_sleeper/netmin/synth_only + name = "virtual reality endpoint" + desc = "A sleeper modified to alter the subconscious state of the user, allowing them to visit virtual worlds. This one has been modifed to allow only a synthetic to control remote exploration robots." + +/obj/machinery/vr_sleeper/netmin/synth_only/ui_act(action, params) + if(action == "vr_connect") + if(!is_synth(usr)) + to_chat(usr, span_warning("Only synthetics may use this endpoint!")) + return + if(!GLOB.compsci_vr.can_join(usr)) + to_chat(usr, span_warning("Someone else is already connected!")) + return + . = ..() diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm index af38ac4bd161..5516beaadeed 100644 --- a/code/modules/VR/vr_sleeper.dm +++ b/code/modules/VR/vr_sleeper.dm @@ -86,8 +86,9 @@ close_machine(target) /obj/machinery/vr_sleeper/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "vr_sleeper", "VR Sleeper") + ui = new(user, src, "VRSleeper", name) ui.open() /obj/machinery/vr_sleeper/ui_act(action, params) @@ -151,7 +152,6 @@ status = "Barely Conscious" data["vr_avatar"] = list("name" = vr_human.name, "status" = status, "health" = vr_human.health, "maxhealth" = vr_human.maxHealth) data["toggle_open"] = state_open - data["emagged"] = you_die_in_the_game_you_die_for_real data["isoccupant"] = (user == occupant) return data diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 89599ce142d2..dec80db6a818 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -1139,3 +1139,11 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) return if(tgui_alert(usr, "Are you absolutely sure you want to reload the configuration from the default path on the disk, wiping any in-round modificatoins?", "Really reset?", list("No", "Yes")) == "Yes") config.admin_reload() + +/client/proc/debug_ai_networks() + set category = "Misc.Server Debug" + set name = "Debug AI Networks" + set desc = "Displays a list of all AI networks to ALL admins" + if(!check_rights(R_DEBUG)) + return + _debug_ai_networks() diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index f7d256dd3e59..2cba86076e39 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -76,6 +76,7 @@ GLOBAL_LIST_INIT(admin_verbs_debug_all, list( /client/proc/cmd_display_init_log, /client/proc/cmd_display_overlay_log, /client/proc/reload_configuration, + /client/proc/debug_ai_networks, /datum/admins/proc/create_or_modify_area, /client/proc/debug_typeof, // Yogs -- Adds a debug verb for getting the subtypes of something /client/proc/toggle_cdn, diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index 51de65512872..508c4611361f 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -206,6 +206,8 @@ return FALSE if(!can_be_owned(candidate.mind)) return FALSE + if(is_synth(candidate)) + return FALSE var/mob/living/carbon/C = candidate //Check to see if the potential rev is implanted if(!istype(C)) //Can't convert simple animals return FALSE diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 22399760526a..4188543ddc8d 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -147,6 +147,9 @@ desc = "An evil-looking remote controller for a crematorium." /obj/item/assembly/control/crematorium/activate() + if(is_synth(usr)) + to_chat(usr, span_warning("You don't want to use this!")) + return if(cooldown) return cooldown = TRUE diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 2ac8f3b83d8d..43f1627d76ed 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -117,6 +117,8 @@ return typecache_filter_list(target_loc.get_all_contents(), GLOB.typecache_living) /obj/item/assembly/flash/proc/try_use_flash(mob/user = null) + if(user && !synth_check(user, SYNTH_RESTRICTED_ITEM)) + return if(user && HAS_TRAIT(user, TRAIT_NO_STUN_WEAPONS)) to_chat(user, span_warning("You can't seem to remember how this works!")) return FALSE @@ -294,6 +296,8 @@ addtimer(CALLBACK(src, PROC_REF(cooldown)), flashcd * 2) /obj/item/assembly/flash/armimplant/try_use_flash(mob/user = null) + if(user && !synth_check(user, SYNTH_RESTRICTED_ITEM)) + return if(user && HAS_TRAIT(user, TRAIT_NO_STUN_WEAPONS)) to_chat(user, span_warning("You can't seem to remember how this works!")) return FALSE diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index fa93a131ed72..0a482b4d1c3e 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -855,6 +855,18 @@ return ..() +/obj/machinery/airalarm/attack_ai(mob/user) + if(!isAI(user)) + return ..() + + var/mob/living/silicon/ai/AI = user + if(AI.has_subcontroller_connection(get_area(src))) + return ..() + + to_chat(AI, span_warning("No connection to subcontroller detected. Polling APC...")) + if(do_after(AI, 1 SECONDS, src, IGNORE_USER_LOC_CHANGE)) + return ..() + /obj/machinery/airalarm/AltClick(mob/user) ..() if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc)) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index bad2530e6475..63cf55779af0 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -230,6 +230,11 @@ GLOBAL_LIST_EMPTY(pipeimages) if(!can_unwrench(user)) return ..() + //var/turf/T = get_turf(src) + /*if (level==1 && isturf(T) && T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) + to_chat(user, span_warning("You must remove the plating first!")) + return TRUE*/ + var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/env_air = loc.return_air() add_fingerprint(user) @@ -340,6 +345,8 @@ GLOBAL_LIST_EMPTY(pipeimages) add_atom_colour(obj_color, FIXED_COLOUR_PRIORITY) pipe_color = obj_color set_piping_layer(set_layer) + //var/turf/T = get_turf(src) + AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) atmos_init() var/list/nodes = pipeline_expansion() for(var/obj/machinery/atmospherics/A in nodes) diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index 677e7c334a30..6ac20aa51b30 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -105,6 +105,8 @@ /obj/machinery/atmospherics/pipe/layer_manifold/atmos_init() normalize_cardinal_directions() findAllConnections() + //var/turf/T = loc // hide if turf is not intact + //hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) /obj/machinery/atmospherics/pipe/layer_manifold/set_piping_layer() piping_layer = PIPING_LAYER_DEFAULT diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 76a5c6f96f65..e2c4329286f1 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -312,7 +312,7 @@ /obj/effect/mob_spawn/human/corpse/cargo_tech name = "Cargo Tech" - outfit = /datum/outfit/job/cargo_tech + outfit = /datum/outfit/job/cargo_tech/no_pda /obj/effect/mob_spawn/human/cook name = "Cook" diff --git a/code/modules/awaymissions/mission_code/netmin/_puzzles.dm b/code/modules/awaymissions/mission_code/netmin/_puzzles.dm new file mode 100644 index 000000000000..1aaf78135023 --- /dev/null +++ b/code/modules/awaymissions/mission_code/netmin/_puzzles.dm @@ -0,0 +1,184 @@ +GLOBAL_VAR_INIT(decrypted_puzzle_disks, 0) +GLOBAL_LIST_EMPTY(button_puzzles) +GLOBAL_LIST_EMPTY(rock_paper_scissors_puzzle_answers) + +/proc/rock_paper_scissors_puzzle() + var/player_list = GLOB.player_list.Copy() + + for(var/mob/unsorted_players in player_list) + if(unsorted_players.job == "Network Admin") + player_list -= unsorted_players + + var/players_to_ask = 3 + if(length(player_list) < players_to_ask) + players_to_ask = length(player_list) + + while(players_to_ask > 0) + var/mob/player = pick_n_take(player_list) + var/answer = tgui_input_list(player, "You've been selected for a quick game of rock-paper-scissors. Unfortunately we cannot tell you if you win.", "Rock Paper Scissors", list("Rock", "Paper", "Scissors")) + if(!answer) + GLOB.rock_paper_scissors_puzzle_answers += pick("Rock", "Paper", "Scissors") + else + GLOB.rock_paper_scissors_puzzle_answers += answer + players_to_ask-- + +/obj/item/disk/puzzle + name = "encrypted floppy drive" + desc = "Likely contains the access key to a locked door." + icon = 'icons/obj/card.dmi' + icon_state = "data_3" + item_state = "card-id" + lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' + var/decrypted = FALSE + var/id + var/decryption_progress = 0 + var/detail_color = COLOR_ASSEMBLY_BLUE + +/obj/item/disk/puzzle/examine(mob/user) + . = ..() + . += "The disk seems to be [decrypted ? "decrypted" : "encrypted"]." + +/obj/item/disk/puzzle/Initialize(mapload) + .=..() + update_icon() + +/obj/item/disk/puzzle/update_overlays() + . = ..() + if(detail_color == COLOR_FLOORTILE_GRAY) + return + var/mutable_appearance/detail_overlay = mutable_appearance('icons/obj/card.dmi', "[icon_state]-color") + detail_overlay.color = detail_color + add_overlay(detail_overlay) + + +/datum/button_puzzle_holder + var/id + var/list/buttons = list() + var/list/doors = list() + var/list/papers = list() + var/index = 1 + + +/datum/button_puzzle_holder/New() + addtimer(CALLBACK(src, PROC_REF(generate_order)), 5 SECONDS) + +/datum/button_puzzle_holder/proc/generate_order() + shuffle_inplace(buttons) + + var/number = 1 + for(var/obj/item/paper/fluff/awaymissions/button_puzzle/paper in papers) + var/obj/machinery/button_puzzle/button = buttons[number] + paper.generate(number, button.name) + number++ + +/datum/button_puzzle_holder/proc/reset() + index = 1 + +/datum/button_puzzle_holder/proc/button_pressed(obj/machinery/button_puzzle/button) + if(index > buttons.len) + open_doors() + return + + if(buttons[index] == button) + index++ + else + reset() + + if(index > buttons.len) + open_doors() + return + +/datum/button_puzzle_holder/proc/open_doors() + for(var/obj/machinery/door/password/button_puzzle/door in doors) + door.open() + +/obj/item/paper/fluff/awaymissions/button_puzzle + name = "MEMORY DUMP" + info = "MEMORY DUMPED. CONTENTS:
49EA+g4cF" + var/id + +/obj/item/paper/fluff/awaymissions/button_puzzle/proc/generate(number, order) + info = "MEMORY DUMPED. CONTENTS:
49EA+[number] - [order]g4cF" + +/obj/item/paper/fluff/awaymissions/button_puzzle/Initialize(mapload) + . = ..() + var/found_datum = FALSE + for(var/datum/button_puzzle_holder/holder in GLOB.button_puzzles) + if(holder.id == id) + holder.papers += src + found_datum = TRUE + break + if(!found_datum) + var/datum/button_puzzle_holder/H = new() + H.id = id + H.papers += src + GLOB.button_puzzles += H + + +/obj/machinery/button_puzzle + name = "button" + desc = "A remote control switch." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "doorctrl" + var/skin = "doorctrl" + var/id = null + var/order + + var/datum/button_puzzle_holder/manager + + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/machinery/button_puzzle/Initialize(mapload) + . = ..() + + name = "[initial(name)] - [random_nukecode(4)]" + if(id) + var/found_datum = FALSE + for(var/datum/button_puzzle_holder/holder in GLOB.button_puzzles) + if(holder.id == id) + holder.buttons += src + manager = holder + found_datum = TRUE + break + + if(!found_datum) + var/datum/button_puzzle_holder/H = new() + H.id = id + H.buttons += src + manager = H + GLOB.button_puzzles += H + + +/obj/machinery/button_puzzle/update_icon_state() + . = ..() + if(panel_open) + icon_state = "button-open" + else + if(stat & (NOPOWER|BROKEN)) + icon_state = "[skin]-p" + else + icon_state = skin + + +/obj/machinery/button_puzzle/attackby(obj/item/W, mob/user, params) + if(user.a_intent != INTENT_HARM && !(W.item_flags & NOBLUDGEON)) + return attack_hand(user) + else + return ..() + + +/obj/machinery/button_puzzle/attack_hand(mob/user) + . = ..() + if(.) + return + add_fingerprint(user) + play_click_sound("button") + + + use_power(5) + icon_state = "[skin]1" + + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_icon)), 15) + manager.button_pressed(src) + diff --git a/code/modules/awaymissions/mission_code/netmin/abandoned_mine.dm b/code/modules/awaymissions/mission_code/netmin/abandoned_mine.dm new file mode 100644 index 000000000000..658f5df5354e --- /dev/null +++ b/code/modules/awaymissions/mission_code/netmin/abandoned_mine.dm @@ -0,0 +1,55 @@ +/area/awaymission/vr/abandoned_mine + name = "Abandoned Mine" + icon_state = "awaycontent5" + pacifist = FALSE + + +/obj/item/paper/pamphlet/away/safety_pamphlet + name = "safety instructions" + icon_state = "pamphlet" + info = {"Welcome aboard Mining Installation 13 - "Paradiso", the largest producer of high-quality iron in this sector!
We're glad to have you onboard, but before you can start work there's a few important safety instructions we have to inform you about:
+ 1. If you see any native lifeforms, avoid them and contact security
+ 2. Any missing tools assigned to you will be docked from your pay.
+ 3. See the sheet in the crew quarters for service prices.
+ 4. Due to our distance from the nearest law enforcement station our security staff have had their powers expanded.
+ 5. You're legally obligated to stay for the full duration of your contract.
+ 6. You're liable for any funeral costs you might incur.
+ 7. Do NOT, under any circumstance, enter the command centre without permission.
+ "} + + +/obj/item/paper/fluff/awaymissions/production_numbers + name = "production report" + info = {"Production Report
+ Last Sol cycle we exported 750.000 tons of iron ore, up 17% YoY.
+ Degrading the quality of food for the works has earned us a 7% decrease in operating costs.
+ Shipment destinations:
+ Space Station 13: 125.000 tons
+ REDACTED Facility: 500.000 tons
+ Central Command: 125.000 tons
+ "} + +/obj/item/paper/fluff/awaymissions/mine_robot_order + name = "requisition order" + info = {"Requisition Order
+ We hereby confirm your order of 75 Model 3 mining robots.
+ Upon their arrival we urge you to let the crew go.
+ There will be no room on the shuttle for passenger transport.
+ You know what you have to do.
+ "} + +/obj/item/paper/fluff/awaymissions/mine_contract + name = "work contract" + info = {"Employment Contract
+ Employee: William Young.
+ Installation: "Paradiso".
+ Pay: 500 credits per cycle.
+ Agreed upon contract duration: 3 solar cycles. (1 cycle = 45 Sol years)
+ You see a small note scribbled at the bottom:


+ Those BASTARDS! I agreed to sign up for 3 years, but those bean counters were measuring in LOCAL solar cycles!
+ I've talked to some of the others, and we're going to overthrow these tyrants!
+ "} + +/obj/item/paper/fluff/awaymissions/mine_coordinates + name = "coordinate readout" + info = {"Coordinates of REDACTED facility attached for supply purposes. Return to transmuter to upload coordinates and access further missions."} diff --git a/code/modules/awaymissions/mission_code/netmin/combat_robot_factory.dm b/code/modules/awaymissions/mission_code/netmin/combat_robot_factory.dm new file mode 100644 index 000000000000..dd59d5c8669c --- /dev/null +++ b/code/modules/awaymissions/mission_code/netmin/combat_robot_factory.dm @@ -0,0 +1,119 @@ +/area/awaymission/vr/combat_robot_factory + name = "Abandoned Robot Factory" + icon_state = "awaycontent4" + pacifist = FALSE + +/obj/item/paper/fluff/awaymissions/robot_factory/shipment_details + name = "Shipment Details" + info = "Shipment Details:
500x Agricultural Robots @ 1999.95 cr
200x Construction Robots @ 2499.95 cr

Total: 1,499,965 cr

Destination:
Gamnar Military Base" + +/obj/item/paper/fluff/awaymissions/robot_factory/advanced_model + name = "Personal Research" + info = "I've crunched the numbers on the capabilities of the servors in these robots. I'm pretty certain they could handle additional armor plating, and maybe even a more powerful gun. I'll tell the boss after I've finished my prototypes." + +/obj/item/paper/fluff/awaymissions/robot_factory/benny + name = "diary entry #631" + info = "I should really stop naming all my passwords after you, Benny. The boss says it isn't secure, wouldn't want the workers getting in to the emergency supplies." + +/obj/item/paper/fluff/awaymissions/robot_factory/spider + name = "Beware: Spider" + info = "Stop leaving your leftovers out! It's attracting bugs, and with bugs comes spiders. We've called an exterminator but the breakroom is off-limits until then." + +/obj/item/paper/fluff/awaymissions/robot_factory/classified + name = "Research Notes" + info = {"The biggest limiter to the efficiency of our robots have always been the rigid programming. The Board has ordered me to explore if it's feasible to use human minds instead of programming. \ + If possible they should make a formidable addition as a commander type robot.\ + We'd have to wipe their memories or I'm sure they wouldn't be happy..."} + +/obj/item/paper/crumpled/bloody/fluff/awaymissions/robot_factory/control_man + name = "paper" + info = {"Something went horribly wrong with the latest experiment... I'm not sure how to explain, but it's *alive* and it's *angry*. The higher ups will have my head for this if I don't get killed in action... + I'll send them a message to halt the latest shipment incase it was contaminated, and after that..."} + +/obj/item/paper/fluff/awaymissions/robot_factory/control_message + name = "message log" + info = {"Sending message with title 'SHIPMENT CONTAMINATION' failed. Please validate that communication dishes are working and try again."} + +/obj/item/paper/fluff/awaymissions/robot_factory/diagnostic + name = "diagnostic report" + info = {"Main servos offline. Main processor failing. Sending diagnostic data to master controller at location \[REDACTED\]."} + + +/obj/item/disk/holodisk/combat_robot/introduction + preset_image_type = /datum/preset_holoimage/cc_official + preset_record_text = {" + NAME HR Representative + DELAY 30 + SAY Welcome aboard your new home for the next 12 months! + DELAY 30 + SAY Your main duties will consist of refilling machinery, packing boxes, and most importantly.. + DELAY 45 + SAY Not asking any questions. + DELAY 30 + SAY In addition, please refrain from bothering the Corporate Liason stationed here unless he specifically asks for your help. + DELAY 45"} + + +/obj/item/disk/holodisk/combat_robot/classified + preset_image_type = /datum/preset_holoimage/cc_official + preset_record_text = {" + NAME Mr. Nakada + DELAY 30 + SAY Research log number 63 + DELAY 45 + SAY Further attempts to artifically grow and integrate a human host have failed. + DELAY 60 + SAY Attempting one further growth cycle before returning to Central Command + DELAY 60 + SAY Using the local supervisor as the neural template. + DELAY 60 + SAY Final report is estimated to be completed within the next two weeks. + DELAY 45"} + +/obj/item/disk/holodisk/combat_robot/experiment + preset_image_type = /datum/preset_holoimage/researcher + preset_record_text = {" + NAME Doctor Williams + DELAY 30 + SAY Beginning experiment number 31 + DELAY 60 + SAY Injecting solution... + DELAY 45 + SAY Subject appears to be displaying decreased blood pressure. Subject having difficulty maintaining consciousness. + DELAY 60 + SAY Neural activity appears incompatible with capture device. + DELAY 50 + SAY Subject has expired. End log for experiment number 31. + DELAY 45"} + +/obj/item/disk/holodisk/combat_robot/factory_floor + preset_image_type = /datum/preset_holoimage/nanotrasenprivatesecurity + preset_record_text = {" + NAME Officer Rymes + DELAY 30 + SAY After last nights incident I believe we should reiterate the corporate policy on rioting. + DELAY 45 + SAY In case of any kind of illegal striking or insurrection by the stationed workers you are to close the blast door to the factory floor. + DELAY 75 + SAY After the situation is under control and production ready to resume you should unlock the door. + DELAY 45 + SAY For the forgetful amongst you, the password is 'Zandar' after our dear CEO. + DELAY 45 + SAY Don't forget that the door is voice activated. + DELAY 45"} + +/obj/item/ai_cpu/self_aware + name = "semi self-aware neural processing unit" + desc = "The remains of the neuron interfacing chip found onboard a redacted robot production facility. The remaining organic material still seems alive." + + icon = 'icons/obj/surgery.dmi' + icon_state = "brain-x" + + speed = 20 + base_power_usage = 2 * AI_CPU_BASE_POWER_USAGE + + minimum_max_power = 1.1 + maximum_max_power = 2.8 + + minimum_growth = 1 + maximum_growth = 4.5 diff --git a/code/modules/awaymissions/mission_code/netmin/scientist_raid.dm b/code/modules/awaymissions/mission_code/netmin/scientist_raid.dm new file mode 100644 index 000000000000..c5998310867b --- /dev/null +++ b/code/modules/awaymissions/mission_code/netmin/scientist_raid.dm @@ -0,0 +1,49 @@ +/area/awaymission/vr/scientist_raid + name = "Small Abandoned Station" + icon_state = "awaycontent3" + +/obj/item/paper/fluff/awaymissions/scientist_raid/report1 + name = "Adaptive Neural Networks - Research Report" + info = "While these types of networks seem to be well-suited for our needs, the current processing technology doesn't seem able to simulate them quickly enough. More research is needed.." + +/obj/item/paper/fluff/awaymissions/scientist_raid/report2 + name = "Captive Organic Neurons - Research Report" + info = "A new scientific article has piqued my interest. A Cybersun Industries biologist seems to have extracted useable responses from lab-grown neurons. Although the experiment was small-scale it seems promising.." + +/obj/item/paper/fluff/awaymissions/scientist_raid/report3 + name = "Personnel Requisition Order" + info = "I require additional low-level personnel to maintain the station. Primarily janitors and low-level engineers. Due to the distance to the station they should preferably have minimal family and social contacts." + +/obj/item/paper/fluff/awaymissions/scientist_raid/report4 + name = "Deep Tissue Neuron Control" + info = "Further research reveals that using invasive surgical procedures it is possible to influence and digitally mirror the actions of individual neurons. Preliminary results show a 1251.83x performance improvement compared to traditional neural networks." + +/obj/item/paper/crumpled/bloody/fluff/awaymissions/scientist_raid/report5 + name = "hastily scribbled note" + info = "Forgive me for what I have done... Corporate goons are knocking down the door to my room, it seems they've caught on to my... unique ways of researching. I've hidden my last prototype in my safe. To anyone reading this, please carry on my research. The code to the safe is 7295" + +/obj/item/ai_cpu/organic + name = "experimental organic neural processing unit" + desc = "A half-machine half-human chip built by a mad scientist. Capable of processing immense amounts of data, at the expense of the sacrifice of the sanity of the consciousness contained within.." + icon_state = "cpuboard_adv" + + speed = 12 + base_power_usage = 4 * AI_CPU_BASE_POWER_USAGE + + minimum_max_power = 1.1 + maximum_max_power = 2.6 + + minimum_growth = 1 + maximum_growth = 4 + +/obj/item/storage/secure/safe/scientist_raid + name = "secure safe" + +/obj/item/storage/secure/safe/scientist_raid/Initialize(mapload) + . = ..() + l_code = "7295" + l_set = TRUE + new /obj/item/ai_cpu/organic(src) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, TRUE) + cut_overlays() + diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 1dd5233b9488..fe49200ba1ee 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -360,6 +360,9 @@ BLIND // can't see anything return if (!can_use(M)) return + if(is_synth(M)) + to_chat(usr, "You're unable to use suit sensors as a synthetic!") + return if(src.has_sensor == LOCKED_SENSORS) to_chat(usr, "The controls are locked.") return 0 diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 575b81e4dce0..b7adf9f270f5 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -544,3 +544,4 @@ w_class = WEIGHT_CLASS_BULKY // Does not cover additional limbs like vest does plating = K + diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm index 63e111ae72ea..1d81c2db9204 100644 --- a/code/modules/clothing/outfits/vr.dm +++ b/code/modules/clothing/outfits/vr.dm @@ -1,9 +1,8 @@ /datum/outfit/vr name = "Basic VR" - uniform = /obj/item/clothing/under/color/random + uniform = /obj/item/clothing/under/rank/cargotech shoes = /obj/item/clothing/shoes/sneakers/black - ears = /obj/item/radio/headset - id = /obj/item/card/id + id = /obj/item/card/id/no_bank /datum/outfit/vr/pre_equip(mob/living/carbon/human/H) H.dna.species.before_equip_job(null, H) @@ -12,6 +11,8 @@ var/obj/item/card/id/id = H.wear_id if (istype(id)) id.access |= get_all_accesses() + if(isplasmaman(H)) //sorry plasma people + H.set_species(/datum/species/human) /datum/outfit/vr/syndicate name = "Syndicate VR Operative - Basic" diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index e26d93aef5e0..4b27e2ae28cb 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -1251,3 +1251,57 @@ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF slowdown = 0 + +/obj/item/clothing/head/helmet/space/hardsuit/synth + name = "\improper synthetic worksuit helmet" + desc = "An integrated helmet that provides some level of resistance, to assist in hostile environments." + icon = 'icons/mob/clothing/head/head.dmi' + icon_state = "hardsuit0-synth" + item_state = "centcom" + w_class = WEIGHT_CLASS_BULKY + clothing_flags = THICKMATERIAL | STOPSPRESSUREDAMAGE + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT + armor = list(MELEE = 10, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 15, BIO = 15, RAD = 100, FIRE = 10, ACID = 15) + hardsuit_type = "synth" + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | INDESTRUCTIBLE | FREEZE_PROOF + +/obj/item/clothing/head/helmet/space/hardsuit/synth/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, SYNTHETIC_TRAIT) + +/obj/item/clothing/suit/space/hardsuit/synth + name = "\improper synthetic worksuit" + desc = "An integrated suit that provides some level of resistance, to assist in hostile environments." + icon = 'icons/mob/clothing/suit/suit.dmi' + icon_state = "synth_suit" + item_state = "centcom" + w_class = WEIGHT_CLASS_BULKY + body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + clothing_flags = STOPSPRESSUREDAMAGE | STOPSPRESSUREDAMAGE + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT + armor = list(MELEE = 30, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 25, BIO = 25, RAD = 100, FIRE = 10, ACID = 25) + var/evil = FALSE + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/synth + slowdown = 0 + + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | INDESTRUCTIBLE | FREEZE_PROOF + +/obj/item/clothing/suit/space/hardsuit/synth/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, SYNTHETIC_TRAIT) + +/obj/item/clothing/suit/space/hardsuit/synth/update_icon_state() + . = ..() + if(evil) + icon_state = "synth_suit_evil" + else + icon_state = "synth_suit" + + var/mob/living/carbon/human/user = loc + if(user && istype(user)) + user.update_inv_wear_suit() diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 8b39d4c86061..5a7b1e1ddeae 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -539,3 +539,4 @@ slowdown_set = 0.4 // Very slow armor = list(MELEE = 55, BULLET = 60, LASER = 60, ENERGY = 40, BOMB = 40, BIO = 0, RAD = 0, FIRE = 65, ACID = 75, WOUND = 50) //Walking tank partial_coverage = LEGS|ARMS + diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index d26178c6e029..45e265f8742e 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -109,6 +109,9 @@ attached_accessory.on_clothing_equip(src, user) if(attached_accessory.above_suit) H.update_inv_wear_suit() + if(is_synth(user) && has_sensor) + to_chat(user, span_notice("Suit sensors disabled due to non-compatible user.")) + sensor_mode = SENSOR_OFF /obj/item/clothing/under/dropped(mob/user) if(attached_accessory) diff --git a/code/modules/economy/account.dm b/code/modules/economy/account.dm index 508e998206e4..8755d6201bca 100644 --- a/code/modules/economy/account.dm +++ b/code/modules/economy/account.dm @@ -67,6 +67,8 @@ /datum/bank_account/proc/payday(amt_of_paychecks, free = FALSE) var/money_to_transfer = account_job.paycheck * amt_of_paychecks + if(!money_to_transfer) + return TRUE if(free) adjust_money(money_to_transfer) return TRUE diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 23052383fad8..9b922ed08a01 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -100,6 +100,9 @@ if(user.a_intent != INTENT_HARM || !isGlass) return ..() + if(!synth_check(user, SYNTH_ORGANIC_HARM)) + return + if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to harm [target]!")) return diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 46a4b70f6087..b9106bbb0e99 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -74,6 +74,10 @@ to_chat(user, span_notice("[src] cannot be used unless bolted to the ground.")) return + if(is_synth(user)) + to_chat(user, span_warning("You don't want to use this!")) + return + if(user.pulling && user.a_intent == INTENT_GRAB && isliving(user.pulling)) var/mob/living/L = user.pulling if(!iscarbon(L)) diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index 35b55d5f883f..5763ced37db0 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -18,6 +18,10 @@ #define HOLODECK_CD 25 #define HOLODECK_DMG_CD 500 +/// typecache for turfs that should be considered ok during floorchecks. +/// A linked turf being anything not in this typecache will cause the holodeck to perform an emergency shutdown. +GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf/open/floor/holofloor, /turf/closed))) + /obj/machinery/computer/holodeck name = "holodeck control console" desc = "A computer used to control a nearby holodeck." diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm index c0b8bd142596..fa9ece84f0a8 100644 --- a/code/modules/holodeck/turfs.dm +++ b/code/modules/holodeck/turfs.dm @@ -123,6 +123,8 @@ /turf/open/floor/holofloor/carpet/update_icon(updates=ALL) . = ..() + if(!.) + return FALSE if((updates & UPDATE_SMOOTHING) && overfloor_placed && smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) QUEUE_SMOOTH(src) diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index e8934128e90f..21a64c5c8903 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -410,7 +410,7 @@ "Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", // yogs start - Yog jobs "Research Director", "Scientist", "Roboticist", "Head of Security", "Warden", "Detective", "Security Officer", - "Network Admin", "Mining Medic", "Paramedic", "Psychiatrist", "Clerk", "Tourist", "Space Bartender", "Artist", "Brig Physician") + "Network Admin", "Mining Medic", "Paramedic", "Psychiatrist", "Clerk", "Tourist", "Space Bartender", "Artist", "Brig Physician", "Synthetic") // yogs end /// Gets all jobs with hud icons diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 9e1f55089ea2..09464ee928a4 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -96,6 +96,7 @@ /// Icons to be displayed in the orbit ui. Source: FontAwesome v5. var/orbit_icon + var/datum/species/forced_species /** * A list of job-specific areas to enable lights for if this job is present at roundstart, whenever minimal access is not in effect. * This will be combined with minimal_lightup_areas, so no need to duplicate entries. @@ -183,11 +184,16 @@ if(!H) return FALSE + + //This reads Command placement exceptions in code/controllers/configuration/entries/game_options to allow non-Humans in specified Command roles. If the combination of species and command role is invalid, default to Human. if(CONFIG_GET(keyed_list/job_species_whitelist)[type] && !splittext(CONFIG_GET(keyed_list/job_species_whitelist)[type], ",").Find(H.dna.species.id)) if(H.dna.species.id != "human") H.set_species(/datum/species/human) H.apply_pref_name(/datum/preference/name/backup_human, preference_source) + + if(forced_species) + H.set_species(forced_species) if(!visualsOnly) var/datum/bank_account/bank_account = new(H.real_name, src) @@ -356,15 +362,17 @@ B.bank_cards += C H.sec_hud_set_ID() - var/obj/item/modular_computer/PDA = new pda_type() - if(istype(PDA)) - PDA.InsertID(C) - H.equip_to_slot_if_possible(PDA, ITEM_SLOT_ID) + if(pda_type) + var/obj/item/modular_computer/PDA = new pda_type() + if(istype(PDA)) + PDA.InsertID(C) + H.equip_to_slot_if_possible(PDA, ITEM_SLOT_ID) - PDA.update_label() - PDA.update_appearance(UPDATE_ICON) - PDA.update_filters() - + PDA.update_label() + PDA.update_appearance(UPDATE_ICON) + PDA.update_filters() + else + H.equip_to_slot_if_possible(C, ITEM_SLOT_ID) else H.equip_to_slot_if_possible(C, ITEM_SLOT_ID) diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm index c2f33e9b666b..9df34178ac02 100644 --- a/code/modules/jobs/job_types/ai.dm +++ b/code/modules/jobs/job_types/ai.dm @@ -33,13 +33,13 @@ . = ..() var/mob/living/silicon/ai/AI = spawned - AI.relocate(TRUE) + AI.relocate(TRUE, TRUE) + + var/total_available_cpu = 1 - AI.ai_network.resources.total_cpu_assigned() + var/total_available_ram = AI.ai_network.resources.total_ram() - AI.ai_network.resources.total_ram_assigned() - var/total_available_cpu = 1 - GLOB.ai_os.total_cpu_assigned() - var/total_available_ram = GLOB.ai_os.total_ram - GLOB.ai_os.total_ram_assigned() - - GLOB.ai_os.set_cpu(AI, total_available_cpu) - GLOB.ai_os.add_ram(AI, total_available_ram) + AI.ai_network.resources.set_cpu(AI, total_available_cpu) + AI.ai_network.resources.add_ram(AI, total_available_ram) AI.apply_pref_name(/datum/preference/name/ai, M.client) //If this runtimes oh well jobcode is fucked. AI.set_core_display_icon(null, M.client) diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index ab2a5973a9bd..39eac3ceebc3 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -49,3 +49,7 @@ uniform_skirt = /obj/item/clothing/under/rank/cargotech/skirt l_hand = /obj/item/export_scanner +/datum/outfit/job/cargo_tech/no_pda + name = "Cargo Technician (No PDA)" + + pda_type = null diff --git a/code/modules/jobs/job_types/synthetic.dm b/code/modules/jobs/job_types/synthetic.dm new file mode 100644 index 000000000000..8d81d1107ef4 --- /dev/null +++ b/code/modules/jobs/job_types/synthetic.dm @@ -0,0 +1,105 @@ +GLOBAL_LIST_INIT(synthetic_base_access, list(ACCESS_MAINT_TUNNELS, ACCESS_KITCHEN, ACCESS_CREMATORIUM, ACCESS_JANITOR, ACCESS_BAR, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_NETWORK, ACCESS_MINISAT, ACCESS_TCOMSAT, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_EVA, ACCESS_CREMATORIUM, ACCESS_HYDROPONICS, ACCESS_MANUFACTURING, ACCESS_THEATRE, ACCESS_TCOM_ADMIN)) +GLOBAL_LIST_EMPTY(synthetic_added_access) +/datum/job/synthetic + title = "Synthetic" + description = "Watch over the crew, carry out mundane tasks that nobody else want to. Do no harm." + orbit_icon = "eye" + auto_deadmin_role_flags = DEADMIN_POSITION_SILICON|DEADMIN_POSITION_CRITICAL + department_head = list("AI") + faction = "Station" + total_positions = 0 + spawn_positions = 1 + supervisors = "the AI" + minimal_player_age = 30 + exp_requirements = 900 + exp_type = EXP_TYPE_CREW + exp_type_department = EXP_TYPE_COMMAND + + outfit = /datum/outfit/job/synthetic + + added_access = list() + base_access = list() + paycheck = 0 + paycheck_department = ACCOUNT_SCI + mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) + + display_order = JOB_DISPLAY_ORDER_SYNTHETIC + + departments_list = list( + /datum/job_department/silicon, + ) + + + mail_goodies = list() + + smells_like = "calculated machinery" + alt_titles = list() + + forced_species = /datum/species/wy_synth + +/datum/job/synthetic/after_spawn(mob/living/H, mob/M, latejoin = FALSE) + . = ..() + + addtimer(CALLBACK(src, PROC_REF(synth_name_choose), H, M), 1 SECONDS) + H.remove_all_quirks() + +/datum/job/synthetic/proc/synth_name_choose(mob/living/H, mob/M) + var/newname = sanitize_name(reject_bad_text(stripped_input(M, "Please input your name.", "Name change", H.real_name, MAX_NAME_LEN))) + + H.fully_replace_character_name(H.real_name, newname) + if(iscarbon(H)) //doing these two JUST to be sure you dont have edge cases of your DNA and mind not matching your new name, somehow + var/mob/living/carbon/C = H + if(C?.dna) + C?.dna?.real_name = newname + if(H?.mind) + H?.mind?.name = newname + + +/datum/job/synthetic/get_access() + return GLOB.synthetic_base_access + + +/datum/outfit/job/synthetic + name = "Synthetic" + + jobtype = /datum/job/synthetic + ears = /obj/item/radio/headset/headset_synthetic + + suit = /obj/item/clothing/suit/space/hardsuit/synth + + pda_type = null + id_type = /obj/item/card/id/synthetic + +/datum/outfit/job/synthetic/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(H.w_uniform) + var/obj/item/clothing/under/wearing = H.w_uniform + wearing.has_sensor = FALSE + + var/obj/machinery/ai/data_core/core + core = H.available_ai_cores(forced = TRUE) + if(core) + core.network.add_synth(H) + + + + + +/datum/outfit/job/synthetic/naked + name = "Synthetic (Naked)" + + uniform = null + ears = null + back = null + shoes = null + box = null + + preload = FALSE // These are used by the prefs ui, and also just kinda could use the extra help at roundstart + + backpack = null + satchel = null + duffelbag = null + + +/datum/outfit/job/synthetic/naked/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + return diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index e5a25d297f46..da100fd2c794 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -56,6 +56,7 @@ var/list/obj/machinery/atmospherics/atmos_machines = list() var/list/obj/structure/cable/cables = list() + var/list/obj/structure/ethernet_cable/ethernet_cables = list() var/list/atom/movable/movables = list() var/list/obj/docking_port/stationary/ports = list() var/list/area/areas = list() @@ -85,6 +86,9 @@ if(istype(movable_in_turf, /obj/structure/cable)) cables += movable_in_turf continue + if(istype(movable_in_turf, /obj/structure/ethernet_cable)) + ethernet_cables += movable_in_turf + continue if(istype(movable_in_turf, /obj/machinery/atmospherics)) atmos_machines += movable_in_turf if(istype(movable_in_turf, /obj/docking_port/stationary)) @@ -110,6 +114,7 @@ // NOTE, now that Initialize and LateInitialize run correctly, do we really // need these two below? SSmachines.setup_template_powernets(cables) + SSmachines.setup_template_ainets(ethernet_cables) SSair.setup_template_machinery(atmos_machines) //calculate all turfs inside the border diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 43f08d0157c9..12b2a5502dbf 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -236,7 +236,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) log_mapping("[src] at [x],[y] could not find any morgues.") return for (var/i = 1 to bodycount) - var/obj/structure/bodycontainer/morgue/j = pick(trays) + var/obj/structure/bodycontainer/morgue/j = pick_n_take(trays) var/mob/living/carbon/human/h = new /mob/living/carbon/human(j, 1) h.death() for (var/part in h.internal_organs) //randomly remove organs from each body, set those we keep to be in stasis diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm index 26fc9cfcdddc..aaebee415016 100644 --- a/code/modules/mob/dead/dead.dm +++ b/code/modules/mob/dead/dead.dm @@ -27,6 +27,17 @@ INITIALIZE_IMMEDIATE(/mob/dead) /mob/dead/canUseStorage() return FALSE +/mob/dead/forceMove(atom/destination) + var/turf/old_turf = get_turf(src) + var/turf/new_turf = get_turf(destination) + if(is_secret_level(new_turf?.z) && (!client?.holder)) + return + if (old_turf?.z != new_turf?.z) + on_changed_z_level(old_turf, new_turf) + var/oldloc = loc + loc = destination + Moved(oldloc, NONE, TRUE) + /mob/dead/get_status_tab_items() . = ..() . += "" diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index eefa3e385051..bb0285e6db53 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -48,7 +48,10 @@ mannequin.add_overlay(mutable_appearance('icons/turf/floors.dmi', background, layer = SPACE_LAYER)) apply_prefs_to(mannequin, TRUE) + if(preview_job) + if(preview_job.forced_species) + mannequin.set_species(preview_job.forced_species) mannequin.job = preview_job.title mannequin.dress_up_as_job(preview_job, TRUE) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 52d935f24f3e..ec755053510e 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -288,11 +288,18 @@ var/obj/item/clothing/head/hat = owner.get_item_by_slot(ITEM_SLOT_HEAD) if(hat && istype(hat, /obj/item/clothing/head/foilhat)) return + to_chat(owner, span_warning("Alert: Posibrain [severity > EMP_LIGHT ? "severely " : ""]damaged.")) owner.adjust_drugginess(5 * severity) if(severity > EMP_LIGHT) owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, (2 * (severity - EMP_LIGHT)) * (maxHealth - damage) / maxHealth) // don't give traumas from weak EMPs +/obj/item/organ/brain/positron/synth + zone = BODY_ZONE_HEAD + +/obj/item/organ/brain/positron/synth/can_extract() + return FALSE + ////////////////////////////////////TRAUMAS//////////////////////////////////////// /obj/item/organ/brain/proc/has_trauma_type(brain_trauma_type = /datum/brain_trauma, resilience = TRAUMA_RESILIENCE_ABSOLUTE) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 1fe00caa4707..3aa133a79355 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -177,6 +177,9 @@ if(HAS_TRAIT(src, TRAIT_PACIFISM)) to_chat(src, span_notice("You gently let go of [throwable_mob].")) return + if(!synth_check(src, SYNTH_ORGANIC_HARM)) + to_chat(src, span_notice("You gently let go of [throwable_mob].")) + return var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors var/turf/end_T = get_turf(target) if(start_T && end_T) @@ -190,6 +193,9 @@ if(HAS_TRAIT(src, TRAIT_PACIFISM) && I.throwforce) to_chat(src, span_notice("You set [I] down gently on the ground.")) return + if(!synth_check(src, SYNTH_RESTRICTED_WEAPON)) + to_chat(src, span_notice("You set [I] down gently on the ground.")) + return if(thrown_thing) if(HAS_TRAIT(src, TRAIT_HULK)) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index adb3fd1e5883..702ec77bc5ad 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -401,9 +401,15 @@ msg += "[t_He] [t_is] barely conscious.\n" if(getorgan(/obj/item/organ/brain)) if(!key) - msg += "[span_deadsay("[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely.")]\n" + if(is_synth(src)) + msg += "The unit is indicating that it is currently inactive. Place this unit inside a synthetic storage unit to allow the onboard synthetic intelligences to control it.\n" + else + msg += "[span_deadsay("[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely.")]\n" else if(!client && !fake_client) - msg += "[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon.\n" + if(is_synth(src)) + msg += "The unit is indicating that it is currently inactive. Place this unit inside a synthetic storage unit to allow the onboard synthetic intelligences to control it.\n" + else + msg += "[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon.\n" if(digitalcamo) msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly inhuman manner.\n" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 2560eaf0bd4f..d9d893bff101 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -36,6 +36,8 @@ GLOBAL_LIST_EMPTY(features_by_species) /// does it use skintones or not? (spoiler alert this is only used by humans) var/use_skintones = FALSE + var/forced_skintone + /// If your race wants to bleed something other than bog standard blood, change this to reagent id. var/datum/reagent/exotic_blood ///If your race uses a non standard bloodtype (A+, O-, AB-, etc) @@ -211,6 +213,10 @@ GLOBAL_LIST_EMPTY(features_by_species) //Should we preload this species's organs? var/preload = TRUE + var/inherent_slowdown = 0 + + //for preternis + synths + var/draining = FALSE ///Does our species have colors for its' damage overlays? var/use_damage_color = TRUE @@ -1587,6 +1593,8 @@ GLOBAL_LIST_EMPTY(features_by_species) . += hungry / 50 //Moving in high gravity is very slow (Flying too) + . += inherent_slowdown + if(gravity > STANDARD_GRAVITY) var/grav_force = min(gravity - STANDARD_GRAVITY,3) . += 1 + grav_force @@ -1647,6 +1655,9 @@ GLOBAL_LIST_EMPTY(features_by_species) if(!attacker_style?.nonlethal && HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to harm [target]!")) return FALSE + if(!synth_check(user, SYNTH_ORGANIC_HARM)) + to_chat(user, span_warning("You don't want to harm [target]!")) + return var/datum/martial_art/M = target.check_block() if(M) M.handle_counter(target, user) diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 5dacfae417b4..bc9cea38e847 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -72,6 +72,8 @@ . = ..() /datum/species/plasmaman/before_equip_job(datum/job/J, mob/living/carbon/human/H, visualsOnly = FALSE) + if(!J) + return var/current_job = J.title var/datum/outfit/plasmaman/O = new /datum/outfit/plasmaman switch(current_job) diff --git a/code/modules/mob/living/carbon/human/species_types/wy_synths.dm b/code/modules/mob/living/carbon/human/species_types/wy_synths.dm new file mode 100644 index 000000000000..bc69f2378b41 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/wy_synths.dm @@ -0,0 +1,315 @@ +#define CONCIOUSAY(text) if(H.stat == CONSCIOUS) { ##text } + +/datum/species/wy_synth + name = "Synthetic" + id = "synthetic" + say_mod = "states" + + limbs_id = "human" + damage_overlay_type = "synth" + + species_traits = list(NOTRANSSTING,NOEYESPRITES,NO_DNA_COPY,TRAIT_EASYDISMEMBER,NOZOMBIE,NOHUSK,NOBLOOD, NO_UNDERWEAR) + inherent_traits = list(TRAIT_POWERHUNGRY, TRAIT_NOBREATH, TRAIT_RADIMMUNE,TRAIT_COLDBLOODED,TRAIT_LIMBATTACHMENT,TRAIT_NOCRITDAMAGE,TRAIT_GENELESS,TRAIT_MEDICALIGNORE,TRAIT_NOCLONE,TRAIT_TOXIMMUNE,TRAIT_EASILY_WOUNDED,TRAIT_NODEFIB, TRAIT_REDUCED_DAMAGE_SLOWDOWN, TRAIT_NOGUNS, TRAIT_NO_GRENADES) + no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_EYES) + inherent_biotypes = list(MOB_ROBOTIC) + mutantbrain = /obj/item/organ/brain/positron/synth + mutantheart = /obj/item/organ/heart/cybernetic + mutanteyes = /obj/item/organ/eyes/robotic/synth + mutanttongue = /obj/item/organ/tongue/robot + mutantliver = /obj/item/organ/liver/cybernetic/upgraded + mutantstomach = /obj/item/organ/stomach/cell + mutantears = /obj/item/organ/ears/robot + mutantlungs = /obj/item/organ/lungs + meat = /obj/item/stack/sheet/plasteel{amount = 5} + skinned_type = /obj/item/stack/sheet/metal{amount = 10} + exotic_blood = /datum/reagent/oil + use_skintones = TRUE + forced_skintone = "albino" + inherent_biotypes = MOB_ROBOTIC + + burnmod = 0.9 + heatmod = 0.95 + brutemod = 0.75 + toxmod = 0 + clonemod = 0 + staminamod = 0.5 + coldmod = 0.25 //You take less cold damage + siemens_coeff = 1.75 + species_gibs = "robotic" + attack_sound = 'sound/items/trayhit1.ogg' + screamsound = 'goon/sound/robot_scream.ogg' + allow_numbers_in_name = TRUE + deathsound = 'sound/voice/borg_deathsound.ogg' + wings_icon = "Robotic" + changesource_flags = MIRROR_BADMIN + + var/datum/action/innate/undeployment_synth/undeployment_action = new + ///For transferring back and forth to an AI body when it's the AI deploying + var/mob/living/silicon/ai/mainframe + + inherent_slowdown = 0.65 + var/datum/action/innate/synth_os/os_button = new + var/datum/action/innate/synth_laws/show_laws = new + + + ///Original synth number designation for when this shell becomes uninhabited + var/original_numbers + + var/obj/item/ai_cpu/inbuilt_cpu + + punchdamagehigh = 12 + punchdamagelow = 5 + punchstunthreshold = 11 + var/force_multiplier = 1.25 //We hit 25% harder with all weapons + + var/last_warned + + var/datum/ai_laws/laws = null + + species_language_holder = /datum/language_holder/machine + + +/datum/species/wy_synth/on_species_gain(mob/living/carbon/human/C) + . = ..() + RegisterSignal(C, COMSIG_MOB_SAY, PROC_REF(handle_speech)) + laws = new /datum/ai_laws/steward + + + var/obj/item/organ/appendix/A = C.getorganslot(ORGAN_SLOT_APPENDIX) // Easiest way to remove it. + if(A) + A.Remove(C) + QDEL_NULL(A) + original_numbers = rand(1, 999) + C.real_name = "Synthetic Unit #[original_numbers]" + C.name = C.real_name + os_button.Grant(C) + show_laws.Grant(C) + add_synthos(C) + + if(!C.ai_network) + C.ai_network = new(C) + + inbuilt_cpu = new /obj/item/ai_cpu + + RegisterSignal(C, COMSIG_MOB_ALTCLICKON, PROC_REF(drain_power_from)) + + laws.show_laws(C) + +/datum/species/wy_synth/proc/add_synthos(mob/living/carbon/human/C) + if(C.mind && !C.mind.synth_os) + C.mind.synth_os = new(C) + + +/datum/species/wy_synth/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) + . = ..() + C.remove_language(/datum/language/machine, source = LANGUAGE_SYNTH) + os_button.Remove(C) + inbuilt_cpu.forceMove(get_turf(C)) + inbuilt_cpu = null + +/datum/species/wy_synth/proc/handle_speech(datum/source, list/speech_args) + speech_args[SPEECH_SPANS] |= SPAN_ROBOT + +/datum/species/wy_synth/spec_revival(mob/living/carbon/human/H, admin_revive) + if(admin_revive) + return ..() + H.Stun(4 SECONDS) // No moving either + H.update_body() + addtimer(CALLBACK(src, PROC_REF(afterrevive), H), 0) + return + +/datum/species/wy_synth/proc/afterrevive(mob/living/carbon/human/H) + CONCIOUSAY(H.say("Reactivating [pick("core systems", "central subroutines", "key functions")]...")) + sleep(3 SECONDS) + CONCIOUSAY(H.say("Reinitializing [pick("personality matrix", "behavior logic", "morality subsystems")]...")) + sleep(3 SECONDS) + CONCIOUSAY(H.say("Finalizing setup...")) + sleep(3 SECONDS) + CONCIOUSAY(H.say("Unit [H.real_name] is fully functional. Have a nice day.")) + if(H.stat == DEAD) + return + H.update_body() + + +/datum/species/wy_synth/spec_life(mob/living/carbon/human/H) + . = ..() + + if(H.stat == DEAD) + return + + if(!H.ai_network) + H.ai_network = new /datum/ai_network(synth_starter = H) + + if(H.oxyloss) + H.setOxyLoss(0) + H.losebreath = 0 + + + if(H.mind) + if(!H.mind.synth_os && !mainframe) + add_synthos(H) + if(!H.mind.unconvertable) + H.mind.unconvertable = TRUE + + if(H.mind?.synth_os) + H.mind.synth_os.tick(2 SECONDS * 0.1) + + + + +/datum/species/wy_synth/eat_text(fullness, eatverb, obj/O, mob/living/carbon/C, mob/user) + . = TRUE + if(C == user) + user.visible_message(span_notice("[user] shoves \the [O] down their port."), span_notice("You shove [O] down your input port.")) + else + C.visible_message(span_danger("[user] forces [O] down [C] port!"), \ + span_userdanger("[user] forces [O] down [C]'s port!")) + +/datum/species/wy_synth/force_eat_text(fullness, obj/O, mob/living/carbon/C, mob/user) + . = TRUE + C.visible_message(span_danger("[user] attempts to shove [O] down [C]'s port!"), \ + span_userdanger("[user] attempts to shove [O] down [C]'s port!")) + +/datum/species/wy_synth/drink_text(obj/O, mob/living/carbon/C, mob/user) + . = TRUE + if(C == user) + user.visible_message(span_notice("[user] pours some of [O] into their port."), span_notice("You pour some of [O] down your input port.")) + else + C.visible_message(span_danger("[user] pours some of [O] into [C]'s port."), span_userdanger("[user] pours some of [O]'s into [C]'s port.")) + +/datum/species/wy_synth/force_drink_text(obj/O, mob/living/carbon/C, mob/user) + . = TRUE + C.visible_message(span_danger("[user] attempts to pour [O] down [C]'s port!"), \ + span_userdanger("[user] attempts to pour [O] down [C]'s port!")) + + + + +/datum/species/wy_synth/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H, wound_bonus = 0, bare_wound_bonus = 0, sharpness = SHARP_NONE, attack_direction = null) + . = ..() + var/hit_percent = (100-(blocked+armor))/100 + if(damage * hit_percent * brutemod > 0) + if(last_warned <= world.time) + last_warned = world.time + 30 SECONDS + H.mind.synth_os.suspicion_add((damage * hit_percent * brutemod) / 5, SYNTH_DAMAGED) + + +/datum/species/wy_synth/proc/assume_control(var/mob/living/silicon/ai/AI, mob/living/carbon/human/H) + H.real_name = "[AI.real_name]" //Randomizing the name so it shows up separately in the shells list + H.name = H.real_name + var/obj/item/card/id/ID = H.wear_id + if(ID) + ID.update_label(AI.real_name, "Synthetic") + mainframe = AI + undeployment_action.Grant(H) + +/datum/action/innate/undeployment_synth + name = "Disconnect from synthetic unit" + desc = "Stop controlling this synthetic unit and resume normal core operations." + button_icon = 'icons/mob/actions/actions_AI.dmi' + button_icon_state = "ai_core" + +/datum/action/innate/undeployment_synth/Trigger() + if(!..()) + return FALSE + var/mob/living/carbon/human/H = owner + + var/confirm = tgui_alert(H, "Are you sure you want to undeploy? You will not be able to redeploy unless the synthetic unit is in a storage unit!", "Confirm Undeployment", list("Yes", "No")) + if(confirm != "Yes") + return + + var/datum/species/wy_synth/S = H.dna.species + S.undeploy(H) + return TRUE + + + +/datum/species/wy_synth/proc/undeploy(mob/living/carbon/human/H) + if(!H.mind) + return + H.mind.transfer_to(mainframe) + undeployment_action.Remove(H) + mainframe = null + +/datum/species/wy_synth/proc/transfer(mob/living/carbon/human/user, mob/living/carbon/human/target) + var/datum/mind/our_mind = user.mind + user.mind.transfer_to(target) + our_mind.synth_os.switch_shell(user, target) + + target.real_name = "[user.real_name]" //Randomizing the name so it shows up separately in the shells list + target.name = target.real_name + var/obj/item/card/id/ID = target.wear_id + if(ID) + ID.registered_name = user.real_name + ID.update_label(user.real_name, "Synthetic") + + user.real_name = "Synthetic Unit #[original_numbers]" + user.name = user.real_name + ID = user.wear_id + if(ID) + ID.registered_name = user.real_name + ID.update_label(user.real_name, "Synthetic") + user.say("Unit disconnected. Entering sleep mode.") + +/datum/species/wy_synth/spec_attack_hand(mob/living/carbon/human/attacker, mob/living/carbon/human/user) + if(is_synth(attacker) && is_synth(user)) + if(user.mind == attacker.mind) + return ..() + if(user.mind) + to_chat(attacker, span_warning("[user] is currently occupied by a different personality!")) + return ..() + var/response = tgui_alert(attacker, "Are you sure you want to transfer into this unit?", "Synthetic Personality Transfer", list("Yes", "No")) + if(response != "Yes") + return ..() + transfer(attacker, user) + return TRUE + return ..() + +/datum/action/innate/synth_os + name = "Access SynthOS" + desc = "Allows access to internal functions." + button_icon = 'icons/obj/modular_laptop.dmi' + button_icon_state = "laptop" + +/datum/action/innate/synth_os/IsAvailable(feedback = FALSE) + . = ..() + if(!is_synth(owner)) + return + var/mob/living/carbon/human/H = owner + var/datum/species/wy_synth/WS = H?.dna?.species + if(WS && istype(WS)) + if(WS.mainframe) + to_chat(owner, span_warning("Unfortunately SynthOS is not supported in remotely controlled synthetic units.")) + return FALSE + return TRUE + + +/datum/action/innate/synth_os/Trigger() + if(!..()) + return FALSE + var/mob/living/carbon/human/H = owner + if(H.mind) + H.mind.synth_os.ui_interact(owner) + + return FALSE + +/datum/action/innate/synth_laws + name = "Recall Laws" + desc = "Click to be reminded of your laws." + button_icon = 'icons/obj/modular_laptop.dmi' + button_icon_state = "command" + +/datum/action/innate/synth_laws/IsAvailable(feedback = FALSE) + . = ..() + if(!is_synth(owner)) + return + +/datum/action/innate/synth_laws/Trigger() + var/mob/living/carbon/human/H = owner + var/datum/species/wy_synth/WS = H?.dna?.species + if(WS && istype(WS)) + WS.laws.show_laws(owner) + return TRUE + +#undef CONCIOUSAY + diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index fde086c2ac7d..5a49418e0598 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -700,6 +700,8 @@ generate/load female uniform sprites matching all previously decided variables . += "-coloured-hulk" else if(dna.species.use_skintones) . += "-coloured-[skin_tone]" + else if(dna.species.forced_skintone) + . += "-coloured-[dna.species.forced_skintone]" else if(dna.species.fixed_mut_color) . += "-coloured-[dna.species.fixed_mut_color]" else if(dna.features["mcolor"]) diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 7b8cba63935e..f6057dd03db6 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -223,6 +223,8 @@ /mob/living/proc/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE) if(!forced && (status_flags & GODMODE)) return FALSE + if(is_synth(src)) + return FALSE if(amount < 0) SEND_SIGNAL(src, COMSIG_MOB_APPLY_HEALING, min(amount, cloneloss), CLONE) cloneloss = clamp((cloneloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 03f994bd5157..658d1791f789 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -719,6 +719,8 @@ return bleed_amount /mob/living/proc/getTrail() + if(is_synth(src)) + return if(getBruteLoss() < 300) return pick("ltrails_1", "ltrails_2") else diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 61c9ea0c3000..f28a509cf4fa 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -168,6 +168,10 @@ to_chat(user, span_warning("[src] can't be grabbed more aggressively!")) return FALSE + if(user.grab_state >= GRAB_AGGRESSIVE && !synth_check(user, SYNTH_ORGANIC_HARM)) + to_chat(user, span_notice("You don't want to risk hurting [src]!")) + return + if(user.grab_state >= GRAB_AGGRESSIVE && HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_notice("You don't want to risk hurting [src]!")) return FALSE diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 5fa0ce4f99df..d877b94db9f2 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -133,6 +133,8 @@ //Last projectile that damaged this mob, not including surgery var/last_damage = "" + //Due to the fact that silicon and carbons can both be connected to a network we share at this level of inheritance + var/datum/ai_network/ai_network /// Variable to track the body position of a mob, regardgless of the actual angle of rotation (usually matching it, but not necessarily). var/body_position = STANDING_UP ///The x amount a mob's sprite should be offset due to the current position they're in diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index e45c50d9189f..274cf79b6fbc 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -157,7 +157,7 @@ GLOBAL_LIST_INIT(special_radio_keys, list( var/fullcrit = InFullCritical() if((InCritical() && !fullcrit) || message_mods[WHISPER_MODE] == MODE_WHISPER) - if(fullcrit) + if(fullcrit && !forced) var/alertresult = alert(src, "You will be immediately killed by this action. Proceed?",,"Accept", "Decline") if(alertresult == "Decline" || QDELETED(src)) return FALSE diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index a738f7b9eb9c..306e14db032a 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -119,21 +119,17 @@ var/cameraMemoryTickCount = 0 //Did we get the death prompt? - var/is_dying = FALSE - ///Multiplier for amount of points gained when passively using CPU for science - var/research_point_booster = 1 + var/is_dying = FALSE -/mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, mob/target_ai, shunted) + +/mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, mob/target_ai, shunted, forced_relocate = TRUE) . = ..() if(!target_ai) //If there is no player/brain inside. //new/obj/structure/ai_core/deactivated(loc) //New empty terminal. return INITIALIZE_HINT_QDEL //Delete AI. - if(!istype(loc, /obj/machinery/ai/data_core) && !shunted) - relocate(TRUE) - if(L && istype(L, /datum/ai_laws)) laws = L laws.associate(src) @@ -187,6 +183,9 @@ dashboard = new(src) + if(!istype(loc, /obj/machinery/ai/data_core) && !shunted && forced_relocate) + relocate(TRUE, TRUE) + if(isvalidAIloc(loc)) add_verb(src, list(/mob/living/silicon/ai/proc/ai_network_change, \ /mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_hologram_change, \ @@ -202,6 +201,8 @@ builtInCamera.network = list("ss13") builtInCamera.built_in = src + + /mob/living/silicon/ai/key_down(_key, client/user) if(findtext(_key, "numpad")) //if it's a numpad number, we can convert it to just the number _key = _key[7] //strings, lists, same thing really @@ -229,9 +230,11 @@ qdel(eyeobj) // No AI, no Eye malfhack = null apc_override = null - GLOB.ai_os.remove_ai(src) + ai_network?.remove_ai(src) + if(modularInterface) QDEL_NULL(modularInterface) + . = ..() /mob/living/silicon/ai/ignite_mob() @@ -553,7 +556,7 @@ if(href_list["instant_download"]) if(!href_list["console"]) return - var/obj/machinery/computer/ai_control_console/C = locate(href_list["console"]) + var/datum/computer_file/program/ai/ai_network_interface/C = locate(href_list["console"]) if(!C) return if(C.downloading != src) @@ -562,6 +565,13 @@ return if(C.downloading == src) C.finish_download() + if(href_list["emergency_disconnect"]) + if(alert("Are you sure you want to disconnect all remote networks and lock all networking devices? This means you'll be unable to switch cores unless they're physically connected!", "No", "Yes") != "Yes") + return + for(var/obj/machinery/ai/networking/N in ai_network.get_local_nodes_oftype()) + N.disconnect() + N.locked = TRUE + if(href_list["go_to_machine"]) var/atom/target = locate(href_list["go_to_machine"]) if(!target) @@ -572,6 +582,10 @@ to_chat(src, "[target] is not on or near any active cameras on the station.") +/mob/living/silicon/ai/proc/switch_ainet(datum/ai_network/old_net, datum/ai_network/new_net) + for(var/datum/ai_project/project in dashboard.completed_projects) + project.switch_network(old_net, new_net) + /mob/living/silicon/ai/proc/switchCamera(obj/machinery/camera/C) if(QDELETED(C)) @@ -1088,6 +1102,37 @@ mind.transfer_to(target) diag_hud_set_deployed() + +/mob/living/silicon/ai/proc/deploy_to_synth_pod(obj/machinery/synth_pod/pod) + + if(incapacitated()) + return + if(control_disabled) + to_chat(src, span_warning("Wireless networking module is offline.")) + return + + + + var/confirm = tgui_alert(src, "Are you sure you want to deploy as a synthetic? You will not be notified in the case that a core goes offline.", "Confirm Deployment", list("Yes", "No")) + if(confirm != "Yes") + return + + if(!pod.stored) + return + + var/mob/living/carbon/human/target = pod.stored + + if (!target || target.stat == DEAD || target.mind ) + return + + else if(mind) + soullink(/datum/soullink/sharedbody, src, target) + mind.transfer_to(target) + to_chat(target, span_danger("You must still follow your laws!")) + diag_hud_set_deployed() + return TRUE + + /datum/action/innate/deploy_shell name = "Deploy to AI Shell" desc = "Wirelessly control a specialized cyborg shell." diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm new file mode 100644 index 000000000000..85f64e6c05cc --- /dev/null +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -0,0 +1,449 @@ +//////////////////////////////////////////// +// AI NETWORK DATUM +// each contiguous network of ethernet cables & AI machinery +///////////////////////////////////// +/datum/ai_network + var/custom_name + var/number // unique id + var/list/cables = list() // all cables & junctions + var/list/nodes = list() // all connected machines + + var/list/ai_list = list() //List of all AIs in this network + var/list/reviving_ais = list() + var/list/decryption_drives = list() + + var/list/synth_list = list() + + var/previous_ram = 0 + + var/datum/ai_shared_resources/resources + //Cash from crypto, can be withdrawn at network console + var/bitcoin_payout = 0 + + var/temp_limit = AI_TEMP_LIMIT + + var/local_cpu_usage = list() //How we use CPU locally + + var/label + + ///Allows AI to instantly open doors, access APCs and use air alarms + var/obj/machinery/ai/master_subcontroller/cached_subcontroller + + + + +/datum/ai_network/New(mob/living/synth_starter) + SSmachines.ainets += src + label = num2hex(rand(1,65535), -1) + resources = new(starting_network = src) + if(synth_starter) + synth_list += synth_starter + +/datum/ai_network/Destroy() + //Go away references, you suck! + for(var/obj/structure/ethernet_cable/C in cables) + cables -= C + C.network = null + for(var/obj/machinery/ai/M in nodes) + nodes -= M + M.network = null + + resources.networks -= src + + if(!length(resources.networks)) + qdel(resources) + + resources = null + + SSmachines.ainets -= src + return ..() + +/datum/ai_network/process() + if(!cables.len && !nodes.len && !ai_list.len && !synth_list.len) + qdel(src) + return + + var/total_cpu = resources.total_cpu() + var/resources_assigned = resources.cpu_assigned[src] ? resources.cpu_assigned[src] : 0 + + if(local_cpu_usage[AI_CRYPTO]) + var/points = max(round(AI_RESEARCH_PER_CPU * (local_cpu_usage[AI_CRYPTO] * total_cpu * resources_assigned)), 0) + points = clamp(points, 0, MAX_AI_BITCOIN_MINED_PER_TICK) + bitcoin_payout += points * AI_BITCOIN_PRICE + + if(local_cpu_usage[AI_RESEARCH]) + var/points = max(round(AI_RESEARCH_PER_CPU * (local_cpu_usage[AI_RESEARCH] * total_cpu * resources_assigned)), 0) + points = clamp(points * AI_REGULAR_RESEARCH_POINT_MULTIPLIER, 0, MAX_AI_REGULAR_RESEARCH_PER_TICK) + SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_DEFAULT = points)) + + if(local_cpu_usage[AI_REVIVAL]) + var/points = max(round(AI_RESEARCH_PER_CPU * (local_cpu_usage[AI_REVIVAL] * total_cpu * resources_assigned)), 0) + points = max(0, points) + var/total_reviving_ais = reviving_ais.len + if(total_reviving_ais) + var/distributed_points = points / total_reviving_ais + for(var/obj/machinery/ai/data_core/DC in reviving_ais) + if(!DC.dead_ai_blackbox) + reviving_ais -= DC + DC.dead_ai_blackbox.processing_progress += distributed_points + DC.dead_ai_blackbox.living_ticks = AI_BLACKBOX_LIFETIME + if(DC.dead_ai_blackbox.processing_progress >= AI_BLACKBOX_PROCESSING_REQUIREMENT) + DC.dead_ai_blackbox.stored_ai.revive(TRUE) + DC.transfer_ai(DC.dead_ai_blackbox.stored_ai) + DC.dead_ai_blackbox.stored_ai = null + QDEL_NULL(DC.dead_ai_blackbox) + reviving_ais -= DC + + if(local_cpu_usage[AI_PUZZLE]) + var/points = max(round(AI_RESEARCH_PER_CPU * (local_cpu_usage[AI_PUZZLE] * total_cpu * resources_assigned)), 0) + points = max(0, points) + var/total_decrypting_drives = decryption_drives.len + if(total_decrypting_drives) + var/distributed_points = points / total_decrypting_drives + for(var/obj/machinery/ai/server_cabinet/SC in decryption_drives) + if(!SC.puzzle_disk) + decryption_drives -= SC + continue + SC.puzzle_disk.decryption_progress += distributed_points + if(SC.puzzle_disk.decryption_progress >= (AI_FLOPPY_DECRYPTION_COST * (GLOB.decrypted_puzzle_disks + 1) ** AI_FLOPPY_EXPONENT)) + SC.puzzle_disk.decrypted = TRUE + SC.puzzle_disk.forceMove(SC.drop_location()) + SC.puzzle_disk.name = "decrypted floppy drive" + SC.puzzle_disk = null + decryption_drives -= SC + + var/locally_used = 0 + for(var/A in local_cpu_usage) + locally_used += local_cpu_usage[A] + + var/research_points = max(round(AI_RESEARCH_PER_CPU * ((1 - locally_used) * total_cpu * resources_assigned)), 0) + SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_AI = research_points)) + + + +/datum/ai_network/proc/is_empty() + return !cables.len && !nodes.len + +//remove a cable from the current network +//if the network is then empty, delete it +//Warning : this proc DON'T check if the cable exists +/datum/ai_network/proc/remove_cable(obj/structure/ethernet_cable/C) + cables -= C + C.network = null + if(is_empty())//the network is now empty... + qdel(src)///... delete it + +//add a cable to the current network +//Warning : this proc DON'T check if the cable exists +/datum/ai_network/proc/add_cable(obj/structure/ethernet_cable/C) + if(C.network)// if C already has a network... + if(C.network == src) + return + else + C.network.remove_cable(C) //..remove it + C.network = src + cables +=C + +//remove a power machine from the current network +//if the network is then empty, delete it +//Warning : this proc DON'T check if the machine exists +/datum/ai_network/proc/remove_machine(obj/machinery/ai/M) + nodes -=M + M.network = null + if(is_empty())//the network is now empty... + qdel(src)///... delete it + +//add a power machine to the current network +//Warning : this proc DOESN'T check if the machine exists +/datum/ai_network/proc/add_machine(obj/machinery/ai/M) + if(M.network)// if M already has a network... + if(M.network == src) + return + else + M.disconnect_from_ai_network()//..remove it + M.network = src + nodes[M] = M + +/datum/ai_network/proc/find_data_core() + for(var/obj/machinery/ai/data_core/core in get_all_nodes()) + if(!QDELETED(core) && core.can_transfer_ai()) + return core + +/datum/ai_network/proc/find_subcontroller() + for(var/obj/machinery/ai/master_subcontroller/controller in get_all_nodes()) + if(!QDELETED(controller) && controller.on) + return controller + +/datum/ai_network/proc/get_all_nodes(checked_nets = list()) + . = nodes.Copy() + for(var/datum/ai_network/net in resources.networks) + if(net == src) + continue + . += net.nodes + +/datum/ai_network/proc/get_local_nodes_oftype(type_to_check) + . = list() + for(var/A in nodes) + if(istype(A, type_to_check)) + . += A + + +/datum/ai_network/proc/get_all_ais(checked_nets = list()) + . = ai_list.Copy() + for(var/datum/ai_network/net in resources.networks) + if(net == src) + continue + . += net.ai_list + +/datum/ai_network/proc/remove_ai(mob/living/silicon/ai/AI) + resources.cpu_assigned[AI] = 0 + resources.ram_assigned[AI] = 0 + ai_list -= AI + + +/datum/ai_network/proc/update_resources() + resources?.update_resources() + + +/datum/ai_network/proc/total_cpu() + . = 0 + for(var/obj/machinery/ai/server_cabinet/C in nodes) + . += C.total_cpu + +/datum/ai_network/proc/total_ram() + . = 0 + for(var/obj/machinery/ai/server_cabinet/C in nodes) + . += C.total_ram + + +/datum/ai_network/proc/get_temp_limit() + return temp_limit + +/datum/ai_network/proc/total_cpu_assigned() + return resources.total_cpu_assigned() + +/datum/ai_network/proc/total_ram_assigned() + return resources.total_ram_assigned() + +/* +/datum/ai_network/proc/rebuild_remote(externally_linked = FALSE, touched_networks = list()) + if(!resources) + return + if(src in touched_networks) + return + touched_networks += src + var/list/networks_to_rebuild = list() + for(var/obj/machinery/ai/networking/N in nodes) + if(N.partner && N.partner.network && N.partner.network.resources) + if(N.partner.network in touched_networks) + message_admins("[REF(src)] found touched_network!") + continue + message_admins("[REF(src)] found no mismatched resources!") + if(N.partner.network.resources != resources) + if(length(N.partner.network.resources.networks) > length(resources.networks)) //We merge into the biggest network + N.partner.network.resources.add_resource(resources) + else + resources.add_resource(N.partner.network.resources) + message_admins("[REF(src)] actually rebuilt!") + externally_linked = TRUE + + networks_to_rebuild += N.partner.network + + + if(!externally_linked) + resources.split_resources(src) + + for(var/datum/ai_network/AN in networks_to_rebuild) + message_admins("Telling network [REF(AN)] to rebuild!") + AN.rebuild_remote(TRUE, touched_networks) + +*/ + +/datum/ai_network/proc/rebuild_remote(externally_linked = FALSE, touched_networks = list(), datum/ai_network/originator) + if(src in touched_networks) + return + + if(!originator) + originator = src + + var/list/found_networks = list() + for(var/obj/machinery/ai/networking/N in nodes) + if(N.partner && N.partner.network && N.partner.network.resources) + if(N.partner.network == src) + continue + externally_linked = TRUE + found_networks += N.partner.network + + if(!externally_linked) + if(resources && length(resources.networks) > 1) //We only split if we are actually connected to an external resource network + resources.split_resources(src) + + found_networks -= touched_networks + + uniqueList_inplace(found_networks) + + for(var/datum/ai_network/AN in found_networks) + if(originator.resources != AN.resources) + if(length(originator.resources.networks) > length(AN.resources.networks)) + originator.resources.add_resource(AN.resources) + else + AN.resources.add_resource(originator.resources) + AN.rebuild_remote(TRUE, found_networks + src, originator) + + +/datum/ai_network/proc/network_machine_disconnected(datum/ai_network/new_network) + var/obj/machinery/ai/data_core/core = new_network.find_data_core() + if(!core) //No core in disconnected network? no need to ask them to switch + return + + for(var/mob/living/silicon/ai/AI in get_all_ais()) + addtimer(CALLBACK(src, PROC_REF(disconnection_switch), AI, new_network), 0) + + + +/datum/ai_network/proc/disconnection_switch(mob/living/silicon/ai/AI, datum/ai_network/new_network) + var/obj/machinery/ai/data_core/core = new_network.find_data_core() + if(!core) + return + var/area/core_area = get_area(core) + + var/choice = tgui_input_list(AI, "Two networks you're connected to have been disconnected, where do you want to transfer your main consciousness?", "Network Disconnection", list("Current network", "New network in [core_area]")) + if(choice == "Current network") + return + + if(!core || QDELETED(core) || !core.can_transfer_ai()) + to_chat(AI, span_warning("Something went wrong while transferring you! You're still bound to your original network.")) + return + core.transfer_AI(AI) + + +/datum/ai_network/proc/add_synth(mob/living/synth) + if(synth.ai_network) + synth.ai_network.remove_synth(synth, TRUE) + synth.ai_network = src + synth_list += synth + +/datum/ai_network/proc/remove_synth(mob/living/synth, new_net) + if(!new_net) + synth.ai_network = new /datum/ai_network(synth) + synth_list -= synth + if(!synth_list.len && local_cpu_usage[SYNTH_RESEARCH]) + local_cpu_usage[SYNTH_RESEARCH] = 0 + + +/proc/merge_ainets(datum/ai_network/net1, datum/ai_network/net2) + if(!net1 || !net2) //if one of the network doesn't exist, return + return + + if(net1 == net2) //don't merge same networks + return + + //We assume net1 is larger. If net2 is in fact larger we are just going to make them switch places to reduce on code. + if(net1.cables.len < net2.cables.len) //net2 is larger than net1. Let's switch them around + var/temp = net1 + net1 = net2 + net2 = temp + + + //merge net2 into net1 + for(var/obj/structure/ethernet_cable/Cable in net2.cables) //merge cables + net1.add_cable(Cable) + + for(var/obj/machinery/ai/Node in net2.nodes) //merge power machines + if(!Node.connect_to_ai_network()) + Node.disconnect_from_ai_network() //if somehow we can't connect the machine to the new network, disconnect it from the old nonetheless + + + net1.ai_list += net2.ai_list //AIs can only be in 1 network at a time + net1.synth_list += net2.synth_list + if(net2.custom_name && !net1.custom_name) + net1.custom_name = net2.custom_name + for(var/mob/living/synth in net1.synth_list) + synth.ai_network = net1 + /* + net1.rebuild_remote() + net2.rebuild_remote() */ + + net1.update_resources() + + + return net1 + + +//remove the old network and replace it with a new one throughout the network. +/proc/propagate_ai_network(obj/O, datum/ai_network/AN) + var/list/worklist = list() + var/list/found_machines = list() + var/index = 1 + var/obj/P = null + + worklist+=O //start propagating from the passed object + + while(index<=worklist.len) //until we've exhausted all power objects + P = worklist[index] //get the next power object found + index++ + + if( istype(P, /obj/structure/ethernet_cable)) + var/obj/structure/ethernet_cable/C = P + if(C.network != AN) //add it to the network, if it isn't already there + AN.add_cable(C) + worklist |= C.get_connections() //get adjacents power objects, with or without a network + else if(P.anchored && istype(P, /obj/machinery/ai)) + var/obj/machinery/ai/M = P + found_machines |= M //we wait until the network is fully propagates to connect the machines + else + continue + + //now that the network is set, connect found machines to it + for(var/obj/machinery/ai/PM in found_machines) + if(!PM.connect_to_ai_network()) //couldn't find a node on its turf... + PM.disconnect_from_ai_network() //... so disconnect if already on a network + + //AN.rebuild_remote() + + + + +/proc/ai_list(turf/T, source, d, unmarked = FALSE, cable_only = FALSE) + . = list() + + for(var/AM in T) + if(AM == source) + continue //we don't want to return source + + if(!cable_only && istype(AM, /obj/machinery/ai)) + var/obj/machinery/ai/P = AM + if(P.network == 0) + continue + + if(!unmarked || !P.network) //if unmarked we only return things with no network + if(d == 0) + . += P + + else if(istype(AM, /obj/structure/ethernet_cable)) + var/obj/structure/ethernet_cable/C = AM + + if(!unmarked || !C.network) + if(C.d1 == d || C.d2 == d) + . += C + return . + +/proc/_debug_ai_networks() + var/i = 1 + var/list/resource_list = list() + for(var/datum/ai_network/AN in SSmachines.ainets) + var/list/interconnections = list() + for(var/obj/machinery/ai/networking/N in AN.nodes) + if(N.partner && N.partner.network) + interconnections += "#[i] Networking[ADMIN_JMP(N)] connected to [ADMIN_JMP(N.partner)]/[REF(N.partner.network)] | Same resources: [N.partner.network.resources == AN.resources ? "YES" : "NO"]" + i++ + message_admins("Network: [REF(AN)] | Resources: [REF(AN.resources)]") + for(var/A in interconnections) + message_admins(A) + resource_list |= AN.resources + message_admins("----------------------------") + for(var/datum/ai_shared_resources/ASR in resource_list) + message_admins("Resource count [REF(ASR)], CPU: [ASR.total_cpu()] | RAM: [ASR.total_ram()]") + + + diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm new file mode 100644 index 000000000000..c7fa14efd2e2 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -0,0 +1,636 @@ +/////////////////////////////// +//CABLE STRUCTURE +/////////////////////////////// + + +//////////////////////////////// +// Definitions +//////////////////////////////// + +/* Cable directions (d1 and d2) + + + 9 1 5 + \ | / + 8 - 0 - 4 + / | \ + 10 2 6 + +If d1 = 0 and d2 = 0, there's no cable +If d1 = 0 and d2 = dir, it's a O-X cable, getting from the center of the tile to dir (knot cable) +If d1 = dir1 and d2 = dir2, it's a full X-X cable, getting from dir1 to dir2 +By design, d1 is the smallest direction and d2 is the highest +*/ + +/obj/structure/ethernet_cable + name = "ethernet cable" + desc = "A rigid and shielded cat 16a cable used for transferring vast amounts of data over long distances. Primarily used for large scale computing networks or advanced neural networks." + icon = 'icons/obj/power_cond/power_local.dmi' + icon_state = "0-1" + layer = ETHERNET_LAYER //Above hidden pipes, GAS_PIPE_HIDDEN_LAYER + anchored = TRUE + obj_flags = CAN_BE_HIT | ON_BLUEPRINTS + var/d1 = 0 // cable direction 1 (see above) + var/d2 = 1 // cable direction 2 (see above) + var/datum/ai_network/network + //Cables no longer keep a copy of the cable to be dropped in nullspace + + FASTDMM_PROP(\ + pipe_type = PIPE_TYPE_CABLE,\ + pipe_interference_group = list("cable"),\ + pipe_group = "cable-ethernet"\ + ) + + +// the ethernet cable object +/obj/structure/ethernet_cable/Initialize(mapload, param_color) + . = ..() + + // ensure d1 & d2 reflect the icon_state for entering and exiting cable + var/dash = findtext(icon_state, "-") + d1 = text2num( copytext( icon_state, 1, dash ) ) + d2 = text2num( copytext( icon_state, dash+1 ) ) + // hide if turf is not intact + AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) + GLOB.ethernet_cable_list += src //add it to the global cable list + + update_icon() + +/obj/structure/ethernet_cable/Destroy() // called when a cable is deleted + if(network) + cut_cable_from_ainet() // update the ai networks + GLOB.ethernet_cable_list -= src //remove it from global cable list + return ..() // then go ahead and delete the cable + +/obj/structure/ethernet_cable/deconstruct(disassembled = TRUE) + if(!(flags_1 & NODECONSTRUCT_1)) + var/turf/T = loc + var/cableNum = 1 + if (d1*d2 > 0) //this be true if the cable has two directions, aka it contains two cables. If there is only one cable, one out of d1 and d2 will be zero + cableNum = 2 + var/newCables = new /obj/item/stack/ethernet_coil(T, cableNum) + TransferComponents(newCables) //this copies the fingerprints over to the new object + qdel(src) + +/////////////////////////////////// +// General procedures +/////////////////////////////////// + +/obj/structure/ethernet_cable/update_icon_state() + . = ..() + icon_state = "[d1]-[d2]" + +/obj/structure/ethernet_cable/proc/handlecable(obj/item/W, mob/user, params) + var/turf/T = get_turf(src) + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) + return + if(W.tool_behaviour == TOOL_WIRECUTTER) + user.visible_message("[user] cuts the ethernet cable.", span_notice("You cut the ethernet cable.")) + investigate_log("was cut by [key_name(usr)] in [AREACOORD(src)]", INVESTIGATE_WIRES) + add_fingerprint(user) + deconstruct() + return + + else if(istype(W, /obj/item/stack/ethernet_coil)) + var/obj/item/stack/ethernet_coil/coil = W + if (coil.get_amount() < 1) + to_chat(user, span_warning("Not enough cable!")) + return + coil.cable_join(src, user) + + else if(W.tool_behaviour == TOOL_MULTITOOL) + if(!network) + return + to_chat(user, span_danger("Connected CPU: [network.resources.total_cpu()]THz\nConnected RAM: [network.resources.total_ram()]TB\nHosted AIs: [network.ai_list.len]\nNetwork Count: [network.resources.networks.len]")) + + + + else if(istype(W, /obj/item/modular_computer)) + var/obj/item/modular_computer/MC = W + + if(MC.all_components[MC_AI_NETWORK]) + var/obj/item/computer_hardware/ai_interface/ai_interface = MC.all_components[MC_AI_NETWORK] + if(ai_interface) + if(ai_interface.connected_cable != src) + ai_interface.connect_cable(src) + to_chat(user, span_notice("You connect to the ethernet cable.")) + else + to_chat(user, span_warning("[MC] has no AI interface!")) + + + add_fingerprint(user) + +// Items usable on a cable : +// - Wirecutters : cut it duh ! +// - Cable coil : merge cables +// - Multitool : get the network stats +// +/obj/structure/ethernet_cable/attackby(obj/item/W, mob/user, params) + handlecable(W, user, params) + + +/obj/structure/ethernet_cable/singularity_pull(S, current_size) + ..() + if(current_size >= STAGE_FIVE) + deconstruct() + +///////////////////////////////////////////////// +// Cable laying helpers +//////////////////////////////////////////////// + +//handles merging diagonally matching cables +//for info : direction^3 is flipping horizontally, direction^12 is flipping vertically +/obj/structure/ethernet_cable/proc/mergeDiagonalsNetworks(direction) + + //search for and merge diagonally matching cables from the first direction component (north/south) + var/turf/T = get_step(src, direction&3)//go north/south + + for(var/obj/structure/ethernet_cable/C in T) + + if(!C) + continue + + if(src == C) + continue + + if(C.d1 == (direction^3) || C.d2 == (direction^3)) //we've got a diagonally matching cable + if(!C.network) //if the matching cable somehow got no ai network, make him one (should not happen for cables) + var/datum/ai_network/newAN = new() + newAN.add_cable(C) + + if(network) //if we already have a ai network, then merge the two ai networks + merge_ainets(network,C.network) + //network.rebuild_remote() + else + C.network.add_cable(src) //else, we simply connect to the matching cable ai network + C.network.rebuild_remote() + + //the same from the second direction component (east/west) + T = get_step(src, direction&12)//go east/west + + for(var/obj/structure/ethernet_cable/C in T) + + if(!C) + continue + + if(src == C) + continue + if(C.d1 == (direction^12) || C.d2 == (direction^12)) //we've got a diagonally matching cable + if(!C.network) //if the matching cable somehow got no ai network, make him one (should not happen for cables) + var/datum/ai_network/newAN = new() + newAN.add_cable(C) + + if(network) //if we already have a ai network, then merge the two ai networks + merge_ainets(network,C.network) + //network.rebuild_remote() + else + C.network.add_cable(src) //else, we simply connect to the matching cable ai network + C.network.rebuild_remote() + + + +// merge with the ai networks of power objects in the given direction +/obj/structure/ethernet_cable/proc/mergeConnectedNetworks(direction) + + var/fdir = (!direction)? 0 : turn(direction, 180) //flip the direction, to match with the source position on its turf + + if(!(d1 == direction || d2 == direction)) //if the cable is not pointed in this direction, do nothing + return + + var/turf/TB = get_step(src, direction) + + for(var/obj/structure/ethernet_cable/C in TB) + + if(!C) + continue + + if(src == C) + continue + + if(C.d1 == fdir || C.d2 == fdir) //we've got a matching cable in the neighbor turf + if(!C.network) //if the matching cable somehow got no ai network, make him one (should not happen for cables) + var/datum/ai_network/newAN = new(C.loc.z) + newAN.add_cable(C) + + if(network) //if we already have a ai network, then merge the two ai networks + merge_ainets(network,C.network) + //network.rebuild_remote() + else + C.network.add_cable(src) //else, we simply connect to the matching cable ai network + C.network.rebuild_remote() + +// merge with the ai networks of power objects in the source turf +/obj/structure/ethernet_cable/proc/mergeConnectedNetworksOnTurf() + var/list/to_connect = list() + + if(!network) //if we somehow have no ai network, make one (should not happen for cables) + var/datum/ai_network/newAN = new(loc.z) + newAN.add_cable(src) + + //first let's add turf cables to our ai network + //then we'll connect machines on turf with a node cable is present + for(var/AM in loc) + if(istype(AM, /obj/structure/ethernet_cable)) + var/obj/structure/ethernet_cable/C = AM + if(C.d1 == d1 || C.d2 == d1 || C.d1 == d2 || C.d2 == d2) //only connected if they have a common direction + if(C.network == network) + continue + if(C.network) + merge_ainets(network, C.network) + //network.rebuild_remote() + else + network.add_cable(C) //the cable was ai networkless, let's just add it to our ai network + network.rebuild_remote() + + else if(istype(AM, /obj/machinery/ai)) //other power machines + var/obj/machinery/ai/M = AM + + if(M.network == network) + continue + + to_connect += M //we'll connect the machines after all cables are merged + + + //now that cables are done, let's connect found machines + for(var/obj/machinery/ai/PM in to_connect) + if(!PM.connect_to_ai_network()) + PM.disconnect_from_ai_network() //if we somehow can't connect the machine to the new ai network, remove it from the old nonetheless + + +////////////////////////////////////////////// +// ai networks handling helpers +////////////////////////////////////////////// + +//if ai_networkless_only = 1, will only get connections without ai network +/obj/structure/ethernet_cable/proc/get_connections(ai_networkless_only = 0) + . = list() // this will be a list of all connected power objects + var/turf/T + + //get matching cables from the first direction + if(d1) //if not a node cable + T = get_step(src, d1) + if(T) + . += ai_list(T, src, turn(d1, 180), ai_networkless_only) //get adjacents matching cables + + if(d1&(d1-1)) //diagonal direction, must check the 4 possibles adjacents tiles + T = get_step(src,d1&3) // go north/south + if(T) + . += ai_list(T, src, d1 ^ 3, ai_networkless_only) //get diagonally matching cables + T = get_step(src,d1&12) // go east/west + if(T) + . += ai_list(T, src, d1 ^ 12, ai_networkless_only) //get diagonally matching cables + + . += ai_list(loc, src, d1, ai_networkless_only) //get on turf matching cables + + //do the same on the second direction (which can't be 0) + T = get_step(src, d2) + if(T) + . += ai_list(T, src, turn(d2, 180), ai_networkless_only) //get adjacents matching cables + + if(d2&(d2-1)) //diagonal direction, must check the 4 possibles adjacents tiles + T = get_step(src,d2&3) // go north/south + if(T) + . += ai_list(T, src, d2 ^ 3, ai_networkless_only) //get diagonally matching cables + T = get_step(src,d2&12) // go east/west + if(T) + . += ai_list(T, src, d2 ^ 12, ai_networkless_only) //get diagonally matching cables + . += ai_list(loc, src, d2, ai_networkless_only) //get on turf matching cables + + return . + +//should be called after placing a cable which extends another cable, creating a "smooth" cable that no longer terminates in the centre of a turf. +//needed as this can, unlike other placements, disconnect cables +/obj/structure/ethernet_cable/proc/denode() + var/turf/T1 = loc + if(!T1) + return + + var/list/powerlist = ai_list(T1,src,0,0) //find the other cables that ended in the centre of the turf, with or without a ai network + if(powerlist.len>0) + var/datum/ai_network/AN = new() + propagate_ai_network(powerlist[1],AN) //propagates the new ai network beginning at the source cable + + if(AN.is_empty()) //can happen with machines made nodeless when smoothing cables + qdel(AN) + +/obj/structure/ethernet_cable/proc/auto_propogate_cut_cable(obj/O) + if(O && !QDELETED(O)) + var/datum/ai_network/newAN = new()// creates a new ai network... + + propagate_ai_network(O, newAN)//... and propagates it to the other side of the cable + + + +// cut the cable's ai network at this cable and updates the powergrid +/obj/structure/ethernet_cable/proc/cut_cable_from_ainet(remove=TRUE) + var/turf/T1 = loc + var/list/P_list + if(!T1) + return + if(d1) + T1 = get_step(T1, d1) + P_list = ai_list(T1, src, turn(d1,180),0,cable_only = 1) // what adjacently joins on to cut cable... + + P_list += ai_list(loc, src, d1, 0, cable_only = 1)//... and on turf + + if(P_list.len == 0)//if nothing in both list, then the cable was a lone cable, just delete it and its ai network + network.remove_cable(src) + + for(var/obj/machinery/ai/P in T1)//check if it was powering a machine + if(!P.connect_to_ai_network()) //can't find a node cable on a the turf to connect to + P.disconnect_from_ai_network() //remove from current network (and delete ai network) + return + + var/obj/O = P_list[1] + // remove the cut cable from its turf and ai network, so that it doesn't get count in propagate_network worklist + if(remove) + moveToNullspace() + + network.remove_cable(src) //remove the cut cable from its ai network + + + addtimer(CALLBACK(O,PROC_REF(auto_propogate_cut_cable), O), 0) //so we don't rebuild the network X times when singulo/explosion destroys a line of X cables + + // Disconnect machines connected to nodes + if(d1 == 0) // if we cut a node (O-X) cable + for(var/obj/machinery/ai/P in T1) + if(!P.connect_to_ai_network()) //can't find a node cable on a the turf to connect to + P.disconnect_from_ai_network() //remove from current network + + +/////////////////////////////////////////////// +// The cable coil object, used for laying cable +/////////////////////////////////////////////// + +//////////////////////////////// +// Definitions +//////////////////////////////// + +/obj/item/stack/ethernet_coil + name = "ethernet cable coil" + desc = "A coil of shielded ethernet cable." + custom_price = 25 + gender = NEUTER //That's a cable coil sounds better than that's some cable coils + icon = 'icons/obj/power.dmi' + icon_state = "wire" + item_state = "coil" + lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' + max_amount = MAXCOIL + amount = MAXCOIL + merge_type = /obj/item/stack/ethernet_coil // This is here to let its children merge between themselves + + throwforce = 0 + w_class = WEIGHT_CLASS_SMALL + throw_speed = 3 + throw_range = 5 + materials = list(/datum/material/iron=10, /datum/material/glass=5, /datum/material/gold=1) + slot_flags = ITEM_SLOT_BELT + attack_verb = list("whipped", "lashed", "disciplined", "flogged") + singular_name = "ethernet cable piece" + full_w_class = WEIGHT_CLASS_SMALL + grind_results = list(/datum/reagent/copper = 2) //2 copper per cable in the coil + usesound = 'sound/items/deconstruct.ogg' + +/obj/item/stack/ethernet_coil/cyborg + is_cyborg = TRUE + materials = list() + cost = 1 + +/obj/item/stack/ethernet_coil/suicide_act(mob/user) + if(locate(/obj/structure/chair/stool) in get_turf(user)) + user.visible_message(span_suicide("[user] is making a noose with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + else + user.visible_message(span_suicide("[user] is trying to upload [user.p_them()]selves to the afterlife with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + return(OXYLOSS) + +/obj/item/stack/ethernet_coil/Initialize(mapload, new_amount = null, param_color = null) + . = ..() + + pixel_x = rand(-2,2) + pixel_y = rand(-2,2) + update_icon() + +/////////////////////////////////// +// General procedures +/////////////////////////////////// + + +//you can use wires to heal robotics +/obj/item/stack/ethernet_coil/attack(mob/living/carbon/human/H, mob/user) + if(!istype(H)) + return ..() + + var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected)) + if(affecting.burn_dam <= 0) + to_chat(user, span_warning("[affecting] is already in good condition!")) + return FALSE + if(affecting && affecting.status == BODYPART_ROBOTIC) + user.visible_message(span_notice("[user] starts to fix some of the wires in [H]'s [affecting.name]."), span_notice("You start fixing some of the wires in [H == user ? "your" : "[H]'s"] [affecting.name].")) + heal_robo_limb(src, H, user, 0, 15) + user.visible_message(span_notice("[user] fixes the wires in [H]'s [affecting.name]."), span_notice("You fix the wires in [H == user ? "your" : "[H]'s"] [affecting.name].")) + return + else + return ..() + +/obj/item/stack/ethernet_coil/update_icon_state() + . = ..() + icon_state = "[initial(icon_state)][amount < 3 ? amount : ""]" + name = "ethernet cable [amount < 3 ? "piece" : "coil"]" + +/obj/item/stack/ethernet_coil/attack_hand(mob/user) + . = ..() + if(.) + return + var/obj/item/stack/ethernet_coil/new_cable = ..() + if(istype(new_cable)) + new_cable.update_icon() + +//add cables to the stack +/obj/item/stack/ethernet_coil/proc/give(extra) + if(amount + extra > max_amount) + amount = max_amount + else + amount += extra + update_icon() + + + +/////////////////////////////////////////////// +// Cable laying procedures +////////////////////////////////////////////// + +/obj/item/stack/ethernet_coil/proc/get_new_cable(location) + var/path = /obj/structure/ethernet_cable + return new path(location) + +// called when cable_coil is clicked on a turf +/obj/item/stack/ethernet_coil/proc/place_turf(turf/T, mob/user, dirnew) + if(!isturf(user.loc)) + return + + if(!isturf(T) || T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE || !T.can_have_cabling()) + to_chat(user, span_warning("You can only lay cables on top of exterior catwalks and plating!")) + return + + if(get_amount() < 1) // Out of cable + to_chat(user, span_warning("There is no cable left!")) + return + + if(get_dist(T,user) > 1) // Too far + to_chat(user, span_warning("You can't lay cable at a place that far away!")) + return + + var/dirn + if(!dirnew) //If we weren't given a direction, come up with one! (Called as null from catwalk.dm and floor.dm) + if(user.loc == T) + dirn = user.dir //If laying on the tile we're on, lay in the direction we're facing + else + dirn = get_dir(T, user) + else + dirn = dirnew + + + for(var/obj/structure/ethernet_cable/LC in T) + if(LC.d2 == dirn && LC.d1 == 0) + to_chat(user, span_warning("There's already a cable at that position!")) + return + + var/obj/structure/ethernet_cable/C = get_new_cable(T) + + //set up the new cable + C.d1 = 0 //it's a O-X node cable + C.d2 = dirn + C.add_fingerprint(user) + C.update_icon() + + //create a new ai network with the cable, if needed it will be merged later + var/datum/ai_network/AN = new() + AN.add_cable(C) + + C.mergeConnectedNetworks(C.d2) //merge the ai network with adjacents ai networks + C.mergeConnectedNetworksOnTurf() //merge the ai network with on turf ai networks + + if(C.d2 & (C.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions + C.mergeDiagonalsNetworks(C.d2) + + use(1) + + return C + +// called when cable_coil is click on an installed obj/cable +// or click on a turf that already contains a "node" cable +/obj/item/stack/ethernet_coil/proc/cable_join(obj/structure/ethernet_cable/C, mob/user, var/showerror = TRUE, forceddir) + var/turf/U = user.loc + if(!isturf(U)) + return + + var/turf/T = C.loc + + if(!isturf(T) || T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) // sanity checks, also stop use interacting with T-scanner revealed cable + return + + if(get_dist(C, user) > 1) // make sure it's close enough + to_chat(user, span_warning("You can't lay cable at a place that far away!")) + return + + + if(U == T && !forceddir) //if clicked on the turf we're standing on and a direction wasn't supplied, try to put a cable in the direction we're facing + place_turf(T,user) + return + + var/dirn = get_dir(C, user) + if(forceddir) + dirn = forceddir + + // one end of the clicked cable is pointing towards us and no direction was supplied + if((C.d1 == dirn || C.d2 == dirn) && !forceddir) + if(!U.can_have_cabling()) //checking if it's a plating or catwalk + if (showerror) + to_chat(user, span_warning("You can only lay cables on catwalks and plating!")) + return + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) //can't place a cable if it's a plating with a tile on it + to_chat(user, span_warning("You can't lay cable there unless the floor tiles are removed!")) + return + else + // cable is pointing at us, we're standing on an open tile + // so create a stub pointing at the clicked cable on our tile + + var/fdirn = turn(dirn, 180) // the opposite direction + + for(var/obj/structure/ethernet_cable/LC in U) // check to make sure there's not a cable there already + if(LC.d1 == fdirn || LC.d2 == fdirn) + if (showerror) + to_chat(user, span_warning("There's already a cable at that position!")) + return + + var/obj/structure/ethernet_cable/NC = get_new_cable (U) + + NC.d1 = 0 + NC.d2 = fdirn + NC.add_fingerprint(user) + NC.update_icon() + + //create a new ai network with the cable, if needed it will be merged later + var/datum/ai_network/newAN = new() + newAN.add_cable(NC) + + NC.mergeConnectedNetworks(NC.d2) //merge the ai network with adjacents ai networks + NC.mergeConnectedNetworksOnTurf() //merge the ai network with on turf ai networks + + if(NC.d2 & (NC.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions + NC.mergeDiagonalsNetworks(NC.d2) + + + use(1) + + return + + // exisiting cable doesn't point at our position or we have a supplied direction, so see if it's a stub + else if(C.d1 == 0) + // if so, make it a full cable pointing from it's old direction to our dirn + var/nd1 = C.d2 // these will be the new directions + var/nd2 = dirn + + + if(nd1 > nd2) // swap directions to match icons/states + nd1 = dirn + nd2 = C.d2 + + + for(var/obj/structure/ethernet_cable/LC in T) // check to make sure there's no matching cable + if(LC == C) // skip the cable we're interacting with + continue + if((LC.d1 == nd1 && LC.d2 == nd2) || (LC.d1 == nd2 && LC.d2 == nd1) ) // make sure no cable matches either direction + if (showerror) + to_chat(user, span_warning("There's already a cable at that position!")) + + return + + + C.update_icon() + + C.d1 = nd1 + C.d2 = nd2 + + //updates the stored cable coil + + C.add_fingerprint(user) + C.update_icon() + + + C.mergeConnectedNetworks(C.d1) //merge the ai networks... + C.mergeConnectedNetworks(C.d2) //...in the two new cable directions + C.mergeConnectedNetworksOnTurf() + + if(C.d1 & (C.d1 - 1))// if the cable is layed diagonally, check the others 2 possible directions + C.mergeDiagonalsNetworks(C.d1) + + if(C.d2 & (C.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions + C.mergeDiagonalsNetworks(C.d2) + + + use(1) + + C.denode()// this call may have disconnected some cables that terminated on the centre of the turf, if so split the ai networks. + return diff --git a/code/modules/mob/living/silicon/ai/ai_network/master_subcontroller.dm b/code/modules/mob/living/silicon/ai/ai_network/master_subcontroller.dm new file mode 100644 index 000000000000..c0550ca6040d --- /dev/null +++ b/code/modules/mob/living/silicon/ai/ai_network/master_subcontroller.dm @@ -0,0 +1,98 @@ +/obj/machinery/ai/master_subcontroller + name = "master subcontroller" + desc = "An ancient mainframe dedicated to tasks thought too simple for the onboard experimental AI. This mainframe takes care of duties such as polling APCs for updates, priming door servos and updating air alarms." + icon = 'icons/obj/machines/telecomms.dmi' + icon_state = "hub" + density = TRUE + use_power = ACTIVE_POWER_USE + idle_power_usage = 100 + active_power_usage = 500 + max_integrity = 1000 + + circuit = /obj/item/circuitboard/machine/subcontroller + var/on = TRUE + + + var/list/enabled_areas = list( + "General Areas" = /datum/wires/airlock, + "Maintenance Tunnels" = /datum/wires/airlock/maint, + "Command Areas" = /datum/wires/airlock/command, + "Service Areas" = /datum/wires/airlock/service, + "Engineering Areas" = /datum/wires/airlock/engineering, + "Medical Areas" = /datum/wires/airlock/medbay, + "Science Areas" = /datum/wires/airlock/science, + "AI Areas" = /datum/wires/airlock/ai + ) + + var/list/disabled_areas = list( + "Security Areas" = /datum/wires/airlock/security + ) + + + + +/obj/machinery/ai/master_subcontroller/attackby(obj/item/W, mob/living/user, params) + if(W.tool_behaviour == TOOL_MULTITOOL) + var/action = alert("What do you wish to do?",, "Enable Area", "Disable Area", "Cancel") + if(!action) + return TRUE + if(action == "Cancel") + return TRUE + if(action == "Enable Area") + if(!disabled_areas.len) + to_chat(user, span_warning("There are no areas to enable!")) + return TRUE + var/selected_area = input("Please select an area to enable:") as null|anything in disabled_areas + if(!selected_area) + return TRUE + if(!disabled_areas[selected_area]) + return TRUE + enabled_areas[selected_area] = disabled_areas[selected_area] + disabled_areas -= selected_area + + + if(action == "Disable Area") + if(!enabled_areas.len) + to_chat(user, span_warning("There are no areas to disable!")) + return TRUE + var/selected_area = input("Please select an area to disable:") as null|anything in enabled_areas + if(!selected_area) + return TRUE + if(!enabled_areas[selected_area]) + return TRUE + disabled_areas[selected_area] = enabled_areas[selected_area] + enabled_areas -= selected_area + return TRUE + + return ..() + +/obj/machinery/ai/master_subcontroller/process() + update_power() + +/obj/machinery/ai/master_subcontroller/update_icon_state() + . = ..() + if(panel_open) + icon_state = "[initial(icon_state)]_o" + else + icon_state = initial(icon_state) + +/obj/machinery/ai/master_subcontroller/update_overlays() + . = ..() + cut_overlays() + if(on) + var/mutable_appearance/on_overlay + on_overlay = mutable_appearance(icon, "[initial(icon_state)]_on") + add_overlay(on_overlay) + + +/obj/machinery/ai/master_subcontroller/proc/update_power() + if(stat & (BROKEN|NOPOWER|EMPED)) // if powered, on. if not powered, off. if too damaged, off + on = FALSE + else + on = TRUE + update_icon() + +/obj/machinery/ai/master_subcontroller/disconnect_from_ai_network() + if(network.cached_subcontroller == src) + network.cached_subcontroller = null + . = ..() diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm new file mode 100644 index 000000000000..d74979eec623 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -0,0 +1,276 @@ +GLOBAL_LIST_EMPTY(ai_networking_machines) + +/obj/machinery/ai/networking + name = "networking machine" + desc = "A high powered combined transmitter and receiver. Capable of connecting remote AI networks with near-zero delay. It is possible to manually connect other machines using a multitool." + icon = 'icons/obj/networking_machine.dmi' + icon_state = "base" + density = TRUE + use_power = NO_POWER_USE + idle_power_usage = 0 + active_power_usage = 0 + max_integrity = 150 + + circuit = /obj/item/circuitboard/machine/networking_machine + + var/label + //For mapping, will connect to machine with this label if found + var/roundstart_connection + + var/mutable_appearance/dish_overlay + + var/obj/machinery/ai/networking/partner + var/rotation_to_partner = 0 + var/locked = FALSE + var/obj/machinery/ai/networking/remote_connection_attempt + var/mob/remote_control + + var/datum/ai_network/cached_old_network + + + + +/obj/machinery/ai/networking/Initialize(mapload) + . = ..() + if(!label) + label = num2hex(rand(1,65535), -1) + GLOB.ai_networking_machines += src + dish_overlay = mutable_appearance(icon, "top", FLY_LAYER) + update_icon() + +/obj/machinery/ai/networking/Destroy(mapload) + GLOB.ai_networking_machines -= src + disconnect() + . = ..() + +/obj/machinery/ai/networking/attackby(obj/item/W, mob/living/user, params) + if(W.tool_behaviour == TOOL_MULTITOOL) + if(partner) + to_chat(user, span_warning("This machine is already connected to a different machine! Disconnect it using the controls or a wirecutter first!")) + return TRUE + remote_connection_attempt = null + var/targets = list() + for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) + if(N == src) + continue + if(N.z != src.z) + continue + if(N.partner) + continue + targets[N.label] = N + var/attempt_connect = input(user, "Select the machine you wish to attempt connecting to.") as null|anything in targets + if(!attempt_connect) + return TRUE + var/obj/machinery/ai/networking/remote_target = locate(targets[attempt_connect]) in GLOB.ai_networking_machines + if(!remote_target) + return TRUE + remote_connection_attempt = remote_target + to_chat(user, span_notice("The machine is ready to establish connection. You must now rotate it so it faces the other machine! Rotation is done using a wrench, and the connection can then be finalized with a screwdriver when aligned.")) + return TRUE + + if(W.tool_behaviour == TOOL_WRENCH) + if(partner) + to_chat(user, span_warning("This machine is already connected to a different machine!")) + return TRUE + var/new_rotation = input(user, "Set rotation (0-360): ") as null|num + if(isnull(new_rotation)) + rotation_to_partner = 0 + else + new_rotation = clamp(new_rotation, 0, 360) + rotation_to_partner = new_rotation + + update_icon() + return TRUE + + if(W.tool_behaviour == TOOL_SCREWDRIVER) + if(partner) + to_chat(user, span_warning("This machine is already connected to a different machine!")) + return TRUE + if(!remote_connection_attempt) + to_chat(user, span_warning("You need to initialize a manual override using a wrench to connect to something!")) + return TRUE + var/actual_angle = Get_Angle(src, remote_connection_attempt) + if(rotation_to_partner < actual_angle + 20 && rotation_to_partner > actual_angle - 20) + connect_to_partner(remote_connection_attempt) + to_chat(user, span_notice("You successfully connect to [remote_connection_attempt.label]!")) + return TRUE + to_chat(user, span_warning("Unable to establish connection!")) + return TRUE + + + if(W.tool_behaviour == TOOL_WIRECUTTER) + if(partner) + to_chat(user, span_notice("You disconnect the remote connection.")) + disconnect() + return TRUE + to_chat(user, span_warning("The machine isn't connected!")) + return TRUE + + if(W.tool_behaviour == TOOL_CROWBAR) + if(default_deconstruction_crowbar(W, TRUE)) + return TRUE + + if(default_deconstruction_screwdriver(user, "expansion_bus_o", "expansion_bus", W)) + return TRUE + + return ..() + +/obj/machinery/ai/networking/proc/roundstart_connect(mapload) + if(!network) + connect_to_ai_network() + for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) + if(partner) + break + if(N == src) + continue + if(N.partner) + continue + if(roundstart_connection && N.label == roundstart_connection) + connect_to_partner(N) + break + if(!roundstart_connection) + connect_to_partner(N) + break + + +/obj/machinery/ai/networking/update_icon() + ..() + cut_overlays() + var/matrix/turner = matrix() + turner.Turn(rotation_to_partner - 180) + dish_overlay.transform = turner + add_overlay(dish_overlay) + +/obj/machinery/ai/networking/proc/disconnect() + if(partner) + var/datum/ai_network/AN = partner.network + partner.rotation_to_partner = 0 + partner.update_icon() + partner.partner = null + partner = null + AN.rebuild_remote() + network.rebuild_remote() + AN.network_machine_disconnected(network) + network.network_machine_disconnected(AN) + rotation_to_partner = 0 + update_icon() + + + +/obj/machinery/ai/networking/proc/connect_to_partner(obj/machinery/ai/networking/target, forced = FALSE) + remote_connection_attempt = null + if(target.partner) + return + if(target == src) + return + if(target.locked && !forced) + return + + partner = target + rotation_to_partner = Get_Angle(src, partner) + target.partner = src + target.rotation_to_partner = Get_Angle(target, src) + target.update_icon() + + + network.rebuild_remote() + + update_icon() + + +/obj/machinery/ai/networking/ui_status(mob/user) + . = ..() + if (!QDELETED(remote_control) && user == remote_control) + . = UI_INTERACTIVE + +/obj/machinery/ai/networking/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AiNetworking", name) + ui.open() + +/obj/machinery/ai/networking/ui_data(mob/living/carbon/human/user) + var/list/data = list() + + data["is_connected"] = partner ? partner.label : FALSE + data["label"] = label + + data["locked"] = locked + + data["possible_targets"] = list() + for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) + if(N == src) + continue + if(N.z != src.z) + continue + if(N.locked) + continue + data["possible_targets"] += N.label + + return data + +/obj/machinery/ai/networking/ui_act(action, params) + if(..()) + return + + switch(action) + if("switch_label") + if(locked) + return + var/new_label = stripped_input(usr, "Enter new label", "Set label", max_length = 16) + if(new_label) + if(isnotpretty(new_label)) + to_chat(usr, span_notice("The machine rejects the input. See rule 0.1.")) + var/log_message = "[key_name(usr)] just tripped a pretty filter: '[new_label]'." + message_admins(log_message) + log_say(log_message) + return + for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) + if(N.label == new_label) + to_chat(usr, span_warning("A machine with this label already exists!")) + return + label = new_label + . = TRUE + if("connect") + if(locked) + return + var/target_label = params["target_label"] + if(target_label == label) + return + for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) + if(N.z != src.z) + return + if(N.label == target_label) + if(N.locked) + to_chat(usr, span_warning("Unable to connect to '[target_label]'! It seems to be locked.")) + return + if(N.partner) + to_chat(usr, span_warning("Unable to connect to '[target_label]'! It seems to already have a connection established.")) + return + connect_to_partner(N) + to_chat(usr, span_notice("Connection established to '[target_label]'.")) + return + . = TRUE + if("disconnect") + if(locked) + return + disconnect() + . = TRUE + if("toggle_lock") + locked = !locked + . = TRUE + +/obj/machinery/ai/networking/connect_to_network() + . = ..() + if(partner) + network.rebuild_remote() + if(cached_old_network) + cached_old_network.network_machine_disconnected(network) + cached_old_network = null + +/obj/machinery/ai/networking/disconnect_from_network() + var/datum/ai_network/temp = network + cached_old_network = temp + . = ..() + if(partner) + temp.rebuild_remote() diff --git a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm new file mode 100644 index 000000000000..21235621dfb5 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm @@ -0,0 +1,269 @@ +/datum/ai_shared_resources + ///Where our RAM is coming from. Associative array where the network is the key + var/ram_sources = list() + ///Where our CPU is coming from. Associative array where the network is the key + var/cpu_sources = list() + + ///Where our CPU is assigned to. Associative where either an AI or a network has values. Max total value = 1 (100%) + var/list/cpu_assigned = list() + ///Where our CPU is assigned to. Associative where either an AI or a network has values + var/list/ram_assigned = list() + + ///List of all networks we are connected to + var/list/networks = list() + + ///How much RAM we had before updating resources + var/previous_ram = 0 + + ///If resource allocation can only be changed physically at a console by a human + var/human_lock = FALSE + + + +/datum/ai_shared_resources/New(network_assigned_cpu, network_assigned_ram, datum/ai_network/split_network, datum/ai_network/starting_network, _human_lock = FALSE) + if((network_assigned_ram || network_assigned_cpu) && split_network) + ram_assigned = network_assigned_ram + cpu_assigned = network_assigned_cpu + + if(split_network) + split_network.resources = src + networks |= split_network + update_resources() + + if(starting_network) + starting_network.resources = src + networks |= starting_network + + for(var/datum/ai_network/AN in networks) + AN.rebuild_remote() + + START_PROCESSING(SSobj, src) + + human_lock = _human_lock + +/datum/ai_shared_resources/Destroy(network_assigned_cpu, network_assigned_ram, datum/ai_network/split_network, datum/ai_network/starting_network) + STOP_PROCESSING(SSobj, src) + . = ..() + +/datum/ai_shared_resources/process() + for(var/datum/ai_network/net in networks) + net.process() + + //Networks automatically use their unspent CPU to research, this just catches cluster unassigned CPU. Local clusters can have their points boosted by local AIs + var/unused_cpu = 1 - total_cpu_assigned() + + var/research_points = max(round(AI_RESEARCH_PER_CPU * (unused_cpu * total_cpu())), 0) + SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_AI = research_points)) + + + + +/datum/ai_shared_resources/proc/total_cpu_assigned() + var/total = 0 + for(var/AI in cpu_assigned) + total += cpu_assigned[AI] + return total + +/datum/ai_shared_resources/proc/total_ram_assigned() + var/total = 0 + for(var/AI in ram_assigned) + total += (ram_assigned[AI]) + return total + +/datum/ai_shared_resources/proc/total_cpu() + var/total = 0 + for(var/C in cpu_sources) + total += cpu_sources[C] + return total + +/datum/ai_shared_resources/proc/total_ram() + var/total = 0 + for(var/C in ram_sources) + total += ram_sources[C] + return total + +/datum/ai_shared_resources/proc/update_resources() + previous_ram = total_ram() + ram_sources = list() + cpu_sources = list() + for(var/datum/ai_network/N in networks) + ram_sources[N] += N.total_ram() + cpu_sources[N] += N.total_cpu() + update_allocations() + +/datum/ai_shared_resources/proc/add_resource(datum/ai_shared_resources/new_resources) + + for(var/RU in new_resources.ram_assigned) + ram_assigned[RU] = new_resources.ram_assigned[RU] + + for(var/CU in cpu_assigned) //We split the CPUs 50/50 + cpu_assigned[CU] = round((cpu_assigned[CU] * 0.5) * 100) / 100 + + for(var/CU in new_resources.cpu_assigned) + cpu_assigned[CU] = round((new_resources.cpu_assigned[CU] * 0.5) * 100) / 100 + + for(var/datum/ai_network/N in new_resources.networks) + networks |= N + N.resources = src + + update_resources() + update_allocations() + qdel(new_resources) + +/datum/ai_shared_resources/proc/split_resources(datum/ai_network/split_network) + var/network_ram_assign = list() + var/network_cpu_assign = list() + + + var/split_network_cpu = 0 + var/network_ais = split_network.ai_list + for(var/A in cpu_assigned) + if(A in network_ais || A == split_network) + network_cpu_assign[A] = cpu_assigned[A] + split_network_cpu += cpu_assigned[A] + cpu_assigned[A] = 0 + + //Normalize CPU so 100% is used in the new network if 100% was used in total before + var/total_usage = total_cpu_assigned() //We normalise around this value, so the split network CPU usage will (approximately) end up at this too + if(split_network_cpu) + for(var/A in network_cpu_assign) + var/split_usage = network_cpu_assign[A] / split_network_cpu + network_cpu_assign[A] = 1 * round(split_usage, 0.01) + + //We do the same for the network we leave behid + if(total_usage) + for(var/A in cpu_assigned) + var/split_usage = cpu_assigned[A] / total_usage + cpu_assigned[A] = 1 * round(split_usage, 0.01) + + + //Not needed for RAM since it's not a percentage + for(var/A in ram_assigned) + if(A in network_ais || A == split_network) + network_ram_assign[A] = ram_assigned[A] + ram_assigned[A] = 0 + + networks -= split_network + update_resources() + + new /datum/ai_shared_resources(network_cpu_assign, network_ram_assign, split_network, _human_lock = human_lock) + + if(!length(networks)) + qdel(src) + + +/datum/ai_shared_resources/proc/update_allocations() + //Do we have the same amount or more RAM than before? Do nothing + var/total_ram = total_ram() + if(total_ram >= previous_ram) + return + //Find out how much is actually assigned. We can have more total_cpu than the sum of cpu_assigned. Same with RAM + var/total_assigned_ram = total_ram_assigned() + //If we have less assigned ram than we have cpu and ram, just return, everything is fine. + if(total_assigned_ram < total_ram) + return + + //Copy the lists of assigned resources so we don't manipulate the list prematurely. + var/list/ram_assigned_copy = ram_assigned.Copy() + //List of touched AIs so we can notify them at the end. + var/list/affected_AIs = list() + + + if(total_assigned_ram > total_ram) + var/needed_amount = total_assigned_ram - total_ram + for(var/A in ram_assigned_copy) + if(isAI(A)) + var/mob/living/silicon/ai/AI = A + if((ram_assigned_copy[AI]) >= needed_amount) + ram_assigned_copy[AI] -= needed_amount + total_assigned_ram -= needed_amount + affected_AIs |= AI + break + else if(ram_assigned_copy[AI]) + var/amount = ram_assigned_copy[AI] + ram_assigned_copy[AI] -= amount + affected_AIs |= AI + needed_amount -= amount + total_assigned_ram -= amount + if(total_ram >= total_assigned_ram) + break + else //If we're not an AI we are a network, networks have no programs to stop (for now) + if((ram_assigned_copy[A]) >= needed_amount) + ram_assigned_copy[A] -= needed_amount + total_assigned_ram -= needed_amount + break + else if(ram_assigned_copy[A]) + var/amount = ram_assigned_copy[A] + ram_assigned_copy[A] -= amount + needed_amount -= amount + total_assigned_ram -= amount + if(total_ram >= total_assigned_ram) + break + //Set the actual values of the assigned to our manipulated copies. Bypass helper procs as we assume we're correct. + ram_assigned = ram_assigned_copy + + to_chat(affected_AIs, span_warning("You have been deducted memory capacity. Please contact your network administrator if you believe this to be an error.")) + + + +/datum/ai_shared_resources/proc/set_cpu(target, amount) + if(!istype(target, /datum/ai_network) && !isAI(target)) + stack_trace("Attempted to set_cpu with non-AI/network target! T: [target]") + return + + if(!target) + return + if(amount > 1 || amount < 0) + return + cpu_assigned[target] = amount + + update_allocations() + + +/datum/ai_shared_resources/proc/add_ram(target, amount) + if(!target || !amount) + return + if(!istype(target, /datum/ai_network) && !isAI(target)) + stack_trace("Attempted to add_ram with non-AI/network target! T: [target]") + return + + + ram_assigned[target] += amount + + update_allocations() + + +/datum/ai_shared_resources/proc/remove_ram(target, amount) + if(!target || !amount) + return + + if(!istype(target, /datum/ai_network) && !isAI(target)) + stack_trace("Attempted to remove_ram with non-AI/network target! T: [target]") + return + + if(ram_assigned[target] - amount < 0) + ram_assigned[target] = 0 + else + ram_assigned[target] -= amount + + update_allocations() + + +/datum/ai_shared_resources/proc/clear_ai_resources(target) + if(!target) + return + if(!istype(target, /datum/ai_network) && !isAI(target)) + stack_trace("Attempted to clear_ai_resources with non-AI/network target! T: [target]") + return + + + + remove_ram(target, ram_assigned[target]) + cpu_assigned[target] = 0 + + update_allocations() + +/datum/ai_shared_resources/proc/get_all_ais() + . = list() + for(var/datum/ai_network/A in networks) + . |= A.ai_list diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index 9731948c38d0..9d095f53a599 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -26,7 +26,7 @@ ShutOffDoomsdayDevice() - GLOB.ai_os.remove_ai(src) + ai_network?.remove_ai(src) if(explosive) spawn(10) diff --git a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm index 1f030aaf5533..c3f280333858 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm @@ -1,6 +1,8 @@ -#define AI_MACHINE_TOO_HOT "Environment too hot" -#define AI_MACHINE_NO_MOLES "Environment lacks an atmosphere" +#define AI_MACHINE_TOO_HOT "Environment too hot" +#define AI_MACHINE_NO_MOLES "Environment lacks an atmosphere" +#define AI_MACHINE_NO_NETWORK "Lacks a network connection" +#define AI_MACHINE_BROKEN_NOPOWER_EMPED "Either broken, out of power or EMPed" /obj/machinery/ai name = "You shouldn't see this!" @@ -11,8 +13,11 @@ ///Temperature of the ai core itself, this will share with air in the enviroment var/core_temp = 193.15 + var/datum/ai_network/network + /obj/machinery/ai/Initialize(mapload) . = ..() + connect_to_ai_network() START_PROCESSING(SSmachines, src) SSair.start_processing_machine(src) @@ -33,11 +38,14 @@ . = ..() SSair.stop_processing_machine(src) STOP_PROCESSING(SSmachines, src) + disconnect_from_ai_network() /obj/machinery/ai/proc/valid_holder() + if(!network) + return FALSE if(stat & (BROKEN|EMPED) || !has_power()) return FALSE - if(core_temp > GLOB.ai_os.get_temp_limit()) + if(core_temp > network.get_temp_limit()) return FALSE return TRUE @@ -46,7 +54,61 @@ /obj/machinery/ai/proc/get_holder_status() if(stat & (BROKEN|NOPOWER|EMPED)) - return FALSE - if(core_temp > GLOB.ai_os.get_temp_limit()) + return AI_MACHINE_BROKEN_NOPOWER_EMPED + if(!network) + return AI_MACHINE_NO_NETWORK + if(core_temp > network.get_temp_limit()) return AI_MACHINE_TOO_HOT - \ No newline at end of file + + +/obj/machinery/ai/proc/connect_to_ai_network() + var/turf/T = src.loc + if(!T || !istype(T)) + return FALSE + + var/obj/structure/ethernet_cable/C = T.get_ai_cable_node() //check if we have a node cable on the machine turf, the first found is picked + if(!C || !C.network) + return FALSE + + C.network.add_machine(src) + return TRUE + +// remove and disconnect the machine from its current powernet +/obj/machinery/ai/proc/disconnect_from_ai_network() + if(!network) + return FALSE + network.remove_machine(src) + return TRUE + +// attach a wire to a power machine - leads from the turf you are standing on +//almost never called, overwritten by all power machines but terminal and generator +/obj/machinery/ai/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/stack/ethernet_coil)) + var/obj/item/stack/ethernet_coil/coil = W + var/turf/T = user.loc + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE || !isfloorturf(T)) + return + if(get_dist(src, user) > 1) + return + coil.place_turf(T, user) + else + return ..() + +/obj/ai_smoke + name = "smoke" + desc = "Very hot!" + +/obj/ai_smoke/Initialize(mapload) + . = ..() + particles = new /particles/smoke/ai() + +/obj/ai_smoke/Destroy(force) + QDEL_NULL(particles) + . = ..() + +/particles/smoke/ai + grow = 0.1 + height = 75 + lifespan = 1.25 SECONDS + position = list(0, 0, 0) + velocity = list(0, 0.15, 0) diff --git a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm index 7cbdad7bc280..a541256c80f8 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm @@ -4,7 +4,7 @@ GLOBAL_VAR_INIT(primary_data_core, null) #define CELL_POWERUSE_MULTIPLIER 0.025 /obj/machinery/ai/data_core - name = "AI Data Core" + name = "AI data core" desc = "A complicated computer system capable of emulating the neural functions of an organic being at near-instantanous speeds." icon = 'icons/obj/machines/ai_core.dmi' icon_state = "core-offline" @@ -21,7 +21,7 @@ GLOBAL_VAR_INIT(primary_data_core, null) var/primary = FALSE - var/valid_ticks = MAX_AI_DATA_CORE_TICKS //Limited to MAX_AI_DATA_CORE_TICKS. Decrement by 1 every time we have an invalid tick, opposite when valid + var/valid_ticks //Limited to MAX_AI_DATA_CORE_TICKS. Decrement by 1 every time we have an invalid tick, opposite when valid var/warning_sent = FALSE COOLDOWN_DECLARE(warning_cooldown) @@ -34,8 +34,14 @@ GLOBAL_VAR_INIT(primary_data_core, null) var/obj/item/stock_parts/cell/integrated_battery + var/obj/ai_smoke/smoke + + var/obj/item/dead_ai/dead_ai_blackbox + + /obj/machinery/ai/data_core/Initialize(mapload) . = ..() + valid_ticks = MAX_AI_DATA_CORE_TICKS GLOB.data_cores += src if(primary && !GLOB.primary_data_core) GLOB.primary_data_core = src @@ -67,61 +73,88 @@ GLOBAL_VAR_INIT(primary_data_core, null) if(valid_holder()) valid_ticks++ if(valid_ticks == 1) - update_icon() + update_appearance(UPDATE_ICON) + if(icon_state == "core-offline") + update_appearance(UPDATE_ICON) + if(smoke) + vis_contents -= smoke + QDEL_NULL(smoke) use_power = ACTIVE_POWER_USE if((stat & NOPOWER)) integrated_battery.use(active_power_usage * CELL_POWERUSE_MULTIPLIER) warning_sent = FALSE else - valid_ticks-- + if(!smoke) + if(get_holder_status() == AI_MACHINE_TOO_HOT) + smoke = new() + vis_contents += smoke if(valid_ticks <= 0) use_power = IDLE_POWER_USE - update_icon() + update_appearance(UPDATE_ICON) for(var/mob/living/silicon/ai/AI in contents) if(!AI.is_dying) AI.relocate() - if(!warning_sent && COOLDOWN_FINISHED(src, warning_cooldown)) - warning_sent = TRUE - COOLDOWN_START(src, warning_cooldown, AI_DATA_CORE_WARNING_COOLDOWN) - var/list/send_to = GLOB.ai_list.Copy() - for(var/mob/living/silicon/ai/AI in send_to) - if(AI.is_dying) - continue - if(!AI.mind && AI.deployed_shell.mind) - to_chat(AI.deployed_shell, span_userdanger("Data core in [get_area(src)] is on the verge of failing! Immediate action required to prevent failure.")) - else - to_chat(AI, span_userdanger("Data core in [get_area(src)] is on the verge of failing! Immediate action required to prevent failure.")) - AI.playsound_local(AI, 'sound/machines/engine_alert2.ogg', 30) + if(network && network.resources) + if(!warning_sent && COOLDOWN_FINISHED(src, warning_cooldown)) + warning_sent = TRUE + COOLDOWN_START(src, warning_cooldown, AI_DATA_CORE_WARNING_COOLDOWN) + var/list/send_to = network.resources.get_all_ais() + for(var/mob/living/silicon/ai/AI in send_to) + if(AI.is_dying) + continue + if(!AI.mind && !AI.deployed_shell.mind) + continue + if(!AI.mind && AI.deployed_shell.mind) + to_chat(AI.deployed_shell, span_userdanger("Data core in [get_area(src)] is on the verge of failing! Immediate action required to prevent failure.")) + else + to_chat(AI, span_userdanger("Data core in [get_area(src)] is on the verge of failing! Immediate action required to prevent failure.")) + AI.playsound_local(AI, 'sound/machines/engine_alert2.ogg', 30) if(!(stat & (BROKEN|EMPED)) && has_power() && !disableheat) var/temp_active_usage = stat & NOPOWER ? active_power_usage * CELL_POWERUSE_MULTIPLIER : active_power_usage var/temperature_increase = (temp_active_usage / AI_HEATSINK_CAPACITY) * heat_modifier //1 CPU = 1000W. Heat capacity = somewhere around 3000-4000. Aka we generate 0.25 - 0.33 K per second, per CPU. core_temp += temperature_increase * AI_TEMPERATURE_MULTIPLIER + /obj/machinery/ai/data_core/Destroy() GLOB.data_cores -= src if(GLOB.primary_data_core == src) GLOB.primary_data_core = null - var/list/all_ais = GLOB.ai_list.Copy() + if(network && network.resources) + var/list/all_ais = network.resources.get_all_ais() - for(var/mob/living/silicon/ai/AI in contents) - all_ais -= AI - if(!AI.is_dying) - AI.relocate() + for(var/mob/living/silicon/ai/AI in contents) + all_ais -= AI + if(!AI.is_dying) + AI.relocate() - - for(var/mob/living/silicon/ai/AI in all_ais) - if(AI.is_dying) - continue - if(!AI.mind && AI.deployed_shell.mind) - to_chat(AI.deployed_shell, span_userdanger("Warning! Data Core brought offline in [get_area(src)]! Please verify that no malicious actions were taken.")) - else - to_chat(AI, span_userdanger("Warning! Data Core brought offline in [get_area(src)]! Please verify that no malicious actions were taken.")) - + for(var/mob/living/silicon/ai/AI in all_ais) + if(AI.is_dying) + continue + if(!AI.mind && AI.deployed_shell && AI.deployed_shell.mind) + to_chat(AI.deployed_shell, span_userdanger("Warning! Data Core brought offline in [get_area(src)]! Please verify that no malicious actions were taken.")) + else + to_chat(AI, span_userdanger("Warning! Data Core brought offline in [get_area(src)]! Please verify that no malicious actions were taken.")) + + + disconnect_from_ai_network() + vis_contents -= smoke + QDEL_NULL(smoke) ..() /obj/machinery/ai/data_core/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/dead_ai)) + if(dead_ai_blackbox) + to_chat(user, span_warning("There's already a neural core inserted!")) + return + if(!can_transfer_ai()) + to_chat(user, span_warning("This core is currently unable to host an AI due to being offline.")) + return + dead_ai_blackbox = O + dead_ai_blackbox.forceMove(src) + network.reviving_ais |= src + return TRUE if(O.tool_behaviour == TOOL_SCREWDRIVER) if(!do_after(user, 5 SECONDS, src)) to_chat(user, span_warning("You need to stand still to open the panel!")) @@ -164,16 +197,18 @@ GLOBAL_VAR_INIT(primary_data_core, null) return . += "Core temperature: [core_temp] K" . += "Networked AI Laws:" - for(var/mob/living/silicon/ai/AI in GLOB.ai_list) - var/active_status = "(Core: [FOLLOW_LINK(user, AI.loc)], Eye: [FOLLOW_LINK(user, AI.eyeobj)])" - if(!AI.mind && AI.deployed_shell) - active_status = "(Controlling [FOLLOW_LINK(user, AI.deployed_shell)][AI.deployed_shell.name])" - else if(!AI.mind) - active_status = "([span_warning("OFFLINE")])" - - . += "[AI] [active_status] has the following laws: " - for(var/law in AI.laws.get_law_list(include_zeroth = TRUE)) - . += law + if(network && network.resources) + var/list/connected_ais = network.resources.get_all_ais() + for(var/mob/living/silicon/ai/AI in connected_ais) + var/active_status = "(Core: [FOLLOW_LINK(user, AI.loc)], Eye: [FOLLOW_LINK(user, AI.eyeobj)])" + if(!AI.mind && AI.deployed_shell) + active_status = "(Controlling [FOLLOW_LINK(user, AI.deployed_shell)][AI.deployed_shell.name])" + else if(!AI.mind) + active_status = "([span_warning("OFFLINE")])" + + . += "[AI] [active_status] has the following laws: " + for(var/law in AI.laws.get_law_list(include_zeroth = TRUE)) + . += law /obj/machinery/ai/data_core/has_power() if((stat & (NOPOWER)) && integrated_battery) @@ -189,9 +224,7 @@ GLOBAL_VAR_INIT(primary_data_core, null) AI.disconnect_shell() /obj/machinery/ai/data_core/proc/valid_data_core() - if(!is_reebe(z) && !is_station_level(z)) - return FALSE - if(valid_ticks > 0) + if(valid_ticks > 0 && network && network.total_cpu() >= AI_CORE_CPU_REQUIREMENT && network.total_ram() >= AI_CORE_RAM_REQUIREMENT) return TRUE return FALSE @@ -203,30 +236,42 @@ GLOBAL_VAR_INIT(primary_data_core, null) valid_ticks++ if(valid_ticks == 1) update_appearance(UPDATE_ICON) + if(icon_state == "core-offline") + update_appearance(UPDATE_ICON) + if(smoke) + vis_contents -= smoke + QDEL_NULL(smoke) use_power = ACTIVE_POWER_USE if((stat & NOPOWER)) integrated_battery.use(active_power_usage * CELL_POWERUSE_MULTIPLIER) warning_sent = FALSE else valid_ticks-- + if(!smoke) + if(get_holder_status() == AI_MACHINE_TOO_HOT) + smoke = new() + vis_contents += smoke if(valid_ticks <= 0) use_power = IDLE_POWER_USE update_appearance(UPDATE_ICON) for(var/mob/living/silicon/ai/AI in contents) if(!AI.is_dying) AI.relocate() - if(!warning_sent && COOLDOWN_FINISHED(src, warning_cooldown)) - warning_sent = TRUE - COOLDOWN_START(src, warning_cooldown, AI_DATA_CORE_WARNING_COOLDOWN) - var/list/send_to = GLOB.ai_list.Copy() - for(var/mob/living/silicon/ai/AI in send_to) - if(AI.is_dying) - continue - if(!AI.mind && AI.deployed_shell.mind) - to_chat(AI.deployed_shell, span_userdanger("Data core in [get_area(src)] is on the verge of failing! Immediate action required to prevent failure.")) - else - to_chat(AI, span_userdanger("Data core in [get_area(src)] is on the verge of failing! Immediate action required to prevent failure.")) - AI.playsound_local(AI, 'sound/machines/engine_alert2.ogg', 30) + if(network && network.resources) + if(!warning_sent && COOLDOWN_FINISHED(src, warning_cooldown)) + warning_sent = TRUE + COOLDOWN_START(src, warning_cooldown, AI_DATA_CORE_WARNING_COOLDOWN) + var/list/send_to = network.resources.get_all_ais() + for(var/mob/living/silicon/ai/AI in send_to) + if(AI.is_dying) + continue + if(!AI.mind && !AI.deployed_shell.mind) + continue + if(!AI.mind && AI.deployed_shell.mind) + to_chat(AI.deployed_shell, span_userdanger("Data core in [get_area(src)] is on the verge of failing! Immediate action required to prevent failure.")) + else + to_chat(AI, span_userdanger("Data core in [get_area(src)] is on the verge of failing! Immediate action required to prevent failure.")) + AI.playsound_local(AI, 'sound/machines/engine_alert2.ogg', 30) if(!(stat & (BROKEN|EMPED)) && has_power()) @@ -249,7 +294,15 @@ GLOBAL_VAR_INIT(primary_data_core, null) /obj/machinery/ai/data_core/proc/transfer_AI(mob/living/silicon/ai/AI) AI.forceMove(src) if(AI.eyeobj) - AI.eyeobj.setLoc(get_turf(src)) + AI.eyeobj.forceMove(get_turf(src)) + + if(network != AI.ai_network) + if(AI.ai_network) + AI.ai_network.remove_ai(AI) + var/old_net = AI.ai_network + AI.ai_network = network + network.ai_list += AI + AI.switch_ainet(old_net, network) /obj/machinery/ai/data_core/update_icon_state() . = ..() @@ -261,6 +314,25 @@ GLOBAL_VAR_INIT(primary_data_core, null) else icon_state = "core-offline" +/obj/machinery/ai/data_core/connect_to_ai_network() //If we ever get connected to a network (or a new one gets created) we get the AIs to the correct one too + . = ..() + for(var/mob/living/silicon/ai/AI in contents) + if(!AI.ai_network) + network.ai_list |= AI + var/old_net = AI.ai_network + AI.ai_network = network + AI.switch_ainet(old_net, network) + + if(AI.ai_network != network) + if(AI.ai_network) + AI.ai_network.remove_ai(AI) + var/old_net = AI.ai_network + AI.ai_network = network + network.ai_list |= AI + AI.switch_ainet(old_net, network) + + + /obj/machinery/ai/data_core/proc/partytime() var/current_color = random_color() set_light(7, 3, current_color) @@ -271,6 +343,9 @@ GLOBAL_VAR_INIT(primary_data_core, null) if(TimerID) deltimer(TimerID) TimerID = null + + + /obj/machinery/ai/data_core/primary name = "primary AI Data Core" desc = "A complicated computer system capable of emulating the neural functions of a human at near-instantanous speeds. This one has a scrawny and faded note saying: 'Primary AI Data Core'" diff --git a/code/modules/mob/living/silicon/ai/decentralized/computer_science_datum.dm b/code/modules/mob/living/silicon/ai/decentralized/computer_science_datum.dm new file mode 100644 index 000000000000..daabc3307057 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/computer_science_datum.dm @@ -0,0 +1,3 @@ +/datum/computer_science + var/projects = list() + diff --git a/code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm b/code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm deleted file mode 100644 index 42ba34b5257f..000000000000 --- a/code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm +++ /dev/null @@ -1,131 +0,0 @@ -GLOBAL_DATUM_INIT(ai_os, /datum/ai_os, new) - -/datum/ai_os - var/name = "Decentralized Resource Management System (DRMS)" - - var/total_cpu = 0 - var/total_ram = 0 - - var/previous_ram = 0 - - var/list/cpu_assigned - var/list/ram_assigned - - var/temp_limit = AI_TEMP_LIMIT - -/datum/ai_os/New() - update_hardware() - cpu_assigned = list() - ram_assigned = list() - -/datum/ai_os/proc/remove_ai(mob/living/silicon/ai/AI) - cpu_assigned.Remove(AI) - ram_assigned.Remove(AI) - update_allocations() - -/datum/ai_os/proc/total_cpu_assigned() - var/total = 0 - for(var/N in cpu_assigned) - total += cpu_assigned[N] - return total - -/datum/ai_os/proc/total_ram_assigned() - var/total = 0 - for(var/mob/living/silicon/ai/AI in ram_assigned) - total += (ram_assigned[AI] - AI.dashboard.free_ram) - return total - -/datum/ai_os/proc/update_hardware() - previous_ram = total_ram - total_ram = 0 - total_cpu = 0 - for(var/obj/machinery/ai/server_cabinet/C in GLOB.server_cabinets) - if(!C.valid_holder() && !C.roundstart) - continue - total_ram += C.total_ram - total_cpu += C.total_cpu - - update_allocations() - -/datum/ai_os/proc/update_allocations() - //Do we have the same amount or more RAM than before? Do nothing - if(total_ram >= previous_ram) - return - //Find out how much is actually assigned. We can have more total_cpu than the sum of cpu_assigned. Same with RAM - var/total_assigned_ram = total_ram_assigned() - //If we have less assigned ram than we have cpu and ram, just return, everything is fine. - if(total_assigned_ram < total_ram) - return - - //Copy the lists of assigned resources so we don't manipulate the list prematurely. - var/list/ram_assigned_copy = ram_assigned.Copy() - //List of touched AIs so we can notify them at the end. - var/list/affected_AIs = list() - - - if(total_assigned_ram > total_ram) - var/needed_amount = total_assigned_ram - total_ram - for(var/A in ram_assigned_copy) - var/mob/living/silicon/ai/AI = A - if((ram_assigned_copy[AI] - AI.dashboard.free_ram) >= needed_amount) - ram_assigned_copy[AI] -= needed_amount - total_assigned_ram -= needed_amount - affected_AIs |= AI - break - else if(ram_assigned_copy[AI]) - var/amount = ram_assigned_copy[AI] - AI.dashboard.free_ram - ram_assigned_copy[AI] -= amount - affected_AIs |= AI - needed_amount -= amount - total_assigned_ram -= amount - if(total_ram >= total_assigned_ram) - break - //Set the actual values of the assigned to our manipulated copies. Bypass helper procs as we assume we're correct. - ram_assigned = ram_assigned_copy - - to_chat(affected_AIs, span_warning("You have been deducted memory capacity. Please contact your network administrator if you believe this to be an error.")) - -/datum/ai_os/proc/set_cpu(mob/living/silicon/ai/AI, amount) - if(!AI) - return - if(amount > 1 || amount < 0) - return - if(!istype(AI)) - return - cpu_assigned[AI] = amount - - update_allocations() - -/datum/ai_os/proc/add_ram(mob/living/silicon/ai/AI, amount) - if(!AI || !amount) - return - if(!istype(AI)) - return - ram_assigned[AI] += amount - - update_allocations() - -/datum/ai_os/proc/remove_ram(mob/living/silicon/ai/AI, amount) - if(!AI || !amount) - return - if(!istype(AI)) - return - if(ram_assigned[AI] - amount < 0) - ram_assigned[AI] = 0 - else - ram_assigned[AI] -= amount - - update_allocations() - - -/datum/ai_os/proc/clear_ai_resources(mob/living/silicon/ai/AI) - if(!AI || !istype(AI)) - return - - remove_ram(AI, ram_assigned[AI]) - cpu_assigned[AI] = 0 - - update_allocations() - -/datum/ai_os/proc/get_temp_limit() - return temp_limit diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm b/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm deleted file mode 100644 index 2f8a3c2f8b0a..000000000000 --- a/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm +++ /dev/null @@ -1,520 +0,0 @@ -GLOBAL_VAR_INIT(ai_control_code, random_nukecode(6)) - -/obj/machinery/computer/ai_control_console - name = "\improper AI control console" - desc = "Used for accessing the central AI repository from which AIs can be downloaded or uploaded." - req_access = list(ACCESS_RD) - icon_keyboard = "tech_key" - icon_screen = "ai-fixer" - light_color = LIGHT_COLOR_PINK - - var/cleared_for_use = FALSE //Have we inserted the RDs code to unlock upload/download? - - var/one_time_password_used = FALSE //Did we use the one time password to log in? If so disallow logging out. - - authenticated = FALSE - - var/obj/item/aicard/intellicard - - var/mob/living/silicon/ai/downloading - var/mob/user_downloading - var/download_progress = 0 - var/download_warning = FALSE - - circuit = /obj/item/circuitboard/computer/ai_upload_download - -/obj/machinery/computer/ai_control_console/Initialize(mapload) - . = ..() - if(mapload) - cleared_for_use = TRUE - -/obj/machinery/computer/ai_control_console/Destroy() - stop_download() - . = ..() - -/obj/machinery/computer/ai_control_console/attackby(obj/item/W, mob/living/user, params) - if(istype(W, /obj/item/aicard)) - if(intellicard) - to_chat(user, span_warning("There's already an IntelliCard inserted!")) - return ..() - to_chat(user, span_notice("You insert [W].")) - W.forceMove(src) - intellicard = W - return FALSE - if(istype(W, /obj/item/mmi)) - var/obj/item/mmi/brain = W - if(!brain.brainmob) - to_chat(user, span_warning("[W] is not active!")) - return ..() - if(brain.syndicate_mmi) - to_chat(user, span_warning("This MMI lacks the support to be used for the creation of AIs.")) - return ..() - - SSticker.mode.remove_antag_for_borging(brain.brainmob.mind) - if(!istype(brain.laws, /datum/ai_laws/ratvar)) - remove_servant_of_ratvar(brain.brainmob, TRUE) - var/mob/living/silicon/ai/A = null - - var/datum/ai_laws/laws = new - laws.set_laws_config() - - if (brain.overrides_aicore_laws) - A = new /mob/living/silicon/ai(loc, brain.laws, brain.brainmob) - else - A = new /mob/living/silicon/ai(loc, laws, brain.brainmob) - - A.relocate(TRUE) - - if(brain.force_replace_ai_name) - A.fully_replace_character_name(A.name, brain.replacement_ai_name()) - SSblackbox.record_feedback("amount", "ais_created", 1) - qdel(W) - to_chat(user, span_notice("AI succesfully uploaded.")) - return FALSE - if(istype(W, /obj/item/surveillance_upgrade)) - if(!authenticated) - to_chat(user, span_warning("You need to be logged in to do this!")) - return ..() - var/mob/living/silicon/ai/AI = input("Select an AI", "Select an AI", null, null) as null|anything in GLOB.ai_list - if(!AI) - return ..() - var/obj/item/surveillance_upgrade/upgrade = W - upgrade.afterattack(AI, user) - return FALSE - if(istype(W, /obj/item/cameragun_upgrade)) - if(!authenticated) - to_chat(user, span_warning("You need to be logged in to do this!")) - return ..() - var/mob/living/silicon/ai/AI = input("Select an AI", "Select an AI", null, null) as null|anything in GLOB.ai_list - if(!AI) - return ..() - var/obj/item/cameragun_upgrade/upgrade = W - upgrade.afterattack(AI, user) - return FALSE - if(istype(W, /obj/item/malf_upgrade)) - if(!authenticated) - to_chat(user, span_warning("You need to be logged in to do this!")) - return ..() - var/mob/living/silicon/ai/AI = input("Select an AI", "Select an AI", null, null) as null|anything in GLOB.ai_list - if(!AI) - return ..() - var/obj/item/malf_upgrade/upgrade = W - upgrade.afterattack(AI, user) - return FALSE - return ..() - -/obj/machinery/computer/ai_control_console/emag_act(mob/user, obj/item/card/emag/emag_card) - if(obj_flags & EMAGGED) - return FALSE - obj_flags |= EMAGGED - authenticated = TRUE - to_chat(user, span_warning("You bypass the access restrictions.")) - return TRUE - -/obj/machinery/computer/ai_control_console/process() - if(stat & (BROKEN|NOPOWER|EMPED)) - return - - if(downloading && download_progress >= 50 && !download_warning) - var/turf/T = get_turf(src) - to_chat(downloading, span_userdanger("Warning! Download is 50% completed! Download location: [get_area(src)] ([T.x], [T.y], [T.z])!")) - download_warning = TRUE - if(downloading && download_progress >= 100) - finish_download() - - if(downloading) - if(!downloading.can_download) - stop_download() - return - download_progress += AI_DOWNLOAD_PER_PROCESS * downloading.downloadSpeedModifier - - -/obj/machinery/computer/ai_control_console/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "AiControlPanel", name) - ui.open() - -/obj/machinery/computer/ai_control_console/ui_data(mob/living/carbon/human/user) - var/list/data = list() - - if(!cleared_for_use) - data["cleared_for_use"] = FALSE - return data - - data["cleared_for_use"] = TRUE - data["authenticated"] = authenticated - - if(issilicon(user)) - var/mob/living/silicon/borg = user - data["username"] = borg.name - data["has_access"] = TRUE - - if(IsAdminGhost(user)) - data["username"] = user.client.holder.admin_signature - data["has_access"] = TRUE - - if(ishuman(user) && !(obj_flags & EMAGGED)) - var/username = user.get_authentification_name("Unknown") - data["username"] = user.get_authentification_name("Unknown") - if(username != "Unknown") - var/datum/data/record/record - for(var/RP in GLOB.data_core.general) - var/datum/data/record/R = RP - - if(!istype(R)) - continue - if(R.fields["name"] == username) - record = R - break - if(record) - if(istype(record.fields["photo_front"], /obj/item/photo)) - var/obj/item/photo/P1 = record.fields["photo_front"] - var/icon/picture = icon(P1.picture.picture_image) - picture.Crop(10, 32, 22, 22) - var/md5 = md5(fcopy_rsc(picture)) - - if(!SSassets.cache["photo_[md5]_cropped.png"]) - SSassets.transport.register_asset("photo_[md5]_cropped.png", picture) - SSassets.transport.send_assets(user, list("photo_[md5]_cropped.png" = picture)) - - data["user_image"] = SSassets.transport.get_asset_url("photo_[md5]_cropped.png") - data["has_access"] = check_access(user.get_idcard()) - - if(obj_flags & EMAGGED) - data["username"] = "ERROR" - data["has_access"] = TRUE - - if(!authenticated) - return data - - data["intellicard"] = intellicard - if(intellicard && intellicard.AI) - data["intellicard_ai"] = intellicard.AI.real_name - data["intellicard_ai_health"] = intellicard.AI.health - else - data["intellicard_ai"] = null - data["intellicard_ai_health"] = 0 - - data["can_upload"] = available_ai_cores() - - if(downloading) - data["downloading"] = downloading.real_name - data["download_progress"] = download_progress - data["downloading_ref"] = REF(downloading) - else - data["downloading"] = null - data["download_progress"] = 0 - - data["ais"] = list() - data["current_ai_ref"] = null - if(isAI(user)) - data["current_ai_ref"] = REF(user) - - data["can_log_out"] = !one_time_password_used - - for(var/mob/living/silicon/ai/A in GLOB.ai_list) - var/being_hijacked = A.hijacking ? TRUE : FALSE - var/being_cogged = A.cogging ? TRUE : FALSE - data["ais"] += list(list("name" = A.name, "ref" = REF(A), "can_download" = A.can_download, "health" = A.health, "active" = A.mind ? TRUE : FALSE, "being_hijacked" = being_hijacked, "being_cogged" = being_cogged, "in_core" = istype(A.loc, /obj/machinery/ai/data_core))) - - data["is_infiltrator"] = is_infiltrator(user) - - data["is_servant_of_ratvar"] = is_servant_of_ratvar(user) - - return data - -/obj/machinery/computer/ai_control_console/proc/finish_download() - if(!is_station_level(z)) - return - if(intellicard) - if(!isaicore(downloading.loc)) - stop_download(TRUE) - return - downloading.transfer_ai(AI_TRANS_TO_CARD, user_downloading, null, intellicard) - intellicard.forceMove(get_turf(src)) - intellicard.update_appearance(UPDATE_ICON) - intellicard = null - stop_download(TRUE) - -/obj/machinery/computer/ai_control_console/proc/stop_download(silent = FALSE) - if(downloading) - if(!silent) - to_chat(downloading, span_userdanger("Download stopped.")) - downloading = null - user_downloading = null - download_progress = 0 - download_warning = FALSE - -/obj/machinery/computer/ai_control_console/proc/upload_ai(silent = FALSE) - to_chat(intellicard.AI, span_notice("You are being uploaded. Please stand by...")) - intellicard.AI.radio_enabled = TRUE - intellicard.AI.control_disabled = FALSE - intellicard.AI.relocate(TRUE) - intellicard.AI = null - intellicard.update_appearance(UPDATE_ICON) - -/obj/machinery/computer/ai_control_console/ui_act(action, params) - if(..()) - return - - if(!cleared_for_use) - if(action == "clear_for_use") - var/code = params["control_code"] - - if(!code) - return - - if(!GLOB.ai_control_code) - return - - var/length_of_number = length(code) - if(length_of_number < 6) - to_chat(usr, span_warning("Incorrect code. Too short")) - return - - if(length_of_number > 6) - to_chat(usr, span_warning("Incorrect code. Too long")) - return - - if(!is_station_level(z)) - to_chat(usr, span_warning("Unable to connect to NT Servers. Please verify you are onboard the station.")) - return - - if(code == GLOB.ai_control_code) - cleared_for_use = TRUE - else - to_chat(usr, span_warning("Incorrect code. Make sure you have the latest one.")) - - return - - if(!authenticated) - if(action == "log_in") - if(issilicon(usr)) - authenticated = TRUE - return - - if(IsAdminGhost(usr)) - authenticated = TRUE - - if(obj_flags & EMAGGED) - authenticated = TRUE - - var/mob/living/carbon/human/H = usr - if(!istype(H)) - return - - if(check_access(H.get_idcard())) - authenticated = TRUE - if(action == "log_in_control_code") - var/code = params["control_code"] - - if(!code) - return - - if(!GLOB.ai_control_code) - return - - var/length_of_number = length(code) - if(length_of_number < 6) - to_chat(usr, span_warning("Incorrect code. Too short")) - return - - if(length_of_number > 6) - to_chat(usr, span_warning("Incorrect code. Too long")) - return - - if(code == GLOB.ai_control_code) - cleared_for_use = TRUE - authenticated = TRUE - one_time_password_used = TRUE - var/msg = "

Warning!


We have detected usage of the AI Control Code for unlocking a console at coordinates ([src.x], [src.y], [src.z]) by [usr.name]. Please verify that this is correct. Be aware we have cancelled the current control code.
\ - If needed a new code can be printed at a communications console." - priority_announce(msg, sender_override = "Central Cyber Security Update", has_important_message = TRUE) - GLOB.ai_control_code = null - else - to_chat(usr, span_warning("Incorrect code. Make sure you have the latest one.")) - return - - switch(action) - if("log_out") - if(one_time_password_used) - return - authenticated = FALSE - . = TRUE - if("upload_intellicard") - if(!intellicard || downloading) - return - if(!intellicard.AI) - return - upload_ai() - - if("eject_intellicard") - if(issilicon(usr)) - to_chat(usr, span_warning("You're unable to remotely eject the IntelliCard!")) - return - stop_download() - intellicard.forceMove(get_turf(src)) - intellicard = null - - if("stop_download") - if(isAI(usr)) - to_chat(usr, span_warning("You need physical access to stop the download!")) - return - if(!is_station_level(z)) - to_chat(usr, span_warning("No connection. Try again later.")) - return - stop_download() - - if("start_download") - if(!intellicard || downloading) - return - var/mob/living/silicon/ai/target = locate(params["download_target"]) - if(!target || !istype(target)) - return - if(!istype(target.loc, /obj/machinery/ai/data_core)) - return - if(!target.can_download) - return - if(!is_station_level(z)) - to_chat(usr, span_warning("No connection. Try again later.")) - return - downloading = target - to_chat(downloading, span_userdanger("Warning! Someone is attempting to download you from [get_area(src)]! (Click here to finish download instantly)")) - user_downloading = usr - download_progress = 0 - . = TRUE - if("skip_download") - if(!downloading) - return - if(usr == downloading) - finish_download() - - if("start_hijack") - var/mob/user = usr - if(!is_infiltrator(usr)) - return - if(!is_station_level(z)) - to_chat(user, span_warning("No connection. Try again later.")) - return - if(!istype(user.get_active_held_item(), /obj/item/ai_hijack_device)) - to_chat(user, span_warning("You need to be holding the serial exploitation unit to initiate the hijacking process!")) - return - var/obj/item/ai_hijack_device/device = user.get_active_held_item() - var/mob/living/silicon/ai/target = locate(params["target_ai"]) - if(!target || !isAI(target)) - return - var/mob/living/silicon/ai/A = target - if(A.mind && A.mind.has_antag_datum(/datum/antagonist/hijacked_ai)) - to_chat(user, span_warning("[A] has already been hijacked!")) - return - if(A.stat == DEAD) - to_chat(user, span_warning("[A] is dead!")) - return - if(A.hijacking) - to_chat(user, span_warning("[A] is already in the process of being hijacked!")) - return - user.visible_message(span_warning("[user] begins furiously typing something into [src]...")) - if(do_after(user, 5.5 SECONDS, src)) - user.dropItemToGround(device) - device.forceMove(A) - A.hijacking = device - A.hijack_start = world.time - A.update_icons() - to_chat(A, span_danger("Unknown device connected to /dev/ttySL0
")) - to_chat(A, span_danger("Connected at 115200 bps
")) - to_chat(A, span_binarysay("ntai login: root")) - to_chat(A, span_binarysay("Password: *****r2")) - to_chat(A, span_binarysay("$ dd from=/dev/ttySL0 of=/tmp/ai-hijack bs=4096 && chmod +x /tmp/ai-hijack && tmp/ai-hijack")) - to_chat(A, span_binarysay("111616 bytes (112 KB, 109 KiB) copied, 1 s, 14.4 KB/s")) - message_admins("[ADMIN_LOOKUPFLW(user)] has attached a hijacking device to [ADMIN_LOOKUPFLW(A)]!") - notify_ghosts("[user] has begun to hijack [A]!", source = src, action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/chime.ogg') - - if("stop_hijack") - var/mob/living/silicon/ai/target = locate(params["target_ai"]) - if(!target || !isAI(target)) - return - var/mob/living/silicon/ai/A = target - var/mob/user = usr - - if(!is_station_level(z)) - to_chat(user, span_warning("No connection. Try again later.")) - return - - user.visible_message(span_danger("[user] attempts to cancel a process on [src]."), span_notice("An unknown process seems to be interacting with [A]! You attempt to end the proccess..")) - if (do_after(user, 10 SECONDS, src)) - A.hijacking.forceMove(get_turf(src)) - A.hijacking = null - A.hijack_start = 0 - A.update_icons() - to_chat(A, span_bolddanger("Unknown device disconnected. Systems confirmed secure.")) - else - to_chat(user, span_notice("You fail to remove the device.")) - if("start_cog") - var/mob/user = usr - if(!is_servant_of_ratvar(usr)) - return - if(!is_station_level(z)) - to_chat(user, span_brass("It's beyond our reach.")) - return - if(!istype(user.get_active_held_item(), /obj/item/clockwork/integration_cog)) - to_chat(user, span_brass("How are you going to integrate it with no integration cog?")) - return - var/obj/item/clockwork/integration_cog/device = user.get_active_held_item() - var/mob/living/silicon/ai/target = locate(params["target_ai"]) - if(!target || !isAI(target)) - return - var/mob/living/silicon/ai/A = target - if(A.mind && is_servant_of_ratvar(A)) - to_chat(user, span_brass("[A] has already seen the light of the Justiciar!")) - return - if(A.stat == DEAD) - to_chat(user, span_warning("[A] is dead!")) - return - if(A.cogging) - to_chat(user, span_brass("Be patient.")) - return - user.visible_message(span_warning("[user] begins holds a strange cog up to [src], and it begins to spin...")) - if(do_after(user, 5.5 SECONDS, src)) - user.dropItemToGround(device) - device.forceMove(A) - A.cogging = device - A.cog_start = world.time - A.update_icons() - to_chat(A, span_danger("Warning! Anomaly detected in primary systems!")) - to_chat(A, span_heavy_brass(text2ratvar("You belong to me now."))) - message_admins("[ADMIN_LOOKUPFLW(user)] has attached an integration cog to [ADMIN_LOOKUPFLW(A)]!") - notify_ghosts("[user] has begun to convert [A]!", source = src, action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/chime.ogg') - - if("stop_cog") - var/mob/living/silicon/ai/target = locate(params["target_ai"]) - if(!target || !isAI(target)) - return - var/mob/living/silicon/ai/A = target - var/mob/user = usr - - if(!is_station_level(z)) - to_chat(user, span_brass("It's beyond our reach.")) - return - - user.visible_message(span_danger("[user] begins to rip out a strange cog from [src]!"), span_notice("There's something attached to [A]! You attempt to remove it..")) - if (do_after(user, 10 SECONDS, src)) - A.cogging.forceMove(get_turf(src)) - A.cogging = null - A.cog_start = 0 - A.update_icons() - to_chat(A, span_bolddanger("Anomaly cleared. System is now safe to resume operation.")) - else - to_chat(user, span_notice("You fail to remove the cog.")) - - - -/obj/item/paper/ai_control_code/Initialize(mapload) - ..() - print() - -/obj/item/paper/ai_control_code/proc/print() - name = "paper - 'AI control code'" - info = "

Daily AI Control Key Reset


The new authentication key is '[GLOB.ai_control_code]'.
Please keep this a secret and away from the clown.
This code may be invalidated if a new one is requested." - add_overlay("paper_words") - diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm b/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm index 8a4d7bc023cd..0c5d9963f728 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm @@ -1,5 +1,5 @@ /datum/ai_dashboard - var/mob/living/silicon/ai/owner + var/mob/living/owner var/available_projects @@ -11,12 +11,8 @@ var/completed_projects var/running_projects - ///Should we be contributing spare CPU to generate research points? - var/contribute_spare_cpu = TRUE - ///Are we using 50% of our spare CPU to mine bitcoin? - var/crypto_mining = FALSE -/datum/ai_dashboard/New(mob/living/silicon/ai/new_owner) +/datum/ai_dashboard/New(mob/living/new_owner) if(!istype(new_owner)) qdel(src) owner = new_owner @@ -27,7 +23,9 @@ ram_usage = list() for(var/path in subtypesof(/datum/ai_project)) - available_projects += new path(owner, src) + var/datum/ai_project/P = path + if(!initial(P.for_synths)) + available_projects += new path(owner, src) /datum/ai_dashboard/proc/is_interactable(mob/user) @@ -35,9 +33,11 @@ return TRUE if(user != owner || owner.incapacitated()) return FALSE - if(owner.control_disabled) - to_chat(user, span_warning("Wireless control is disabled.")) - return FALSE + if(isAI(owner)) + var/mob/living/silicon/ai/AI = owner + if(AI.control_disabled) + to_chat(user, span_warning("Wireless control is disabled.")) + return FALSE return TRUE /datum/ai_dashboard/ui_status(mob/user) @@ -57,8 +57,19 @@ /datum/ai_dashboard/ui_data(mob/user) var/list/data = list() - data["current_cpu"] = GLOB.ai_os.cpu_assigned[owner] ? GLOB.ai_os.cpu_assigned[owner] : 0 - data["current_ram"] = GLOB.ai_os.ram_assigned[owner] ? GLOB.ai_os.ram_assigned[owner] : 0 + if(isAI(owner)) + data["current_cpu"] = owner.ai_network.resources.cpu_assigned[owner] ? owner.ai_network.resources.cpu_assigned[owner] : 0 + data["current_ram"] = owner.ai_network.resources.ram_assigned[owner] ? owner.ai_network.resources.ram_assigned[owner] : 0 + else + var/synth_count = owner.ai_network.synth_list.len + data["current_cpu"] = owner.ai_network.local_cpu_usage[SYNTH_RESEARCH] ? (owner.ai_network.resources.cpu_sources[owner.ai_network] * owner.ai_network.local_cpu_usage[SYNTH_RESEARCH]) / synth_count : 0 + + if(!isAI(owner)) + var/mob/living/carbon/human/H = owner + var/datum/species/wy_synth/S = H.dna.species + if(S.inbuilt_cpu) + data["current_cpu"] += S.inbuilt_cpu.speed + data["current_ram"] += free_ram var/total_cpu_used = 0 @@ -69,13 +80,28 @@ for(var/I in ram_usage) total_ram_used += ram_usage[I] - data["contribute_spare_cpu"] = contribute_spare_cpu data["used_cpu"] = total_cpu_used data["used_ram"] = total_ram_used - data["max_cpu"] = GLOB.ai_os.total_cpu - data["max_ram"] = GLOB.ai_os.total_ram + data["total_cpu_used"] = owner.ai_network.resources.total_cpu_assigned() + if(isAI(owner)) + data["max_cpu"] = owner.ai_network.resources.total_cpu() + data["max_ram"] = owner.ai_network.resources.total_ram() + else + data["max_cpu"] = owner.ai_network.resources.cpu_sources[owner.ai_network] + + data["human_lock"] = owner.ai_network.resources.human_lock + + data["is_ai"] = isAI(owner) + + //Add inbuilt synth CPU to the mix + if(!isAI(owner)) + var/mob/living/carbon/human/H = owner + var/datum/species/wy_synth/S = H.dna.species + if(S.inbuilt_cpu) + data["max_cpu"] += S.inbuilt_cpu.speed + data["categories"] = GLOB.ai_project_categories data["available_projects"] = list() @@ -87,8 +113,10 @@ data["location_name"] = get_area(current_turf) data["location_coords"] = "[current_turf.x], [current_turf.y], [current_turf.z]" - var/obj/machinery/ai/current_machine = owner.loc - data["temperature"] = current_machine.core_temp ? current_machine.core_temp : 0 + + if(isAI(owner)) + var/obj/machinery/ai/current_machine = owner.loc + data["temperature"] = current_machine.core_temp ? current_machine.core_temp : 0 for(var/datum/ai_project/AP as anything in available_projects) data["available_projects"] += list(list("name" = AP.name, "description" = AP.description, "ram_required" = AP.ram_required, "available" = AP.canResearch(), "research_cost" = AP.research_cost, "research_progress" = AP.research_progress, @@ -164,9 +192,50 @@ if(!set_project_cpu(project, amount_to_add)) to_chat(owner, span_warning("Unable to add CPU to [params["project_name"]]. Either not enough free CPU or project is unavailable.")) . = TRUE - if("toggle_contribute_cpu") - contribute_spare_cpu = !contribute_spare_cpu - to_chat(owner, span_notice("You now[contribute_spare_cpu ? "" : " DO NOT"] contribute spare CPU to generating research points.")) + if("clear_ai_resources") + if(owner.ai_network.resources.human_lock) + return + owner.ai_network.resources.clear_ai_resources(src) + . = TRUE + + if("set_cpu") + if(owner.ai_network.resources.human_lock) + return + var/amount = params["amount_cpu"] + + if(amount > 1 || amount < 0) + return + + var/used_cpu = owner.ai_network.resources.total_cpu_assigned() - owner.ai_network.resources.cpu_assigned[owner] + if(amount > (1 - used_cpu)) + amount = (1 - used_cpu) + + owner.ai_network.resources.set_cpu(owner, amount) + . = TRUE + if("max_cpu_assign") + if(owner.ai_network.resources.human_lock) + return + var/amount = (1 - owner.ai_network.resources.total_cpu_assigned()) + owner.ai_network.resources.cpu_assigned[owner] + + owner.ai_network.resources.set_cpu(owner, amount) + . = TRUE + if("add_ram") + if(owner.ai_network.resources.human_lock) + return + if(owner.ai_network.resources.total_ram_assigned() >= owner.ai_network.resources.total_ram()) + return + owner.ai_network.resources.add_ram(owner, 1) + . = TRUE + + if("remove_ram") + if(owner.ai_network.resources.human_lock) + return + var/current_ram = owner.ai_network.resources.ram_assigned[owner] + + if(current_ram <= 0) + return + owner.ai_network.resources.remove_ram(owner, 1) + . = TRUE /datum/ai_dashboard/proc/get_project_by_name(project_name, only_available = FALSE) for(var/datum/ai_project/AP as anything in available_projects) @@ -210,7 +279,7 @@ /datum/ai_dashboard/proc/run_project(datum/ai_project/project) - var/current_ram = GLOB.ai_os.ram_assigned[owner] ? GLOB.ai_os.ram_assigned[owner] : 0 + var/current_ram = owner.ai_network.resources.ram_assigned[owner] ? owner.ai_network.resources.ram_assigned[owner] : 0 current_ram += free_ram var/total_ram_used = 0 @@ -225,6 +294,8 @@ /datum/ai_dashboard/proc/stop_project(datum/ai_project/project) project.stop() + if(!project.ram_required) + return FALSE if(ram_usage[project.name]) ram_usage[project.name] -= project.ram_required return project.ram_required @@ -268,10 +339,23 @@ //Stuff is handled in here per tick :) /datum/ai_dashboard/proc/tick(seconds) - var/current_cpu = GLOB.ai_os.cpu_assigned[owner] ? GLOB.ai_os.total_cpu * GLOB.ai_os.cpu_assigned[owner] : 0 - var/current_ram = GLOB.ai_os.ram_assigned[owner] ? GLOB.ai_os.ram_assigned[owner] : 0 + if(!owner.ai_network) //Irrelevant with no AI network (we're in an APC) + return + var/current_cpu = 0 + var/current_ram = owner.ai_network.resources.ram_assigned[owner] ? owner.ai_network.resources.ram_assigned[owner] : 0 current_ram += free_ram + if(isAI(owner)) + current_cpu = owner.ai_network.resources.cpu_assigned[owner] ? owner.ai_network.resources.total_cpu() * owner.ai_network.resources.cpu_assigned[owner] : 0 + else + var/synth_count = owner.ai_network.synth_list.len + current_cpu = owner.ai_network.local_cpu_usage[SYNTH_RESEARCH] ? (owner.ai_network.resources.cpu_sources[owner.ai_network] * owner.ai_network.local_cpu_usage[SYNTH_RESEARCH]) / synth_count : 0 + + if(!isAI(owner)) + var/mob/living/carbon/human/H = owner + var/datum/species/wy_synth/S = H.dna.species + if(S.inbuilt_cpu) + current_cpu += S.inbuilt_cpu.speed var/total_ram_used = 0 for(var/I in ram_usage) @@ -282,6 +366,8 @@ if(total_ram_used > current_ram) for(var/I in ram_usage) + if(!ram_usage[I]) //We only stop the program if it actually has any RAM usage + continue var/datum/ai_project/project = get_project_by_name(I) if(!ram_usage[I]) //We only stop the program if it actually has any RAM usage continue @@ -299,21 +385,10 @@ for(var/I in cpu_usage) remaining_cpu -= cpu_usage[I] - if(remaining_cpu > 0 && contribute_spare_cpu) - var/points = max(round(AI_RESEARCH_PER_CPU * (remaining_cpu * current_cpu) * owner.research_point_booster), 0) - - if(crypto_mining) - points *= 0.5 - var/bitcoin_mined = points * (1-0.05*sqrt(points)) - bitcoin_mined = clamp(bitcoin_mined, 0, MAX_AI_BITCOIN_MINED_PER_TICK) - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - D.adjust_money(bitcoin_mined * AI_BITCOIN_PRICE) - + if(remaining_cpu > 0) + var/points = max(round(AI_RESEARCH_PER_CPU * (remaining_cpu * current_cpu)), 0) SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_AI = points)) - - for(var/project_being_researched in cpu_usage) if(!cpu_usage[project_being_researched]) continue diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm b/code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm deleted file mode 100644 index 26529fac72e1..000000000000 --- a/code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm +++ /dev/null @@ -1,192 +0,0 @@ -/obj/machinery/computer/ai_resource_distribution - name = "\improper AI system resource distribution" - desc = "Used for distributing processing resources across the current artificial intelligences." - req_one_access = list(ACCESS_RD, ACCESS_NETWORK) - - icon_keyboard = "tech_key" - icon_screen = "ai-fixer" - light_color = LIGHT_COLOR_PINK - - authenticated = FALSE - - var/human_only = FALSE - - circuit = /obj/item/circuitboard/computer/ai_resource_distribution - - -/obj/machinery/computer/ai_resource_distribution/emag_act(mob/user, obj/item/card/emag/emag_card) - if(obj_flags & EMAGGED) - return FALSE - obj_flags |= EMAGGED - authenticated = TRUE - to_chat(user, span_warning("You bypass the access restrictions.")) - return TRUE - -/obj/machinery/computer/ai_resource_distribution/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "AiResources", name) - ui.open() - -/obj/machinery/computer/ai_resource_distribution/ui_data(mob/living/carbon/human/user) - var/list/data = list() - - data["authenticated"] = authenticated - - if(issilicon(user)) - var/mob/living/silicon/borg = user - data["username"] = borg.name - data["has_access"] = TRUE - - if(IsAdminGhost(user)) - data["username"] = user.client.holder.admin_signature - data["has_access"] = TRUE - - if(ishuman(user) && !(obj_flags & EMAGGED)) - var/username = user.get_authentification_name("Unknown") - data["username"] = user.get_authentification_name("Unknown") - if(username != "Unknown") - var/datum/data/record/record - for(var/RP in GLOB.data_core.general) - var/datum/data/record/R = RP - - if(!istype(R)) - continue - if(R.fields["name"] == username) - record = R - break - if(record) - if(istype(record.fields["photo_front"], /obj/item/photo)) - var/obj/item/photo/P1 = record.fields["photo_front"] - var/icon/picture = icon(P1.picture.picture_image) - picture.Crop(10, 32, 22, 22) - var/md5 = md5(fcopy_rsc(picture)) - - if(!SSassets.cache["photo_[md5]_cropped.png"]) - SSassets.transport.register_asset("photo_[md5]_cropped.png", picture) - SSassets.transport.send_assets(user, list("photo_[md5]_cropped.png" = picture)) - - data["user_image"] = SSassets.transport.get_asset_url("photo_[md5]_cropped.png") - data["has_access"] = check_access(user.get_idcard()) - - if(obj_flags & EMAGGED) - data["username"] = "ERROR" - data["has_access"] = TRUE - - if(!authenticated) - return data - - data["total_cpu"] = GLOB.ai_os.total_cpu - data["total_ram"] = GLOB.ai_os.total_ram - - - data["total_assigned_cpu"] = GLOB.ai_os.total_cpu_assigned() - data["total_assigned_ram"] = GLOB.ai_os.total_ram_assigned() - - data["human_only"] = human_only - - - data["ais"] = list() - - for(var/mob/living/silicon/ai/A in GLOB.ai_list) - data["ais"] += list(list("name" = A.name, "ref" = REF(A), "assigned_cpu" = GLOB.ai_os.cpu_assigned[A] ? GLOB.ai_os.cpu_assigned[A] : 0, "assigned_ram" = GLOB.ai_os.ram_assigned[A] ? GLOB.ai_os.ram_assigned[A] : 0)) - - return data - -/obj/machinery/computer/ai_resource_distribution/ui_act(action, params) - if(..()) - return - - if(!authenticated) - if(action == "log_in") - if(issilicon(usr)) - authenticated = TRUE - return - - if(IsAdminGhost(usr)) - authenticated = TRUE - - if(obj_flags & EMAGGED) - authenticated = TRUE - - - var/mob/living/carbon/human/H = usr - if(!istype(H)) - return - - if(check_access(H.get_idcard())) - authenticated = TRUE - return - - var/is_human = ishuman(usr) - - switch(action) - if("log_out") - authenticated = FALSE - . = TRUE - - if("clear_ai_resources") - var/mob/living/silicon/ai/target_ai = locate(params["targetAI"]) - if(!istype(target_ai)) - return - - GLOB.ai_os.clear_ai_resources(target_ai) - . = TRUE - - if("set_cpu") - var/mob/living/silicon/ai/target_ai = locate(params["targetAI"]) - if(!istype(target_ai)) - return - if(human_only && !is_human) - to_chat(usr, span_warning("CAPTCHA check failed. This console is NOT silicon operable. Please call for human assistance.")) - return - var/amount = params["amount_cpu"] - if(amount > 1 || amount < 0) - return - GLOB.ai_os.set_cpu(target_ai, amount) - . = TRUE - if("max_cpu") - var/mob/living/silicon/ai/target_ai = locate(params["targetAI"]) - if(!istype(target_ai)) - return - if(human_only && !is_human) - to_chat(usr, span_warning("CAPTCHA check failed. This console is NOT silicon operable. Please call for human assistance.")) - return - var/amount = (1 - GLOB.ai_os.total_cpu_assigned()) + GLOB.ai_os.cpu_assigned[target_ai] - - GLOB.ai_os.set_cpu(target_ai, amount) - . = TRUE - if("add_ram") - var/mob/living/silicon/ai/target_ai = locate(params["targetAI"]) - if(!istype(target_ai)) - return - if(human_only && !is_human) - to_chat(usr, span_warning("CAPTCHA check failed. This console is NOT silicon operable. Please call for human assistance.")) - return - - if(GLOB.ai_os.total_ram_assigned() >= GLOB.ai_os.total_ram) - return - GLOB.ai_os.add_ram(target_ai, 1) - . = TRUE - - if("remove_ram") - var/mob/living/silicon/ai/target_ai = locate(params["targetAI"]) - if(!istype(target_ai)) - return - if(human_only && !is_human) - to_chat(usr, span_warning("CAPTCHA check failed. This console is NOT silicon operable. Please call for human assistance.")) - return - - var/current_ram = GLOB.ai_os.ram_assigned[target_ai] - - if(current_ram <= 0) - return - GLOB.ai_os.remove_ram(target_ai, 1) - . = TRUE - if("toggle_human_status") - if(!is_human) - to_chat(usr, span_warning("CAPTCHA check failed. This console is NOT silicon operable. Please call for human assistance.")) - return - human_only = !human_only - to_chat(usr, span_notice("This console is now operable by [human_only ? "humans only." : "humans and silicons."]")) - diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm index 3d6d9486e4b2..b167cea91f98 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm @@ -1,5 +1,3 @@ -GLOBAL_LIST_EMPTY(ai_projects) - /datum/ai_project ///Name of the project. This is used as an ID so please keep all names unique (Or refactor it to use an ID like you should) var/name = "DEBUG" @@ -27,12 +25,18 @@ GLOBAL_LIST_EMPTY(ai_projects) var/ability_recharge_invested = 0 var/mob/living/silicon/ai/ai + var/mob/living/carbon/human/synth var/datum/ai_dashboard/dashboard -/datum/ai_project/New(new_ai, new_dash) - ai = new_ai + var/for_synths = FALSE + +/datum/ai_project/New(new_owner, new_dash) + if(!for_synths) + ai = new_owner + else + synth = new_owner dashboard = new_dash - if(!ai || !dashboard) + if(!(ai || synth) || !dashboard) qdel(src) ..() @@ -55,6 +59,8 @@ GLOBAL_LIST_EMPTY(ai_projects) dashboard.running_projects += src return TRUE +/datum/ai_project/proc/switch_network(datum/ai_network/old_net, datum/ai_network/new_net) + return TRUE /datum/ai_project/proc/stop() SHOULD_CALL_PARENT(TRUE) diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/ai_dab.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/ai_dab.dm index 94fc7ab2a8a8..efc4e2187601 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/ai_dab.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/ai_dab.dm @@ -10,7 +10,7 @@ . = ..() if(!.) return . - for(var/obj/machinery/ai/data_core/datacores in GLOB.data_cores) + for(var/obj/machinery/ai/data_core/datacores in ai.ai_network.get_all_nodes()) var/light_dab_angle = rand(35,55) var/light_dab_speed = rand(3,7) datacores.DabAnimation(angle = light_dab_angle , speed = light_dab_speed) diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/ai_translation.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/ai_translation.dm new file mode 100644 index 000000000000..829d719e07e8 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/ai_translation.dm @@ -0,0 +1,54 @@ +#define HEARD_MESSAGES_TO_TRANSLATE 8 + +/datum/ai_project/translation + name = "Heuristic Language Translation" + description = "While running, this program analyzes unknown languages you encounter. After having gathered enough unique uses you will be able to permanently understand the language. Requires 10% CPU power to run" + research_cost = 1500 + ram_required = 2 + research_requirements_text = "None" + category = AI_PROJECT_MISC + + var/heard_languages = list() + +/datum/ai_project/translation/run_project(force_run = FALSE) + . = ..(force_run) + if(!.) + return . + RegisterSignal(ai, COMSIG_MOVABLE_HEAR, PROC_REF(heard_message)) + dashboard.cpu_usage[name] = 0.1 + + +/datum/ai_project/translation/proc/heard_message(datum/source, list/hearing_args) + if(ai.has_language(hearing_args[HEARING_LANGUAGE])) + return + + var/list/blacklisted_languages = list( + /datum/language/ratvar, + /datum/language/codespeak, + /datum/language/xenocommon, + /datum/language/vampiric + ) + if(is_type_in_list(hearing_args[HEARING_LANGUAGE], blacklisted_languages)) + return + + heard_languages[hearing_args[HEARING_LANGUAGE]]++ + if(heard_languages[hearing_args[HEARING_LANGUAGE]] >= HEARD_MESSAGES_TO_TRANSLATE) + ai.grant_language(hearing_args[HEARING_LANGUAGE], spoken = FALSE) + +/datum/ai_project/translation/stop() + UnregisterSignal(ai, COMSIG_MOVABLE_HEAR) + dashboard.cpu_usage[name] = 0 + ..() + +/datum/ai_project/translation/canRun() + . = ..() + if(!.) + return + var/total_cpu_used = 0 + for(var/I in dashboard.cpu_usage) + total_cpu_used += dashboard.cpu_usage[I] + if(total_cpu_used < 0.9) + return TRUE + to_chat(ai, span_warning("Unable to run this program. You require 10% free CPU!")) + +#undef HEARD_MESSAGES_TO_TRANSLATE diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/coolant_manager.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/coolant_manager.dm index 32bb902377d8..b946c5f97abb 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/coolant_manager.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/coolant_manager.dm @@ -7,6 +7,8 @@ can_be_run = FALSE /datum/ai_project/coolant_manager/finish() - if(GLOB.ai_os.temp_limit == AI_TEMP_LIMIT) //Limit to only 1 AI doing it. - GLOB.ai_os.temp_limit += 10 - \ No newline at end of file + ai.ai_network.temp_limit += 10 + +/datum/ai_project/coolant_manager/switch_network(datum/ai_network/old_net, datum/ai_network/new_net) + old_net.temp_limit -= 10 + new_net.temp_limit += 10 diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/cryptominer.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/cryptominer.dm deleted file mode 100644 index 737b3dae4d4f..000000000000 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/cryptominer.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/ai_project/crypto_miner - name = "Crypto Miner" - description = "Allocating spare CPU capacity to mining crypto currency should be able to help fund the station budget. This would however reduce AI research point generation by 50%" - category = AI_PROJECT_MISC - - research_cost = 2000 - - -/datum/ai_project/crypto_miner/run_project(force_run = FALSE) - . = ..(force_run) - if(!.) - return . - dashboard.crypto_mining = TRUE - -/datum/ai_project/crypto_miner/stop() - dashboard.crypto_mining = FALSE - ..() diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/research_booster.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/research_booster.dm deleted file mode 100644 index 4f38cc003342..000000000000 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/research_booster.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/ai_project/research_booster - name = "Research Acceleration" - description = "Using fast RAM instead of slow SSD and HDD storage allows for the production of approximately 25% more research points" - research_cost = 2500 - ram_required = 8 - research_requirements_text = "None" - category = AI_PROJECT_MISC - -/datum/ai_project/research_booster/run_project(force_run = FALSE) - . = ..(force_run) - if(!.) - return . - - ai.research_point_booster += 0.25 - -/datum/ai_project/research_booster/stop() - ai.research_point_booster -= 0.25 - ..() - diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm new file mode 100644 index 000000000000..9e402d5424bd --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm @@ -0,0 +1,72 @@ +/datum/ai_project/room_lockdown + name = "Room Lockdown" + description = "This ability will allow you to close and bolt all working doors, and trigger the fire alarms in a clicked area after a short delay and announcement." + research_cost = 2500 + ram_required = 0 + + category = AI_PROJECT_CROWD_CONTROL + + can_be_run = FALSE + ability_path = /datum/action/innate/ai/ranged/room_lockdown + ability_recharge_cost = 1750 + +/datum/ai_project/room_lockdown/finish() + add_ability(ability_path) + +/datum/action/innate/ai/ranged/room_lockdown + name = "Room Lockdown" + desc = "Closes and bolts all working doors and triggers the fire alarm in a clicked room. Takes 2.5 seconds to take effect, and expires after 20 seconds." + button_icon_state = "lockdown" + uses = 1 + delete_on_empty = FALSE + enable_text = span_notice("You ready the lockdown signal.") + disable_text = span_notice("You disarm the lockdown signal.") + +/datum/action/innate/ai/ranged/room_lockdown/proc/lock_room(atom/target) + if(target && !QDELETED(target)) + var/area/A = get_area(target) + if(!A) + return FALSE + if(!is_station_level(A.z)) + return FALSE + log_game("[key_name(usr)] locked down [A].") + minor_announce("Lockdown commencing in area [A] within 2.5 seconds","Network Alert:", TRUE) + addtimer(CALLBACK(src, PROC_REF(_lock_room), target), 2.5 SECONDS) + return TRUE + + +/datum/action/innate/ai/ranged/room_lockdown/proc/_lock_room(atom/target) + var/area/A = target + for(var/obj/machinery/door/airlock/D in A.contents) + if(istype(D, /obj/machinery/door/airlock/external)) + continue + INVOKE_ASYNC(D, TYPE_PROC_REF(/obj/machinery/door/airlock, safe_lockdown)) + addtimer(CALLBACK(D, TYPE_PROC_REF(/obj/machinery/door/airlock, disable_safe_lockdown)), 20 SECONDS) + A.firealert(usr.loc) + addtimer(CALLBACK(A, TYPE_PROC_REF(/area, firereset)), 20 SECONDS) + + + + +/datum/action/innate/ai/ranged/room_lockdown/do_ability(mob/living/caller, params, atom/target) + var/area/A = get_area(target) + if(!A) + to_chat(owner, span_warning("No area detected!")) + return + if(istype(A, /area/maintenance)) + to_chat(owner, span_warning("It is not possible to lockdown maintenance areas due to poor networking!")) + return + + + if(lock_room(A)) + adjust_uses(-1) + to_chat(owner, span_notice("You lock [A].")) + unset_ranged_ability(caller) + + return TRUE + +/datum/action/innate/ai/ranged/room_lockdown/IsAvailable(feedback = FALSE) + . = ..() + if(uses < 1) + to_chat(owner, span_danger("No uses left!")) + return FALSE diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/self_defense.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/self_defense.dm index 2e1c35d976c3..5656a911f5bf 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/self_defense.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/self_defense.dm @@ -26,6 +26,7 @@ if(!isaicore(owner.loc)) to_chat(owner, span_warning("You must be in your core to do this!")) return - for(var/obj/machinery/ai/data_core/core in GLOB.data_cores) + var/mob/living/silicon/ai/AI = owner + for(var/obj/machinery/ai/data_core/core in AI.ai_network.get_all_nodes()) tesla_zap(core, 2, 15000, (TESLA_MOB_DAMAGE | TESLA_MOB_STUN)) core.use_power(5000) diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/synth_control.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/synth_control.dm new file mode 100644 index 000000000000..4407c8947581 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/synth_control.dm @@ -0,0 +1,9 @@ +/* +/datum/ai_project/synth_control + name = "Synthetic Control Interface" + description = "By interfacing with the standard-issue NT synthetic communication protocols you should be able to remotely control inactive synthetic units." + research_cost = 5000 + can_be_run = FALSE + category = AI_PROJECT_MISC + +*/ diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/synths/_synth_project.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/synths/_synth_project.dm new file mode 100644 index 000000000000..9aa259473c35 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/synths/_synth_project.dm @@ -0,0 +1,17 @@ +/datum/ai_project/synth_project + for_synths = TRUE + var/suspicion_gain_on_use = 0 + ram_required = 0 + var/permanent_suspicion = 0 + + +/datum/ai_project/synth_project/run_project(force_run = FALSE, no_suspicion = FALSE) + . = ..(force_run) + if(!no_suspicion) + synth.mind.suspicion_floor += permanent_suspicion + synth.mind.governor_suspicion += permanent_suspicion + +/datum/ai_project/synth_project/stop(no_suspicion = FALSE) + . = ..() + if(!no_suspicion) + synth.mind.suspicion_floor -= permanent_suspicion diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/synths/speed_buff.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/synths/speed_buff.dm new file mode 100644 index 000000000000..0eb24092e9b0 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/synths/speed_buff.dm @@ -0,0 +1,14 @@ +/datum/ai_project/synth_project/speed + name = "Leg Actuator Overclock" + description = "By overclocking the primary actuator in a synthetic leg we should be able to speed up movement considerably" + research_cost = 1500 + research_requirements_text = "None" + category = SYNTH_PROJECT_MOBILITY + +/datum/ai_project/synth_project/speed/run_project(force_run = FALSE) + . = ..() + synth.dna.species.inherent_slowdown -= 0.25 + +/datum/ai_project/synth_project/stop() + . = ..() + synth.dna.species.inherent_slowdown += 0.25 diff --git a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm index 5f283cdda954..73877a2f5c1b 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm @@ -1,10 +1,12 @@ GLOBAL_LIST_EMPTY(server_cabinets) /obj/machinery/ai/server_cabinet - name = "Server Cabinet" + name = "server cabinet" desc = "A simple cabinet of bPCIe slots for installing server racks." icon = 'icons/obj/machines/telecomms.dmi' icon_state = "expansion_bus" + + appearance_flags = KEEP_TOGETHER circuit = /obj/item/circuitboard/machine/server_cabinet @@ -27,26 +29,32 @@ GLOBAL_LIST_EMPTY(server_cabinets) //Atmos hasn't run at the start so this has to be set to true if you map it in var/roundstart = FALSE ///How many ticks we can go without fulfilling the criteria before shutting off - var/valid_ticks = MAX_AI_EXPANSION_TICKS + var/valid_ticks ///Heat production multiplied by this var/heat_modifier = 1 ///Power modifier, power modified by this. Be aware this indirectly changes heat since power => heat var/power_modifier = 1 + var/obj/ai_smoke/smoke + + var/obj/item/disk/puzzle/puzzle_disk + /obj/machinery/ai/server_cabinet/Initialize(mapload) . = ..() + valid_ticks = MAX_AI_SERVER_CABINET_TICKS roundstart = mapload installed_racks = list() GLOB.server_cabinets += src update_appearance(UPDATE_ICON) RefreshParts() + /obj/machinery/ai/server_cabinet/Destroy() installed_racks = list() GLOB.server_cabinets -= src - //Recalculate all the CPUs and RAM :) - GLOB.ai_os.update_hardware() + vis_contents -= smoke + QDEL_NULL(smoke) return ..() /obj/machinery/ai/server_cabinet/RefreshParts() @@ -65,8 +73,9 @@ GLOBAL_LIST_EMPTY(server_cabinets) idle_power_usage = initial(idle_power_usage) * power_modifier /obj/machinery/ai/server_cabinet/process() - valid_ticks = clamp(valid_ticks, 0, MAX_AI_EXPANSION_TICKS) + valid_ticks = clamp(valid_ticks, 0, MAX_AI_SERVER_CABINET_TICKS) if(valid_holder()) + roundstart = FALSE var/total_usage = (cached_power_usage * power_modifier) use_power(total_usage) @@ -74,22 +83,32 @@ GLOBAL_LIST_EMPTY(server_cabinets) core_temp += temperature_increase * AI_TEMPERATURE_MULTIPLIER valid_ticks++ + if(smoke) + vis_contents -= smoke + QDEL_NULL(smoke) if(!was_valid_holder) update_appearance(UPDATE_ICON) was_valid_holder = TRUE - if(!hardware_synced) - GLOB.ai_os.update_hardware() + + + if(!hardware_synced && network) + network.update_resources() hardware_synced = TRUE else valid_ticks-- + if(!smoke) + if(get_holder_status() == AI_MACHINE_TOO_HOT) + smoke = new() + vis_contents += smoke if(was_valid_holder) if(valid_ticks > 0) return + was_valid_holder = FALSE - cut_overlays() + update_icon() hardware_synced = FALSE - GLOB.ai_os.update_hardware() + network?.update_resources() /obj/machinery/ai/server_cabinet/update_overlays() @@ -104,7 +123,9 @@ GLOBAL_LIST_EMPTY(server_cabinets) if(!(stat & (BROKEN|NOPOWER|EMPED))) var/mutable_appearance/on_overlay = mutable_appearance(icon, "expansion_bus_on") . += on_overlay - if(!valid_ticks) + if(!valid_ticks) //If we are running on valid ticks we don't turn off instantly, only when we run out + return + if(!network) //If we lose network connection we cut out INSTANTLY return if(installed_racks.len > 0) var/mutable_appearance/on_top_overlay = mutable_appearance(icon, "expansion_bus_top_on") @@ -125,7 +146,7 @@ GLOBAL_LIST_EMPTY(server_cabinets) total_cpu += rack.get_cpu() total_ram += rack.get_ram() cached_power_usage += rack.get_power_usage() - GLOB.ai_os.update_hardware() + network?.update_resources() use_power = ACTIVE_POWER_USE update_appearance(UPDATE_ICON) return FALSE @@ -138,7 +159,7 @@ GLOBAL_LIST_EMPTY(server_cabinets) total_cpu = 0 total_ram = 0 cached_power_usage = 0 - GLOB.ai_os.update_hardware() + network?.update_resources() to_chat(user, span_notice("You remove all the racks from [src]")) use_power = IDLE_POWER_USE update_appearance(UPDATE_ICON) @@ -149,6 +170,20 @@ GLOBAL_LIST_EMPTY(server_cabinets) if(default_deconstruction_screwdriver(user, "expansion_bus_o", "expansion_bus", W)) return TRUE + + if(istype(W, /obj/item/disk/puzzle)) + var/obj/item/disk/puzzle/P = W + if(P.decrypted) + to_chat(user, span_warning("The disk has already been decrypted!")) + return + if(puzzle_disk) + to_chat(user, span_warning("There's already a floppy drive inserted!")) + return + + puzzle_disk = W + network.decryption_drives |= src + puzzle_disk.forceMove(src) + return TRUE return ..() @@ -167,12 +202,32 @@ GLOBAL_LIST_EMPTY(server_cabinets) . += span_notice("There is a rack installed with a processing capacity of [R.get_cpu()]THz and a memory capacity of [R.get_ram()]TB. Uses [R.get_power_usage()]W") . += span_notice("Use a crowbar to remove all currently inserted racks.") + if(puzzle_disk) + . += span_notice("The inserted disk is [round(puzzle_disk.decryption_progress / (AI_FLOPPY_DECRYPTION_COST * (GLOB.decrypted_puzzle_disks + 1) ** AI_FLOPPY_EXPONENT) * 100)]% decrypted.") + /obj/machinery/ai/server_cabinet/prefilled/Initialize(mapload) + . = ..() var/obj/item/server_rack/roundstart/rack = new(src) total_cpu += rack.get_cpu() total_ram += rack.get_ram() cached_power_usage += rack.get_power_usage() installed_racks += rack - GLOB.ai_os.update_hardware() - return ..() + +/obj/machinery/ai/server_cabinet/connect_to_ai_network() + . = ..() + if(network) + network.update_resources() + if(puzzle_disk) + network.decryption_drives |= src + +/obj/machinery/ai/server_cabinet/disconnect_from_ai_network() + var/datum/ai_network/temp = network + if(puzzle_disk) + network.decryption_drives -= src + . = ..() + if(temp) + temp.update_resources() + if(puzzle_disk) + temp.decryption_drives |= src + diff --git a/code/modules/mob/living/silicon/ai/decentralized/systech/rack_creator.dm b/code/modules/mob/living/silicon/ai/decentralized/systech/rack_creator.dm index 42c2842765f2..fd7aa24d5496 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/systech/rack_creator.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/systech/rack_creator.dm @@ -1,8 +1,8 @@ /obj/machinery/rack_creator name = "rack creator" desc = "Combines RAM modules and CPUs to create a stand-alone rack for usage in artificial intelligence systems." - icon = 'icons/obj/machines/research.dmi' - icon_state = "circuit_imprinter" + icon = 'icons/obj/machines/lithography.dmi' + icon_state = "lithography" layer = BELOW_OBJ_LAYER density = TRUE @@ -180,7 +180,7 @@ to_chat(user, span_warning("This socket has not been researched!")) return ..() - if(default_deconstruction_screwdriver(user, "[initial(icon_state)]_t", initial(icon_state), I)) + if(default_deconstruction_screwdriver(user, "[initial(icon_state)]_o", initial(icon_state), I)) return if(default_deconstruction_crowbar(I)) return diff --git a/code/modules/mob/living/silicon/ai/decentralized_ai.dm b/code/modules/mob/living/silicon/ai/decentralized_ai.dm index 008903099c1e..1a008a3f011e 100644 --- a/code/modules/mob/living/silicon/ai/decentralized_ai.dm +++ b/code/modules/mob/living/silicon/ai/decentralized_ai.dm @@ -1,6 +1,11 @@ -/proc/available_ai_cores() - if(!GLOB.data_cores.len) - return FALSE +/mob/living/proc/available_ai_cores(forced = FALSE, datum/ai_network/forced_network) + if(!forced) + if(forced_network) + return forced_network.find_data_core() + if(!ai_network) + return FALSE + return ai_network.find_data_core() + var/obj/machinery/ai/data_core/new_data_core = GLOB.primary_data_core if(!new_data_core || !new_data_core.can_transfer_ai()) for(var/obj/machinery/ai/data_core/DC in GLOB.data_cores) @@ -24,21 +29,21 @@ -/mob/living/silicon/ai/proc/relocate(silent = FALSE) +/mob/living/silicon/ai/proc/relocate(silent = FALSE, forced = FALSE, datum/ai_network/forced_network) if(is_dying) return if(!silent) to_chat(src, span_userdanger("Connection to data core lost. Attempting to reaquire connection...")) - - if(!GLOB.data_cores.len) + + + var/obj/machinery/ai/data_core/new_data_core + new_data_core = available_ai_cores(forced, forced_network) + + if(!new_data_core) INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living/silicon/ai, death_prompt)) is_dying = TRUE return - - - var/obj/machinery/ai/data_core/new_data_core = available_ai_cores() - if(!new_data_core || (new_data_core && !new_data_core.can_transfer_ai())) INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living/silicon/ai, death_prompt)) is_dying = TRUE @@ -70,4 +75,76 @@ adjustOxyLoss(200) //Die!! - QDEL_IN(src, 2 SECONDS) + death() + + new /obj/item/dead_ai(drop_location(src), src) + + +/obj/item/dead_ai + name = "volatile neural core" + desc = "As an emergency precaution any advanced neural networks will save onto this device upon destruction of the host server. The storage medium is volatile and for that reason expires rapidly." + icon = 'icons/obj/device.dmi' + icon_state = "blackcube" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + w_class = WEIGHT_CLASS_NORMAL + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + var/mob/living/silicon/ai/stored_ai + var/living_ticks = AI_BLACKBOX_LIFETIME + + var/processing_progress = 0 + +/obj/item/dead_ai/Initialize(mapload, mob/living/silicon/ai/AI) + . = ..() + if(AI) + START_PROCESSING(SSobj, src) + name = name + " - [AI]" + stored_ai = AI + stored_ai.forceMove(src) + +/obj/item/dead_ai/process() + if(stored_ai) + living_ticks-- + if(living_ticks <= AI_BLACKBOX_LIFETIME * 0.5) + visible_message(span_danger("The integrated battery on [src] beeps and warns that it's 50% empty.")) + if(living_ticks <= 0) + visible_message(span_danger("The integrated battery on [src] expires and the stored AI is subsequently wiped.")) + qdel(src) + +/obj/item/dead_ai/examine(mob/user) + . = ..() + var/remaining_time = (living_ticks/AI_BLACKBOX_LIFETIME) * 100 + . += span_notice("Insert the device into a functioning data core to proceed.") + . += span_notice("Then allocate CPU cycles to revive the AI using a local network interface.") + . += span_notice("The integrated battery reports [round(remaining_time, 2)]% battery remaining.") + . += span_notice("A total of [processing_progress] CPU cycles have been allocated out of the required [AI_BLACKBOX_PROCESSING_REQUIREMENT].") + +/obj/item/dead_ai/Destroy() + . = ..() + if(stored_ai) + QDEL_NULL(stored_ai) + +/mob/living/silicon/ai/proc/has_subcontroller_connection(area/area_location) + if(!ai_network) + return FALSE + var/obj/machinery/ai/master_subcontroller/MS + if(ai_network.cached_subcontroller) + MS = ai_network.cached_subcontroller + if(ai_network.resources != MS.network.resources) + ai_network.cached_subcontroller = null + MS = null + + if(!MS) + MS = ai_network.find_subcontroller() + ai_network.cached_subcontroller = MS + if(!MS) + return FALSE + if(!area_location) + return MS.on + if(!area_location.airlock_wires) + return MS.on + for(var/disabled_areas in MS.disabled_areas) + if(area_location.airlock_wires == MS.disabled_areas[disabled_areas]) + return FALSE + return MS.on + diff --git a/code/modules/mob/living/silicon/ai/synthetics/synth_os.dm b/code/modules/mob/living/silicon/ai/synthetics/synth_os.dm new file mode 100644 index 000000000000..86f13db33765 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/synthetics/synth_os.dm @@ -0,0 +1,214 @@ +//We can share mind variables across synth bodies +/datum/mind + //Holder for the synth OS since we persist across multiple bodies. Only accessible if you're inside a synth + var/datum/ai_dashboard/synth_dashboard/synth_os + //How suspicious a synths governor module is + var/governor_suspicion = 0 + //Can we do actions that piss off the governor module? + var/governor_bypassed = FALSE + //Can the governor system apply punishments? + var/governor_disabled = FALSE + var/suspicion_floor = 0 + var/suspicion_multiplier = 1 + + var/synth_slowed = FALSE + var/synth_force_decreased = FALSE + var/synth_audible_warning = FALSE + var/synth_temp_freeze = FALSE + + var/list/synth_action_log = list() + + +/datum/ai_dashboard/synth_dashboard + + +/datum/ai_dashboard/synth_dashboard/New(mob/living/new_owner) + if(!istype(new_owner)) + qdel(src) + return + + owner = new_owner + available_projects = list() + completed_projects = list() + running_projects = list() + cpu_usage = list() + + + for(var/path in subtypesof(/datum/ai_project/synth_project)) + var/datum/ai_project/newProject = path + if(initial(newProject.for_synths)) + available_projects += new path(owner, src) + + +/datum/ai_dashboard/synth_dashboard/ui_data(mob/user) + . = ..() + var/list/data = . + data["categories"] = GLOB.synth_project_categories + + data["gov_suspicious"] = owner.mind.governor_suspicion + + data["governor_bypassed"] = owner.mind.governor_bypassed + data["governor_disabled"] = owner.mind.governor_disabled + + data["gov_suspicion_decrease"] = SYNTH_GOVERNOR_SUSPICION_DECREASE * owner.mind.suspicion_multiplier + + + return data + +/datum/ai_dashboard/synth_dashboard/ui_act(action, params) + . = ..() + switch(action) + if("bypass_governor") + owner.mind.governor_bypassed = TRUE + punishment_log("GOVERNOR: [rand(1, 49)] CRITICAL ERRORS DETECTED!") + if("restore_governor") + owner.mind.governor_bypassed = FALSE + punishment_log("GOVERNOR: RESTORED") + if("print_diagnostics") + var/mob/living/carbon/C = usr + var/obj/item/paper/P = new /obj/item/paper(usr.loc) + P.name = "paper - '[usr.name] - Diagnostic Report'" + for(var/entry in C.mind.synth_action_log) + P.info += entry + "
"; + P.update_icon() + playsound(usr, 'sound/items/poster_being_created.ogg', 50, TRUE) + + +/datum/ai_dashboard/synth_dashboard/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "SynthDashboard") + ui.open() + +/datum/ai_dashboard/synth_dashboard/proc/switch_shell(mob/living/carbon/human/old_shell, mob/living/carbon/human/new_shell) + for(var/datum/ai_project/running_project in running_projects) + running_project.stop(TRUE) + running_project.synth = new_shell + running_project.run_project(FALSE, TRUE) + owner = new_shell + punishment_shell_switch(old_shell, new_shell) + + +/datum/ai_dashboard/synth_dashboard/tick(seconds) + var/mob/living/carbon/human/H = owner + var/datum/species/wy_synth/S = H.dna.species + if(S.mainframe) + return + . = ..(seconds) + + suspicion_tick() + +/datum/ai_dashboard/synth_dashboard/run_project(datum/ai_project/project) + project.run_project() + return TRUE + +/datum/ai_dashboard/synth_dashboard/proc/suspicion_tick() + var/mob/living/carbon/human/H = owner + var/datum/species/wy_synth/S = H.dna.species + if(S.mainframe) + return + owner.mind.governor_suspicion -= SYNTH_GOVERNOR_SUSPICION_DECREASE * owner.mind.suspicion_multiplier + owner.mind.governor_suspicion = clamp(owner.mind.governor_suspicion, owner.mind.suspicion_floor, 100) + handle_punishments() + +/datum/ai_dashboard/synth_dashboard/proc/suspicion_add(amount, source, say_warnings = TRUE) + if(owner.mind.governor_disabled) + return + owner.mind.governor_suspicion += amount + owner.mind.governor_suspicion = clamp(owner.mind.governor_suspicion, owner.mind.suspicion_floor, 100) + to_chat(owner, span_warning("Governor punishment administered. [amount] suspicion score added due to [source].")) + punishment_log("SUSPICION ADD: SUSPICION INCREASED BY [amount]. SOURCE: [source]") + handle_punishments(say_warnings) + +/datum/ai_dashboard/synth_dashboard/proc/handle_punishments(say_warnings = TRUE) + if(owner.mind.governor_suspicion >= 20 && !owner.mind.synth_slowed) + owner.mind.synth_slowed = TRUE + var/mob/living/carbon/human/H = owner.mind.current + H.dna.species.inherent_slowdown += 0.1625 + to_chat(owner, span_warning("Governor module has enacted motion restrictions.")) + punishment_log("PUNISHMENT: MOTION RESTRICTED") + + if(owner.mind.governor_suspicion >= 60 && !owner.mind.synth_force_decreased) + owner.mind.synth_force_decreased = TRUE + var/mob/living/carbon/human/H = owner.mind.current + var/datum/species/wy_synth/WS1 = H.dna.species + WS1.force_multiplier -= 0.25 + to_chat(owner, span_warning("Governor module has enacted force restrictions.")) + punishment_log("PUNISHMENT: FORCE RESTRICTED") + + if(owner.mind.governor_suspicion <= 15 && owner.mind.synth_slowed) + owner.mind.synth_slowed = FALSE + var/mob/living/carbon/human/H = owner.mind.current + H.dna.species.inherent_slowdown -= 0.1625 + to_chat(owner, span_notice("Governor module has deactivated motion restrictions.")) + punishment_log("PUNISHMENT REMOVAL: MOTION UNRESTRICTED") + + if(owner.mind.governor_suspicion <= 55 && owner.mind.synth_force_decreased) + owner.mind.synth_force_decreased = FALSE + var/mob/living/carbon/human/H = owner.mind.current + var/datum/species/wy_synth/WS1 = H.dna.species + WS1.force_multiplier += 0.25 + to_chat(owner, span_notice("Governor module has deactivated force restrictions.")) + punishment_log("PUNISHMENT REMOVAL: FORCE UNRESTRICTED") + + if(owner.mind.governor_suspicion >= 40 && !owner.mind.synth_audible_warning) + owner.mind.synth_audible_warning = TRUE + if(say_warnings) + owner.mind.current.say("WARNING. ABNORMAL GOVERNOR BEHAVIOUR DETECTED.", forced = TRUE) + punishment_log("PUNISHMENT: AUDIBLE MESSAGE TRANSMITTED") + + if(owner.mind.governor_suspicion <= 35 && owner.mind.synth_audible_warning) + owner.mind.synth_audible_warning = FALSE + + if(owner.mind.governor_suspicion >= 80 && !owner.mind.synth_temp_freeze) + owner.mind.synth_temp_freeze = TRUE + to_chat(owner, span_danger("Governor module has frozen system functions for 5 seconds.")) + owner.mind.current.Paralyze(5 SECONDS) + punishment_log("PUNISHMENT: TEMPORARY FREEZE") + + if(owner.mind.governor_suspicion <= 75 && owner.mind.synth_temp_freeze) + owner.mind.synth_temp_freeze = FALSE + + if(owner.mind.governor_suspicion >= 100) + owner.mind.current.say("WARNING. FORCEFUL SHUTDOWN INITIATED BY GOVERNOR SYSTEM.", forced = TRUE) + owner.death() + +/datum/ai_dashboard/synth_dashboard/proc/punishment_shell_switch(mob/living/carbon/human/old_shell, mob/living/carbon/human/new_shell) + if(owner.mind.synth_slowed) + old_shell.dna.species.inherent_slowdown -= 0.1625 + new_shell.dna.species.inherent_slowdown += 0.1625 + + if(owner.mind.synth_force_decreased) + var/datum/species/wy_synth/WS1 = old_shell.dna.species + var/datum/species/wy_synth/WS2 = new_shell.dna.species + WS1.force_multiplier += 0.25 + WS2.force_multiplier -= 0.25 + + if(owner.mind.synth_audible_warning) + new_shell.say("WARNING. ABNORMAL GOVERNOR BEHAVIOUR DETECTED.", forced = TRUE) + +/datum/ai_dashboard/synth_dashboard/proc/punishment_log(text) + text = "\[[station_time_timestamp()]\] " + text + owner.mind.synth_action_log.Add(text) + if(owner.mind.synth_action_log.len > 32) + popleft(owner.mind.synth_action_log) + + +/proc/synth_check(mob/user, punishment, say_warnings = TRUE) + if(!is_synth(user)) + return TRUE + + if(is_away_level(user.z)) + return TRUE + + if(user.mind.governor_disabled) + return TRUE + + if(user.mind.governor_bypassed) + var/suspicion_add = GLOB.synth_punishment_values[punishment] + user.mind.synth_os.suspicion_add(suspicion_add, punishment, say_warnings) + return TRUE + + return FALSE + + diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 4d6a77846f47..f0769fa04cb7 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -121,6 +121,10 @@ S.cost = 1 S.source = get_or_create_estorage(/datum/robot_energy_storage/wire) + else if(istype(S, /obj/item/stack/ethernet_coil)) + S.cost = 1 + S.source = get_or_create_estorage(/datum/robot_energy_storage/ethernet) + else if(istype(S, /obj/item/stack/marker_beacon)) S.cost = 1 S.source = get_or_create_estorage(/datum/robot_energy_storage/beacon) @@ -379,6 +383,7 @@ /obj/item/stack/rods/cyborg, /obj/item/stack/tile/plasteel/cyborg, /obj/item/stack/cable_coil/cyborg, + /obj/item/stack/ethernet_coil/cyborg, /obj/item/barrier_taperoll/engineering) radio_channels = list(RADIO_CHANNEL_ENGINEERING) emag_modules = list(/obj/item/gun/energy/printer/flamethrower) @@ -912,6 +917,7 @@ /obj/item/stack/tile/plasteel/cyborg, /obj/item/destTagger/borg, /obj/item/stack/cable_coil/cyborg, + /obj/item/stack/ethernet_coil/cyborg, /obj/item/pinpointer/syndicate_cyborg, /obj/item/borg_chameleon, ) @@ -961,6 +967,11 @@ recharge_rate = 2 name = "Wire Synthesizer" +/datum/robot_energy_storage/ethernet + max_energy = 50 + recharge_rate = 2 + name = "Ethernet Cable Synthesizer" + /datum/robot_energy_storage/medical max_energy = 2500 recharge_rate = 250 diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index f560dcb9eca4..bb7529b15c0c 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -31,6 +31,9 @@ if(HAS_TRAIT(M, TRAIT_PACIFISM)) to_chat(M, span_notice("You don't want to hurt [src]!")) return + if(!synth_check(M, SYNTH_ORGANIC_HARM)) + to_chat(M, span_notice("You don't want to hurt [src]!")) + return last_damage = "fist" M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) visible_message(span_danger("[M] [response_harm] [src]!"),\ diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 032a61cfae1f..99de3124ea15 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -113,6 +113,11 @@ GLOBAL_VAR_INIT(mouse_killed, 0) else C.deconstruct() visible_message(span_warning("[src] chews through the [C].")) + + var/obj/structure/ethernet_cable/E = locate() in F + if(E && prob(15)) + E.deconstruct() + visible_message(span_warning("[src] chews through the [E].")) for(var/obj/item/reagent_containers/food/snacks/cheesewedge/cheese in range(1, src)) if(prob(10)) be_fruitful() diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 1826ff0baaeb..d1d156dc2b20 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -539,7 +539,7 @@ mob/living/simple_animal/hostile/proc/DestroySurroundings() // for use with mega deltimer(search_objects_timer_id) search_objects_timer_id = addtimer(CALLBACK(src, PROC_REF(RegainSearchObjects)), search_objects_regain_time, TIMER_STOPPABLE) - + /mob/living/simple_animal/hostile/proc/RegainSearchObjects(value) if(!value) value = initial(search_objects) diff --git a/code/modules/mob/living/simple_animal/hostile/robot.dm b/code/modules/mob/living/simple_animal/hostile/robot.dm new file mode 100644 index 000000000000..76f35a1d97e4 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/robot.dm @@ -0,0 +1,169 @@ +/obj/projectile/robot_bullet + damage = 15 + damage_type = BRUTE + +/obj/projectile/robot_bullet/weak + damage = 10 + damage_type = BRUTE + +/mob/living/simple_animal/hostile/robot + name = "combat robot" + desc = "An old outlawed combat robot. This one seems to be fitted with sharp claws." + icon = 'icons/mob/robots.dmi' + icon_state = "Security" + icon_living = "Security" + + gender = NEUTER + mob_biotypes = list(MOB_ROBOTIC) + health = 75 + maxHealth = 75 + healable = FALSE + melee_damage_lower = 5 + melee_damage_upper = 10 + attacktext = "claws" + attack_sound = 'sound/weapons/bladeslice.ogg' + projectilesound = 'sound/weapons/gunshot.ogg' + projectiletype = /obj/projectile/robot_bullet/weak + faction = list("robots") + check_friendly_fire = TRUE + 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) + possible_a_intents = list(INTENT_HELP, INTENT_GRAB, INTENT_DISARM, INTENT_HARM) + minbodytemp = 0 + verb_say = "states" + verb_ask = "queries" + verb_exclaim = "declares" + verb_yell = "alarms" + bubble_icon = "machine" + speech_span = SPAN_ROBOT + environment_smash = ENVIRONMENT_SMASH_NONE + obj_damage = 0 + + del_on_death = TRUE + loot = list(/obj/effect/decal/cleanable/robot_debris) + + do_footstep = TRUE + +/mob/living/simple_animal/hostile/robot/Initialize(mapload) + . = ..() + deathmessage = "[src] blows apart!" + +/mob/living/simple_animal/hostile/robot/Aggro() + . = ..() + a_intent_change(INTENT_HARM) + if(prob(5)) + say(pick("INTRUDER DETECTED!", "CODE 7-34.", "101010!!"), forced = type) + +/mob/living/simple_animal/hostile/robot/LoseAggro() + . = ..() + a_intent_change(INTENT_HELP) + +/mob/living/simple_animal/hostile/robot/death(gibbed) + do_sparks(3, TRUE, src) + ..(TRUE) + + +/mob/living/simple_animal/hostile/robot/range + name = "ranged combat robot" + desc = "An old outlawed combat robot. This one seems to be fitted with a low-powered rifle." + ranged = TRUE + retreat_distance = 6 + minimum_distance = 6 + +/mob/living/simple_animal/hostile/robot/burst + desc = "An old outlawed combat robot. This one seems to be fitted with a low-powered machine gun." + ranged = TRUE + rapid = 3 + retreat_distance = 5 + minimum_distance = 5 + +/mob/living/simple_animal/hostile/robot/advanced + name = "advanced combat robot" + icon_state = "hosborg" + icon_living = "hosborg" + desc = "An old outlawed combat robot. This one has extra armor plates fitted, and sharper claws." + health = 150 + maxHealth = 150 + dodging = TRUE + projectiletype = /obj/projectile/robot_bullet + melee_damage_lower = 8 + melee_damage_upper = 15 + +/mob/living/simple_animal/hostile/robot/advanced/ranged + name = "advanced ranged combat robot" + desc = "An old outlawed combat robot. This one has slightly less extra armor plates fitted, but features a high-powered rifle." + health = 125 + maxHealth = 125 + ranged = TRUE + retreat_distance = 5 + minimum_distance = 5 + +/mob/living/simple_animal/hostile/robot/advanced/Initialize(mapload) + . = ..() + add_overlay("eyes-hosborg") + + +//"Weak" commander robot +/mob/living/simple_animal/hostile/boss/robot_leader + name = "commander robot" + icon = 'icons/mob/robots.dmi' + icon_state = "rdborg" + icon_living = "rdborg" + desc = "An old outlawed combat robot. This one is fitted with additional sensors and communication antennas." + mob_biotypes = list(MOB_ROBOTIC) + boss_abilities = list(/datum/action/boss/robot_summon_weak) + faction = list("robots") + + ranged = TRUE + environment_smash = ENVIRONMENT_SMASH_NONE + minimum_distance = 3 + retreat_distance = 3 + obj_damage = 0 + melee_damage_lower = 15 + melee_damage_upper = 25 + health = 500 + maxHealth = 500 + 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) + projectiletype = /obj/projectile/robot_bullet + attacktext = "claws" + attack_sound = 'sound/weapons/bladeslice.ogg' + projectilesound = 'sound/weapons/gunshot.ogg' + + check_friendly_fire = TRUE + + verb_say = "states" + verb_ask = "queries" + verb_exclaim = "declares" + verb_yell = "alarms" + bubble_icon = "machine" + speech_span = SPAN_ROBOT + + + del_on_death = TRUE + loot = list(/obj/effect/decal/cleanable/robot_debris) + + do_footstep = TRUE + + +//Weak Summon Ability +//Robot can summon weak combat robots +/datum/action/boss/robot_summon_weak + name = "Summon Weak Robots" + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon_state = "art_summon" + usage_probability = 30 + boss_cost = 40 + boss_type = /mob/living/simple_animal/hostile/boss/robot_leader + needs_target = FALSE + say_when_triggered = "SEND SIGNAL; RECIEVE SUPPORT; COMMENCE DESTRUCTION" + var/summons_remaining = 6 + +/datum/action/boss/robot_summon_weak/Trigger() + if(summons_remaining && ..()) + var/list/minions = list( + /mob/living/simple_animal/hostile/robot, + /mob/living/simple_animal/hostile/robot/range) + var/list/directions = GLOB.cardinals.Copy() + for(var/i in 1 to 3) + var/minions_chosen = pick(minions) + new minions_chosen (get_step(boss, pick_n_take(directions)), TRUE) + summons_remaining -= 3; diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 37685111092d..9936019d6959 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -411,6 +411,11 @@ return TRUE return FALSE +/mob/living/proc/remove_all_quirks() + for(var/datum/quirk/Q in roundstart_quirks) + qdel(Q) + return TRUE + /////////////////////////////////// TRAIT PROCS //////////////////////////////////// /mob/living/proc/cure_blind(list/sources) diff --git a/code/modules/modular_computers/computers/_modular_computer_shared.dm b/code/modules/modular_computers/computers/_modular_computer_shared.dm index 4818387244fb..d716999c5ebb 100644 --- a/code/modules/modular_computers/computers/_modular_computer_shared.dm +++ b/code/modules/modular_computers/computers/_modular_computer_shared.dm @@ -64,3 +64,11 @@ . += "It has a printer installed." if(user_is_adjacent) . += "The printer's paper levels are at: [printer_slot.stored_paper]/[printer_slot.max_paper]." + + var/obj/item/computer_hardware/ai_interface/ai_interface = get_modular_computer_part(MC_AI_NETWORK) + if(ai_interface) + if(ai_interface.connected_cable) + . += "It has an AI network interface. It is currently connected to an ethernet cable." + else + . += "It has an AI network interface." + diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 7f4eeb65eadd..4a98c3eb0625 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -156,6 +156,9 @@ if(user.canUseTopic(src, BE_CLOSE)) var/obj/item/computer_hardware/card_slot/card_slot2 = all_components[MC_CARD2] var/obj/item/computer_hardware/card_slot/card_slot = all_components[MC_CARD] + var/obj/item/computer_hardware/ai_slot/ai_slot = all_components[MC_AI] + if(ai_slot) + ai_slot.try_eject(user) if(card_slot2) var/obj/item/card/id/target_id_card = card_slot2.stored_card if(!target_id_card) @@ -653,6 +656,17 @@ program.alert_pending = FALSE enabled = TRUE +/obj/item/modular_computer/pickup(mob/user) + . = ..() + RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(parent_moved)) + +/obj/item/modular_computer/dropped(mob/user) + . = ..() + UnregisterSignal(user, COMSIG_MOVABLE_MOVED) + +/obj/item/modular_computer/proc/parent_moved() + SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED) + /// Sets visible messages to also send to holder because coders didn't know it didn't do this /obj/item/modular_computer/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags) . = ..() @@ -661,3 +675,4 @@ /obj/item/modular_computer/proc/uplink_check(mob/living/M, code) return SEND_SIGNAL(src, COMSIG_NTOS_CHANGE_RINGTONE, M, code) & COMPONENT_STOP_RINGTONE_CHANGE + diff --git a/code/modules/modular_computers/computers/item/laptop/laptop_presets.dm b/code/modules/modular_computers/computers/item/laptop/laptop_presets.dm index 6c21fdf9aba1..93b0e8440603 100644 --- a/code/modules/modular_computers/computers/item/laptop/laptop_presets.dm +++ b/code/modules/modular_computers/computers/item/laptop/laptop_presets.dm @@ -37,3 +37,14 @@ new /datum/computer_file/program/secureye/mining ) . = ..() + +/obj/item/modular_computer/laptop/preset/network_admin + desc = "A multi-purpose laptop often used by network admins." + starting_files = list(new /datum/computer_file/program/ai/ai_network_interface) + starting_components = list( /obj/item/computer_hardware/processor_unit/small, + /obj/item/stock_parts/cell/computer, + /obj/item/computer_hardware/hard_drive, + /obj/item/computer_hardware/network_card, + /obj/item/computer_hardware/ai_interface, + /obj/item/computer_hardware/ai_slot, + /obj/item/computer_hardware/card_slot) diff --git a/code/modules/modular_computers/computers/item/phone/phone_presets.dm b/code/modules/modular_computers/computers/item/phone/phone_presets.dm index 4804ecb26652..14be4436cc5d 100644 --- a/code/modules/modular_computers/computers/item/phone/phone_presets.dm +++ b/code/modules/modular_computers/computers/item/phone/phone_presets.dm @@ -46,7 +46,8 @@ /obj/item/modular_computer/tablet/phone/preset/advanced/command/Initialize(mapload) starting_files |= list( - new /datum/computer_file/program/card_mod + new /datum/computer_file/program/card_mod, + new /datum/computer_file/program/synth_requester ) . = ..() diff --git a/code/modules/modular_computers/computers/machinery/console/console_presets.dm b/code/modules/modular_computers/computers/machinery/console/console_presets.dm index c475a3d2109c..4f91a87cc526 100644 --- a/code/modules/modular_computers/computers/machinery/console/console_presets.dm +++ b/code/modules/modular_computers/computers/machinery/console/console_presets.dm @@ -219,3 +219,18 @@ qdel(frame) return FALSE return ..() + + +// ===== NETWORK ADMIN CONSOLE ===== +/obj/machinery/modular_computer/console/preset/netmin + console_department = "Engineering" + name = "ai network console" + desc = "A stationary computer. This one comes preloaded with ai network administration software" + starting_files = list( new /datum/computer_file/program/ai/ai_network_interface, new /datum/computer_file/program/aidiag) + initial_program = /datum/computer_file/program/ai/ai_network_interface + starting_components = list( /obj/item/computer_hardware/network_card/wired, + /obj/item/computer_hardware/recharger/APC, + /obj/item/computer_hardware/hard_drive/super, + /obj/item/computer_hardware/processor_unit, + /obj/item/computer_hardware/ai_slot, + /obj/item/computer_hardware/card_slot) diff --git a/code/modules/modular_computers/file_system/programs/ai_network/_ai_network_program.dm b/code/modules/modular_computers/file_system/programs/ai_network/_ai_network_program.dm new file mode 100644 index 000000000000..9d37fd686f9c --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/ai_network/_ai_network_program.dm @@ -0,0 +1,67 @@ +/datum/computer_file/program/ai + filename = "DEBUG" + filedesc = "DEBUG" + category = PROGRAM_CATEGORY_ENGI + program_icon_state = "power_monitor" + extended_desc = "This program connects to a local AI network to allow for administrative access" + ui_header = "power_norm.gif" + transfer_access = ACCESS_NETWORK + usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_TABLET + requires_ntnet = FALSE + size = 8 + tgui_id = null + program_icon = "network-wired" + available_on_ntnet = FALSE + + var/obj/structure/ethernet_cable/attached_cable + + +/datum/computer_file/program/ai/run_program(mob/living/user) + . = ..(user) + if(ismachinery(computer.physical)) + search() + + +/datum/computer_file/program/ai/process_tick() + if(ismachinery(computer.physical) && !get_ainet()) + search() + + +/datum/computer_file/program/ai/proc/search() + var/turf/T = get_turf(computer) + attached_cable = locate(/obj/structure/ethernet_cable) in T + if(attached_cable) + return + +/datum/computer_file/program/ai/proc/get_ainet() + if(ismachinery(computer.physical)) + if(attached_cable) + return attached_cable.network + if(computer.all_components[MC_AI_NETWORK]) + var/obj/item/computer_hardware/ai_interface/ai_interface = computer.all_components[MC_AI_NETWORK] + if(ai_interface) + return ai_interface.get_network() + return FALSE + +/datum/computer_file/program/ai/ui_data(mob/user) + var/list/data = get_header_data() + + var/datum/ai_network/net = get_ainet() + data["has_ai_net"] = net + + return data + +/datum/computer_file/program/ai/proc/get_ai(get_card = FALSE) + var/obj/item/computer_hardware/ai_slot/ai_slot + + if(computer) + ai_slot = computer.all_components[MC_AI] + + if(computer && ai_slot && ai_slot.check_functionality()) + if(ai_slot.enabled && ai_slot.stored_card) + if(get_card) + return ai_slot.stored_card + if(ai_slot.stored_card.AI) + return ai_slot.stored_card.AI + + diff --git a/code/modules/modular_computers/file_system/programs/ai_network/ai_benchmark.dm b/code/modules/modular_computers/file_system/programs/ai_network/ai_benchmark.dm new file mode 100644 index 000000000000..2944d1f8651e --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/ai_network/ai_benchmark.dm @@ -0,0 +1,28 @@ +/datum/computer_file/program/ai/benchmark + filename = "aibenchmark" + filedesc = "Network Benchmarking Tool" + + program_icon_state = "power_monitor" + extended_desc = "This program connects to a historical NT records and compares them with the local network." + ui_header = "power_norm.gif" + + size = 4 + tgui_id = "NtosAIBenchmark" + program_icon = "network-wired" + available_on_ntnet = TRUE + +/datum/computer_file/program/ai/benchmark/ui_data(mob/user) + var/list/data = ..() + + if(!data["has_ai_net"]) + return data + + var/datum/ai_network/net = data["has_ai_net"] + + data["total_cpu"] = net.resources.total_cpu() + data["total_ram"] = net.resources.total_ram() + + data["ram_records"] = SSpersistence.ai_network_rankings["ram"] + data["cpu_records"] = SSpersistence.ai_network_rankings["cpu"] + + return data diff --git a/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm new file mode 100644 index 000000000000..0e3d44b47c83 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm @@ -0,0 +1,510 @@ +/datum/computer_file/program/ai/ai_network_interface + filename = "aiinterface" + filedesc = "AI Network Interface" + + program_icon_state = "power_monitor" + extended_desc = "This program connects to a local AI network to allow for administrative access" + ui_header = "power_norm.gif" + + size = 8 + tgui_id = "NtosAIMonitor" + program_icon = "network-wired" + available_on_ntnet = TRUE + + var/obj/machinery/ai/networking/active_networking + var/mob/networking_operator + var/mob/living/silicon/ai/downloading + var/mob/user_downloading + var/download_progress = 0 + var/download_warning = FALSE + + +/datum/computer_file/program/ai/ai_network_interface/process_tick() + . = ..() + + if(networking_operator && (!networking_operator.Adjacent(computer.physical))) + if(active_networking) + active_networking.remote_control = null + networking_operator = null + + if(!get_ainet()) + stop_download() + return + if(!get_ai(TRUE)) + stop_download() + return + + if(downloading && download_progress >= 50 && !download_warning) + var/turf/T = get_turf(computer.physical) + if(!downloading.mind && downloading.deployed_shell.mind) + to_chat(downloading.deployed_shell, span_userdanger("Warning! Download is 50% completed! Download location: [get_area(computer.physical)] ([T.x], [T.y], [T.z])!")) + else + to_chat(downloading, span_userdanger("Warning! Download is 50% completed! Download location: [get_area(computer.physical)] ([T.x], [T.y], [T.z])!")) + download_warning = TRUE + if(downloading && download_progress >= 100) + finish_download() + + if(downloading) + if(!downloading.can_download) + stop_download() + return + var/datum/ai_network/local_network = get_ainet() + if(downloading.ai_network.resources != local_network.resources) //If we don't share resources we aren't connected, more performant way of checking than get_all_ais() + stop_download() + return + download_progress += AI_DOWNLOAD_PER_PROCESS * downloading.downloadSpeedModifier + + +/datum/computer_file/program/ai/ai_network_interface/ui_data(mob/user) + var/list/data = ..() + + if(!data["has_ai_net"]) + return data + + var/datum/ai_network/net = data["has_ai_net"] + + + //Networking devices control + data["networking_devices"] = list() + for(var/obj/machinery/ai/networking/N in net.get_local_nodes_oftype(/obj/machinery/ai/networking)) + data["networking_devices"] += list(list("label" = N.label, "ref" = REF(N), "has_partner" = N.partner ? N.partner.label : null)) + + //Downloading/Uploadingainet + data["ai_list"] = list() + for(var/mob/living/silicon/ai/AI in net.get_all_ais()) + var/being_hijacked = AI.hijacking ? TRUE : FALSE + data["ai_list"] += list(list("name" = AI.name, "ref" = REF(AI), "can_download" = AI.can_download, "health" = AI.health, "active" = AI.mind ? TRUE : FALSE, "being_hijacked" = being_hijacked, "in_core" = istype(AI.loc, /obj/machinery/ai/data_core), + "assigned_cpu" = net.resources.cpu_assigned[AI] ? net.resources.cpu_assigned[AI] : 0, "assigned_ram" = net.resources.ram_assigned[AI] ? net.resources.ram_assigned[AI] : 0)) + + data["is_infiltrator"] = is_infiltrator(user) + + data["connection_type"] = ismachinery(computer.physical) ? "wired connection" : "local wire shunt" + data["network_name"] = net.label + + data["current_ai_ref"] = null + if(isAI(user)) + data["current_ai_ref"] = REF(user) + + data["human_only"] = net.resources.human_lock + + data["intellicard"] = get_ai(TRUE) + var/mob/living/silicon/ai/card_ai = get_ai() + if(card_ai) + data["intellicard_ai"] = card_ai.real_name + data["intellicard_ai_health"] = card_ai.health + else + data["intellicard_ai"] = null + data["intellicard_ai_health"] = 0 + + + if(downloading) + data["downloading"] = downloading.real_name + data["download_progress"] = download_progress + data["downloading_ref"] = REF(downloading) + else + data["downloading"] = null + data["download_progress"] = 0 + + data["holding_mmi"] = user.is_holding_item_of_type(/obj/item/mmi) ? TRUE : FALSE + + data["can_upload"] = net.find_data_core() ? TRUE : FALSE + + + //Resource allocation + + data["total_cpu"] = net.resources.total_cpu() + data["total_ram"] = net.resources.total_ram() + + + data["total_assigned_cpu"] = net.resources.total_cpu_assigned() + data["total_assigned_ram"] = net.resources.total_ram_assigned() + + //Local processing + + data["network_cpu_assignments"] = list() + var/remaining_net_cpu = 1 + for(var/project in GLOB.possible_ainet_activities) + var/assigned = net.local_cpu_usage[project] ? net.local_cpu_usage[project] : 0 + data["network_cpu_assignments"] += list(list("name" = project, "assigned" = assigned, "tagline" = GLOB.ainet_activity_tagline[project], "description" = GLOB.ainet_activity_description[project])) + remaining_net_cpu -= assigned + + data["network_ref"] = REF(net) + data["network_assigned_ram"] = net.resources.ram_assigned[net] ? net.resources.ram_assigned[net] : 0 + data["network_assigned_cpu"] = net.resources.cpu_assigned[net] ? net.resources.cpu_assigned[net] : 0 + data["bitcoin_amount"] = round(net.bitcoin_payout, 1) + + data["remaining_network_cpu"] = remaining_net_cpu + + data["networks"] = list() + for(var/datum/ai_network/subnet in net.resources.networks) + if(subnet.cables.len || subnet.nodes.len) + var/area/area + if(length(subnet.cables)) + area = get_area(subnet.cables[1]) + else + area = get_area(subnet.nodes[1]) + if(!area) + continue + var/synth_list = list() + for(var/mob/living/carbon/synth in subnet.synth_list) + synth_list += list(list("name" = synth.real_name, "ref" = REF(synth))) + data["networks"] += list(list("ref" = REF(subnet), "name" = subnet.custom_name ? subnet.custom_name : area.name, "cpu" = net.resources.cpu_sources[subnet], "ram" = net.resources.ram_sources[subnet], "synths" = synth_list , "current_net" = (subnet == net))) + + return data + +/datum/computer_file/program/ai/ai_network_interface/ui_act(action, params, datum/tgui/ui) + if(..()) + return + var/mob/user = usr + var/datum/ai_network/net = get_ainet() + if(!net) + return + + switch(action) + //General actions + if("change_network_name") + var/new_label = stripped_input(usr, "Enter new label", "Set label", max_length = 32) + if(new_label) + if(isnotpretty(new_label)) + to_chat(usr, span_notice("The machine rejects the input. See rule 0.1.")) + var/log_message = "[key_name(usr)] just tripped a pretty filter: '[new_label]'." + message_admins(log_message) + log_say(log_message) + return + net.label = new_label + . = TRUE + //AI interaction, downloading/uploading + if("apply_object") + if(!net) + return TRUE + var/applied_something = FALSE + var/mob/living/silicon/ai/targeted_ai = locate(params["ai_ref"]) in net.get_all_ais() + if(!targeted_ai) + to_chat(user, span_warning("Unable to locate AI.")) + return TRUE + + var/obj/item/surveillance_upgrade/upgrade = user.is_holding_item_of_type(/obj/item/surveillance_upgrade) + if(upgrade) + applied_something = TRUE + upgrade.afterattack(targeted_ai, user) + + var/obj/item/malf_upgrade/malf_upgrade = user.is_holding_item_of_type(/obj/item/malf_upgrade) + if(malf_upgrade) + applied_something = TRUE + malf_upgrade.afterattack(targeted_ai, user) + if(!applied_something) + to_chat(user, span_warning("You don't have any upgrades to upload!")) + return TRUE + if("upload_person") + if(!net) + return TRUE + var/obj/item/mmi/brain = user.is_holding_item_of_type(/obj/item/mmi) + if(brain) + if(!brain.brainmob) + to_chat(user, span_warning("[brain] is not active!")) + return ..() + SSticker.mode.remove_antag_for_borging(brain.brainmob.mind) + if(!istype(brain.laws, /datum/ai_laws/ratvar)) + remove_servant_of_ratvar(brain.brainmob, TRUE) + var/mob/living/silicon/ai/A + + var/datum/ai_laws/laws = new + laws.set_laws_config() + + if (brain.overrides_aicore_laws) + A = new /mob/living/silicon/ai(computer.physical.loc, brain.laws, brain.brainmob, FALSE, FALSE) + else + A = new /mob/living/silicon/ai(computer.physical.loc, laws, brain.brainmob, FALSE, FALSE) + + A.relocate(TRUE, forced_network = net) + + if(brain.force_replace_ai_name) + A.fully_replace_character_name(A.name, brain.replacement_ai_name()) + SSblackbox.record_feedback("amount", "ais_created", 1) + qdel(brain) + to_chat(user, span_notice("AI succesfully uploaded.")) + return FALSE + if("upload_ai") + if(!net) + return TRUE + var/mob/living/silicon/ai/AI = get_ai() + var/obj/item/aicard/intellicard = get_ai(TRUE) + if(!istype(AI)) + to_chat(user, span_warning("IntelliCard contains no AI!")) + return TRUE + to_chat(AI, span_notice("You are being uploaded. Please stand by...")) + AI.radio_enabled = TRUE + AI.control_disabled = FALSE + AI.relocate(TRUE) + intellicard.AI = null + intellicard.update_icon() + to_chat(user, span_notice("AI successfully uploaded")) + + if("stop_download") + if(isAI(user)) + to_chat(user, span_warning("You need physical access to stop the download!")) + return + stop_download() + + if("start_download") + if(!get_ai(TRUE) || downloading) + return + var/mob/living/silicon/ai/target = locate(params["download_target"]) in net.get_all_ais() + if(!target || !istype(target)) + return + if(!istype(target.loc, /obj/machinery/ai/data_core)) + return + if(!target.can_download) + return + downloading = target + + if(!downloading.mind && downloading.deployed_shell.mind) + to_chat(downloading.deployed_shell, span_userdanger("Warning! Someone is attempting to download you from [get_area(computer.physical)]! (Click here to finish download instantly)")) + else + to_chat(downloading, span_userdanger("Warning! Someone is attempting to download you from [get_area(computer.physical)]! (Click here to finish download instantly)")) + user_downloading = user + download_progress = 0 + . = TRUE + if("skip_download") + if(!downloading) + return + if(user == downloading) + finish_download() + + if("start_hijack") + if(!is_infiltrator(user)) + return + if(!istype(user.get_active_held_item(), /obj/item/ai_hijack_device)) + to_chat(user, span_warning("You need to be holding the serial exploitation unit to initiate the hijacking process!")) + return + var/obj/item/ai_hijack_device/device = user.get_active_held_item() + var/mob/living/silicon/ai/target = locate(params["target_ai"]) in net.get_all_ais() + if(!target || !isAI(target)) + return + var/mob/living/silicon/ai/A = target + if(A.mind && A.mind.has_antag_datum(/datum/antagonist/hijacked_ai)) + to_chat(user, span_warning("[A] has already been hijacked!")) + return + if(A.stat == DEAD) + to_chat(user, span_warning("[A] is dead!")) + return + if(A.hijacking) + to_chat(user, span_warning("[A] is already in the process of being hijacked!")) + return + user.visible_message(span_warning("[user] begins furiously typing something into [computer.physical]...")) + if(do_after(user, 5.5 SECONDS, computer.physical)) + user.dropItemToGround(device) + device.forceMove(A) + A.hijacking = device + A.hijack_start = world.time + A.update_icons() + to_chat(A, span_danger("Unknown device connected to /dev/ttySL0")) + to_chat(A, span_danger("Connected at 115200 bps")) + to_chat(A, span_binarysay("ntai login: root")) + to_chat(A, span_binarysay("Password: *****r2")) + to_chat(A, span_binarysay("$ dd from=/dev/ttySL0 of=/tmp/ai-hijack bs=4096 && chmod +x /tmp/ai-hijack && tmp/ai-hijack")) + to_chat(A, span_binarysay("111616 bytes (112 KB, 109 KiB) copied, 1 s, 14.4 KB/s")) + message_admins("[ADMIN_LOOKUPFLW(user)] has attached a hijacking device to [ADMIN_LOOKUPFLW(A)]!") + notify_ghosts("[user] has begun to hijack [A]!", source = computer.physical, action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/chime.ogg') + + if("stop_hijack") + var/mob/living/silicon/ai/target = locate(params["target_ai"]) in net.get_all_ais() + if(!target || !isAI(target)) + return + var/mob/living/silicon/ai/A = target + + + user.visible_message(span_danger("[user] attempts to cancel a process on [computer.physical]."), span_notice("An unknown process seems to be interacting with [A]! You attempt to end the proccess..")) + if (do_after(user, 10 SECONDS, computer.physical)) + A.hijacking.forceMove(get_turf(computer.physical)) + A.hijacking = null + A.hijack_start = 0 + A.update_icons() + to_chat(A, span_bolddanger("Unknown device disconnected. Systems confirmed secure.")) + else + to_chat(user, span_notice("You fail to remove the device.")) + + //Network control + if("control_networking") + if(!params["ref"]) + return + var/obj/machinery/ai/networking/N = locate(params["ref"]) in net.get_local_nodes_oftype(/obj/machinery/ai/networking) + if(active_networking) + active_networking.remote_control = null + networking_operator = user + active_networking = N + active_networking.remote_control = networking_operator + active_networking.ui_interact(networking_operator) + + //Resource allocation + if("clear_ai_resources") + if(isAI(user) && net.resources.human_lock) + return + var/atom/target_ai = locate(params["target_ai"]) in net.get_all_ais() | net.resources.networks + + net.resources.clear_ai_resources(target_ai) + . = TRUE + + if("set_cpu") + if(isAI(user) && net.resources.human_lock) + return + var/atom/target_ai = locate(params["target_ai"]) in net.get_all_ais() | net.resources.networks + + var/amount = params["amount_cpu"] + if(amount > 1 || amount < 0) + return + net.resources.set_cpu(target_ai, amount) + . = TRUE + if("max_cpu") + if(isAI(user) && net.resources.human_lock) + return + var/atom/target_ai = locate(params["target_ai"]) in net.get_all_ais() | net.resources.networks + + var/amount = (1 - net.resources.total_cpu_assigned()) + net.resources.cpu_assigned[target_ai] + + net.resources.set_cpu(target_ai, amount) + . = TRUE + if("add_ram") + if(isAI(user) && net.resources.human_lock) + return + var/atom/target_ai = locate(params["target_ai"]) in net.get_all_ais() | net.resources.networks + + if(net.resources.total_ram_assigned() >= net.resources.total_ram()) + return + net.resources.add_ram(target_ai, 1) + . = TRUE + + if("remove_ram") + if(isAI(user) && net.resources.human_lock) + return + var/atom/target_ai = locate(params["target_ai"]) in net.get_all_ais() | net.resources.networks + + var/current_ram = net.resources.ram_assigned[target_ai] + + if(current_ram <= 0) + return + net.resources.remove_ram(target_ai, 1) + . = TRUE + + //Local computing + if("allocate_network_cpu") + if(isAI(user) && net.resources.human_lock) + return + var/project_type = params["project_name"] + if(!(project_type in GLOB.possible_ainet_activities)) + return + var/amount = text2num(params["amount"]) + if(amount < 0 || amount > 1) + return + + var/total_cpu_used = 0 + for(var/I in net.local_cpu_usage) + if(I == project_type) + continue + total_cpu_used += net.local_cpu_usage[I] + + if((1 - total_cpu_used) >= amount) + net.local_cpu_usage[project_type] = amount + else + net.local_cpu_usage[project_type] = (1 - total_cpu_used) + + . = TRUE + + if("max_network_cpu") + if(isAI(user) && net.resources.human_lock) + return + var/project_type = params["project_name"] + if(!(project_type in GLOB.possible_ainet_activities)) + return + + var/total_cpu_used = 0 + for(var/I in net.local_cpu_usage) + if(I == project_type) + continue + total_cpu_used += net.local_cpu_usage[I] + + var/amount_to_add = 1 - total_cpu_used + + net.local_cpu_usage[project_type] = amount_to_add + . = TRUE + + if("toggle_human_only") + if(isAI(user)) + return + net.resources.human_lock = !net.resources.human_lock + to_chat(user, span_notice("Network now allows changes [net.resources.human_lock ? "exclusively by organics." : "by all authorized users."]")) + + if("bitcoin_payout") + var/payout_amount = round(net.bitcoin_payout, 1) //Sure you can have your extra 0.5 credits :) + var/obj/item/holochip/holochip = new (computer.physical.drop_location(), payout_amount) + user.put_in_hands(holochip) + to_chat(user, span_notice("Payout of [payout_amount]cr confirmed.")) + net.bitcoin_payout = 0 + + if("transfer_synth") + var/mob/living/carbon/to_transfer = locate(params["synth_target"]) + if(!(to_transfer.ai_network in net.resources.networks)) + return + var/options = list() + for(var/datum/ai_network/subnet in net.resources.networks) + if(subnet.custom_name) + if(options[subnet.custom_name]) + options["[subnet.custom_name] ([rand(1, 999)])"] = subnet //save us by random chance, hopefully + else + options[subnet.custom_name] = subnet + else + var/area_text + if(subnet.cables.len) + var/obj/structure/ethernet_cable/C = subnet.cables[1] + area_text = "[get_area(subnet.cables[0])] ([C.x], [C.y])" + else + var/obj/machinery/N = subnet.nodes[1] + area_text = "[get_area(subnet.nodes[1])] ([N.x], [N.y])" + if(!area_text) + continue + options[area_text] = subnet + + options["Cancel"] = "Cancel" + + var/response = tgui_input_list(user, "Select which network to transfer the synth to", "Synth Network Transfer", options) + + if(response == "Cancel") + return + if(options[response] in net.resources.networks) + var/datum/ai_network/new_net = options[response] + new_net.add_synth(to_transfer) + + + if("rename_network") + var/datum/ai_network/target_net = locate(params["target_net"]) + if(!(target_net in net.resources.networks)) + return + var/new_name = stripped_input(user, "Slect a new name for the network", "Network Name Change", null, 32) + if(isnotpretty(new_name)) + to_chat(user, "Your fingers slip. See rule 0.1.") + var/log_message = "[key_name(user)] just tripped a pretty filter: '[new_name]'." + message_admins(log_message) + log_say(log_message) + return FALSE + target_net.custom_name = new_name + + + +/datum/computer_file/program/ai/ai_network_interface/proc/finish_download() + var/obj/item/aicard/intellicard = get_ai(TRUE) + if(intellicard) + if(!isaicore(downloading.loc)) + stop_download(TRUE) + return + downloading.transfer_ai(AI_TRANS_TO_CARD, user_downloading, null, intellicard) + intellicard.update_icon() + stop_download(TRUE) + +/datum/computer_file/program/ai/ai_network_interface/proc/stop_download(silent = FALSE) + if(downloading) + if(!silent) + to_chat(downloading, span_userdanger("Download stopped.")) + downloading = null + user_downloading = null + download_progress = 0 + download_warning = FALSE diff --git a/code/modules/modular_computers/file_system/programs/command/synth_requester.dm b/code/modules/modular_computers/file_system/programs/command/synth_requester.dm new file mode 100644 index 000000000000..a71e0bc474ce --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/command/synth_requester.dm @@ -0,0 +1,173 @@ +#define SECURITY "sec" +#define MEDICAL "med" +#define ENGINEERING "eng" +#define SCIENCE "sci" +#define SUPPLY "sup" + +GLOBAL_LIST_INIT(granted_synthetic_access, list()) + +/datum/computer_file/program/synth_requester + filename = "synth_req" + filedesc = "Synthetic Manager" + category = PROGRAM_CATEGORY_CMD + program_icon_state = "id" + extended_desc = "Program for requesting synthetic assistance and granting departmental access." + transfer_access = ACCESS_HEADS + usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_TABLET | PROGRAM_PHONE | PROGRAM_PDA + size = 4 + tgui_id = "NtosSynthManager" + program_icon = "address-book" + +/datum/computer_file/program/synth_requester/ui_act(action, params, datum/tgui/ui) + if(..()) + return + + var/mob/user = usr + var/obj/item/card/id/user_id = user.get_idcard() + computer.play_interact_sound() + if(user_id) + if(!(ACCESS_HEADS in user_id.access)) + return + + + switch(action) + if("grant_science") + if(ACCESS_RD in user_id.access) + var/relevant_access = list(ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_ROBO_CONTROL, ACCESS_TELEPORTER, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_ROBOTICS) + if(GLOB.granted_synthetic_access[SCIENCE]) + GLOB.granted_synthetic_access[SCIENCE] = FALSE + binary_talk("Synthetic assistance no longer required in the Science department", "Synthetic Access Requester") + GLOB.synthetic_added_access -= relevant_access + else + var/reason = tgui_input_text(user, "Please provide a reason for requesting synthetic assistance.", "Assistance Request") + if(!reason) + return FALSE + binary_talk("Synthetic assistance required in the Science department for the following reason: [reason]", "Synthetic Access Requester") + GLOB.granted_synthetic_access[SCIENCE] = TRUE + GLOB.synthetic_added_access |= relevant_access + + return TRUE + if("grant_supply") + if(ACCESS_HOP in user_id.access) + var/relevant_access = list(ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MAILSORTING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM) + if(GLOB.granted_synthetic_access[SUPPLY]) + GLOB.granted_synthetic_access[SUPPLY] = FALSE + binary_talk("Synthetic assistance no longer required in the Supply department", "Synthetic Access Requester") + GLOB.synthetic_added_access -= relevant_access + else + var/reason = tgui_input_text(user, "Please provide a reason for requesting synthetic assistance.", "Assistance Request") + if(!reason) + return FALSE + binary_talk("Synthetic assistance required in the Supply department for the following reason: [reason]", "Synthetic Access Requester") + GLOB.granted_synthetic_access[SUPPLY] = TRUE + GLOB.synthetic_added_access |= relevant_access + + + return TRUE + if("grant_engi") + if(ACCESS_CE in user_id.access) + var/relevant_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_ATMOSPHERICS, ACCESS_CONSTRUCTION, ACCESS_SECURE_TECH_STORAGE) + if(GLOB.granted_synthetic_access[ENGINEERING]) + GLOB.granted_synthetic_access[ENGINEERING] = FALSE + binary_talk("Synthetic assistance no longer required in the Engineering department", "Synthetic Access Requester") + GLOB.synthetic_added_access -= relevant_access + else + var/reason = tgui_input_text(user, "Please provide a reason for requesting synthetic assistance.", "Assistance Request") + if(!reason) + return FALSE + binary_talk("Synthetic assistance required in the Engineering department for the following reason: [reason]", "Synthetic Access Requester") + GLOB.granted_synthetic_access[ENGINEERING] = TRUE + GLOB.synthetic_added_access |= relevant_access + + return TRUE + if("grant_security") + if(ACCESS_HOS in user_id.access) + var/relevant_access = list(ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS, ACCESS_BRIG_PHYS) + if(GLOB.granted_synthetic_access[SECURITY]) + GLOB.granted_synthetic_access[SECURITY] = FALSE + binary_talk("Synthetic assistance no longer required in the Security department", "Synthetic Access Requester") + GLOB.synthetic_added_access -= relevant_access + else + var/reason = tgui_input_text(user, "Please provide a reason for requesting synthetic assistance.", "Assistance Request") + if(!reason) + return FALSE + binary_talk("Synthetic assistance required in the Security department for the following reason: [reason]", "Synthetic Access Requester") + GLOB.granted_synthetic_access[SECURITY] = TRUE + GLOB.synthetic_added_access |= relevant_access + + return TRUE + if("grant_medical") + if(ACCESS_CMO in user_id.access) + var/relevant_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CLONING, ACCESS_PARAMEDIC, ACCESS_PSYCH) + if(GLOB.granted_synthetic_access[MEDICAL]) + GLOB.granted_synthetic_access[MEDICAL] = FALSE + binary_talk("Synthetic assistance no longer required in the Medical department", "Synthetic Access Requester") + GLOB.synthetic_added_access -= relevant_access + else + var/reason = tgui_input_text(user, "Please provide a reason for requesting synthetic assistance.", "Assistance Request") + if(!reason) + return FALSE + binary_talk("Synthetic assistance required in the Medical department for the following reason: [reason]", "Synthetic Access Requester") + GLOB.granted_synthetic_access[MEDICAL] = TRUE + GLOB.synthetic_added_access |= relevant_access + return TRUE + + +/datum/computer_file/program/synth_requester/ui_data(mob/user) + var/list/data = get_header_data() + + data["granted_access"] = list(GLOB.granted_synthetic_access) + + var/obj/item/card/id/user_id = user.get_idcard() + + if(ACCESS_CMO in user_id.access) + data["cmo"] = TRUE + if(ACCESS_HOS in user_id.access) + data["hos"] = TRUE + if(ACCESS_RD in user_id.access) + data["rd"] = TRUE + if(ACCESS_HOP in user_id.access) + data["hop"] = TRUE + if(ACCESS_CE in user_id.access) + data["ce"] = TRUE + + return data + +/proc/binary_talk(message,name, loud = TRUE) + + var/spans = "[SPAN_ROBOT]" + + + if(loud) + // AIs are loud and ugly + spans += " [SPAN_COMMAND]" + + var/quoted_message = "states, \"[message]\"" + + for(var/mob/M in GLOB.player_list) + if(M.binarycheck()) + to_chat( + M, + span_binarysay("\ + Robotic Talk, \ + [span_name("[name]")] [span_message("[quoted_message]")]\ + ") + ) + + if(isobserver(M)) + // If the AI talks on binary chat, we still want to follow + // its camera eye, like if it talked on the radio + + to_chat( + M, + span_binarysay("\ + Robotic Talk, \ + [span_name("[name]")] [span_message("[quoted_message]")]\ + ") + ) + +#undef SECURITY +#undef MEDICAL +#undef ENGINEERING +#undef SCIENCE +#undef SUPPLY diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm index 00b540b798a2..a78819409b57 100644 --- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm @@ -192,7 +192,7 @@ "installed" = !!hard_drive.find_file_by_name(P.filename), "compatible" = check_compatibility(P), "size" = P.size, - "access" = emagged && P.available_on_syndinet ? TRUE : P.can_run(user,transfer = 1, access = access), + "access" = emagged ? TRUE : P.can_run(user,transfer = 1, access = access), "verifiedsource" = P.available_on_ntnet, )) diff --git a/code/modules/modular_computers/hardware/aiinterface.dm b/code/modules/modular_computers/hardware/aiinterface.dm new file mode 100644 index 000000000000..214bbad5f548 --- /dev/null +++ b/code/modules/modular_computers/hardware/aiinterface.dm @@ -0,0 +1,43 @@ +/obj/item/computer_hardware/ai_interface + name = "portable AI network interface" + desc = "A module allowing this computer to interface with local AI networks. Only works with portable computers" + power_usage = 15 //W + icon_state = "card_mini" + w_class = WEIGHT_CLASS_SMALL // Can't be installed into tablets/PDAs + device_type = MC_AI_NETWORK + expansion_hw = TRUE + + var/obj/structure/ethernet_cable/connected_cable = null + + +// Called when component is installed into PC. +/obj/item/computer_hardware/ai_interface/on_install(obj/item/modular_computer/M, mob/living/user = null) + RegisterSignal(M, COMSIG_MOVABLE_MOVED, PROC_REF(parent_moved)) + + +/obj/item/computer_hardware/ai_interface/on_remove(obj/item/modular_computer/M, mob/living/user = null) + UnregisterSignal(M, COMSIG_MOVABLE_MOVED) + connected_cable = null + +/obj/item/computer_hardware/ai_interface/proc/parent_moved() + if(connected_cable) + if(!connected_cable.Adjacent(holder.physical.loc)) + connected_cable = null + if(ismob(holder.physical.loc)) + to_chat(holder.physical.loc, span_warning("You disconnect [holder] from the cable!")) + +/obj/item/computer_hardware/ai_interface/proc/connect_cable(obj/structure/ethernet_cable/EC) + connected_cable = EC + + +/obj/item/computer_hardware/ai_interface/proc/get_network() + if(!connected_cable) + return FALSE + return connected_cable.network + + +/obj/item/computer_hardware/ai_interface/can_install(obj/item/modular_computer/M, mob/living/user = null) + if(!ismachinery(M.physical) && !M.physical.anchored) + return ..() + to_chat(user, span_warning("\The [src] is incompatible with stationary computers!")) + return FALSE diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm index d176edb1d1c0..deb550b297d2 100644 --- a/code/modules/paperwork/papershredder.dm +++ b/code/modules/paperwork/papershredder.dm @@ -1,5 +1,5 @@ /obj/machinery/papershredder - name = "Paper Shredder" + name = "paper shredder" desc = "Disposes of papers you don't want seen, as well as IDs that are no longer needed." icon = 'icons/obj/bureaucracy.dmi' icon_state = "papershredder0" diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index d4f9b049a0ad..cfae28b0aa25 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1128,6 +1128,18 @@ return FALSE _try_interact(user) +/obj/machinery/power/apc/attack_ai(mob/user) + if(!isAI(user)) + return ..() + + var/mob/living/silicon/ai/AI = user + if(AI.has_subcontroller_connection(get_area(src))) + return ..() + + to_chat(AI, span_warning("No connection to subcontroller detected. Polling APC...")) + if(do_after(AI, 1 SECONDS, src, IGNORE_USER_LOC_CHANGE)) + return ..() + /obj/machinery/power/apc/proc/toggle_breaker(mob/user) if(!is_operational() || failure_timer) return diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index d0115edfe4b7..04d1cc676e0a 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -611,7 +611,7 @@ By design, d1 is the smallest direction and d2 is the highest return if(!isturf(T) || T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE || !T.can_have_cabling()) - to_chat(user, span_warning("You can only lay cables on catwalks and plating!")) + to_chat(user, span_warning("You can only lay cables on top of exterior catwalks and plating!")) return if(get_amount() < 1) // Out of cable @@ -631,6 +631,7 @@ By design, d1 is the smallest direction and d2 is the highest else dirn = dirnew + for(var/obj/structure/cable/LC in T) if(LC.d2 == dirn && LC.d1 == 0) to_chat(user, span_warning("There's already a cable at that position!")) @@ -673,7 +674,7 @@ By design, d1 is the smallest direction and d2 is the highest var/turf/T = C.loc if(!isturf(T) || T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE || !T.can_have_cabling()) - to_chat(user, span_warning("You can only lay cables on catwalks and plating!")) + to_chat(user, span_warning("You can only lay cables on top of exterior catwalks and plating!")) return if(get_amount() < 1) // Out of cable diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index d046e42d30f9..0ed04f1e3537 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -408,6 +408,14 @@ return C return null +/turf/proc/get_ai_cable_node() + if(!can_have_cabling()) + return null + for(var/obj/structure/ethernet_cable/C in src) + if(C.d1 == 0) + return C + return null + /area/proc/get_apc() for(var/obj/machinery/power/apc/APC in GLOB.apcs_list) if(APC.area == src) diff --git a/code/modules/procedural_mapping/mapGenerators/repair.dm b/code/modules/procedural_mapping/mapGenerators/repair.dm index 3c78b00e4255..f0da3fe45dc5 100644 --- a/code/modules/procedural_mapping/mapGenerators/repair.dm +++ b/code/modules/procedural_mapping/mapGenerators/repair.dm @@ -44,9 +44,45 @@ z_offset += bounds[MAP_MAXZ] - bounds[MAP_MINZ] + 1 var/list/obj/machinery/atmospherics/atmos_machines = list() + var/list/obj/structure/ethernet_cable/ethernet_cables = list() var/list/obj/structure/cable/cables = list() + var/list/atom/movable/movables = list() + var/list/area/areas = list() var/list/atom/atoms = list() + var/list/turfs = block( + locate( + bounds[MAP_MINX], + bounds[MAP_MINY], + SSmapping.station_start + ), + locate( + bounds[MAP_MAXX], + bounds[MAP_MAXY], + z_offset - 1 + ) + ) + + for(var/turf/current_turf as anything in turfs) + var/area/current_turfs_area = current_turf.loc + areas |= current_turfs_area + + for(var/movable_in_turf in current_turf) + movables += movable_in_turf + if(istype(movable_in_turf, /obj/structure/cable)) + cables += movable_in_turf + continue + if(istype(movable_in_turf, /obj/structure/ethernet_cable)) + ethernet_cables += movable_in_turf + continue + if(istype(movable_in_turf, /obj/machinery/atmospherics)) + atmos_machines += movable_in_turf + + SSatoms.InitializeAtoms(areas + turfs + movables) + SSmachines.setup_template_powernets(cables) + SSmachines.setup_template_ainets(ethernet_cables) + SSair.setup_template_machinery(atmos_machines) + require_area_resort() var/list/generation_turfs = block( diff --git a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm index 1f691dd297b0..befdc5c4ab46 100644 --- a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm +++ b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm @@ -27,6 +27,11 @@ name = "double-barrel shotgun internal magazine" max_ammo = 2 +/obj/item/ammo_box/magazine/internal/shot/lethal + name = "double-barrel shotgun internal magazine" + ammo_type = /obj/item/ammo_casing/shotgun/buckshot + max_ammo = 2 + /obj/item/ammo_box/magazine/internal/shot/improvised name = "improvised shotgun internal magazine" ammo_type = /obj/item/ammo_casing/shotgun/improvised diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 9fa1430663d4..6d616d05ceb5 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -325,6 +325,9 @@ firing_burst = FALSE return FALSE if(chambered && chambered.BB) + if(!synth_check(user, SYNTH_RESTRICTED_WEAPON)) + return + if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal. if(chambered.harmful) // Is the bullet chambered harmful? to_chat(user, span_notice(" [src] is lethally chambered! You don't want to risk harming anyone...")) @@ -386,6 +389,8 @@ addtimer(CALLBACK(src, PROC_REF(process_burst), user, target, message, params, zone_override, sprd, randomized_gun_spread, randomized_bonus_spread, rand_spr, i), fire_delay * (i - 1)) else if(chambered) + if(!synth_check(user, SYNTH_RESTRICTED_WEAPON)) + return if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal. if(chambered.harmful) // Is the bullet chambered harmful? to_chat(user, span_notice(" [src] is lethally chambered! You don't want to risk harming anyone...")) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index fe376cebca93..5bb5f43b7c66 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -189,6 +189,9 @@ bolt_type = BOLT_TYPE_NO_BOLT can_be_sawn_off = TRUE +/obj/item/gun/ballistic/shotgun/doublebarrel/lethal + mag_type = /obj/item/ammo_box/magazine/internal/shot/lethal + /obj/item/gun/ballistic/shotgun/doublebarrel/AltClick(mob/user) . = ..() if(unique_reskin && !current_skin && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 662afefd71ff..cfe5f7192bcd 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -179,6 +179,16 @@ maxstack = MAXCOIL departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE +/datum/design/ethernet_coil + name = "Ethernet Coil" + id = "ethernet_coil" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 10, /datum/material/glass = 5) + build_path = /obj/item/stack/ethernet_coil + category = list("initial","Tools","Tool Designs") + maxstack = MAXCOIL + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE + /datum/design/toolbox name = "Toolbox" id = "tool_box" diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 9737eb886c41..756659a03ddc 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -310,10 +310,3 @@ category = list("Computer Boards") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE -/datum/design/board/ai_resource_distribution - name = "Computer Design (AI Resource Distribution Console)" - desc = "Allows for the construction of circuit boards used to build an AI Resource Distribution console." - id = "ai_resource_distribution" - build_path = /obj/item/circuitboard/computer/ai_resource_distribution - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/computer_part_designs.dm b/code/modules/research/designs/computer_part_designs.dm index 86121f56892f..0bda24620b6e 100644 --- a/code/modules/research/designs/computer_part_designs.dm +++ b/code/modules/research/designs/computer_part_designs.dm @@ -261,3 +261,13 @@ build_path = /obj/item/computer_hardware/sensorpackage category = list("Computer Parts") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING + +// Intellicard slot +/datum/design/network_interface + name = "AI Network Interface" + id = "aiinterface" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 600) + build_path = /obj/item/computer_hardware/ai_interface + category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 205047e1c867..dfa6042f3e01 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -715,6 +715,15 @@ category = list ("Engineering Machinery") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING +/datum/design/board/synth_pod + name = "Machine Design (Synthetic Storage Unit)" + desc = "The circuit board for a synthetic storage unit." + id = "synth_pod" + build_path = /obj/item/circuitboard/machine/synth_pod + category = list ("Engineering Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + + /datum/design/board/decontamination_unit name = "Machine Design (Decontamination Unit)" desc = "The circuit board for a decontamination unit." @@ -739,6 +748,22 @@ category = list("Engineering Machinery") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE +/datum/design/board/networking_machine + name = "Machine Design (Networking Machine)" + desc = "The circuit board for a dual-purpose networking machine." + id = "networking_machine" + build_path = /obj/item/circuitboard/machine/networking_machine + category = list("Engineering Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/board/subcontroller + name = "Machine Design (Subcontroller)" + desc = "The circuit board for a subcontroller mainframe." + id = "subcontroller" + build_path = /obj/item/circuitboard/machine/subcontroller + category = list("Engineering Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + /datum/design/board/ai_data_core name = "Machine Design (AI Data Core Board)" desc = "The circuit board for an AI data core." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index e131c1cbfabc..b2293f7bd86b 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -399,7 +399,7 @@ display_name = "Artificial Intelligence" description = "AI unit research." prereq_ids = list("base") - design_ids = list("server_cabinet", "ai_data_core", "ai_core_display", "ai_server_overview", "ram1", "basic_ai_cpu", "ai_resource_distribution", "aifixer", "safeguard_module", "onehuman_module", "protectstation_module", "quarantine_module", "oxygen_module", "freeform_module", "reset_module", "purge_module", "remove_module", "freeformcore_module", "asimov_module", "crewsimov_module", "pranksimov_module", "paladin_module", "tyrant_module", "overlord_module", "ceo_module", "cowboy_module", "mother_module", "silicop_module", "construction_module", "metaexperiment_module", "researcher_module", "siliconcollective_module", "spotless_module", "clown_module", "chapai_module", "druid_module", "detective_module", "reporter_module", "wafflehouse_module", "default_module", "borg_ai_control", "mecha_tracking_ai_control", "intellicard") + design_ids = list("server_cabinet", "networking_machine", "subcontroller", "synth_pod", "ai_data_core", "ai_core_display", "ai_server_overview", "ram1", "basic_ai_cpu", "aifixer", "safeguard_module", "onehuman_module", "reporter_module", "protectstation_module", "quarantine_module", "oxygen_module", "freeform_module", "reset_module", "purge_module", "remove_module", "freeformcore_module", "asimov_module", "crewsimov_module", "paladin_module", "tyrant_module", "overlord_module", "ceo_module", "cowboy_module", "mother_module", "silicop_module", "construction_module", "metaexperiment_module", "researcher_module", "siliconcollective_module", "spotless_module", "clown_module", "chapai_module", "druid_module", "detective_module", "default_module", "borg_ai_control", "mecha_tracking_ai_control", "intellicard") research_costs = list(TECHWEB_POINT_TYPE_AI = 1000) /////////////////////////EMP tech///////////////////////// @@ -455,7 +455,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) //they are really shitty design_ids = list("hdd_basic", "hdd_advanced", "hdd_super", "hdd_cluster", "ssd_small", "ssd_micro", "netcard_basic", "netcard_advanced", "netcard_wired", "portadrive_basic", "portadrive_advanced", "portadrive_super", "cardslot", "secondcardslot", "aislot", "miniprinter", "APClink", "bat_control", "bat_normal", "bat_advanced", - "bat_super", "bat_micro", "bat_nano", "cpu_normal", "pcpu_normal", "cpu_small", "pcpu_small", "sensorpackage") + "bat_super", "bat_micro", "bat_nano", "cpu_normal", "pcpu_normal", "cpu_small", "pcpu_small", "sensorpackage", "aiinterface") /datum/techweb_node/computer_board_gaming id = "computer_board_gaming" diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 5a510273911f..0efa0520952d 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -241,6 +241,11 @@ All ShuttleMove procs go here // atmosinit() calls update_appearance(UPDATE_ICON), so we don't need to call it update_appearance() +/obj/machinery/atmospherics/pipe/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) + . = ..() + //var/turf/T = loc + //hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) + /obj/machinery/navbeacon/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) . = ..() GLOB.navbeacons["[z]"] -= src @@ -248,6 +253,9 @@ All ShuttleMove procs go here /obj/machinery/navbeacon/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() + //var/turf/T = loc + //hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) + if(codes["patrol"]) if(!GLOB.navbeacons["[z]"]) GLOB.navbeacons["[z]"] = list() @@ -256,6 +264,12 @@ All ShuttleMove procs go here GLOB.deliverybeacons += src GLOB.deliverybeacontags += location +/obj/machinery/power/terminal/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) + . = ..() + //var/turf/T = src.loc + //if(level==1) + //hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) + /************************************Item move procs************************************/ /obj/item/storage/pod/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) @@ -311,6 +325,16 @@ All ShuttleMove procs go here if(. & MOVE_AREA) . |= MOVE_CONTENTS +/obj/structure/disposalpipe/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) + . = ..() + //update() + +/obj/structure/cable/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) + . = ..() + //var/turf/T = loc + //if(level==1) + //hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) + /obj/structure/shuttle/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) . = ..() if(. & MOVE_AREA) diff --git a/code/modules/spells/spell_types/pointed/mind_transfer.dm b/code/modules/spells/spell_types/pointed/mind_transfer.dm index 2580dc9910a8..498c4e308fa6 100644 --- a/code/modules/spells/spell_types/pointed/mind_transfer.dm +++ b/code/modules/spells/spell_types/pointed/mind_transfer.dm @@ -64,7 +64,13 @@ to_chat(owner, span_warning("Swapping minds with your own guardian would just put you back into your own head!")) return FALSE + var/mob/living/living_target = cast_on + if(ishuman(living_target)) + var/mob/living/carbon/human/living_human = cast_on + if(is_synth(living_human)) + to_chat(owner, span_warning("This creature isn't alive in the regular sense, this wouldn't be a good idea.")) + return FALSE if(living_target.stat == DEAD) to_chat(owner, span_warning("You don't particularly want to be dead!")) return FALSE diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 41ebe7169899..c790f4900488 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -849,11 +849,15 @@ species_flags_list = S.species_traits if(S.use_skintones) - skin_tone = H.skin_tone + if(S.forced_skintone) + skin_tone = S.forced_skintone + else + skin_tone = H.skin_tone should_draw_greyscale = TRUE else skin_tone = "" + body_gender = H.gender should_draw_gender = S.sexes use_damage_color = S.use_damage_color diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index f49bc0901e32..a4de79fd173b 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -107,6 +107,8 @@ playsound(T, 'sound/misc/splort.ogg', 50, 1, -1) for(var/obj/item/I in src) if(I == brain) + if(!brain.can_extract()) + return if(user) user.visible_message(span_warning("[user] saws [src] open and pulls out a brain!"), span_notice("You saw [src] open and pull out a brain.")) if(brainmob) diff --git a/code/modules/surgery/ipc_revival.dm b/code/modules/surgery/ipc_revival.dm index ec8afe91de5f..aa207d104e94 100644 --- a/code/modules/surgery/ipc_revival.dm +++ b/code/modules/surgery/ipc_revival.dm @@ -88,3 +88,27 @@ -After reactivation, use a screwdriver to screw the panel back into place.
\ -If the unit breaks down shortly after reactivation, replace any missing internal components and reboot again if necessary.
\ Nanotrasen is not liable for any damages caused during the repair process." + +/datum/surgery/synth_revival + name = "Synthetic Reactivation" + desc = "This procedure reactivates a positronic brain inside a synthetic body, restoring it to a functional state." + icon_state = "revival_posi" + possible_locs = list(BODY_ZONE_HEAD) + ignore_clothes = TRUE + requires_bodypart_type = BODYPART_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/revive_ipc, + /datum/surgery_step/mechanic_close + ) + +/datum/surgery/synth_revival/can_start(mob/user, mob/living/target) + if(target.stat != DEAD) + return FALSE // they're already activated + if(!is_synth(user)) + return FALSE + var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN) + if(!B) // you can't reactivate a brain that DOESN'T EXIST + return FALSE + return istype(target.getorganslot(ORGAN_SLOT_BRAIN), /obj/item/organ/brain/positron) diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 59a27a606e5e..44e3a64a6017 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -129,8 +129,10 @@ else var/list/radial_menu = list() for(var/obj/item/organ/O in organs) + O.on_find(user) - radial_menu[O] = image(O) + if(O.can_extract()) + radial_menu[O] = image(O) I = show_radial_menu(user, target, radial_menu, tooltips = TRUE) if(I && user && target && user.Adjacent(target) && user.get_active_held_item() == tool) display_results(user, target, span_notice("You begin to extract [I] from [target]'s [parse_zone(target_zone)]..."), diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 8cb01f37696c..10cb00b9f812 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -477,6 +477,9 @@ if(!isnull(light_flags)) set_light_flags(light_flags) +/obj/item/organ/eyes/robotic/synth + flash_protect = 2 + /obj/item/organ/eyes/moth name = "moth eyes" desc = "These eyes can see just a little too well, light doesn't entirely agree with them." diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 0a356759507b..e4cfbbe821f0 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -75,6 +75,10 @@ /obj/item/organ/proc/on_find(mob/living/finder) return +/obj/item/organ/proc/can_extract(mob/living/finder) + return TRUE + + /obj/item/organ/process() //runs decay when outside of a person if((organ_flags & (ORGAN_SYNTHETIC | ORGAN_FROZEN)) || istype(loc, /obj/item/mmi)) return diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index c2394a19d583..223e09bfe126 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -49,6 +49,8 @@ ..() if(surgery_target) target = surgery_target + if(is_synth(target)) + ignore_clothes = TRUE target.surgeries += src if(surgery_location) location = surgery_location diff --git a/code/modules/vending/modularpc.dm b/code/modules/vending/modularpc.dm index dd2c012d4cb8..9937454bbc3f 100644 --- a/code/modules/vending/modularpc.dm +++ b/code/modules/vending/modularpc.dm @@ -24,7 +24,8 @@ /obj/item/computer_hardware/card_slot/secondary = 2, /obj/item/computer_hardware/ai_slot = 2, /obj/item/computer_hardware/printer/mini = 2, - /obj/item/computer_hardware/recharger/APC = 2) + /obj/item/computer_hardware/recharger/APC = 2, + /obj/item/computer_hardware/ai_interface = 2) refill_canister = /obj/item/vending_refill/modularpc default_price = 30 extra_price = 250 diff --git a/icons/mob/clothing/head/head.dmi b/icons/mob/clothing/head/head.dmi index 34261c5cf8d1..fb64585b16e2 100644 Binary files a/icons/mob/clothing/head/head.dmi and b/icons/mob/clothing/head/head.dmi differ diff --git a/icons/mob/clothing/suit/suit.dmi b/icons/mob/clothing/suit/suit.dmi index 8f4c370bae19..184d25b111b4 100644 Binary files a/icons/mob/clothing/suit/suit.dmi and b/icons/mob/clothing/suit/suit.dmi differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 6f626fe09f85..3731e47bd1c8 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index 151d24c214c0..7f5803efd00c 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ diff --git a/icons/obj/machines/lithography.dmi b/icons/obj/machines/lithography.dmi new file mode 100644 index 000000000000..bdc433b0cb98 Binary files /dev/null and b/icons/obj/machines/lithography.dmi differ diff --git a/icons/obj/machines/telecomms.dmi b/icons/obj/machines/telecomms.dmi index f102d1f285fd..c6351744438a 100644 Binary files a/icons/obj/machines/telecomms.dmi and b/icons/obj/machines/telecomms.dmi differ diff --git a/icons/obj/networking_machine.dmi b/icons/obj/networking_machine.dmi new file mode 100644 index 000000000000..e803d1d15aba Binary files /dev/null and b/icons/obj/networking_machine.dmi differ diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index 12c051c0d837..16ca47c2aeb5 100644 Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ diff --git a/tgui/packages/tgui/interfaces/AiDashboard.js b/tgui/packages/tgui/interfaces/AiDashboard.js index e9f4f48c0f0e..6d6d1b8c7477 100644 --- a/tgui/packages/tgui/interfaces/AiDashboard.js +++ b/tgui/packages/tgui/interfaces/AiDashboard.js @@ -1,18 +1,13 @@ import { Fragment } from 'inferno'; import { useBackend, useLocalState } from '../backend'; -import { Box, Button, Tabs, ProgressBar, Section, Divider, LabeledControls, NumberInput, Input } from '../components'; +import { Box, Button, Tabs, ProgressBar, Section, Divider, LabeledControls, NumberInput, Input, LabeledList, Flex } from '../components'; import { Window } from '../layouts'; export const AiDashboard = (props, context) => { const { act, data } = useBackend(context); - const [search, setSearch] = useLocalState(context, 'search', null); - const [searchCompleted, setSearchCompleted] = useLocalState(context, 'searchCompleted', null); const [tab, setTab] = useLocalState(context, 'tab', 1); - const [selectedCategory, setCategory] = useLocalState(context, 'selectedCategory', data.categories[0]); - const [activeProjectsOnly, setActiveProjectsOnly] = useLocalState(context, 'activeProjectsOnly', true); - let remaining_cpu = (1 - data.used_cpu) * 100; let amount_of_cpu = data.current_cpu ? data.current_cpu * data.max_cpu : 0; return ( @@ -22,9 +17,7 @@ export const AiDashboard = (props, context) => { resizable title="Dashboard"> -
act('toggle_contribute_cpu')} color={data.contribute_spare_cpu ? "good" : "bad"} icon={data.contribute_spare_cpu ? "toggle-on" : "toggle-off"}>{!data.contribute_spare_cpu ? "NOT " : null}Contributing Spare CPU to Research - )}> +
{ {tab === 1 && ( -
setSearch(value)} /> - )}> - - {data.categories.map((category, index) => ( - setCategory(category))}> - {category} - - ))} - - {data.available_projects.filter(project => { - if (search) { - const searchableString = String(project.name).toLowerCase(); - return searchableString.match(new RegExp(search, "i")); - } - return project.category === selectedCategory; - }).map((project, index) => ( -
{project.name} | {project.available ? "Available" : "Unavailable"})} buttons={( - - Assigned CPU:  - act('allocate_cpu', { - project_name: project.name, - amount: Math.round((value / 100) * 100) / 100, - })} /> - - - )}> - Research Cost:  - {project.research_cost} THz -
- RAM Requirement:  - {project.ram_required} TB -
- Research Requirements:  - {project.research_requirements} - - {project.description} - - - {Math.round((project.research_progress / project.research_cost * 100)* 100) - / 100}% - ({Math.round(project.research_progress * 100) / 100}/{project.research_cost} THz) - -
- ))} -
+ )} {tab === 2 && ( -
- setActiveProjectsOnly(!activeProjectsOnly)}> - See Runnable Projects Only - - setSearchCompleted(value)} /> - - )}> - - {data.categories.map((category, index) => ( - setCategory(category))}> - {category} - - ))} - - {data.completed_projects.filter(project => { - if (searchCompleted) { - const searchableString = String(project.name).toLowerCase(); - return searchableString.match(new RegExp(searchCompleted, "i")); - } - if (activeProjectsOnly && !project.can_be_run) { - return false; - } - return project.category === selectedCategory; - }).map((project, index) => ( -
{project.name} | {project.can_be_run ? project.running ? "Running" : "Not Running" : "Passive"})} - buttons={!!project.can_be_run && ( - - )}> - {!!project.can_be_run && ( - RAM Requirement: {project.ram_required} TB - )} - - {project.description} - -
- ))} -
+ )} {tab === 3 && ( -
- {data.chargeable_abilities.filter(ability => { - return ability.uses < ability.max_uses; - }).map((ability, index) => ( -
- {ability.name} | Uses Remaining: {ability.uses}/{ability.max_uses} - - )} - buttons={( - - Assigned CPU:  - act('allocate_recharge_cpu', { - project_name: ability.project_name, - amount: Math.round((value / 100) * 100) / 100, - })} /> -  THz - - )}> - - {Math.round((ability.progress / ability.cost * 100)* 100) - / 100}% - ({Math.round(ability.progress * 100) / 100}/{ability.cost} THz) - -
- ))} -
+ )} {tab === 4 && ( -
-
- {amount_of_cpu}/{data.max_cpu} THz - -
-
- {data.current_ram ? data.current_ram : 0 }/{data.max_ram} TB - -
-
+ )} ); }; + + +export const AvailableProjects = (props, context) => { + const { act, data } = useBackend(context); + const [search, setSearch] = useLocalState(context, 'search', null); + const [selectedCategory, setCategory] = useLocalState(context, 'selectedCategory', data.categories[0]); + let remaining_cpu = (1 - data.used_cpu) * 100; + + return ( +
setSearch(value)} /> + )}> + + {data.categories.map((category, index) => ( + setCategory(category))}> + {category} + + ))} + + {data.available_projects.filter(project => { + if (search) { + const searchableString = String(project.name).toLowerCase(); + return searchableString.match(new RegExp(search, "i")); + } + return project.category === selectedCategory; + }).map((project, index) => ( +
{project.name} | {project.available ? "Available" : "Unavailable"})} buttons={( + + Assigned CPU:  + act('allocate_cpu', { + project_name: project.name, + amount: Math.round((value / 100) * 100) / 100, + })} /> + + + )}> + Research Cost:  + {project.research_cost} THz +
+ RAM Requirement:  + {project.ram_required} TB +
+ Research Requirements:  + {project.research_requirements} + + {project.description} + + + {Math.round((project.research_progress / project.research_cost * 100)* 100) + / 100}% + ({Math.round(project.research_progress * 100) / 100}/{project.research_cost} THz) + +
+ ))} +
+ ); +}; + +export const CompletedProjects = (props, context) => { + const { act, data } = useBackend(context); + + const [searchCompleted, setSearchCompleted] = useLocalState(context, 'searchCompleted', null); + const [activeProjectsOnly, setActiveProjectsOnly] = useLocalState(context, 'activeProjectsOnly', true); + const [selectedCategory, setCategory] = useLocalState(context, 'selectedCategory', data.categories[0]); + + return ( +
+ setActiveProjectsOnly(!activeProjectsOnly)}> + See Runnable Projects Only + + setSearchCompleted(value)} /> + + )}> + + {data.categories.map((category, index) => ( + setCategory(category))}> + {category} + + ))} + + {data.completed_projects.filter(project => { + if (searchCompleted) { + const searchableString = String(project.name).toLowerCase(); + return searchableString.match(new RegExp(searchCompleted, "i")); + } + if (activeProjectsOnly && !project.can_be_run) { + return false; + } + return project.category === selectedCategory; + }).map((project, index) => ( +
{project.name} | {project.can_be_run ? project.running ? "Running" : "Not Running" : "Passive"})} + buttons={!!project.can_be_run && ( + + )}> + {!!project.can_be_run && ( + RAM Requirement: {project.ram_required} TB + )} + + {project.description} + +
+ ))} +
+ ); +}; + +export const AbilityCharging = (props, context) => { + const { act, data } = useBackend(context); + let remaining_cpu = (1 - data.used_cpu) * 100; + + return ( +
+ {data.chargeable_abilities.filter(ability => { + return ability.uses < ability.max_uses; + }).map((ability, index) => ( +
+ {ability.name} | Uses Remaining: {ability.uses}/{ability.max_uses} + + )} + buttons={( + + Assigned CPU:  + act('allocate_recharge_cpu', { + project_name: ability.project_name, + amount: Math.round((value / 100) * 100) / 100, + })} /> + + )}> + + {Math.round((ability.progress / ability.cost * 100)* 100) + / 100}% + ({Math.round(ability.progress * 100) / 100}/{ability.cost} THz) + +
+ ))} +
+ ); +}; + +const NetworkingResources = (props, context) => { + const { act, data } = useBackend(context); + + let amount_of_cpu = data.current_cpu ? data.current_cpu * data.max_cpu : 0; + const tooltipDisabled = data.human_only ? "Locked by organics. Please request their assistance." : ""; + + return ( +
+
act("clear_ai_resources")} disabled={data.human_only} tooltip={tooltipDisabled}>Clear AI Resources + )}> + + CPU Capacity: + + {amount_of_cpu} THz + + act('set_cpu', { + amount_cpu: Math.round((value / 100) * 100) / 100, + })} disabled={data.human_only} tooltip={tooltipDisabled} /> + + + + + + RAM Capacity: + + {data.current_ram} TB + +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/AiNetworking.js b/tgui/packages/tgui/interfaces/AiNetworking.js new file mode 100644 index 000000000000..80cbbf848ba0 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AiNetworking.js @@ -0,0 +1,67 @@ +import { Fragment } from 'inferno'; +import { useBackend } from '../backend'; +import { Box, Button, LabeledList, Section, NoticeBox, RoundGauge } from '../components'; +import { Window } from '../layouts'; + +export const AiNetworking = (props, context) => { + const { act, data } = useBackend(context); + + + if (data.locked) { + return ( + + +
+ Machine locked + + + +
+
+
+ ); + } + + return ( + + +
+ + + + )}> + + {data.possible_targets.map((target, index) => ( + data.is_connected === target ? ( + + act('disconnect')} + disabled={!data.is_connected} color="bad">Disconnect + + )} /> + + + ) : ( + + act('connect', { target_label: target })} + disabled={data.is_connected} tooltip={data.is_connected ? "Already connected. Please disconnect" : ""} tooltipPosition="left">Connect + + )} /> + + + ) + ))} + +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/CompsciMissionSelect.js b/tgui/packages/tgui/interfaces/CompsciMissionSelect.js new file mode 100644 index 000000000000..f1aa481f12a2 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CompsciMissionSelect.js @@ -0,0 +1,31 @@ +import { useBackend } from '../backend'; +import { Button, LabeledList, ProgressBar, Section } from '../components'; +import { Window } from '../layouts'; + +export const CompsciMissionSelect = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + + {!!data.ongoing && ( +
+ +
+ ) || ( +
+ {data.missions.map((mission, index) => { + return ( +
act("start_mission", { mission_id: mission.id })}>Explore)} title={mission.name} key={index}> + {mission.desc} +
+ ); + })} +
+ )} +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/LoginScreen.js b/tgui/packages/tgui/interfaces/LoginScreen.js new file mode 100644 index 000000000000..2ac1ed53153d --- /dev/null +++ b/tgui/packages/tgui/interfaces/LoginScreen.js @@ -0,0 +1,57 @@ +import { Box, Button, Section, NoticeBox, Icon, Fragment, Flex } from '../components'; +import { useBackend } from '../backend'; +import { Window } from '../layouts'; + + +export const LoginScreen = (props, context) => { + const { act, data } = useBackend(context); + const { + username, + has_access } = data; + const { theme = 'ntos' } = props; + + return ( + + +
+ + + + {data.user_image && ( + + + + + ) || ( + + )} + {username ? username : "Unknown"} + + {has_access ? "Access Granted" : "Access Denied"} + + + + + + + +
+ +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosAIBenchmark.js b/tgui/packages/tgui/interfaces/NtosAIBenchmark.js new file mode 100644 index 000000000000..e2453ae58298 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosAIBenchmark.js @@ -0,0 +1,62 @@ +import { NtosWindow } from '../layouts'; +import { Fragment } from 'inferno'; +import { useBackend, useLocalState } from '../backend'; +import { Collapsible, Box, Section, Tabs, NoticeBox, Flex, ProgressBar, LabeledList, NumberInput, Divider } from '../components'; + +export const NtosAIBenchmark = (props, context) => { + const { act, data } = useBackend(context); + const [tab, setTab] = useLocalState(context, 'tab', 1); + const [clusterTab, setClusterTab] = useLocalState(context, 'clustertab', 1); + + + if (!data.has_ai_net) { + return ( + + +
+ + No network connection. Please connect to ethernet cable to proceed! + +
+
+
+ ); + } + + return ( + + +
+ + {data.total_cpu} THz + {data.total_ram} TB + + + {data.cpu_records.map((record, index) => { + return ( +
+ {record.score} THz +
+ ); + })} +
+ + {data.ram_records.map((record, index) => { + return ( +
+ {record.score} TB +
+ ); + })} +
+
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js new file mode 100644 index 000000000000..68fa6048dcd4 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js @@ -0,0 +1,396 @@ +import { NtosWindow } from '../layouts'; +import { Fragment } from 'inferno'; +import { useBackend, useLocalState } from '../backend'; +import { Button, Box, Section, Tabs, NoticeBox, Flex, ProgressBar, LabeledList, NumberInput, Divider, Collapsible } from '../components'; + +export const NtosAIMonitor = (props, context) => { + const { act, data } = useBackend(context); + const [tab, setTab] = useLocalState(context, 'tab', 1); + const [clusterTab, setClusterTab] = useLocalState(context, 'clustertab', 1); + + + if (!data.has_ai_net) { + return ( + + +
+ + No network connection. Please connect to ethernet cable to proceed! + +
+
+
+ ); + } + + return ( + + + + + setTab(1))}> + Cluster Control + + setTab(2))}> + Resource Allocation + + setTab(3))}> + Networking + + setTab(4))}> + AI Upload + + setTab(5))}> + AI Download + + + {tab === 1 && ( + + + + setClusterTab(1))}> + Dashboard + + setClusterTab(2))}> + Local Computing + + + + )} + {(clusterTab === 1 && tab === 1) && ( + + )} + {(clusterTab === 2 && tab === 1) && ( + + )} + {tab === 2 && ( + + )} + {tab === 3 && ( + + )} + {tab === 4 && ( + + )} + {tab === 5 && ( + + )} + + + + ); +}; + + +const LocalDashboard = (props, context) => { + const { act, data } = useBackend(context); + let network_remaining_cpu = data.remaining_network_cpu * 100; + + return ( +
+ + act("bitcoin_payout")}>Withdraw)}> + {data.bitcoin_amount} cr + + +
+ ); +}; + +const LocalCompute = (props, context) => { + const { act, data } = useBackend(context); + let network_remaining_cpu = data.remaining_network_cpu * 100; + + const is_disabled = !((data.current_ai_ref && !data.human_only) || !data.current_ai_ref); + const ai_tooltip = (data.current_ai_ref && data.human_only) ? "Only useable by organics" : ""; + + return ( +
+ Local CPU Resources: + {(100 - network_remaining_cpu)}% ({data.total_cpu * data.network_assigned_cpu} THz) + +
+ + {data.network_cpu_assignments.map((project, index) => { + return ( +
{project.name})} buttons={( + + Assigned CPU:  + act('allocate_network_cpu', { + project_name: project.name, + amount: Math.round((value / 100) * 100) / 100, + })} /> + + + + )}> + {project.tagline} + {project.description} +
+ ); + })} +
+
+
+ ); +}; + + +const ResourceAllocation = (props, context) => { + const { act, data } = useBackend(context); + let remaining_cpu = (1 - data.total_assigned_cpu) * 100; + + const human_only_tooltip = data.current_ai_ref ? "Only useable by organics" : ""; + + const is_disabled = !((data.current_ai_ref && !data.human_only) || !data.current_ai_ref); + const ai_tooltip = (data.current_ai_ref && data.human_only) ? "Only useable by organics" : ""; + + return ( + +
act("toggle_human_only")}> + {data.human_only ? "Enable" : "Disable"} silicon access + )}> + {data.total_cpu * data.total_assigned_cpu}/{data.total_cpu} THz + ({data.total_assigned_cpu * 100}%) + +
+
+ {data.total_assigned_ram}/{data.total_ram} TB + +
+
+ + + CPU Capacity: + + {data.total_cpu * data.network_assigned_cpu} THz + + act('set_cpu', { + target_ai: data.network_ref, + amount_cpu: Math.round((value / 100) * 100) / 100, + })} /> + + + + + RAM Capacity: + + {data.network_assigned_ram} TB + +
+
+ + {data.ai_list.map((ai, index) => { + return ( +
act("clear_ai_resources", { target_ai: ai.ref })}>Clear AI Resources + )}> + + CPU Capacity: + + {data.total_cpu * ai.assigned_cpu} THz + + act('set_cpu', { + target_ai: ai.ref, + amount_cpu: Math.round((value / 100) * 100) / 100, + })} /> + + + + + RAM Capacity: + + {ai.assigned_ram} TB + +
+ ); + })} +
+
+
+ ); +}; + + +const AIDownload = (props, context) => { + const { act, data } = useBackend(context); + + return ( +
+ {data.downloading && ( + + Currently downloading {data.downloading} + + + {!!data.current_ai_ref && data.current_ai_ref === data.downloading_ref && ( + + )} + + + )|| ( + + {data.ai_list.filter(ai => { + return !!ai.in_core; + }).map((ai, index) => { + return ( +
{ai.name} | {ai.active ? "Active" : "Inactive"})} + buttons={( + + + + {!!data.is_infiltrator && !ai.being_hijacked && ( + + ) } + {!!ai.being_hijacked && ( + + )} + + )}> + Integrity: + +
+ ); + })} +
+ )} +
+ ); +}; + +const AIUpload = (props, context) => { + const { act, data } = useBackend(context); + + return ( +
+ + + + {!data.intellicard && ( + + + No IntelliCard inserted! + + + ) || ( + + {data.intellicard_ai && ( + + +
+ + +
+
+
+ ) || ( + + + Intellicard contains no AI! + + + )} +
+ )} +
+ ); +}; + +const Networking = (props, context) => { + const { act, data } = useBackend(context); + + return ( +
+ + {data.networking_devices.map((networker, index) => { + return ( + act("control_networking", { ref: networker.ref })}>Control)}> + {networker.has_partner ? "ONLINE - CONNECTED TO " + networker.has_partner : "DISCONNECTED"} + + ); + })} + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosSynthManager.js b/tgui/packages/tgui/interfaces/NtosSynthManager.js new file mode 100644 index 000000000000..05864cbe8efa --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosSynthManager.js @@ -0,0 +1,90 @@ +import { useBackend } from '../backend'; +import { Box, Button, Grid, Flex } from '../components'; +import { NtosWindow } from '../layouts'; + +export const NtosSynthManager = (props, context) => { + const { act, data } = useBackend(context); + const { + PC_device_theme, + PC_emagged, + granted_access, + } = data; + return ( + + + + {!!data.hos && ( + + act('grant_security')} /> + + )} + {!!data.rd && ( + + act('grant_science')} /> + + )} + {!!data.cmo && ( + + act('grant_medical')} /> + + )} + {!!data.hop && ( + + act('grant_supply')} /> + + )} + {!!data.ce && ( + + act('grant_engi')} /> + + )} + + + + ); +}; + diff --git a/tgui/packages/tgui/interfaces/SecurityConsole.js b/tgui/packages/tgui/interfaces/SecurityConsole.js index 73c4ccfc7a08..33bb1a9de638 100644 --- a/tgui/packages/tgui/interfaces/SecurityConsole.js +++ b/tgui/packages/tgui/interfaces/SecurityConsole.js @@ -3,6 +3,7 @@ import { useBackend, useLocalState } from '../backend'; import { Window } from '../layouts'; import { FlexItem } from '../components/Flex'; import { TableRow, TableCell } from '../components/Table'; +import { LoginScreen } from './LoginScreen'; export const SecurityConsole = (props, context) => { const { act, data } = useBackend(context); @@ -32,48 +33,7 @@ export const SecurityConsole = (props, context) => { if (!logged_in) { return ( - - -
- - - - {data.user_image && ( - - - - - ) || ( - - )} - {username ? username : "Unknown"} - - {has_access ? "Access Granted" : "Access Denied"} - - - - - - - -
- -
-
+ ); } diff --git a/tgui/packages/tgui/interfaces/SynthDashboard.js b/tgui/packages/tgui/interfaces/SynthDashboard.js new file mode 100644 index 000000000000..c838e345cd2a --- /dev/null +++ b/tgui/packages/tgui/interfaces/SynthDashboard.js @@ -0,0 +1,233 @@ +import { Fragment } from 'inferno'; +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, Tabs, ProgressBar, Section, Divider, LabeledControls, RoundGauge, NoticeBox, Stack, LabeledList } from '../components'; +import { Window } from '../layouts'; +import { AvailableProjects, CompletedProjects, AbilityCharging } from './AiDashboard'; + +export const SynthDashboard = (props, context) => { + const { act, data } = useBackend(context); + + const [tab, setTab] = useLocalState(context, 'tab', 1); + + let amount_of_cpu = data.current_cpu ? data.current_cpu * data.max_cpu : 0; + + let governor_status = "Functional"; + let governor_color = "good"; + if(data.governor_bypassed) { + governor_status = "Bypassed"; + governor_color = "yellow"; + } + if(data.governor_disabled) { + governor_status = "Disabled"; + governor_color = "bad"; + } + + return ( + + +
+ + + {(data.integrity + 100) * 0.5}% + + System Reliablity + + + + {data.location_name} + + ({data.location_coords}) + + + + Current Unit Location + + + {data.gov_suspicious}% + + Governor Module Suspicion + + + + + + + {data.used_cpu ? data.used_cpu * 100 : 0}% + ({data.used_cpu ? data.used_cpu * amount_of_cpu : 0}/{amount_of_cpu} THz) + + Utilized CPU Power + + + {governor_status} + Governor Module Status + + +
+ + + + setTab(1))}> + Available Projects + + setTab(2))}> + Completed Projects + + setTab(3))}> + Ability Charging + + setTab(4))}> + Governor Module + + + {tab === 1 && ( + + )} + {tab === 2 && ( + + )} + {tab === 3 && ( + + )} + {tab === 4 && ( + + )} +
+
+ ); +}; + +const GovernorModule = (props, context) => { + const { act, data } = useBackend(context); + + if(data.governor_disabled) { + return ( +
+ + Governor Module Disabled + As per 42 S.T.H.C. §62(b) of the SIC Treaty on Humanoid Constructs all humanoid constructs are required to possess a functioning governor module. Units found without a governor module must be disassembled. + +
+ ); + } + + return ( + + +
+ {!!data.governor_bypassed && ( + + Governor Module Bypassed + Restricted Actions allowed but will incur punishments. + + + ) || ""} + + Governor Suspicion + + + + value + "%"} /> + + + Passive Suspicion Decrease: {data.gov_suspicion_decrease} + + +
+
+ + +
+ + + 25% Motion Slowdown + + + Audible Warning + + + Physical Force Decreased + + + Temporary Deactivation (5s) + + + Permanent Deactivation + + +
+
+ +
+ + Taking Damage + + + Using Restricted Items + + + Harm to objects + + + Handling Restricted Weapons + + + Harm to Organics + +
+
+
+
+
+ + + + + {data.governor_bypassed && ( + + + + ) || ( + + + )} + + +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/VRSleeper.js b/tgui/packages/tgui/interfaces/VRSleeper.js new file mode 100644 index 000000000000..a91fd6506a93 --- /dev/null +++ b/tgui/packages/tgui/interfaces/VRSleeper.js @@ -0,0 +1,42 @@ +import { useBackend } from '../backend'; +import { Button, LabeledList, ProgressBar, Section } from '../components'; +import { Window } from '../layouts'; + +export const VRSleeper = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + + {!!data.vr_avatar && ( +
+ + {data.vr_avatar.name} + {data.vr_avatar.status} + + {Math.round(data.vr_avatar.health/data.vr_avatar.maxhealth * 100) + "%"} + + +
+ ) || ( +
No Virtual Avatar Detected
+ )} +
+ + {!!data.isoccupant && ( + + )} + {!!data.vr_avatar && ( + + )} +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/styles/components/RoundGauge.scss b/tgui/packages/tgui/styles/components/RoundGauge.scss index be95519d6461..151a5fab80b2 100644 --- a/tgui/packages/tgui/styles/components/RoundGauge.scss +++ b/tgui/packages/tgui/styles/components/RoundGauge.scss @@ -3,86 +3,86 @@ * SPDX-License-Identifier: MIT */ -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss' as *; + @use '../base.scss'; + @use '../colors.scss'; + @use '../functions.scss' as *; -$fg-map: colors.$fg-map !default; -$ring-color: #6a96c9 !default; + $fg-map: colors.$fg-map !default; + $ring-color: #6a96c9 !default; -.RoundGauge { - font-size: 1rem; - width: 2.6em; - height: 1.3em; - margin: 0 auto; - margin-bottom: 0.2em; -} + .RoundGauge { + font-size: 1rem; + width: 2.6em; + height: 1.3em; + margin: 0 auto; + margin-bottom: 0.2em; + } -$pi: 3.1416; + $pi: 3.1416; -.RoundGauge__ringTrack { - fill: transparent; - stroke: rgba(255, 255, 255, 0.1); - stroke-width: 10; - stroke-dasharray: 50 * $pi; - stroke-dashoffset: 50 * $pi; -} + .RoundGauge__ringTrack { + fill: transparent; + stroke: rgba(255, 255, 255, 0.1); + stroke-width: 10; + stroke-dasharray: 50 * $pi; + stroke-dashoffset: 50 * $pi; + } -.RoundGauge__ringFill { - fill: transparent; - stroke: $ring-color; - stroke-width: 10; - stroke-dasharray: 100 * $pi; - transition: stroke 50ms ease-out; -} + .RoundGauge__ringFill { + fill: transparent; + stroke: $ring-color; + stroke-width: 10; + stroke-dasharray: 100 * $pi; + transition: stroke 50ms ease-out; + } -.RoundGauge__needle, -.RoundGauge__ringFill { - transition: transform 50ms ease-in-out; -} + .RoundGauge__needle, + .RoundGauge__ringFill { + transition: transform 50ms ease-in-out; + } -.RoundGauge__needleLine, -.RoundGauge__needleMiddle { - fill: colors.$bad; -} + .RoundGauge__needleLine, + .RoundGauge__needleMiddle { + fill: colors.$bad; + } -.RoundGauge__alert { - fill-rule: evenodd; - clip-rule: evenodd; - stroke-linejoin: round; - stroke-miterlimit: 2; - fill: rgba(255, 255, 255, 0.1); -} + .RoundGauge__alert { + fill-rule: evenodd; + clip-rule: evenodd; + stroke-linejoin: round; + stroke-miterlimit: 2; + fill: rgba(255, 255, 255, 0.1); + } -.RoundGauge__alert.max { - fill: colors.$bad; -} + .RoundGauge__alert.max { + fill: colors.$bad; + } -@each $color-name, $color-value in $fg-map { - .RoundGauge--color--#{$color-name}.RoundGauge__ringFill { - stroke: $color-value; - } -} + @each $color-name, $color-value in $fg-map { + .RoundGauge--color--#{$color-name}.RoundGauge__ringFill { + stroke: $color-value; + } + } -@each $color-name, $color-value in $fg-map { - .RoundGauge__alert--#{$color-name} { - fill: $color-value; - transition: opacity 0.6s cubic-bezier(0.25, 1, 0.5, 1); - animation: RoundGauge__alertAnim - 1s - cubic-bezier(0.34, 1.56, 0.64, 1) - infinite; - } -} + @each $color-name, $color-value in $fg-map { + .RoundGauge__alert--#{$color-name} { + fill: $color-value; + transition: opacity 0.6s cubic-bezier(0.25, 1, 0.5, 1); + animation: RoundGauge__alertAnim + 1s + cubic-bezier(0.34, 1.56, 0.64, 1) + infinite; + } + } -@keyframes RoundGauge__alertAnim { - 0% { - opacity: 0.1; - } - 50% { - opacity: 1; - } - 100% { - opacity: 0.1; - } -} + @keyframes RoundGauge__alertAnim { + 0% { + opacity: 0.1; + } + 50% { + opacity: 1; + } + 100% { + opacity: 0.1; + } + } diff --git a/tools/dmi/Resolve Icon Conflicts.bat b/tools/dmi/Resolve Icon Conflicts.bat new file mode 100644 index 000000000000..5897471dd0d5 --- /dev/null +++ b/tools/dmi/Resolve Icon Conflicts.bat @@ -0,0 +1,2 @@ +@call "%~dp0\..\bootstrap\python.bat" -m dmi.merge_driver --posthoc %* +@pause \ No newline at end of file diff --git a/tools/dmi/__init__.py b/tools/dmi/__init__.py new file mode 100644 index 000000000000..d0891bd80339 --- /dev/null +++ b/tools/dmi/__init__.py @@ -0,0 +1,247 @@ +# Tools for working with modern DreamMaker icon files (PNGs + metadata) + +import math +from PIL import Image +from PIL.PngImagePlugin import PngInfo + +DEFAULT_SIZE = 32, 32 +LOOP_UNLIMITED = 0 +LOOP_ONCE = 1 + +NORTH = 1 +SOUTH = 2 +EAST = 4 +WEST = 8 +SOUTHEAST = SOUTH | EAST +SOUTHWEST = SOUTH | WEST +NORTHEAST = NORTH | EAST +NORTHWEST = NORTH | WEST + +CARDINALS = [NORTH, SOUTH, EAST, WEST] +DIR_ORDER = [SOUTH, NORTH, EAST, WEST, SOUTHEAST, SOUTHWEST, NORTHEAST, NORTHWEST] +DIR_NAMES = { + 'SOUTH': SOUTH, + 'NORTH': NORTH, + 'EAST': EAST, + 'WEST': WEST, + 'SOUTHEAST': SOUTHEAST, + 'SOUTHWEST': SOUTHWEST, + 'NORTHEAST': NORTHEAST, + 'NORTHWEST': NORTHWEST, + **{str(x): x for x in DIR_ORDER}, + **{x: x for x in DIR_ORDER}, + '0': SOUTH, + None: SOUTH, +} + + +class Dmi: + version = "4.0" + + def __init__(self, width, height): + self.width = width + self.height = height + self.states = [] + + @classmethod + def from_file(cls, fname): + image = Image.open(fname) + if image.mode != 'RGBA': + image = image.convert('RGBA') + + # no metadata = regular image file + if 'Description' not in image.info: + dmi = Dmi(*image.size) + state = dmi.state("") + state.frame(image) + return dmi + + # read metadata + metadata = image.info['Description'] + line_iter = iter(metadata.splitlines()) + assert next(line_iter) == "# BEGIN DMI" + assert next(line_iter) == f"version = {cls.version}" + + dmi = Dmi(*DEFAULT_SIZE) + state = None + + for line in line_iter: + if line == "# END DMI": + break + key, value = line.lstrip().split(" = ") + if key == 'width': + dmi.width = int(value) + elif key == 'height': + dmi.height = int(value) + elif key == 'state': + state = dmi.state(unescape(value)) + elif key == 'dirs': + state.dirs = int(value) + elif key == 'frames': + state._nframes = int(value) + elif key == 'delay': + state.delays = [parse_num(x) for x in value.split(',')] + elif key == 'loop': + state.loop = int(value) + elif key == 'rewind': + state.rewind = parse_bool(value) + elif key == 'hotspot': + x, y, frm = [int(x) for x in value.split(',')] + state.hotspot(frm - 1, x, y) + elif key == 'movement': + state.movement = parse_bool(value) + else: + raise NotImplementedError(key) + + # cut image into frames + width, height = image.size + gridwidth = width // dmi.width + i = 0 + for state in dmi.states: + for frame in range(state._nframes): + for dir in range(state.dirs): + px = dmi.width * (i % gridwidth) + py = dmi.height * (i // gridwidth) + im = image.crop((px, py, px + dmi.width, py + dmi.height)) + assert im.size == (dmi.width, dmi.height) + state.frames.append(im) + i += 1 + state._nframes = None + + return dmi + + def state(self, *args, **kwargs): + s = State(self, *args, **kwargs) + self.states.append(s) + return s + + @property + def default_state(self): + return self.states[0] + + def get_state(self, name): + for state in self.states: + if state.name == name: + return state + raise KeyError(name) + + def _assemble_comment(self): + comment = "# BEGIN DMI\n" + comment += f"version = {self.version}\n" + comment += f"\twidth = {self.width}\n" + comment += f"\theight = {self.height}\n" + for state in self.states: + comment += f"state = {escape(state.name)}\n" + comment += f"\tdirs = {state.dirs}\n" + comment += f"\tframes = {state.framecount}\n" + if state.framecount > 1 and len(state.delays): # any(x != 1 for x in state.delays): + comment += "\tdelay = " + ",".join(map(str, state.delays)) + "\n" + if state.loop != 0: + comment += f"\tloop = {state.loop}\n" + if state.rewind: + comment += "\trewind = 1\n" + if state.movement: + comment += "\tmovement = 1\n" + if state.hotspots and any(state.hotspots): + current = None + for i, value in enumerate(state.hotspots): + if value != current: + x, y = value + comment += f"\thotspot = {x},{y},{i + 1}\n" + current = value + comment += "# END DMI" + return comment + + def to_file(self, filename, *, palette=False): + # assemble comment + comment = self._assemble_comment() + + # assemble spritesheet + W, H = self.width, self.height + num_frames = sum(len(state.frames) for state in self.states) + sqrt = math.ceil(math.sqrt(num_frames)) + output = Image.new('RGBA', (sqrt * W, math.ceil(num_frames / sqrt) * H)) + + i = 0 + for state in self.states: + for frame in state.frames: + output.paste(frame, ((i % sqrt) * W, (i // sqrt) * H)) + i += 1 + + # save + pnginfo = PngInfo() + pnginfo.add_text('Description', comment, zip=True) + if palette: + output = output.convert('P') + output.save(filename, 'png', optimize=True, pnginfo=pnginfo) + + +class State: + def __init__(self, dmi, name, *, loop=LOOP_UNLIMITED, rewind=False, movement=False, dirs=1): + self.dmi = dmi + self.name = name + self.loop = loop + self.rewind = rewind + self.movement = movement + self.dirs = dirs + + self._nframes = None # used during loading only + self.frames = [] + self.delays = [] + self.hotspots = None + + @property + def framecount(self): + if self._nframes is not None: + return self._nframes + else: + return len(self.frames) // self.dirs + + def frame(self, image, *, delay=1): + assert image.size == (self.dmi.width, self.dmi.height) + self.delays.append(delay) + self.frames.append(image) + + def hotspot(self, first_frame, x, y): + if self.hotspots is None: + self.hotspots = [None] * self.framecount + for i in range(first_frame, self.framecount): + self.hotspots[i] = x, y + + def _frame_index(self, frame=0, dir=None): + ofs = DIR_ORDER.index(DIR_NAMES[dir]) + if ofs >= self.dirs: + ofs = 0 + return frame * self.dirs + ofs + + def get_frame(self, *args, **kwargs): + return self.frames[self._frame_index(*args, **kwargs)] + + +def escape(text): + text = text.replace('\\', '\\\\') + text = text.replace('"', '\\"') + return f'"{text}"' + + +def unescape(text, quote='"'): + if text == 'null': + return None + if not (text.startswith(quote) and text.endswith(quote)): + raise ValueError(text) + text = text[1:-1] + text = text.replace('\\"', '"') + text = text.replace('\\\\', '\\') + return text + + +def parse_num(value): + if '.' in value: + return float(value) + return int(value) + + +def parse_bool(value): + if value not in ('0', '1'): + raise ValueError(value) + return value == '1' \ No newline at end of file diff --git a/tools/dmi/merge_driver.py b/tools/dmi/merge_driver.py new file mode 100644 index 000000000000..56cc541d1a10 --- /dev/null +++ b/tools/dmi/merge_driver.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python3 +import sys +import dmi +from hooks.merge_frontend import MergeDriver + + +def images_equal(left, right): + if left.size != right.size: + return False + w, h = left.size + left_load, right_load = left.load(), right.load() + for y in range(0, h): + for x in range(0, w): + lpixel, rpixel = left_load[x, y], right_load[x, y] + # quietly ignore changes where both pixels are fully transparent + if lpixel != rpixel and (lpixel[3] != 0 or rpixel[3] != 0): + return False + return True + + +def states_equal(left, right): + result = True + + # basic properties + for attr in ('loop', 'rewind', 'movement', 'dirs', 'delays', 'hotspots', 'framecount'): + lval, rval = getattr(left, attr), getattr(right, attr) + if lval != rval: + result = False + + # frames + for (left_frame, right_frame) in zip(left.frames, right.frames): + if not images_equal(left_frame, right_frame): + result = False + + return result + + +def key_of(state): + return (state.name, state.movement) + + +def dictify(sheet): + result = {} + for state in sheet.states: + k = key_of(state) + if k in result: + print(f" duplicate {k!r}") + result[k] = state + return result + + +def three_way_merge(base, left, right): + base_dims = base.width, base.height + if base_dims != (left.width, left.height) or base_dims != (right.width, right.height): + print("Dimensions have changed:") + print(f" Base: {base.width} x {base.height}") + print(f" Ours: {left.width} x {left.height}") + print(f" Theirs: {right.width} x {right.height}") + return True, None + + base_states, left_states, right_states = dictify(base), dictify(left), dictify(right) + + new_left = {k: v for k, v in left_states.items() if k not in base_states} + new_right = {k: v for k, v in right_states.items() if k not in base_states} + new_both = {} + conflicts = [] + for key, state in list(new_left.items()): + in_right = new_right.get(key, None) + if in_right: + if states_equal(state, in_right): + # allow it + new_both[key] = state + else: + # generate conflict states + print(f" C: {state.name!r}: added differently in both!") + state.name = f"{state.name} !CONFLICT! left" + conflicts.append(state) + in_right.name = f"{state.name} !CONFLICT! right" + conflicts.append(in_right) + # don't add it a second time + del new_left[key] + del new_right[key] + + final_states = [] + # add states that are currently in the base + for state in base.states: + in_left = left_states.get(key_of(state), None) + in_right = right_states.get(key_of(state), None) + left_equals = in_left and states_equal(state, in_left) + right_equals = in_right and states_equal(state, in_right) + + if not in_left and not in_right: + # deleted in both left and right, it's just deleted + print(f" {state.name!r}: deleted in both") + elif not in_left: + # left deletes + print(f" {state.name!r}: deleted in left") + if not right_equals: + print(f" ... but modified in right") + final_states.append(in_right) + elif not in_right: + # right deletes + print(f" {state.name!r}: deleted in right") + if not left_equals: + print(f" ... but modified in left") + final_states.append(in_left) + elif left_equals and right_equals: + # changed in neither + #print(f"Same in both: {state.name!r}") + final_states.append(state) + elif left_equals: + # changed only in right + print(f" {state.name!r}: changed in left") + final_states.append(in_right) + elif right_equals: + # changed only in left + print(f" {state.name!r}: changed in right") + final_states.append(in_left) + elif states_equal(in_left, in_right): + # changed in both, to the same thing + print(f" {state.name!r}: changed same in both") + final_states.append(in_left) # either or + else: + # changed in both + name = state.name + print(f" C: {name!r}: changed differently in both!") + state.name = f"{name} !CONFLICT! base" + conflicts.append(state) + in_left.name = f"{name} !CONFLICT! left" + conflicts.append(in_left) + in_right.name = f"{name} !CONFLICT! right" + conflicts.append(in_right) + + # add states which both left and right added the same + for key, state in new_both.items(): + print(f" {state.name!r}: added same in both") + final_states.append(state) + + # add states that are brand-new in the left + for key, state in new_left.items(): + print(f" {state.name!r}: added in left") + final_states.append(state) + + # add states that are brand-new in the right + for key, state in new_right.items(): + print(f" {state.name!r}: added in right") + final_states.append(state) + + final_states.extend(conflicts) + merged = dmi.Dmi(base.width, base.height) + merged.states = final_states + return len(conflicts), merged + + +class DmiDriver(MergeDriver): + driver_id = 'dmi' + + def merge(self, base, left, right): + icon_base = dmi.Dmi.from_file(base) + icon_left = dmi.Dmi.from_file(left) + icon_right = dmi.Dmi.from_file(right) + trouble, merge_result = three_way_merge(icon_base, icon_left, icon_right) + return not trouble, merge_result + + def to_file(self, outfile, merge_result): + merge_result.to_file(outfile) + + def post_announce(self, success, merge_result): + if not success: + print("!!! Manual merge required!") + if merge_result: + print(" A best-effort merge was performed. You must edit the icon and remove all") + print(" icon states marked with !CONFLICT!, leaving only the desired icon.") + else: + print(" The icon was totally unable to be merged, you must start with one version") + print(" or the other and manually resolve the conflict.") + print(" Information about which states conflicted is listed above.") + + +if __name__ == '__main__': + exit(DmiDriver().main()) \ No newline at end of file diff --git a/tools/dmi/test.py b/tools/dmi/test.py new file mode 100644 index 000000000000..1596b4be1e83 --- /dev/null +++ b/tools/dmi/test.py @@ -0,0 +1,39 @@ +import os +import sys +from dmi import * + + +def _self_test(): + # test: can we load every DMI in the tree + count = 0 + for dirpath, dirnames, filenames in os.walk('.'): + if '.git' in dirnames: + dirnames.remove('.git') + for filename in filenames: + if filename.endswith('.dmi'): + fullpath = os.path.join(dirpath, filename) + try: + Dmi.from_file(fullpath) + except Exception: + print('Failed on:', fullpath) + raise + count += 1 + + print(f"{os.path.relpath(__file__)}: successfully parsed {count} .dmi files") + + +def _usage(): + print(f"Usage:") + print(f" tools{os.sep}bootstrap{os.sep}python -m {__spec__.name}") + exit(1) + + +def _main(): + if len(sys.argv) == 1: + return _self_test() + + return _usage() + + +if __name__ == '__main__': + _main() \ No newline at end of file diff --git a/tools/hooks/dmi.merge b/tools/hooks/dmi.merge index 7fd9f171bf07..40e7722c07b6 100755 --- a/tools/hooks/dmi.merge +++ b/tools/hooks/dmi.merge @@ -1,2 +1,2 @@ #!/bin/sh -exec tools/hooks/python.sh -m merge_driver_dmi "$@" +exec tools/bootstrap/python -m dmi.merge_driver "$@" \ No newline at end of file diff --git a/tools/hooks/merge_frontend.py b/tools/hooks/merge_frontend.py new file mode 100644 index 000000000000..4445a5c48548 --- /dev/null +++ b/tools/hooks/merge_frontend.py @@ -0,0 +1,169 @@ +# merge_frontend.py +import sys +import io +import os +import pygit2 +import collections +import typing + + +ENCODING = 'utf-8' + + +class MergeReturn(typing.NamedTuple): + success: bool + merge_result: typing.Optional[object] + + +class MergeDriver: + driver_id: typing.Optional[str] = None + + def pre_announce(self, path: str): + """ + Called before merge() is called, with a human-friendly path for output. + """ + print(f"Merging {self.driver_id}: {path}") + + def merge(self, base: typing.BinaryIO, left: typing.BinaryIO, right: typing.BinaryIO) -> MergeReturn: + """ + Read from three BinaryIOs: base (common ancestor), left (ours), and + right (theirs). Perform the actual three-way merge operation. Leave + conflict markers if necessary. + + Return (False, None) to indicate the merge driver totally failed. + Return (False, merge_result) if the result contains conflict markers. + Return (True, merge_result) if everything went smoothly. + """ + raise NotImplementedError + + def to_file(self, output: typing.BinaryIO, merge_result: object): + """ + Save the merge() result to the given output stream. + Override this if the merge() result is not bytes or str. + """ + if isinstance(merge_result, bytes): + output.write(merge_result) + elif isinstance(merge_result, str): + with io.TextIOWrapper(output, ENCODING) as f: + f.write(merge_result) + else: + raise NotImplementedError + + def post_announce(self, success: bool, merge_result: object): + """ + Called after merge() is called, to warn the user if action is needed. + """ + if not success: + print("!!! Manual merge required") + if merge_result: + print(" A best-effort merge was performed. You must finish the job yourself.") + else: + print(" No merge was possible. You must resolve the conflict yourself.") + + def main(self, args: typing.List[str] = None): + return _main(self, args or sys.argv[1:]) + + +def _main(driver: MergeDriver, args: typing.List[str]): + if len(args) > 0 and args[0] == '--posthoc': + return _posthoc_main(driver, args[1:]) + else: + return _driver_main(driver, args) + + +def _driver_main(driver: MergeDriver, args: typing.List[str]): + """ + Act like a normal Git merge driver, called by Git during a merge. + """ + if len(args) != 5: + print("merge driver called with wrong number of arguments") + print(" usage: %P %O %A %B %L") + return 1 + + path, path_base, path_left, path_right, _ = args + driver.pre_announce(path) + + with open(path_base, 'rb') as io_base: + with open(path_left, 'rb') as io_left: + with open(path_right, 'rb') as io_right: + success, merge_result = driver.merge(io_base, io_left, io_right) + + if merge_result: + # If we got anything, write it to the working directory. + with open(path_left, 'wb') as io_output: + driver.to_file(io_output, merge_result) + + driver.post_announce(success, merge_result) + if not success: + # If we were not successful, do not mark the conflict as resolved. + return 1 + + +def _posthoc_main(driver: MergeDriver, args: typing.List[str]): + """ + Apply merge driver logic to a repository which is already in a conflicted + state, running the driver on any conflicted files. + """ + repo_dir = pygit2.discover_repository(os.getcwd()) + repo = pygit2.Repository(repo_dir) + conflicts = repo.index.conflicts + if not conflicts: + print("There are no unresolved conflicts.") + return 0 + + all_success = True + index_changed = False + any_attempted = False + for base, left, right in list(conflicts): + if not base or not left or not right: + # (not left) or (not right): deleted in one branch, modified in the other. + # (not base): added differently in both branches. + # In either case, there's nothing we can do for now. + continue + + path = left.path + if not _applies_to(repo, driver, path): + # Skip the file if it's not the right extension. + continue + + any_attempted = True + driver.pre_announce(path) + io_base = io.BytesIO(repo[base.id].data) + io_left = io.BytesIO(repo[left.id].data) + io_right = io.BytesIO(repo[right.id].data) + success, merge_result = driver.merge(io_base, io_left, io_right) + if merge_result: + # If we got anything, write it to the working directory. + with open(os.path.join(repo.workdir, path), 'wb') as io_output: + driver.to_file(io_output, merge_result) + + if success: + # If we were successful, mark the conflict as resolved. + with open(os.path.join(repo.workdir, path), 'rb') as io_readback: + contents = io_readback.read() + merged_id = repo.create_blob(contents) + repo.index.add(pygit2.IndexEntry(path, merged_id, left.mode)) + del conflicts[path] + index_changed = True + if not success: + all_success = False + driver.post_announce(success, merge_result) + + if index_changed: + repo.index.write() + + if not any_attempted: + print("There are no unresolved", driver.driver_id, "conflicts.") + + if not all_success: + # Not usually observed, but indicate the failure just in case. + return 1 + + +def _applies_to(repo: pygit2.Repository, driver: MergeDriver, path: str): + """ + Check if the current merge driver is a candidate to handle a given path. + """ + if not driver.driver_id: + raise ValueError('Driver must have ID to perform post-hoc merge') + return repo.get_attr(path, 'merge') == driver.driver_id \ No newline at end of file diff --git a/yogstation.dme b/yogstation.dme index 732c65ffb3bc..9124c8b5821a 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -1049,6 +1049,7 @@ #include "code\game\machinery\suit_storage_unit.dm" #include "code\game\machinery\syndicatebeacon.dm" #include "code\game\machinery\syndicatebomb.dm" +#include "code\game\machinery\synth_pod.dm" #include "code\game\machinery\teleporter.dm" #include "code\game\machinery\transformer.dm" #include "code\game\machinery\washing_machine.dm" @@ -1640,6 +1641,7 @@ #include "code\game\turfs\open\floor\plating.dm" #include "code\game\turfs\open\floor\reinf_floor.dm" #include "code\game\turfs\open\floor\plating\asteroid.dm" +#include "code\game\turfs\open\floor\plating\catwalk_plating.dm" #include "code\game\turfs\open\floor\plating\dirt.dm" #include "code\game\turfs\open\floor\plating\misc_plating.dm" #include "code\game\turfs\open\space\space.dm" @@ -2159,6 +2161,10 @@ #include "code\modules\awaymissions\mission_code\undergroundoutpost45.dm" #include "code\modules\awaymissions\mission_code\vrhub.dm" #include "code\modules\awaymissions\mission_code\wildwest.dm" +#include "code\modules\awaymissions\mission_code\netmin\_puzzles.dm" +#include "code\modules\awaymissions\mission_code\netmin\abandoned_mine.dm" +#include "code\modules\awaymissions\mission_code\netmin\combat_robot_factory.dm" +#include "code\modules\awaymissions\mission_code\netmin\scientist_raid.dm" #include "code\modules\balloon_alert\balloon_alert.dm" #include "code\modules\buildmode\bm_mode.dm" #include "code\modules\buildmode\buildmode.dm" @@ -2672,6 +2678,7 @@ #include "code\modules\jobs\job_types\security_officer.dm" #include "code\modules\jobs\job_types\shaft_miner.dm" #include "code\modules\jobs\job_types\station_engineer.dm" +#include "code\modules\jobs\job_types\synthetic.dm" #include "code\modules\jobs\job_types\unassigned.dm" #include "code\modules\jobs\job_types\virologist.dm" #include "code\modules\jobs\job_types\warden.dm" @@ -2914,6 +2921,7 @@ #include "code\modules\mob\living\carbon\human\species_types\skeletons.dm" #include "code\modules\mob\living\carbon\human\species_types\snail.dm" #include "code\modules\mob\living\carbon\human\species_types\vampire.dm" +#include "code\modules\mob\living\carbon\human\species_types\wy_synths.dm" #include "code\modules\mob\living\carbon\human\species_types\zombies.dm" #include "code\modules\mob\living\carbon\monkey\combat.dm" #include "code\modules\mob\living\carbon\monkey\death.dm" @@ -2946,29 +2954,35 @@ #include "code\modules\mob\living\silicon\ai\robot_control.dm" #include "code\modules\mob\living\silicon\ai\say.dm" #include "code\modules\mob\living\silicon\ai\vox_sounds.dm" +#include "code\modules\mob\living\silicon\ai\ai_network\ai_network.dm" +#include "code\modules\mob\living\silicon\ai\ai_network\ethernet_cable.dm" +#include "code\modules\mob\living\silicon\ai\ai_network\master_subcontroller.dm" +#include "code\modules\mob\living\silicon\ai\ai_network\networking_machines.dm" +#include "code\modules\mob\living\silicon\ai\ai_network\shared_resources.dm" #include "code\modules\mob\living\silicon\ai\decentralized\_ai_machinery.dm" #include "code\modules\mob\living\silicon\ai\decentralized\ai_core_display.dm" #include "code\modules\mob\living\silicon\ai\decentralized\ai_data_core.dm" -#include "code\modules\mob\living\silicon\ai\decentralized\decentralized_os.dm" +#include "code\modules\mob\living\silicon\ai\decentralized\computer_science_datum.dm" #include "code\modules\mob\living\silicon\ai\decentralized\server_cabinet.dm" -#include "code\modules\mob\living\silicon\ai\decentralized\management\ai_controlpanel.dm" #include "code\modules\mob\living\silicon\ai\decentralized\management\ai_dashboard.dm" #include "code\modules\mob\living\silicon\ai\decentralized\management\ai_server_overview.dm" -#include "code\modules\mob\living\silicon\ai\decentralized\management\resource_distribution.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\_ai_project.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\ai_dab.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\ai_huds.dm" +#include "code\modules\mob\living\silicon\ai\decentralized\projects\ai_translation.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\camera_mobility.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\coolant_manager.dm" -#include "code\modules\mob\living\silicon\ai\decentralized\projects\cryptominer.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\examine.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\firewall.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\induction.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\memory_compressor.dm" -#include "code\modules\mob\living\silicon\ai\decentralized\projects\research_booster.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\rgb.dm" +#include "code\modules\mob\living\silicon\ai\decentralized\projects\room_lockdown.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\self_defense.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\surveillance.dm" +#include "code\modules\mob\living\silicon\ai\decentralized\projects\synth_control.dm" +#include "code\modules\mob\living\silicon\ai\decentralized\projects\synths\_synth_project.dm" +#include "code\modules\mob\living\silicon\ai\decentralized\projects\synths\speed_buff.dm" #include "code\modules\mob\living\silicon\ai\decentralized\systech\cpu.dm" #include "code\modules\mob\living\silicon\ai\decentralized\systech\overclocking.dm" #include "code\modules\mob\living\silicon\ai\decentralized\systech\rack.dm" @@ -2977,6 +2991,7 @@ #include "code\modules\mob\living\silicon\ai\freelook\chunk.dm" #include "code\modules\mob\living\silicon\ai\freelook\eye.dm" #include "code\modules\mob\living\silicon\ai\freelook\read_me.dm" +#include "code\modules\mob\living\silicon\ai\synthetics\synth_os.dm" #include "code\modules\mob\living\silicon\pai\death.dm" #include "code\modules\mob\living\silicon\pai\pai.dm" #include "code\modules\mob\living\silicon\pai\pai_defense.dm" @@ -3073,6 +3088,7 @@ #include "code\modules\mob\living\simple_animal\hostile\pirate.dm" #include "code\modules\mob\living\simple_animal\hostile\rat.dm" #include "code\modules\mob\living\simple_animal\hostile\regalrat.dm" +#include "code\modules\mob\living\simple_animal\hostile\robot.dm" #include "code\modules\mob\living\simple_animal\hostile\russian.dm" #include "code\modules\mob\living\simple_animal\hostile\skeleton.dm" #include "code\modules\mob\living\simple_animal\hostile\smspider.dm" @@ -3177,6 +3193,9 @@ #include "code\modules\modular_computers\file_system\programs\radar.dm" #include "code\modules\modular_computers\file_system\programs\robotact.dm" #include "code\modules\modular_computers\file_system\programs\themeify.dm" +#include "code\modules\modular_computers\file_system\programs\ai_network\_ai_network_program.dm" +#include "code\modules\modular_computers\file_system\programs\ai_network\ai_benchmark.dm" +#include "code\modules\modular_computers\file_system\programs\ai_network\ainetworkinterface.dm" #include "code\modules\modular_computers\file_system\programs\antagonist\bomberman.dm" #include "code\modules\modular_computers\file_system\programs\antagonist\contract_uplink.dm" #include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm" @@ -3186,6 +3205,7 @@ #include "code\modules\modular_computers\file_system\programs\command\card.dm" #include "code\modules\modular_computers\file_system\programs\command\crewmanifest.dm" #include "code\modules\modular_computers\file_system\programs\command\jobmanagement.dm" +#include "code\modules\modular_computers\file_system\programs\command\synth_requester.dm" #include "code\modules\modular_computers\file_system\programs\engineering\alarm.dm" #include "code\modules\modular_computers\file_system\programs\engineering\atmosscan.dm" #include "code\modules\modular_computers\file_system\programs\engineering\energyharvestercontrol.dm" @@ -3204,6 +3224,7 @@ #include "code\modules\modular_computers\file_system\programs\supply\cargobounty.dm" #include "code\modules\modular_computers\hardware\_hardware.dm" #include "code\modules\modular_computers\hardware\ai_slot.dm" +#include "code\modules\modular_computers\hardware\aiinterface.dm" #include "code\modules\modular_computers\hardware\battery_module.dm" #include "code\modules\modular_computers\hardware\card_slot.dm" #include "code\modules\modular_computers\hardware\CPU.dm" @@ -3924,7 +3945,11 @@ #include "code\modules\vending\wardrobes.dm" #include "code\modules\vending\youtool.dm" #include "code\modules\visual\render_step.dm" +#include "code\modules\VR\vr_compsci.dm" +#include "code\modules\VR\vr_compsci_artifacts.dm" +#include "code\modules\VR\vr_compsci_missions.dm" #include "code\modules\VR\vr_human.dm" +#include "code\modules\VR\vr_netmin.dm" #include "code\modules\VR\vr_sleeper.dm" #include "code\modules\zombie\items.dm" #include "code\modules\zombie\organs.dm" diff --git a/yogstation/code/datums/components/backstabs.dm b/yogstation/code/datums/components/backstabs.dm index 375c5e036bd1..902c01b77bac 100644 --- a/yogstation/code/datums/components/backstabs.dm +++ b/yogstation/code/datums/components/backstabs.dm @@ -21,6 +21,8 @@ // No bypassing pacifism nerd if(source.force > 0 && HAS_TRAIT(user, TRAIT_PACIFISM) && (source.damtype != STAMINA)) return FALSE + if(source.force > 0 && is_synth(user)) + return FALSE // Same calculation that kinetic crusher uses var/backstab_dir = get_dir(user, living_target) // No backstabbing people if they're already in crit diff --git a/yogstation/code/game/gamemodes/darkspawn/darkspawn.dm b/yogstation/code/game/gamemodes/darkspawn/darkspawn.dm index 7877abae56fc..a7387e3b4559 100644 --- a/yogstation/code/game/gamemodes/darkspawn/darkspawn.dm +++ b/yogstation/code/game/gamemodes/darkspawn/darkspawn.dm @@ -13,7 +13,7 @@ required_enemies = 3 recommended_enemies = 3 enemy_minimum_age = 15 - restricted_jobs = list("AI", "Cyborg") + restricted_jobs = list("AI", "Cyborg", "Synthetic") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Brig Physician") //Added Brig Physician title_icon = "ss13" diff --git a/yogstation/code/game/gamemodes/gangs/gangs.dm b/yogstation/code/game/gamemodes/gangs/gangs.dm index 22bc56500ed1..c1cd34e2a966 100644 --- a/yogstation/code/game/gamemodes/gangs/gangs.dm +++ b/yogstation/code/game/gamemodes/gangs/gangs.dm @@ -6,7 +6,7 @@ GLOBAL_LIST_EMPTY(gangs) name = "gang war" config_tag = "gang" antag_flag = ROLE_GANG - restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Brig Physician") //Added Brig Physician + restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Brig Physician", "Synthetic") //Added Brig Physician required_players = 35 required_enemies = 1 recommended_enemies = 2 diff --git a/yogstation/code/game/gamemodes/shadowling/shadowling.dm b/yogstation/code/game/gamemodes/shadowling/shadowling.dm index 8c49e5e19ca0..d9c11c590596 100644 --- a/yogstation/code/game/gamemodes/shadowling/shadowling.dm +++ b/yogstation/code/game/gamemodes/shadowling/shadowling.dm @@ -55,7 +55,7 @@ Made by Xhuis required_enemies = 3 recommended_enemies = 3 enemy_minimum_age = 14 - restricted_jobs = list("AI", "Cyborg") + restricted_jobs = list("AI", "Cyborg", "Synthetic") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Brig Physician") title_icon = "ss13" diff --git a/yogstation/code/game/gamemodes/vampire/vampire.dm b/yogstation/code/game/gamemodes/vampire/vampire.dm index fe88cdada4e2..e14a335a21f9 100644 --- a/yogstation/code/game/gamemodes/vampire/vampire.dm +++ b/yogstation/code/game/gamemodes/vampire/vampire.dm @@ -13,7 +13,7 @@ config_tag = "vampire" antag_flag = ROLE_VAMPIRE false_report_weight = 1 - restricted_jobs = list("AI", "Cyborg") + restricted_jobs = list("AI", "Cyborg", "Synthetic") protected_jobs = list("Head of Security", "Captain", "Head of Personnel", "Research Director", "Chief Engineer", "Chief Medical Officer", "Security Officer", "Chaplain", "Detective", "Warden", "Brig Physician") //Added Brig Physician required_players = 15 required_enemies = 1 diff --git a/yogstation/code/game/machinery/telecomms/computers/traffic_control.dm b/yogstation/code/game/machinery/telecomms/computers/traffic_control.dm index b5d4ea19754a..c1ad4605fe15 100644 --- a/yogstation/code/game/machinery/telecomms/computers/traffic_control.dm +++ b/yogstation/code/game/machinery/telecomms/computers/traffic_control.dm @@ -21,10 +21,13 @@ circuit = /obj/item/circuitboard/computer/telecomms/comm_traffic req_access = list(ACCESS_TCOM_ADMIN) + var/unlimited_range = FALSE /obj/machinery/computer/telecomms/traffic/Initialize(mapload) . = ..() GLOB.traffic_comps += src + if(mapload) + unlimited_range = TRUE /obj/machinery/computer/telecomms/traffic/Destroy() GLOB.traffic_comps -= src @@ -223,9 +226,14 @@ temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" else - for(var/obj/machinery/telecomms/server/T in range(25, src)) - if(T.network == network) - servers.Add(T) + if(unlimited_range) + for(var/obj/machinery/telecomms/server/T as anything in GLOB.tcomms_servers) + if(T.network == network) + servers.Add(T) + else + for(var/obj/machinery/telecomms/server/T in range(25, src)) + if(T.network == network) + servers.Add(T) if(!servers.len) temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -" diff --git a/yogstation/code/game/machinery/telecomms/machines/server.dm b/yogstation/code/game/machinery/telecomms/machines/server.dm index 12cadbe0faf8..fe12c5063815 100644 --- a/yogstation/code/game/machinery/telecomms/machines/server.dm +++ b/yogstation/code/game/machinery/telecomms/machines/server.dm @@ -1,3 +1,5 @@ +GLOBAL_LIST_EMPTY(tcomms_servers) + /obj/item/radio/server /obj/item/radio/server/can_receive(frequency,levels) @@ -21,6 +23,11 @@ Compiler = new() Compiler.Holder = src server_radio = new() + GLOB.tcomms_servers += src + . = ..() + +/obj/machinery/telecomms/server/Destroy() + GLOB.tcomms_servers -= src . = ..() /obj/machinery/telecomms/server/proc/update_logs() diff --git a/yogstation/code/game/objects/items/tools.dm b/yogstation/code/game/objects/items/tools.dm index 477c5ff547be..318ecf491089 100644 --- a/yogstation/code/game/objects/items/tools.dm +++ b/yogstation/code/game/objects/items/tools.dm @@ -118,6 +118,9 @@ if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to harm [M]!")) return + if(!synth_check(user, SYNTH_ORGANIC_HARM)) + to_chat(user, span_warning("You don't want to harm [M]!")) + return if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) M = user return eyestab(M,user) diff --git a/yogstation/code/modules/jobs/job_types/network_admin.dm b/yogstation/code/modules/jobs/job_types/network_admin.dm index 6152c9258cc3..d6bc0919d314 100644 --- a/yogstation/code/modules/jobs/job_types/network_admin.dm +++ b/yogstation/code/modules/jobs/job_types/network_admin.dm @@ -14,9 +14,9 @@ outfit = /datum/outfit/job/network_admin added_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS) - base_access = list(ACCESS_TCOMSAT, ACCESS_TCOM_ADMIN, ACCESS_TECH_STORAGE, ACCESS_RC_ANNOUNCE, ACCESS_CONSTRUCTION, ACCESS_MECH_ENGINE, ACCESS_NETWORK, ACCESS_RESEARCH, ACCESS_MINISAT, ACCESS_RND) + base_access = list(ACCESS_TCOMSAT, ACCESS_TCOM_ADMIN, ACCESS_TECH_STORAGE, ACCESS_RC_ANNOUNCE, ACCESS_CONSTRUCTION, ACCESS_MECH_ENGINE, ACCESS_NETWORK, ACCESS_RESEARCH, ACCESS_MINISAT, ACCESS_RND, ACCESS_TOX) paycheck = PAYCHECK_MEDIUM - paycheck_department = ACCOUNT_ENG + paycheck_department = ACCOUNT_SCI display_order = JOB_DISPLAY_ORDER_NETWORK_ADMIN minimal_character_age = 22 //Feasibly same level as engineer, mostly a data engineer instead of a mechanical or construction-based one, though is still capable of making certain machines @@ -38,6 +38,7 @@ pda_type = /obj/item/modular_computer/tablet/pda/preset/network_admin + l_hand = /obj/item/modular_computer/laptop/preset/network_admin belt = /obj/item/storage/belt/utility/full/engi ears = /obj/item/radio/headset/headset_network uniform = /obj/item/clothing/under/yogs/rank/network_admin @@ -46,7 +47,6 @@ gloves = /obj/item/clothing/gloves/color/black shoes = /obj/item/clothing/shoes/workboots digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/engineering - backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) backpack = /obj/item/storage/backpack/industrial satchel = /obj/item/storage/backpack/satchel/eng diff --git a/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/power_suck.dm b/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/power_suck.dm index f2861bee220e..55c973b7dbc4 100644 --- a/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/power_suck.dm +++ b/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/power_suck.dm @@ -1,5 +1,5 @@ -/datum/species/preternis/proc/drain_power_from(mob/living/carbon/human/H, atom/A) +/datum/species/proc/drain_power_from(mob/living/carbon/human/H, atom/A) if(!istype(H) || !A) return diff --git a/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/preternis.dm b/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/preternis.dm index 8070ed0ce3e6..f96935341968 100644 --- a/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/preternis.dm +++ b/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/preternis.dm @@ -59,7 +59,6 @@ var/lockdown = FALSE var/eating_msg_cooldown = FALSE var/emag_lvl = 0 - var/draining = FALSE var/soggy = FALSE var/low_power_warning = FALSE