diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 4bfb4f022ad..ac5ef5da60d 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -4477,10 +4477,10 @@ "bIe" = (/obj/structure/closet/wardrobe/robotics_black,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "bIf" = (/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bIg" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bIh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) -"bIi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/noticeboard{pixel_y = 28},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"bIh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/tram/rail{tag = "icon-rail (NORTHWEST)"; icon_state = "rail"; dir = 9},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) +"bIi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/tram/rail{tag = "icon-rail (EAST)"; icon_state = "rail"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bIj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bIk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"bIk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/noticeboard{pixel_y = 28},/obj/tram/rail{tag = "icon-rail (EAST)"; icon_state = "rail"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bIl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"}) "bIm" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "bIn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor{dir = 1; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"}) @@ -4555,7 +4555,7 @@ "bJE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/assembly/robotics) "bJF" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bJG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bJH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) +"bJH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/tram/rail{dir = 4; godir = 8; icon_state = "rail"; tag = "icon-rail (EAST)"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bJI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bJJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bJK" = (/obj/machinery/camera{c_tag = "Research Hallway North"; dir = 1; network = list("Research","SS13")},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -4643,7 +4643,7 @@ "bLo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/medical/research{name = "Research Division"}) "bLp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bLq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/effect/landmark/nations{name = "Scientopia"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bLr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) +"bLr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/tram/rail,/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bLs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/crew_quarters/hor) "bLt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor) "bLu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor) @@ -4732,7 +4732,7 @@ "bMZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bNa" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bNb" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bNc" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) +"bNc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/tram/rail,/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bNd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/crew_quarters/hor) "bNe" = (/obj/machinery/door_control{id = "Biohazard"; name = "Biohazard Shutter Control"; pixel_x = -4; pixel_y = 6; req_access_txt = "47"},/obj/item/weapon/folder/white{pixel_x = 4},/obj/item/weapon/stamp/rd{pixel_x = 5; pixel_y = -2},/obj/structure/table/glass,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bNf" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of his office."; name = "Research Monitor"; network = list("Research","Research Outpost","RD"); pixel_x = 0; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table/glass,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) @@ -4809,7 +4809,7 @@ "bOy" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bOz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bOA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bOB" = (/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) +"bOB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/tram/rail,/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bOC" = (/obj/item/weapon/paper/monitorkey,/obj/item/device/megaphone,/obj/structure/table/glass,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bOD" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/obj/effect/landmark/start{name = "Research Director"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bOE" = (/obj/machinery/computer/robotics,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) @@ -4894,7 +4894,7 @@ "bQf" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage) "bQg" = (/obj/machinery/portable_atmospherics/scrubber/huge,/obj/structure/sign/nosmoking_2{pixel_x = 28},/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage) "bQh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) -"bQi" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) +"bQi" = (/obj/tram/rail,/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bQj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor) "bQk" = (/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/structure/table/glass,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bQl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) @@ -4966,7 +4966,7 @@ "bRz" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage) "bRA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bRB" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/wrapsortjunction{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bRC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) +"bRC" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/tram/rail,/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bRD" = (/obj/machinery/door/airlock/glass_command{name = "Research Director"; req_access_txt = "30"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bRE" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bRF" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) @@ -5041,7 +5041,7 @@ "bSW" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor,/area/toxins/storage) "bSX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bSY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bSZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) +"bSZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/tram/rail,/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bTa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/hor) "bTb" = (/obj/machinery/power/apc{dir = 8; name = "RD Office APC"; pixel_x = -25},/obj/structure/cable,/obj/machinery/light_switch{pixel_y = -23},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/flora/kirbyplants,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bTc" = (/obj/machinery/hologram/holopad,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/photocopier/faxmachine{department = "Research Director's Office"},/obj/structure/table/glass,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) @@ -5123,7 +5123,7 @@ "bUA" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage) "bUB" = (/obj/machinery/door/firedoor{dir = 1; name = "hazard door north"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/sign/poster/legit{pixel_x = -32},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bUC" = (/obj/machinery/door/firedoor{dir = 1; name = "hazard door north"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bUD" = (/obj/machinery/door/firedoor{dir = 1; name = "hazard door north"},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) +"bUD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/tram/rail,/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bUE" = (/obj/machinery/atmospherics/pipe/simple/insulated,/obj/machinery/camera{c_tag = "Research Toxins Mixing North"; dir = 2; network = list("Research","SS13"); pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) "bUF" = (/obj/machinery/atmospherics/pipe/simple/insulated{dir = 6},/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) "bUG" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{dir = 4},/turf/simulated/wall/r_wall{desc = "A specially coated wall that resists temperatures for Science"; max_temperature = 1e+009; name = "Coated Reinforced Wall"},/area/toxins/mixing) @@ -5538,7 +5538,7 @@ "ccz" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage) "ccA" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "ccB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"ccC" = (/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) +"ccC" = (/obj/machinery/door/firedoor{dir = 1; name = "hazard door north"},/obj/tram/rail,/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "ccD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/medical/research{name = "Research Division"}) "ccE" = (/obj/effect/decal/warning_stripes/northwestcorner,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/mixing) "ccF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/mixing) @@ -8067,6 +8067,9 @@ "cZg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/aisat/maintenance) "cZh" = (/turf/space,/area/shuttle/derelict/ship/station) "cZi" = (/obj/structure/table,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/tape_roll,/obj/item/stack/tape_roll,/turf/simulated/floor,/area/engine/equipmentstorage) +"cZj" = (/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/tram/rail,/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) +"cZk" = (/obj/tram/rail,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"cZl" = (/obj/tram/rail{godir = 1},/obj/tram/floor{icon_state = "whitepurplefull"},/obj/tram/controlpad{pixel_x = -10},/obj/tram/tram_controller,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8206,22 +8209,22 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBzaFxbBAbBAbBBbepbBCaIfazEbBDbBCbpSbBEbBFbBGbBHbpSaaaaaaaaaaaaaaabzObzObzObzObzObzObzOaaaaaabBIbBJbydbBKbBLbBLbBLbBLbBLbBMbBNbBLbBObBPbBQbBRbBSbBTbBUbkXbBVbnCbBWbBXbBYbBZbCabCbbAgbAgbAmbCcbCdbCebCfbCgbAmbtgbyDbthbChbCibCjbCkbClbthaaabCmbyIbCnbCobCpbCqbCrbCqbCsbCtbCubttbCvbsdbCwbCxbCybCzbCAbCBbCCbCDbCEbCFbCGbCGbCHbCIbCJbCKbsibAQbCLbCMbsibsibsjbCNbCObCPbsjbslbslbslbCQbCRbtVbCSbzjbzkbCTbBdbCUbCVbCWbCWbCXbvIbCYbCZbDabDbbvObDcbstbDdbDebvTbDfbDgbDhbstbxLbDibumbumaaaaaaaaaaaaaabbDjbDkbDlbDmbDnbDobDjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzObDrbDsbDtbDubDvbDwbDxbDxbDxbDvbydbwubyebydbydbyfbDybDzbDAbDBbDCbDDbDEbnCbnCbDFbDGbBZbCabDHbDIbDJbDKbDLbDMbDNbDObDPbAmbDQbDRbuQbDSbDTbDUbDVbDWbuWbuXbDXbyIbDYbDZbEabCqbEbbCqbEcbCtbEdbttbEebsdbEfbEgbEhbEibEjbEkbElbEmbEnbEnbEobEpbEnbEnbEqbErbEsbEtbEubEvbEwbExbEybEzbEAbEBbECbEDbEEbEFbEGbEHbtVbEIbEJbEKbELbEMbvFbENbCWbCWbEObEPbCYbEQbsqbERbERbESbstbETbEUcHibEWbvTbEXbstbxLbEYbumaaaaaaaaaaaaaaaaabbEZbFabDlbDnbDlbFbbBxaabaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzObFcbFdbFcbFebFfbFgbFfbFfbFfbFfbFhbwubyebFibkRbkRbFjbnCbyhbDBbFkbFlbFmbFnbFnbFobFpbFqbFrbFsbFtbFubFvbFwbFxbFybFzbFAbAmbAnbyDbthbFBbFCbFDbFEbFFbthaaabCmbFGbFHbFGbFGbFGbFGbFGbFIbFGbFJbttbEebsdbFKbFLbFLbFMbFNbCBbFObFPbFQbFRbFSbFTbFUbFQbFVbFWbFXbFYbFZbGabGbbGbbGcbGdbGebGfbGgbGhbGibGjbGkbGlbGmbGnbGnbGobGpbGqbvFbGrbvIbvIbGsbGtbCYbGubGvbGwbGxbGybGzbGAbGBbGCbGDbGEbstbstbGFbDbbDbbGGbGHbGHbGHbGIbDbbDjbDnbDlbDnbDnbGJbDjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzObGKbGLbGKbGMbydbDwbDxbDxbDxbydbydbwubyebGNbGObkRbGPbnCbyhbDBbGQbGRbGSbnCbplbnCbGTbBZbttbGUbGVbFubGWbGXbGYbGZbHabHbbHcbHdbHebHfbHfbHgbHhbHibthbthaaabCmbFGbHjbHkbHlbHmbHnbHobHpbHqbHrbttbEebAEbHsbHtbHubHvbHwbCBbHxbHybHzbHAbHBbHCbHDbHEbHFbHGbHHbHIbHJbHKbHLbHMbHNbHObHPbHQbHRbEDbHSbHTbHUbHVbtWbHWbHXbHYbHZbHZbvFbIabIbbIcbvFbIdbCYbIebvFbIfbIgbIhbIibIjbIkbIlbImbInbIobIpbIqbIrbIsbItbItbIubIvbIwbIxbIybBwbBxbIzbBxbBwbIAaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzObIBbDsbICbIDbydbDwbydbydbydbydbydbwubyebGNbIEbkRbIFbnCbIGbIHbnCbIIbnBbnCbnCbIJbBYbBZbttbGUbGVbFubAmbIKbILbIMbINbIObIPbIQbIRbISbITbuWbIUbIVbuWbuXbuXbIWbFGbIXbIYbIZbJabJbbJbbJcbJdbJebttbJfbsdbCBbJgbJhbJibJjbCBbHxbJkbJlbJmbJnbJobJpbJlbHxbJqbJrbJsbJsbJsbJtbJsbJubJubJvbJwbJxbJybJybJzbJxbJxbJybJybJAbJBbJAbJAbvFbvFbvFbvFbvFbJCbJDbJEbvFbJFbJGbJHbJIbJIbJJbJKbJLbJMbJNbJObJPbJQbJRbJSbJSbJTbIjbJUbDbbJVbJWbJXbJYbDbbJZaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzObGKbGLbGKbDubKabKbbydbydbydbKabydbwubyebGNbKcbkRbKdbnCbyhbDBbnCbrMbKebnCbnCbKfbDGbBZbttbKgbKhbKibAmbKjbKkbKlbKmbKnbIPbKobKpbKqbKrbKsbKtbKubKvaaaaaaaaabFGbKwbKxbKybKybKzbKAbKBbFGbKCbKDbEebKEbKFbKGbKHbKIbKJbKKbKLbHybKMbKNbKObKPbKQbKMbHxbJqbKRbKSbKTbKUbKVbKWbJubKXbKYbKZbJxbLabLbbLcbLdbLebLfbLgbIobLhbJIbJIbLibLjbJIbLkbLlbLmbLnbLobJIbLpbLqbLrbLsbLtbLubLvbLwbLvbLvbLvbGFbDbbDbbGGbGIbDbbLxbLybLzbLAbLBbLCbLDbLEaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzObLFbLGbLFbLHbLIbLJbLJbLJbLJbLJbLKbLLbLMbGNbLNbkRbLObLPbLQbLRbLSbLTbLUbLVbLWbLXbLXbLYbttbLZbMabFubAmbMbbMcbMdbILbMebIPbMfbMgbMhbMibMjbDUbMkbKvaaaaaaaaabFGbMlbMmbMnbMobKzbKAbKBbFGbMpbMqbMrbMsbMtbMubMvbMwbMxbMybMzbMAbJlbJlbMBbMCbJlbJlbHxbJqbMDbMEbMFbMGbMHbMIbJubMJbMKbMLbMMbMNbMObMPbMPbMQbMRbMSbMTbMUbIjbIjbMVbIjbMWbIjbMXbIjbMYbMZbMZbNabNbbNcbNdbNebNfbNgbNhbNibNjbLvbNkbNlaaaaaaaaabDbbNmbNnbNobNpbNqbNrbNsbDbaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzObNtbNubNvbkRbkRbNwbDsbDsbDsbNxbkRbkRbNybNzbNAbkRbNBbNBbNBbNCbNBbLXbNDbNEbNFbNGbLXbBZbttbNHbNIbNIbAmbAmbAmbAmbAmbNJbIPbHfbHebNKbNLbNMbNNbKvbKvbthbthbthbFGbFHbFGbFGbFGbFGbFGbFGbFGbNObttbNPbNQbNRbNSbNTbNRbNRbNUbNVbNWbNXbNYbNZbOabObbOcbKLbOdbOebOfbOgbOhbOibOjbOkbOlbOmbOnbOobOpbOqbOrbLcbOsbJybJybOtbOtbOtbOtbOubOtbOtbOtbOvbOwbOxbOxbOybOzbOAbOBbNdbOCbODbOEbOFbOGbOHbLvbNkbOIaaaaaaaaabDbbOJbOKbDbbIxbDbbDbbIxbDbaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOLaabaaaaaaaaaaaabNBbOMbONbOObOPbLXbOQbORbOSbOTbLXbBZbttbOUbOVbOWbOXbOYbOZbPabPbbPcbPdbPebPfbPgbPhbPibPjbPkbPlbPmbPnbPobPpbPqbPrbPsbscbPtbttbPubPvbPwbttbPxbNRbPybPzbPAbPBbPCbHxbPDbPEbPFbPGbPHbPIbPJbPKbPLbPMbPNbJsbPObMGbPPbPQbPRbPSbPTbPUbJxbPVbLcbLcbLcbPWbJybOtbPXbPYbPZbQabQbbQcbQdbOtbQebQfbQgbOxbOxbQhbOAbQibQjbQkbQlbQmbQnbQobQpbLvbQqbumaaaaaaaaabDbbDbbDbbDbaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNBbQrbQsbQtbQubQvbQwbQxbQybQzbLXbBZbQAbQBbttbttbEebQCbscbPsbPrbQDbQEbQDbQFbQGbQGbQHbQIbQJbQGbQGbQKbQGbQLbQGbPrbPsbscbQMbQNbQObQPbQQbQRbttbNRbQSbPzbQTbQUbQVbHxbQWbQXbQYbQZbRabRbbRcbRdbHxbRebRfbJsbRgbRhbRhbRibRjbRkbRlbRmbJxbRnbRobLcbRpbRqbJybOtbRrbRsbRtbRubRvbRwbRxbOtbRybQfbRzbRzbOxbRAbRBbRCbRDbREbRFbRGbRHbRIbRJbLvbNkbumbRKaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzOaaaaaaaaaaaaaaaaaaaaaaaabRLbRMbRNbRMbROaaaaaaaaabNBbNBbRPbRQbQtbRRbRSbRTbOSbRUbRVbLXbBZbRWbRXbRYbRZbSabSbbScbSdbSebSfbSgbShbSibSjbSjbSkbSlbSlbSlbSlbSlbSlbSmbSnbSobSpbSqbSrbRZbSsbStbSubSvbSwbNRbSxbPzbPAbSybQVbHxbQWbQXbSzbSAbSBbSCbSDbSEbHFbSFbSGbJsbJsbSHbSIbJsbRjbJubSJbSKbJxbSLbSMbSNbSObSPbJybOtbSQbSRbPZbSSbSTbSUbSVbOtbSWbQfbRzbRzbOxbSXbSYbSZbTabTbbTcbTdbTebTfbTgbLvbNkbThbTibThbTjbTkbTjbTjbTjaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTlbTmbTnbTobTlbTpbTqbTrbNBbTsbTtbTubTvbTwbTxbTybTzbTzbTAbLXbTBbTCbTDbTEbTEbTFbTGbTHbTEbTIbTIbTJbTKbTLbTIbTIbTMbPrbPrbTNbTObTObTObTPbTQbTObTObTRbTSbTTbTTbTUbTTbTVbTWbTTbTXbTYbTZbNRbUabUbbQWbUcbUdbUebUfbUgbUhbUdbHxbRebUibUjbUkbUlbUmbUnbUobUpbUqbUrbUsbUtbUubUvbUwbUxbJybOtbOtbOtbOtbOtbOtbOtbOtbOtbUybUzbUAbUAbOxbUBbUCbUDbLvbLvbLvbLvbLvbLvbLvbLvbNkbThbUEbUFbUGbUHbUHbUIbTjaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbUJbUKbUKbULbUMbUMbUNbUNbUNbUNbUOaabaabaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRNbUPbUQbUPbRNbURbUSbUTbUUbUVbUWbUXbUYbUZbLXbVabVbbVcbVdbLXbTCbTCbVebTEbVfbVgbVhbVibVjbTIbVkbVlbVmbVnbVobTIbVpbVqbVrbTObVsbVtbVubVvbVwbVxbVybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbVObQXbVPbVQbVRbVSbVTbVUbHFbVVbVWbVXbVYbUmbVZbVZbWabWbbJxbWcbWdbWebWfbWgbWhbWibJybWjbWkbWlbWmbWlbWlbWnbWobWpbWqbWrbWsbWtbOxbWubWvbOBbDbbvWbWwbWxbWybWybWxbWybWzbThbWAbWBbUGbUHbWCbWDbTjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWEbWFbWGbWFbUMbUNbUNbWHbWIbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTlbWJbUPbUPbWKbWLbRQbWMbWNbWObRQbUXbWPbWQbLXbLXbLXbLXbLXbLXbWRbTCbWSbWTbWUbWVbWVbWVbWWbTIbWXbWYbWYbWYbWZbXabXbbXcbXdbXebXfbXgbXhbXibXjbXkbTObTRbXlbTTbXmbXnbXobXpbXqbTTbQSbPAbQTbQUbXrbXsbXtbXubXvbXwbXxbXybXzbUdbXAbXBbXCbXDbXEbXFbXGbXHbXIbXJbJxbJxbJxbJxbJxbXKbXLbXMbJybXNbWlbWlbXObWlbXPbXQbXRbXSbXTbQfbXUbXUbOxbOzbXVbOBbDbbThbXWbThbThbThbThbThbThbThbXXbXYbTjbXZbYabYbbTjaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbYcbWFbWFbYdbUNbUNbWHbWHbYebWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRNbUQbUQbUQbRNbYfbYgbYhbYibYjbRQbYkbYlbYmbYnbYobYobYobYpbTCbTCbTCbVebTEbYqbWVbYrbWVbYsbTIbYtbWYbYubWYbYvbTIbYwbYxbYybTObYzbYAbYBbYCbYDbYEbYFbYGbYHbYIbYJbYKbYLbYMbYNbTTbSxbPAbPAbYObXrbXsbYPbYQbYRbVQbYSbYTbYUbYVbYWbYXbYYbYZbZabZbbZcbZcbVZbZdbUjbZebZfbZgbZhbZibZjbZkbXRbXNbZlbWlbWlbWlbZmbZnbXRbXSbZobQfbXUbXUbOxbZpbZqbOBbDbbZrbZsbZtbThbZubZvbZwbZxbZybZzbZAbTjbZBbZCbZDbTjbThbThbThbThbThbThbThbThaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabZEbUNbYcbUNbUNbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaabTlbZFbZGbZHbTlbZIbTqbTrbNBbNBbZJbZJbZJbNBbNBbTCbZKbZKbZLbZMbTCbZNbZObTEbYqbWVbWVbWVbZPbTIbYtbWYbWYbZQbZRbZSbZTbZUbZVbTObTObTObTObTObZWbTObTObZXbZYbTTbTTbZZbTTbTWbTTbTTbNRcaacaabNRbNRcabcaccadcaecafcagcahcaicajcakcalbYYcamcancaocapcaqcarcasbUjcatcaucavcawcaxcaycazcaAcaBcaAcaCcaDcaEcaAcaFcaAcaAcaGcaHbXUbXUbOxcaIbXVbOBcaJcaKcaLcaMcaNcaOcaPcaPcaQcaRcaScaTcaUcaVcaWcaXcaYcaZcbacbbcbccbdcbecbfcbgaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabUMbUNcbhcbicbibWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbjbRMcbkbRMcblcbmaabaaaaaabNBcbncbocbpbNBaaabTCcbqcbrcbscbtbYocbucbvbTEcbwcbxcbybWVcbzcbAcbBcbCcbDcbEcbFbTIcbGcbHcbIcbJcbKcbKcbKcbKcbLcbMcbNcbOcbOcbPcbPcbQcbRcbSbTRbNRcbTcbUcbVcbWcbXbXscbYcadcbZccaccbcccbRcccdcceccfccgcchcchccicchcchcchccjbUjcckcclccmccnccoccpccqcaAccrccscctccuccvccsccwccxccsccycczbQgbOxbOxccAccBccCccDccEccFccGccHccIccJccKccLccMccNccOccPccQccRccQccSccRccRccRccTccUccVccWccXaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNbUNccYbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabccZbTCbTCbTCcdabTCbTCcdbbTEcdccddcdecdfcdgcdhcdicdjcdkcdlcdmcbAcdncdocdpcdqcdrcdrcdrcdrcdscdtcducdvcdwcdvcdxcdycdzcdAcdBcdCcdDcdEcdFcdGcdHcdIcdJcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdTcdTcdUcdVcdWcdXcdYcdZcdZceacdZcebceccedceecaAcefcegcehceicehcejcekcelccsbOxcembOxbOxcenceobXVbzwbDbbThcepbThbThceqcercescetceuccRcevcewcexccKcexccKceyccKccKbThcezceAceBceCaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabUNbWHbWHbWHbWHbWHbWHceDbWHceEbWHbWHbWHbWHbWHbUNbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZceFceGceHbTCceIbTEceJceKceLbYqceMceNceObYtcePceQceRceNceSceTceUceVceVceWceXceYceZcfacfbcfcbHTcfdbTRcfebHTbHTcffcfgcfhcficfjcdGcfkcflcfmcfncfocfpcfqcfrcfscfpcfpcftcfucfucfucfvcfucfwcfucfxcfycfzcfAcfBcfCcfDcfEcfFcaAcfGcfHcfIcfJcfIcfKcfLcehcfMcfNcfObzwcfPbzwceobXVbzwbDbcfQcfRcfSbThbThbThbThbThcfTccKcfUcfVceyccKcfWccKbXXccKcfXbThcfYcfZcgabThaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNcgbcgbcgbcgbcgbcgbcgcbWHcgdcgbceEbWHbWHbWHbWHbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzObGKbGLbGKbGMbydbDwbDxbDxbDxbydbydbwubyebGNbGObkRbGPbnCbyhbDBbGQbGRbGSbnCbplbnCbGTbBZbttbGUbGVbFubGWbGXbGYbGZbHabHbbHcbHdbHebHfbHfbHgbHhbHibthbthaaabCmbFGbHjbHkbHlbHmbHnbHobHpbHqbHrbttbEebAEbHsbHtbHubHvbHwbCBbHxbHybHzbHAbHBbHCbHDbHEbHFbHGbHHbHIbHJbHKbHLbHMbHNbHObHPbHQbHRbEDbHSbHTbHUbHVbtWbHWbHXbHYbHZbHZbvFbIabIbbIcbvFbIdbCYbIebvFbIfbIgbIhbIkbIibJHbIlbImbInbIobIpbIqbIrbIsbItbItbIubIvbIwbIxbIybBwbBxbIzbBxbBwbIAaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzObIBbDsbICbIDbydbDwbydbydbydbydbydbwubyebGNbIEbkRbIFbnCbIGbIHbnCbIIbnBbnCbnCbIJbBYbBZbttbGUbGVbFubAmbIKbILbIMbINbIObIPbIQbIRbISbITbuWbIUbIVbuWbuXbuXbIWbFGbIXbIYbIZbJabJbbJbbJcbJdbJebttbJfbsdbCBbJgbJhbJibJjbCBbHxbJkbJlbJmbJnbJobJpbJlbHxbJqbJrbJsbJsbJsbJtbJsbJubJubJvbJwbJxbJybJybJzbJxbJxbJybJybJAbJBbJAbJAbvFbvFbvFbvFbvFbJCbJDbJEbvFbJFbJGbLrbJIbJIbJJbJKbJLbJMbJNbJObJPbJQbJRbJSbJSbJTbIjbJUbDbbJVbJWbJXbJYbDbbJZaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzObGKbGLbGKbDubKabKbbydbydbydbKabydbwubyebGNbKcbkRbKdbnCbyhbDBbnCbrMbKebnCbnCbKfbDGbBZbttbKgbKhbKibAmbKjbKkbKlbKmbKnbIPbKobKpbKqbKrbKsbKtbKubKvaaaaaaaaabFGbKwbKxbKybKybKzbKAbKBbFGbKCbKDbEebKEbKFbKGbKHbKIbKJbKKbKLbHybKMbKNbKObKPbKQbKMbHxbJqbKRbKSbKTbKUbKVbKWbJubKXbKYbKZbJxbLabLbbLcbLdbLebLfbLgbIobLhbJIbJIbLibLjbJIbLkbLlbLmbLnbLobJIbLpbLqbNcbLsbLtbLubLvbLwbLvbLvbLvbGFbDbbDbbGGbGIbDbbLxbLybLzbLAbLBbLCbLDbLEaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzObLFbLGbLFbLHbLIbLJbLJbLJbLJbLJbLKbLLbLMbGNbLNbkRbLObLPbLQbLRbLSbLTbLUbLVbLWbLXbLXbLYbttbLZbMabFubAmbMbbMcbMdbILbMebIPbMfbMgbMhbMibMjbDUbMkbKvaaaaaaaaabFGbMlbMmbMnbMobKzbKAbKBbFGbMpbMqbMrbMsbMtbMubMvbMwbMxbMybMzbMAbJlbJlbMBbMCbJlbJlbHxbJqbMDbMEbMFbMGbMHbMIbJubMJbMKbMLbMMbMNbMObMPbMPbMQbMRbMSbMTbMUbIjbIjbMVbIjbMWbIjbMXbIjbMYbMZbMZbNabNbbOBbNdbNebNfbNgbNhbNibNjbLvbNkbNlaaaaaaaaabDbbNmbNnbNobNpbNqbNrbNsbDbaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzObNtbNubNvbkRbkRbNwbDsbDsbDsbNxbkRbkRbNybNzbNAbkRbNBbNBbNBbNCbNBbLXbNDbNEbNFbNGbLXbBZbttbNHbNIbNIbAmbAmbAmbAmbAmbNJbIPbHfbHebNKbNLbNMbNNbKvbKvbthbthbthbFGbFHbFGbFGbFGbFGbFGbFGbFGbNObttbNPbNQbNRbNSbNTbNRbNRbNUbNVbNWbNXbNYbNZbOabObbOcbKLbOdbOebOfbOgbOhbOibOjbOkbOlbOmbOnbOobOpbOqbOrbLcbOsbJybJybOtbOtbOtbOtbOubOtbOtbOtbOvbOwbOxbOxbOybOzbOAbQibNdbOCbODbOEbOFbOGbOHbLvbNkbOIaaaaaaaaabDbbOJbOKbDbbIxbDbbDbbIxbDbaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOLaabaaaaaaaaaaaabNBbOMbONbOObOPbLXbOQbORbOSbOTbLXbBZbttbOUbOVbOWbOXbOYbOZbPabPbbPcbPdbPebPfbPgbPhbPibPjbPkbPlbPmbPnbPobPpbPqbPrbPsbscbPtbttbPubPvbPwbttbPxbNRbPybPzbPAbPBbPCbHxbPDbPEbPFbPGbPHbPIbPJbPKbPLbPMbPNbJsbPObMGbPPbPQbPRbPSbPTbPUbJxbPVbLcbLcbLcbPWbJybOtbPXbPYbPZbQabQbbQcbQdbOtbQebQfbQgbOxbOxbQhbOAbRCbQjbQkbQlbQmbQnbQobQpbLvbQqbumaaaaaaaaabDbbDbbDbbDbaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzObzObzOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNBbQrbQsbQtbQubQvbQwbQxbQybQzbLXbBZbQAbQBbttbttbEebQCbscbPsbPrbQDbQEbQDbQFbQGbQGbQHbQIbQJbQGbQGbQKbQGbQLbQGbPrbPsbscbQMbQNbQObQPbQQbQRbttbNRbQSbPzbQTbQUbQVbHxbQWbQXbQYbQZbRabRbbRcbRdbHxbRebRfbJsbRgbRhbRhbRibRjbRkbRlbRmbJxbRnbRobLcbRpbRqbJybOtbRrbRsbRtbRubRvbRwbRxbOtbRybQfbRzbRzbOxbRAbRBbSZbRDbREbRFbRGbRHbRIbRJbLvbNkbumbRKaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzObzObzObzObzOaaaaaaaaaaaaaaaaaaaaaaaabRLbRMbRNbRMbROaaaaaaaaabNBbNBbRPbRQbQtbRRbRSbRTbOSbRUbRVbLXbBZbRWbRXbRYbRZbSabSbbScbSdbSebSfbSgbShbSibSjbSjbSkbSlbSlbSlbSlbSlbSlbSmbSnbSobSpbSqbSrbRZbSsbStbSubSvbSwbNRbSxbPzbPAbSybQVbHxbQWbQXbSzbSAbSBbSCbSDbSEbHFbSFbSGbJsbJsbSHbSIbJsbRjbJubSJbSKbJxbSLbSMbSNbSObSPbJybOtbSQbSRbPZbSSbSTbSUbSVbOtbSWbQfbRzbRzbOxbSXbSYbUDbTabTbbTcbTdbTebTfbTgbLvbNkbThbTibThbTjbTkbTjbTjbTjaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTlbTmbTnbTobTlbTpbTqbTrbNBbTsbTtbTubTvbTwbTxbTybTzbTzbTAbLXbTBbTCbTDbTEbTEbTFbTGbTHbTEbTIbTIbTJbTKbTLbTIbTIbTMbPrbPrbTNbTObTObTObTPbTQbTObTObTRbTSbTTbTTbTUbTTbTVbTWbTTbTXbTYbTZbNRbUabUbbQWbUcbUdbUebUfbUgbUhbUdbHxbRebUibUjbUkbUlbUmbUnbUobUpbUqbUrbUsbUtbUubUvbUwbUxbJybOtbOtbOtbOtbOtbOtbOtbOtbOtbUybUzbUAbUAbOxbUBbUCccCbLvbLvbLvbLvbLvbLvbLvbLvbNkbThbUEbUFbUGbUHbUHbUIbTjaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbUJbUKbUKbULbUMbUMbUNbUNbUNbUNbUOaabaabaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRNbUPbUQbUPbRNbURbUSbUTbUUbUVbUWbUXbUYbUZbLXbVabVbbVcbVdbLXbTCbTCbVebTEbVfbVgbVhbVibVjbTIbVkbVlbVmbVnbVobTIbVpbVqbVrbTObVsbVtbVubVvbVwbVxbVybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbVObQXbVPbVQbVRbVSbVTbVUbHFbVVbVWbVXbVYbUmbVZbVZbWabWbbJxbWcbWdbWebWfbWgbWhbWibJybWjbWkbWlbWmbWlbWlbWnbWobWpbWqbWrbWsbWtbOxbWubWvbQibDbbvWbWwbWxbWybWybWxbWybWzbThbWAbWBbUGbUHbWCbWDbTjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWEbWFbWGbWFbUMbUNbUNbWHbWIbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTlbWJbUPbUPbWKbWLbRQbWMbWNbWObRQbUXbWPbWQbLXbLXbLXbLXbLXbLXbWRbTCbWSbWTbWUbWVbWVbWVbWWbTIbWXbWYbWYbWYbWZbXabXbbXcbXdbXebXfbXgbXhbXibXjbXkbTObTRbXlbTTbXmbXnbXobXpbXqbTTbQSbPAbQTbQUbXrbXsbXtbXubXvbXwbXxbXybXzbUdbXAbXBbXCbXDbXEbXFbXGbXHbXIbXJbJxbJxbJxbJxbJxbXKbXLbXMbJybXNbWlbWlbXObWlbXPbXQbXRbXSbXTbQfbXUbXUbOxbOzbXVbQibDbbThbXWbThbThbThbThbThbThbThbXXbXYbTjbXZbYabYbbTjaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbYcbWFbWFbYdbUNbUNbWHbWHbYebWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRNbUQbUQbUQbRNbYfbYgbYhbYibYjbRQbYkbYlbYmbYnbYobYobYobYpbTCbTCbTCbVebTEbYqbWVbYrbWVbYsbTIbYtbWYbYubWYbYvbTIbYwbYxbYybTObYzbYAbYBbYCbYDbYEbYFbYGbYHbYIbYJbYKbYLbYMbYNbTTbSxbPAbPAbYObXrbXsbYPbYQbYRbVQbYSbYTbYUbYVbYWbYXbYYbYZbZabZbbZcbZcbVZbZdbUjbZebZfbZgbZhbZibZjbZkbXRbXNbZlbWlbWlbWlbZmbZnbXRbXSbZobQfbXUbXUbOxbZpbZqbQibDbbZrbZsbZtbThbZubZvbZwbZxbZybZzbZAbTjbZBbZCbZDbTjbThbThbThbThbThbThbThbThaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabZEbUNbYcbUNbUNbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaabTlbZFbZGbZHbTlbZIbTqbTrbNBbNBbZJbZJbZJbNBbNBbTCbZKbZKbZLbZMbTCbZNbZObTEbYqbWVbWVbWVbZPbTIbYtbWYbWYbZQbZRbZSbZTbZUbZVbTObTObTObTObTObZWbTObTObZXbZYbTTbTTbZZbTTbTWbTTbTTbNRcaacaabNRbNRcabcaccadcaecafcagcahcaicajcakcalbYYcamcancaocapcaqcarcasbUjcatcaucavcawcaxcaycazcaAcaBcaAcaCcaDcaEcaAcaFcaAcaAcaGcaHbXUbXUbOxcaIbXVbQicaJcaKcaLcaMcaNcaOcaPcaPcaQcaRcaScaTcaUcaVcaWcaXcaYcaZcbacbbcbccbdcbecbfcbgaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabUMbUNcbhcbicbibWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbjbRMcbkbRMcblcbmaabaaaaaabNBcbncbocbpbNBaaabTCcbqcbrcbscbtbYocbucbvbTEcbwcbxcbybWVcbzcbAcbBcbCcbDcbEcbFbTIcbGcbHcbIcbJcbKcbKcbKcbKcbLcbMcbNcbOcbOcbPcbPcbQcbRcbSbTRbNRcbTcbUcbVcbWcbXbXscbYcadcbZccaccbcccbRcccdcceccfccgcchcchccicchcchcchccjbUjcckcclccmccnccoccpccqcaAccrccscctccuccvccsccwccxccsccycczbQgbOxbOxccAccBcZjccDccEccFccGccHccIccJccKccLccMccNccOccPccQccRccQccSccRccRccRccTccUccVccWccXaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNbUNccYbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabccZbTCbTCbTCcdabTCbTCcdbbTEcdccddcdecdfcdgcdhcdicdjcdkcdlcdmcbAcdncdocdpcdqcdrcdrcdrcdrcdscdtcducdvcdwcdvcdxcdycdzcdAcdBcdCcdDcdEcdFcdGcdHcdIcdJcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdTcdTcdUcdVcdWcdXcdYcdZcdZceacdZcebceccedceecaAcefcegcehceicehcejcekcelccsbOxcembOxbOxcenceobXVcZkbDbbThcepbThbThceqcercescetceuccRcevcewcexccKcexccKceyccKccKbThcezceAceBceCaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabUNbWHbWHbWHbWHbWHbWHceDbWHceEbWHbWHbWHbWHbWHbUNbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZceFceGceHbTCceIbTEceJceKceLbYqceMceNceObYtcePceQceRceNceSceTceUceVceVceWceXceYceZcfacfbcfcbHTcfdbTRcfebHTbHTcffcfgcfhcficfjcdGcfkcflcfmcfncfocfpcfqcfrcfscfpcfpcftcfucfucfucfvcfucfwcfucfxcfycfzcfAcfBcfCcfDcfEcfFcaAcfGcfHcfIcfJcfIcfKcfLcehcfMcfNcfObzwcfPbzwceobXVcZlbDbcfQcfRcfSbThbThbThbThbThcfTccKcfUcfVceyccKcfWccKbXXccKcfXbThcfYcfZcgabThaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNcgbcgbcgbcgbcgbcgbcgcbWHcgdcgbceEbWHbWHbWHbWHbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZcgecgfcggbTCceIcghcghcghcghcghcghbTIbTIbTIbTIbTIbTIbTIcgicgjcgkcglcgmcgncgocgocgpcgqcfbbHTbHTcgrcgscgtbHTbHTbHTcgucgvcgwcdEcgxcgycgzcfucgAcgBcgCbQWcgBcgDcdTcdTcdTcdTcdTcdTcgBcdTcdTcdTbQWcgEcgFcgGcgHcgIcgJcgKcgLcaAcgMcgNcehcgOcehcgPcgQcgRcgScgTcgUcgVbzwcgWceobXVcgXbDbbDicgYcgZchabumbvWbvWbThchbchcchdchechfchgchhchichjchkchlbThchmchnchochpaacaacaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaachqbWFbWFbWFbWFbWFbWFbWFchrchsbWHbWHbWHbWHchtbWIbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZccZccZccZbTCceIccZaaaaaaaaaaaachuchvchwchxchychzchAchBchCchDchEchFchGchHchIchIchJchKchLchMchMchMchMchNchMbHTbHTbNRchOchPchQchRchSchTcgIchUchVchWchXchYchZciacdTcdTcibciccidciecidcicbEDcifcigcigcihciicijcakcikcilcaAcimcinciocipciqcirciscaAcaAbDbcitbDbbDbbDbciucivciwbDbbvWcgYcixciybumbumbumbThbThbThbThbThbThbThbThbThbThbThbThbThbThbThbThbThaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNcbicbicbicbicbicbicizbWHcbhcbiciAbWHbWHbWHbWHbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciBaaaaabaabciCciCciCciCciCciCciDciCbTCcdbciEaaaciFciGciHciIciJciKciLciMciNciOciPciQciRciSciTciUciVciWciXciYciZchLcjacjbcjbcjbcjcchMbHTbHTcjdcjdcjdcjdcjecjdcjfcjfcjgcjdcjdcjhcjdcjicjjcjkcjlcjkcjmcjncjocjpcjqbuXbuXcjrcjscjtcjucjvcjwcjxcbScaAcaAcjycaAcjzcaAcjAcjBcjCcjDcjEcjFcjGcjHcjIcjJcjKcjLcjIbvWcgYcjMbvWcjNcjOcjPcjQbvWbvWbvWbvWbvWbvWbvWbvWcjRcjSbNlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNbWHbWHbWHbWHbWHbWHceDbWHciAbWHbWHbWHbWHbWHbUNbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/modules/tram/tram.dm b/code/modules/tram/tram.dm new file mode 100644 index 00000000000..8b4e91e541e --- /dev/null +++ b/code/modules/tram/tram.dm @@ -0,0 +1,236 @@ +/obj/tram/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) + if(prob(50)) + qdel(src) + return + if(3.0) + if(prob(25)) + qdel(src) + return + +/obj/tram/blob_act() + if(prob(50)) + qdel(src) + +/obj/tram/meteorhit() + qdel(src) + +/obj/tram/attack_animal(var/mob/living/simple_animal/M as mob) + if(M.melee_damage_upper == 0) return + if(prob(M.melee_damage_upper)) + qdel(src) + src.visible_message("\red [M] has [M.attacktext] [src]!") + M.attack_log += text("\[[time_stamp()]\] attacked [src.name]") + +/obj/tram/bullet_act(var/obj/item/projectile/proj) + if(prob(proj.damage)) + qdel(src) + ..() + +/obj/tram/tram_controller + name = "" + desc = "tram controller" + anchored = 1 + + var/list/tram_floors = list() + var/list/tram_walls = list() + var/list/controllers = list() + + var/list/tram = list() + + var/list/collide_list = list() + + var/list/stored_anchor = list() + var/last_played_rail + + var/automode = 0 + var/list/blacklist = list(/obj/tram/rail,/atom/movable/lighting_overlay) + +/obj/tram/tram_controller/New() + spawn(1) + init_floors() //Search and link floors + init_walls() //Search and link walls + spawn(1) + init_tram() //Combine walls and floors and anything inside the tram + init_controllers() //Find control pads + gen_collision() //Generate collision system + processing_objects.Add(src) //Add to processing objects manually + +/obj/tram/tram_controller/Destroy() + for(var/obj/tram/floor/F in tram_floors) + remove_floor(F) + for(var/obj/tram/wall/TW in tram_walls) + remove_wall(TW) + for(var/obj/tram/controlpad/CP in controllers) + remove_controller(CP) + ..() + +/obj/tram/tram_controller/emp_act(severity) + if(automode) automode = 0 + ..() + +/obj/tram/tram_controller/process() + update_tram() //Update combine to account for new mobs and/or objects + if(automode) + tram_rail_follow() + +/obj/tram/tram_controller/proc/update_tram() + tram.Cut() + init_tram() + +/obj/tram/tram_controller/proc/tram_rail_follow() + var/stored_rail = null + for(var/obj/tram/rail/RT in get_turf(src)) + if(RT.godir) + handle_move(RT.godir) + last_played_rail = RT + return + stored_rail = RT + for(var/cdir in cardinal) + for(var/obj/tram/rail/R in get_step(src,cdir)) + if(!istype(R)) continue + if(R != last_played_rail) + handle_move(get_dir(src,R)) + last_played_rail = stored_rail + +//INITIALIZATION PROCS + +/obj/tram/tram_controller/proc/init_floors() + var/turf/T = get_turf(src) + if(!T) return + var/obj/tram/floor/TTF = locate(/obj/tram/floor) in T + if(istype(TTF)) add_floor(TTF) //Find and link floor on controller turf + for(var/cdir in cardinal) + var/turf/T2 = get_step(T,cdir) + var/obj/tram/floor/TF = locate(/obj/tram/floor) in T2 + if(istype(TF)) + if(TF in tram_floors) continue + add_floor(TF) //Find and link all cardinally surrounding floors + spawn(1) + TF.spread_floors() //Do the same thing over again from the floor itself + +/obj/tram/tram_controller/proc/init_walls() + var/turf/T = get_turf(src) + if(!T) return + if(!tram_floors.len) return + var/obj/tram/floor/TTW = locate(/obj/tram/wall) in T //Find and link wall on controller turf + if(istype(TTW)) add_wall(TTW) + for(var/obj/tram/floor/TF in tram_floors) + for(var/cdir in cardinal) + var/obj/tram/wall/TW = locate(/obj/tram/wall) in get_step(TF,cdir) + if(istype(TW)) + if(TW in tram_walls) continue + add_wall(TW) //Find and link all cardinally surrounding walls + spawn(1) + TW.spread_walls() //Do the same thing over again from the wall itself + +/obj/tram/tram_controller/proc/init_tram() + tram = tram_floors + tram_walls //Tram is everything that makes up the tram + for(var/obj/tram/OT in tram) + var/turf/T = get_turf(OT) + for(var/atom/movable/AM in T) //Including anything inside of it + if(AM in tram) continue + if(!check_validity(AM)) continue + tram += AM + if(!(src in tram)) + tram += src + +/obj/tram/tram_controller/proc/check_validity(var/atom/movable/AM) + if(!AM) return 0 + if(is_type_in_list(AM, blacklist)) return 0 + if(!AM.simulated) return 0 + if(AM.anchored) + if(istype(AM,/obj/tram) || istype(AM,/obj/vehicle)) + return 1 + return 0 + return 1 + +/obj/tram/tram_controller/proc/init_controllers() + for(var/obj/tram/controlpad/CCP in tram) + add_controller(CCP) //Control pad not necessary until now, easiest to search through tram + +//SYNC PROCS +//These procs are used for un/linking floors, walls, and control pads to the central tram controller + +/obj/tram/tram_controller/proc/add_floor(var/obj/tram/floor/TF) + if(!istype(TF)) return + if(TF in tram_floors) return + tram_floors += TF + TF.controller = src + +/obj/tram/tram_controller/proc/remove_floor(var/obj/tram/floor/TF) + if(!istype(TF)) return + if(TF in tram_floors) + tram_floors -= TF + TF.controller = null + +/obj/tram/tram_controller/proc/add_wall(var/obj/tram/wall/TW) + if(!istype(TW)) return + if(TW in tram_walls) return + tram_walls += TW + TW.controller = src + +/obj/tram/tram_controller/proc/remove_wall(var/obj/tram/wall/TW) + if(!istype(TW)) return + if(TW in tram_walls) + tram_walls -= TW + TW.controller = null + +/obj/tram/tram_controller/proc/add_controller(var/obj/tram/controlpad/CCT) + if(!istype(CCT)) return + if(CCT in controllers) return + controllers += CCT + CCT.tram_linked = src + +/obj/tram/tram_controller/proc/remove_controller(var/obj/tram/controlpad/CCT) + if(!istype(CCT)) return + if(CCT in controllers) + controllers -= CCT + CCT.tram_linked = null + +//COLLISION & MOVEMENT +//Collision detection system to prevent going through walls +//Tram does not use built-in byond Move(), it uses it's own logic and then forceMove()s itself. + +/obj/tram/tram_controller/proc/gen_collision() + collide_list.Cut() + var/list/collisions = list() + for(var/obj/tram/wall/W in tram_walls) + for(var/cdir in cardinal) + var/turf/T = get_step(W, cdir) + if(istype(T)) + if(T.density) + collisions += cdir + if(!T.density) + for(var/atom/movable/A in T) + if(A.density) + if(tram.Find(A)) continue + collisions += cdir + for(var/obj/tram/floor/F in tram_floors) + for(var/cdir in cardinal) + var/turf/T = get_step(F, cdir) + if(istype(T)) + if(T.density) + collisions += cdir + if(!T.density) + for(var/atom/movable/A in T) + if(A.density) + if(tram.Find(A)) continue + collisions += cdir + collide_list = collisions + +/obj/tram/tram_controller/proc/handle_move(var/dir) + gen_collision() //Look for collisions + if(dir in collide_list) //Prevent moving if there are collisions in that direction + return 0 + for(var/atom/movable/A in tram) + var/turf/T = get_step(A,dir) + A.forceMove(T) //Move everything inside the tram and the tram itself manually + if(A.light_range) + A.set_light() + gen_collision() //Generate collision again + return 1 \ No newline at end of file diff --git a/code/modules/tram/tram_control_pad.dm b/code/modules/tram/tram_control_pad.dm new file mode 100644 index 00000000000..36f40beee30 --- /dev/null +++ b/code/modules/tram/tram_control_pad.dm @@ -0,0 +1,31 @@ +/obj/tram/controlpad + name = "tram controller interface" + desc = "Controls a tram." + icon = 'icons/obj/airlock_machines.dmi' + icon_state = "airlock_control_standby" + var/obj/tram/tram_controller/tram_linked + var/list/cdir2readable = list("North","South",null,"East",null,null,null,"West") + +/obj/tram/controlpad/attack_hand(var/mob/user) + usr.set_machine(src) + if(!tram_linked) return + var/dat = "Tram Controller" + dat += "
Tram engine: [tram_linked.automode ? "On" : "Off"]" + dat += "
Close console" + user << browse(dat, "window=trampad") + onclose(user,"trampad") + +/obj/tram/controlpad/Topic(href, href_list) + if(..()) + usr << browse(null, "window=publiclibrary") + onclose(usr, "publiclibrary") + return + + if(href_list["engine_toggle"]) + tram_linked.automode = !tram_linked.automode + else if(href_list["close"]) + usr.unset_machine() + usr << browse(null, "window=trampad") + + src.add_fingerprint(usr) + src.updateUsrDialog() \ No newline at end of file diff --git a/code/modules/tram/tram_floor.dm b/code/modules/tram/tram_floor.dm new file mode 100644 index 00000000000..fc3b1d162d5 --- /dev/null +++ b/code/modules/tram/tram_floor.dm @@ -0,0 +1,20 @@ +/obj/tram/floor + name = "tram platform" + desc = "A holding space for a tram system." + icon = 'icons/turf/floors.dmi' + icon_state = "floor" + var/obj/tram/tram_controller/controller + anchored = 1 + layer = TURF_LAYER + 0.2 + +/obj/tram/floor/proc/spread_floors() + var/turf/T = get_turf(src) + if(!T) return + if(!controller) return + for(var/cdir in cardinal) + var/turf/T2 = get_step(T,cdir) + var/obj/tram/floor/TF = locate(/obj/tram/floor) in T2 + if(istype(TF)) + if(TF in controller.tram_floors) continue + controller.add_floor(TF) + TF.spread_floors() \ No newline at end of file diff --git a/code/modules/tram/tram_rail.dm b/code/modules/tram/tram_rail.dm new file mode 100644 index 00000000000..fb63df62617 --- /dev/null +++ b/code/modules/tram/tram_rail.dm @@ -0,0 +1,7 @@ +/obj/tram/rail + name = "tram rail" + desc = "A guiding rail for trams" + icon = 'icons/obj/tram/tram_rail.dmi' + icon_state = "rail" + var/godir = null + layer = TURF_LAYER + 0.1 \ No newline at end of file diff --git a/code/modules/tram/tram_wall.dm b/code/modules/tram/tram_wall.dm new file mode 100644 index 00000000000..bfde77f6a4c --- /dev/null +++ b/code/modules/tram/tram_wall.dm @@ -0,0 +1,21 @@ +/obj/tram/wall + name = "reinforced tram wall" + desc = "A huge chunk of reinforced metal used to shield a tram system." + icon = 'icons/turf/walls.dmi' + icon_state = "r_wall" + var/obj/tram/tram_controller/controller + anchored = 1 + density = 1 + opacity = 1 + +/obj/tram/wall/proc/spread_walls() + var/turf/T = get_turf(src) + if(!T) return + if(!controller) return + for(var/cdir in cardinal) + var/turf/T2 = get_step(T,cdir) + var/obj/tram/wall/TW = locate(/obj/tram/wall) in T2 + if(istype(TW)) + if(TW in controller.tram_walls) continue + controller.add_wall(TW) + TW.spread_walls() \ No newline at end of file diff --git a/icons/obj/tram/tram_rail.dmi b/icons/obj/tram/tram_rail.dmi new file mode 100644 index 00000000000..348d87ebd28 Binary files /dev/null and b/icons/obj/tram/tram_rail.dmi differ diff --git a/paradise.dme b/paradise.dme index 7932c736306..c5628c027ab 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1754,6 +1754,11 @@ #include "code\modules\telesci\gps.dm" #include "code\modules\telesci\telepad.dm" #include "code\modules\telesci\telesci_computer.dm" +#include "code\modules\tram\tram.dm" +#include "code\modules\tram\tram_control_pad.dm" +#include "code\modules\tram\tram_floor.dm" +#include "code\modules\tram\tram_rail.dm" +#include "code\modules\tram\tram_wall.dm" #include "code\modules\vehicle\vehicle.dm" #include "code\modules\vehicle\train\train.dm" #include "code\modules\vehicle\train\trains\ambulance.dm"