From 2e787af65475ab0a9436161dbaf6db496d28028f Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 1 Apr 2024 23:32:09 +0200 Subject: [PATCH] AI Rework | 2024 edition (#21266) * fix ui * oops * Fixes map bibby broke * Revert "Fixes map bibby broke" This reverts commit af1d1c610e798f64ddef0f1fcece84f1fef891cf. * e * Unfucks deltastation * stuff * cleans things after bibby * Fix subcontroller cache * Fixed APCs and air alarms not working when connected to a subcontroller * bunch of fixes * job icon * tcomms server Update traffic_control.dm * make compile * Update synthetic.dm * Update synthetic.dm * Update access.dm * er * le runtime * Update ai_data_core.dm * le dupe * wall * Update decentralized_ai.dm * Update decentralized_ai.dm * e * Update wy_synths.dm * we do a little trolling * e * small cahnges * more minor changes * Create conflict_fixer.dmm * Create conflict_fixer - Kopi.dmm * minor map cahnges * broken maps * oops * bon * Update ainetworkinterface.dm * Update ainetworkinterface.dm * Update ai.dm * lol * light * fixes * e * Update synth_pod.dm * e * Update synth_os.dm * Update objective.dm * fixes * Update synthetic.dm * e * antag * tweaks * e * Update VRSleeper.js * e * Update synth_pod.dm * Update synth_pod.dm * 1 * Update synth_pod.dm * Update synth_os.dm * Update synthetic.dm * fixes * headset and ID go boom * Update wy_synths.dm * Update robot_parts.dm * cremator * Update communications.dm * Update synthetic.dm * no synth control * Update synthetic.dm * Update ai_dashboard.dm * Update miscellaneous.dm * Update miscellaneous.dm * Update headset.dm * Update damage_procs.dm * Update server_cabinet.dm * minor fixes * Update miscellaneous.dm * Update rack_creator.dm * Update synthetic.dm * compiles * fixes * brainless * access request * cofnlict * fixes * controller * Update yogstation.dme * Update yogstation.dme * s * maps * Update NtosSynthManager.js * unrevert this lol * eat * Update wy_synths.dm * sigh * e * Update wy_synths.dm * sigh * fixed ma * Update synthetic.dm * better * Update ethernet_cable.dm * Update computer.dm * Update computer.dm * i hate this * Update ai_laws.dm * Update hardsuit.dm * initialize * sigh * Update synth_os.dm * Update master_subcontroller.dm * Update master_subcontroller.dm * Update synth_requester.dm * Update synth_requester.dm * Update room_lockdown.dm * small fixes * propa sprite matey * no latejoin lol * Update synth_os.dm * maps fixed * compiles * Update brain_item.dm * fixes * mappers * Update hud.dmi * Update passworddoor.dm * button puzzle * mine stuff * Update yogstation.dme * le map * changes * ye * Update abandoned_mine.dm * Update _puzzles.dm * bingus * Update abandoned_mine.dm * maps * e * no more quirks * e * DMI merge conflict resolver (from TG) * update yogstation map * Minor away mission changes * forgot something * proper fix * donut * maps * asteroid * gax * all maps done * Update synthetic.dm * makes it compile * Update backstabs.dm * more compile! * fix this map * bad item * remove broken objects * gax * Update ticker.dm * pdas * omg save the file * Update networking_machines.dm * area string moment * s * awkward * revival * Update ai_dashboard.dm * fixes * fixed floopy * less difficult * this is important * Update ai_network.dm * maps * fixes the maps * wHAT * WHAT * wet * start fixing conflicts * Update yogstation.dme * start fixing map conflicts * Update DonutStation.dmm * updates * donut conflicts * update box * Update IceMeta.dmm * icon diffs * Update crew.dm * Update unsorted.dm * Update layers.dm * Update YogStation.dmm * conflicts * Update IceMeta.dmm * will this finally fix it * Update IceMeta.dmm * fix all this SHIT * what * more shit ugh * what! * Update DonutStation.dmm * Update AsteroidStation.dmm * Update AsteroidStation.dmm * Update dead.dm * Update catwalk_plating.dm * Update catwalk_plating.dm --------- Co-authored-by: adamsong Co-authored-by: wejengin2 <48154165+wejengin2@users.noreply.github.com> Co-authored-by: Byemoh --- .../StationRuins/GaxStation/ai_whale.dmm | 562 +- _maps/RandomZLevels/VR/netmin_hub.dmm | 72096 ++++++++++++++++ .../AsteroidStation/AsteroidStation.dmm | 1578 +- _maps/map_files/DonutStation/DonutStation.dmm | 1657 +- _maps/map_files/GaxStation/GaxStation.dmm | 146 +- _maps/map_files/IceMeta/IceMeta.dmm | 1433 +- _maps/map_files/YogStation/YogStation.dmm | 4506 +- code/__DEFINES/ai.dm | 102 +- code/__DEFINES/is_helpers.dm | 1 + code/__DEFINES/jobs.dm | 57 +- code/__DEFINES/language.dm | 1 + code/__DEFINES/layers.dm | 1 + code/__DEFINES/machines.dm | 1 + code/__DEFINES/traits.dm | 2 + code/__HELPERS/cmp.dm | 2 + code/__HELPERS/unsorted.dm | 72 + code/_globalvars/lists/objects.dm | 3 +- code/_onclick/ai.dm | 29 + code/_onclick/item_attack.dm | 22 +- code/controllers/subsystem/job.dm | 18 +- code/controllers/subsystem/machines.dm | 92 +- code/controllers/subsystem/mapping.dm | 3 + code/controllers/subsystem/persistence.dm | 63 + code/controllers/subsystem/ticker.dm | 2 + code/datums/ai_laws.dm | 10 + code/datums/holocall.dm | 3 + code/game/area/Space_Station_13_areas.dm | 8 + code/game/atoms_movable.dm | 7 + .../gamemodes/bloodsuckers/bloodsucker.dm | 2 +- .../gamemodes/bloodsuckers/traitorsuckers.dm | 2 +- code/game/gamemodes/brother/traitor_bro.dm | 2 +- code/game/gamemodes/changeling/changeling.dm | 2 +- .../game/gamemodes/changeling/traitor_chan.dm | 2 +- code/game/gamemodes/clock_cult/clock_cult.dm | 2 +- code/game/gamemodes/cult/cult.dm | 2 +- code/game/gamemodes/devil/devil_game_mode.dm | 2 +- .../dynamic/dynamic_rulesets_latejoin.dm | 10 +- .../dynamic/dynamic_rulesets_midround.dm | 6 +- .../dynamic/dynamic_rulesets_roundstart.dm | 24 +- .../gamemodes/eldritch_cult/eldritch_cult.dm | 2 +- code/game/gamemodes/hivemind/hivemind.dm | 2 +- code/game/gamemodes/objective.dm | 2 +- code/game/gamemodes/revolution/revolution.dm | 2 +- code/game/gamemodes/traitor/traitor.dm | 2 +- code/game/gamemodes/zombie/zombie.dm | 2 +- .../game/machinery/computer/communications.dm | 15 +- code/game/machinery/computer/crew.dm | 4 +- code/game/machinery/computer/security.dm | 57 +- code/game/machinery/doors/airlock.dm | 21 + code/game/machinery/doors/passworddoor.dm | 51 + code/game/machinery/harvester.dm | 3 +- code/game/machinery/hologram.dm | 13 + code/game/machinery/synth_pod.dm | 158 + code/game/mecha/mecha.dm | 4 + .../effects/decals/cleanable/robots.dm | 7 + code/game/objects/effects/landmarks.dm | 4 + .../game/objects/effects/spawners/lootdrop.dm | 1 - code/game/objects/items/cards_ids.dm | 25 + .../circuitboards/computer_circuitboards.dm | 8 - .../circuitboards/machine_circuitboards.dm | 30 + .../items/devices/radio/encryptionkey.dm | 11 + .../objects/items/devices/radio/headset.dm | 17 + code/game/objects/items/grenades/grenade.dm | 3 + code/game/objects/items/mail.dm | 2 + code/game/objects/items/melee/misc.dm | 3 +- code/game/objects/items/robot/robot_parts.dm | 25 + code/game/objects/items/stacks/rods.dm | 1 + .../objects/items/stacks/tiles/tile_types.dm | 49 + code/game/objects/items/stunbaton.dm | 2 + code/game/objects/items/tools/screwdriver.dm | 2 + code/game/objects/structures/mirror.dm | 4 + code/game/objects/structures/morgue.dm | 2 + .../objects/structures/signs/signs_plaques.dm | 15 - .../open/floor/plating/catwalk_plating.dm | 103 + code/game/turfs/turf.dm | 9 + code/modules/VR/vr_compsci.dm | 160 + code/modules/VR/vr_compsci_artifacts.dm | 4 + code/modules/VR/vr_compsci_missions.dm | 70 + code/modules/VR/vr_human.dm | 19 +- code/modules/VR/vr_netmin.dm | 32 + code/modules/VR/vr_sleeper.dm | 4 +- code/modules/admin/verbs/debug.dm | 8 + code/modules/admin/verbs/mapping.dm | 1 + .../antagonists/revolution/revolution.dm | 2 + code/modules/assembly/doorcontrol.dm | 3 + code/modules/assembly/flash.dm | 4 + .../atmospherics/machinery/airalarm.dm | 12 + .../atmospherics/machinery/atmosmachinery.dm | 7 + .../machinery/pipes/layermanifold.dm | 2 + code/modules/awaymissions/corpse.dm | 2 +- .../mission_code/netmin/_puzzles.dm | 184 + .../mission_code/netmin/abandoned_mine.dm | 55 + .../netmin/combat_robot_factory.dm | 119 + .../mission_code/netmin/scientist_raid.dm | 49 + code/modules/clothing/clothing.dm | 3 + code/modules/clothing/head/helmet.dm | 1 + code/modules/clothing/outfits/vr.dm | 7 +- code/modules/clothing/spacesuits/hardsuit.dm | 54 + code/modules/clothing/suits/armor.dm | 1 + code/modules/clothing/under/_under.dm | 3 + code/modules/economy/account.dm | 2 + .../food_and_drinks/drinks/drinks/bottle.dm | 3 + .../kitchen_machinery/gibber.dm | 4 + code/modules/holodeck/computer.dm | 4 + code/modules/holodeck/turfs.dm | 2 + code/modules/jobs/access.dm | 2 +- code/modules/jobs/job_types/_job.dm | 24 +- code/modules/jobs/job_types/ai.dm | 12 +- .../jobs/job_types/cargo_technician.dm | 4 + code/modules/jobs/job_types/synthetic.dm | 105 + code/modules/mapping/map_template.dm | 5 + code/modules/mapping/mapping_helpers.dm | 2 +- code/modules/mob/dead/dead.dm | 11 + .../mob/dead/new_player/preferences_setup.dm | 3 + code/modules/mob/living/brain/brain_item.dm | 7 + code/modules/mob/living/carbon/carbon.dm | 6 + .../mob/living/carbon/human/examine.dm | 10 +- .../mob/living/carbon/human/species.dm | 11 + .../carbon/human/species_types/plasmamen.dm | 2 + .../carbon/human/species_types/wy_synths.dm | 315 + .../mob/living/carbon/human/update_icons.dm | 2 + code/modules/mob/living/damage_procs.dm | 2 + code/modules/mob/living/living.dm | 2 + code/modules/mob/living/living_defense.dm | 4 + code/modules/mob/living/living_defines.dm | 2 + code/modules/mob/living/say.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 63 +- .../silicon/ai/ai_network/ai_network.dm | 449 + .../silicon/ai/ai_network/ethernet_cable.dm | 636 + .../ai/ai_network/master_subcontroller.dm | 98 + .../ai/ai_network/networking_machines.dm | 276 + .../silicon/ai/ai_network/shared_resources.dm | 269 + code/modules/mob/living/silicon/ai/death.dm | 2 +- .../silicon/ai/decentralized/_ai_machinery.dm | 74 +- .../silicon/ai/decentralized/ai_data_core.dm | 189 +- .../decentralized/computer_science_datum.dm | 3 + .../ai/decentralized/decentralized_os.dm | 131 - .../management/ai_controlpanel.dm | 520 - .../decentralized/management/ai_dashboard.dm | 147 +- .../management/resource_distribution.dm | 192 - .../ai/decentralized/projects/_ai_project.dm | 16 +- .../ai/decentralized/projects/ai_dab.dm | 2 +- .../decentralized/projects/ai_translation.dm | 54 + .../decentralized/projects/coolant_manager.dm | 8 +- .../ai/decentralized/projects/cryptominer.dm | 17 - .../projects/research_booster.dm | 19 - .../decentralized/projects/room_lockdown.dm | 72 + .../ai/decentralized/projects/self_defense.dm | 3 +- .../decentralized/projects/synth_control.dm | 9 + .../projects/synths/_synth_project.dm | 17 + .../projects/synths/speed_buff.dm | 14 + .../ai/decentralized/server_cabinet.dm | 83 +- .../ai/decentralized/systech/rack_creator.dm | 6 +- .../mob/living/silicon/ai/decentralized_ai.dm | 99 +- .../living/silicon/ai/synthetics/synth_os.dm | 214 + .../mob/living/silicon/robot/robot_modules.dm | 11 + .../living/simple_animal/animal_defense.dm | 3 + .../living/simple_animal/friendly/mouse.dm | 5 + .../living/simple_animal/hostile/hostile.dm | 2 +- .../mob/living/simple_animal/hostile/robot.dm | 169 + code/modules/mob/living/status_procs.dm | 5 + .../computers/_modular_computer_shared.dm | 8 + .../computers/item/computer.dm | 15 + .../computers/item/laptop/laptop_presets.dm | 11 + .../computers/item/phone/phone_presets.dm | 3 +- .../machinery/console/console_presets.dm | 15 + .../ai_network/_ai_network_program.dm | 67 + .../programs/ai_network/ai_benchmark.dm | 28 + .../programs/ai_network/ainetworkinterface.dm | 510 + .../programs/command/synth_requester.dm | 173 + .../file_system/programs/ntdownloader.dm | 2 +- .../modular_computers/hardware/aiinterface.dm | 43 + code/modules/paperwork/papershredder.dm | 2 +- code/modules/power/apc.dm | 12 + code/modules/power/cable.dm | 5 +- code/modules/power/power.dm | 8 + .../mapGenerators/repair.dm | 36 + .../boxes_magazines/internal/shotgun.dm | 5 + code/modules/projectiles/gun.dm | 5 + .../projectiles/guns/ballistic/shotgun.dm | 3 + .../research/designs/autolathe_designs.dm | 10 + .../research/designs/comp_board_designs.dm | 7 - .../research/designs/computer_part_designs.dm | 10 + .../research/designs/machine_designs.dm | 25 + code/modules/research/techweb/all_nodes.dm | 4 +- code/modules/shuttle/on_move.dm | 24 + .../spell_types/pointed/mind_transfer.dm | 6 + code/modules/surgery/bodyparts/_bodyparts.dm | 6 +- code/modules/surgery/bodyparts/head.dm | 2 + code/modules/surgery/ipc_revival.dm | 24 + code/modules/surgery/organ_manipulation.dm | 4 +- code/modules/surgery/organs/eyes.dm | 3 + code/modules/surgery/organs/organ_internal.dm | 4 + code/modules/surgery/surgery.dm | 2 + code/modules/vending/modularpc.dm | 3 +- icons/mob/clothing/head/head.dmi | Bin 254588 -> 255150 bytes icons/mob/clothing/suit/suit.dmi | Bin 396833 -> 398771 bytes icons/mob/hud.dmi | Bin 16131 -> 16236 bytes icons/mob/robots.dmi | Bin 212896 -> 215480 bytes icons/obj/machines/lithography.dmi | Bin 0 -> 1432 bytes icons/obj/machines/telecomms.dmi | Bin 13832 -> 14701 bytes icons/obj/networking_machine.dmi | Bin 0 -> 510 bytes icons/obj/tiles.dmi | Bin 17242 -> 17913 bytes tgui/packages/tgui/interfaces/AiDashboard.js | 353 +- tgui/packages/tgui/interfaces/AiNetworking.js | 67 + .../tgui/interfaces/CompsciMissionSelect.js | 31 + tgui/packages/tgui/interfaces/LoginScreen.js | 57 + .../tgui/interfaces/NtosAIBenchmark.js | 62 + .../packages/tgui/interfaces/NtosAIMonitor.js | 396 + .../tgui/interfaces/NtosSynthManager.js | 90 + .../tgui/interfaces/SecurityConsole.js | 44 +- .../tgui/interfaces/SynthDashboard.js | 233 + tgui/packages/tgui/interfaces/VRSleeper.js | 42 + .../tgui/styles/components/RoundGauge.scss | 142 +- tools/dmi/Resolve Icon Conflicts.bat | 2 + tools/dmi/__init__.py | 247 + tools/dmi/merge_driver.py | 181 + tools/dmi/test.py | 39 + tools/hooks/dmi.merge | 2 +- tools/hooks/merge_frontend.py | 169 + yogstation.dme | 35 +- .../code/datums/components/backstabs.dm | 2 + .../game/gamemodes/darkspawn/darkspawn.dm | 2 +- yogstation/code/game/gamemodes/gangs/gangs.dm | 2 +- .../game/gamemodes/shadowling/shadowling.dm | 2 +- .../code/game/gamemodes/vampire/vampire.dm | 2 +- .../telecomms/computers/traffic_control.dm | 14 +- .../machinery/telecomms/machines/server.dm | 7 + yogstation/code/game/objects/items/tools.dm | 3 + .../modules/jobs/job_types/network_admin.dm | 6 +- .../species_types/preternis/power_suck.dm | 2 +- .../species_types/preternis/preternis.dm | 1 - 232 files changed, 85762 insertions(+), 5983 deletions(-) create mode 100644 _maps/RandomZLevels/VR/netmin_hub.dmm mode change 100755 => 100644 code/game/machinery/computer/communications.dm create mode 100644 code/game/machinery/synth_pod.dm create mode 100644 code/game/turfs/open/floor/plating/catwalk_plating.dm create mode 100644 code/modules/VR/vr_compsci.dm create mode 100644 code/modules/VR/vr_compsci_artifacts.dm create mode 100644 code/modules/VR/vr_compsci_missions.dm create mode 100644 code/modules/VR/vr_netmin.dm create mode 100644 code/modules/awaymissions/mission_code/netmin/_puzzles.dm create mode 100644 code/modules/awaymissions/mission_code/netmin/abandoned_mine.dm create mode 100644 code/modules/awaymissions/mission_code/netmin/combat_robot_factory.dm create mode 100644 code/modules/awaymissions/mission_code/netmin/scientist_raid.dm create mode 100644 code/modules/jobs/job_types/synthetic.dm create mode 100644 code/modules/mob/living/carbon/human/species_types/wy_synths.dm create mode 100644 code/modules/mob/living/silicon/ai/ai_network/ai_network.dm create mode 100644 code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm create mode 100644 code/modules/mob/living/silicon/ai/ai_network/master_subcontroller.dm create mode 100644 code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm create mode 100644 code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm create mode 100644 code/modules/mob/living/silicon/ai/decentralized/computer_science_datum.dm delete mode 100644 code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm delete mode 100644 code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm delete mode 100644 code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm create mode 100644 code/modules/mob/living/silicon/ai/decentralized/projects/ai_translation.dm delete mode 100644 code/modules/mob/living/silicon/ai/decentralized/projects/cryptominer.dm delete mode 100644 code/modules/mob/living/silicon/ai/decentralized/projects/research_booster.dm create mode 100644 code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm create mode 100644 code/modules/mob/living/silicon/ai/decentralized/projects/synth_control.dm create mode 100644 code/modules/mob/living/silicon/ai/decentralized/projects/synths/_synth_project.dm create mode 100644 code/modules/mob/living/silicon/ai/decentralized/projects/synths/speed_buff.dm create mode 100644 code/modules/mob/living/silicon/ai/synthetics/synth_os.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/robot.dm create mode 100644 code/modules/modular_computers/file_system/programs/ai_network/_ai_network_program.dm create mode 100644 code/modules/modular_computers/file_system/programs/ai_network/ai_benchmark.dm create mode 100644 code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm create mode 100644 code/modules/modular_computers/file_system/programs/command/synth_requester.dm create mode 100644 code/modules/modular_computers/hardware/aiinterface.dm create mode 100644 icons/obj/machines/lithography.dmi create mode 100644 icons/obj/networking_machine.dmi create mode 100644 tgui/packages/tgui/interfaces/AiNetworking.js create mode 100644 tgui/packages/tgui/interfaces/CompsciMissionSelect.js create mode 100644 tgui/packages/tgui/interfaces/LoginScreen.js create mode 100644 tgui/packages/tgui/interfaces/NtosAIBenchmark.js create mode 100644 tgui/packages/tgui/interfaces/NtosAIMonitor.js create mode 100644 tgui/packages/tgui/interfaces/NtosSynthManager.js create mode 100644 tgui/packages/tgui/interfaces/SynthDashboard.js create mode 100644 tgui/packages/tgui/interfaces/VRSleeper.js create mode 100644 tools/dmi/Resolve Icon Conflicts.bat create mode 100644 tools/dmi/__init__.py create mode 100644 tools/dmi/merge_driver.py create mode 100644 tools/dmi/test.py create mode 100644 tools/hooks/merge_frontend.py 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 34261c5cf8d15d4d78514dff1ed5edab31a16d52..fb64585b16e28cdb791919459f2fc3597e083940 100644 GIT binary patch delta 135746 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
A^ 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 RmLIKn_LRxVT>Y!}{vZEB_w4`x delta 134892 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 z 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 delta 3633 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 diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 6f626fe09f85ecc6b2a853c2913788c03c3983ed..3731e47bd1c8e7c4940cba873e7d99ef91544c09 100644 GIT binary patch literal 16236 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 BFOUEL delta 17025 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 a!pptb#EM7zJ02i6LZ31?S$O=y&Hn=+Z59*& diff --git a/icons/obj/machines/lithography.dmi b/icons/obj/machines/lithography.dmi new file mode 100644 index 0000000000000000000000000000000000000000..bdc433b0cb989dd0f508c3a822ca7f3efc10ad2a GIT binary patch literal 1432 zcmV;J1!ww+P)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+ z(=$pSoZ^zil2jm5DJQceBR{<;u^^*TiHkEOv#1y-YRJWzR+N~V3SnbY8=sF$wX%Y% zp9|P20K;c0&9^#c3IG5E-bqA3RCt`lS#N9n93|+FGjDedknmzti>&gDlPB7sd`XpSy_>&} zYRe@4ln;6X`TfF>$ycph0at$>^Fyrc%L%%Hs`y*>H-lwOYx^?IGH7f65R%EeMkG?~ zo4-g!&PYEw{;B5yfJblH90qd9Mo{s;^X_{Y4jFy@7fHtI9)s)GuR%q{(m?!0I�z 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 R6eR%M*EQCu)_xrMzX18==%WAt literal 13832 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 A=l}o! literal 0 HcmV?d00001 diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index 12c051c0d837bf1e2536f4b45589f7904f73b800..16ca47c2aeb56c25781621f69867a82a201185e7 100644 GIT binary patch literal 17913 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 V?AFb?(h794i>Irf%Q~loCIDQ-6e|D# literal 17242 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 { 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