diff --git a/_maps/RandomZLevels/box2550Away.dmm b/_maps/RandomZLevels/box2550Away.dmm index 5b42f7c5a8d..7ccc84dab88 100644 --- a/_maps/RandomZLevels/box2550Away.dmm +++ b/_maps/RandomZLevels/box2550Away.dmm @@ -1,1836 +1,1853 @@ "aa" = (/turf/space,/area) -"ab" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area) -"ac" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/airless{tag = "icon-solarpanel"; icon_state = "solarpanel"},/area/awaymission/box2550Away/solar) +"ab" = (/obj/structure/grille,/turf/unsimulated/floor/plating,/area) +"ac" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) "ad" = (/obj/structure/lattice,/turf/space,/area) -"ae" = (/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/solar) -"af" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"ag" = (/obj/machinery/door/airlock/external{name = "Prison Solar Maintenance"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"ah" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"ai" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"aj" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"ak" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"al" = (/obj/machinery/power/tracker,/turf/simulated/floor/plating,/area) -"am" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"an" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"ao" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"ap" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/security) -"aq" = (/turf/simulated/floor,/area/awaymission/box2550Away/security) -"ar" = (/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"as" = (/obj/machinery/power/smes{charging = 1},/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"at" = (/obj/machinery/power/terminal{dir = 8},/obj/machinery/door/window/westleft{dir = 2; icon_state = "left"; name = "Prison Solar Control"; req_access_txt = "1"; tag = "icon-left"},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"au" = (/obj/structure/window/reinforced,/obj/structure/computerframe,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"av" = (/obj/item/weapon/paper{info = "
There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
Three bold guardians stand small, treading closer with a crawl. Toxic fumes to one side hold, on the other thou will findest gold.
HONK!
"; layer = 3; name = "Old Note #10"},/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"aw" = (/obj/structure/stool/bed,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"ax" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = 0; req_access_txt = "1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"ay" = (/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) -"az" = (/turf/simulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) -"aA" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) -"aB" = (/obj/structure/closet/secure_closet/brig{name = "Prison Locker"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"aC" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"aD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"aE" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) -"aF" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"aG" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"aH" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = 0; req_access_txt = "1"},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"aI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"aJ" = (/obj/structure/computerframe,/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) -"aK" = (/obj/structure/computerframe,/turf/simulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) -"aL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"aM" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"aN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"aO" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) -"aP" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) -"aQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"aR" = (/turf/simulated/floor/plating/airless,/area) -"aS" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/stool/bed,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"aT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"aU" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) -"aV" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) -"aW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"aX" = (/obj/structure/computerframe{anchored = 1; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/security) -"aY" = (/obj/structure/table{dir = 8; icon_state = "table_horizontal"; pixel_y = 0},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) -"aZ" = (/obj/structure/table{dir = 4; icon_state = "table_horizontal"; pixel_y = 0},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) -"ba" = (/obj/machinery/computer/card,/turf/simulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/security) -"bb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"be" = (/turf/simulated/floor{tag = "icon-redcorner (EAST)"; icon_state = "redcorner"; dir = 4},/area/awaymission/box2550Away/security) -"bf" = (/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) -"bg" = (/turf/simulated/floor{tag = "icon-redcorner (NORTH)"; icon_state = "redcorner"; dir = 1},/area/awaymission/box2550Away/security) -"bh" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bi" = (/turf/simulated/floor{tag = "icon-caution_south"; icon_state = "caution_south"},/area/awaymission/box2550Away/security) -"bj" = (/turf/simulated/floor{tag = "icon-arrival (WEST)"; icon_state = "arrival"; dir = 8},/area/awaymission/box2550Away/security) -"bk" = (/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/security) -"bl" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bo" = (/obj/structure/computerframe{anchored = 1; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-corner_east"; icon_state = "corner_east"},/area/awaymission/box2550Away/security) -"bp" = (/turf/simulated/shuttle/wall{dir = 8; icon_state = "wall_space"},/area) -"bq" = (/turf/simulated/shuttle/wall,/area) -"br" = (/turf/simulated/shuttle/wall{dir = 1; icon_state = "wall_space"},/area) -"bs" = (/obj/machinery/mass_driver{dir = 4; id = "prisongun"},/obj/machinery/door/window/westleft{name = "Prison Mass Driver"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bt" = (/obj/machinery/door/poddoor{id = "prisongun"; name = "Prison Mass Driver"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bv" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bw" = (/turf/simulated/shuttle/floor,/area) -"bx" = (/obj/structure/computerframe{anchored = 1; req_access_txt = "1"},/turf/simulated/shuttle/floor,/area) -"by" = (/obj/machinery/driver_button{id = "prisongun"; name = "Prison Mass Driver Button"; pixel_x = 24; req_access_txt = "1"; text = "chapel"},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"bz" = (/turf/simulated/wall/r_wall,/area) -"bA" = (/obj/machinery/door/airlock/external{name = "Prison Airlock"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bB" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area) -"bC" = (/obj/machinery/door/airlock/glass{name = "Gas Chamber"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bD" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bE" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area) -"bF" = (/obj/machinery/driver_button{id = "prisonvent"; name = "Gas Chamber Vent Button"; pixel_x = 24; req_access_txt = "1"; text = "gas chamber"},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"bG" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "caution_north"; tag = "icon-caution_east"},/area/awaymission/box2550Away/security) -"bH" = (/obj/structure/closet/emcloset,/obj/effect/landmark/corpse/away/box2550/hos,/turf/simulated/floor{icon_state = "corner_northeast"; tag = "icon-corner_northeast"},/area/awaymission/box2550Away/security) -"bI" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating/airless,/area) -"bJ" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"bK" = (/obj/item/weapon/wrench,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"bL" = (/obj/machinery/door/poddoor{id = "prisonvent"; name = "Gas Chamber Vent"},/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/security) -"bM" = (/turf/simulated/floor{tag = "icon-arrival (SOUTHWEST)"; icon_state = "arrival"; dir = 10},/area/awaymission/box2550Away/security) -"bN" = (/turf/simulated/floor{tag = "icon-arrival"; icon_state = "arrival"},/area/awaymission/box2550Away/security) -"bO" = (/obj/structure/closet/emcloset,/turf/simulated/floor{tag = "icon-arrival"; icon_state = "arrival"},/area/awaymission/box2550Away/security) -"bP" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/security) -"bQ" = (/turf/simulated/shuttle/wall{icon_state = "wall_space"},/area) +"ae" = (/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"af" = (/obj/machinery/power/tracker,/turf/unsimulated/floor/plating,/area) +"ag" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"ah" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"ai" = (/obj/machinery/door/airlock/external{name = "Prison Solar Maintenance"; req_access_txt = "1"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aj" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"ak" = (/obj/machinery/power/solar/fake,/turf/unsimulated/floor{tag = "icon-solarpanel"; icon_state = "solarpanel"},/area/awaymission/box2550Away/solar) +"al" = (/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/solar) +"am" = (/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"an" = (/obj/structure/closet/wardrobe/orange,/turf/unsimulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"ao" = (/turf/unsimulated/wall/other,/area/awaymission/box2550Away/security) +"ap" = (/turf/unsimulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"aq" = (/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) +"ar" = (/obj/structure/stool/bed,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"as" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = 0; req_access_txt = "1"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"at" = (/obj/machinery/power/smes{charging = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"au" = (/obj/structure/window/reinforced,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"av" = (/obj/machinery/power/terminal{dir = 8},/obj/machinery/door/window/westleft{dir = 2; icon_state = "left"; name = "Prison Solar Control"; req_access_txt = "1"; tag = "icon-left"},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"aw" = (/obj/structure/window/reinforced,/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"ax" = (/obj/item/weapon/paper/crumpled/bloody{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
Three bold guardians stand small, treading closer with a crawl. Toxic fumes to one side hold, on the other thou will findest gold.
HONK!
"; layer = 3; name = "Old Note #10"},/obj/structure/window/reinforced,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"ay" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"az" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aB" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aC" = (/obj/structure/closet/secure_closet/brig{name = "Prison Locker"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aD" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"aE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aG" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) +"aH" = (/turf/unsimulated/floor/plating,/area) +"aI" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"aJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aL" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) +"aM" = (/obj/effect/decal/cleanable/cobweb,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aN" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = 0; req_access_txt = "1"},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"aO" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aP" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/turf/unsimulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"aQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aR" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"aS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"aV" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/security) +"aW" = (/obj/structure/table{dir = 4; icon_state = "table_horizontal"; pixel_y = 0},/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"aX" = (/obj/structure/table{dir = 8; icon_state = "table_horizontal"; pixel_y = 0},/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"aY" = (/obj/machinery/computer/card,/turf/unsimulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/security) +"aZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"ba" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) +"bb" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"bc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"bd" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/stool/bed,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"be" = (/turf/unsimulated/floor{tag = "icon-redcorner (EAST)"; icon_state = "redcorner"; dir = 4},/area/awaymission/box2550Away/security) +"bf" = (/turf/unsimulated/floor{tag = "icon-redcorner (NORTH)"; icon_state = "redcorner"; dir = 1},/area/awaymission/box2550Away/security) +"bg" = (/turf/unsimulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) +"bh" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"bi" = (/turf/unsimulated/floor{icon_state = "warning"; tag = "icon-warning (SOUTH)"},/area/awaymission/box2550Away/security) +"bj" = (/turf/unsimulated/floor{tag = "icon-arrival (WEST)"; icon_state = "arrival"; dir = 8},/area/awaymission/box2550Away/security) +"bk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"bl" = (/turf/unsimulated/floor{tag = "icon-warning (EAST)"; icon_state = "warning"; dir = 4},/area/awaymission/box2550Away/security) +"bm" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"bn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"bo" = (/obj/machinery/mass_driver{dir = 4; id = "prisongun"},/obj/machinery/door/window/westleft{name = "Prison Mass Driver"; req_access_txt = "1"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"bp" = (/obj/machinery/door/poddoor{id = "prisongun"; name = "Prison Mass Driver"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"bq" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor{tag = "icon-warning (SOUTHEAST)"; icon_state = "warning"; dir = 6},/area/awaymission/box2550Away/security) +"br" = (/turf/unsimulated/shuttle/wall{dir = 8; icon_state = "wall_space"},/area) +"bs" = (/turf/unsimulated/shuttle/wall,/area) +"bt" = (/turf/unsimulated/shuttle/wall{dir = 1; icon_state = "wall_space"},/area) +"bu" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/shuttle/floor,/area) +"bv" = (/turf/unsimulated/shuttle/floor,/area) +"bw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"bx" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"by" = (/turf/unsimulated/wall/other,/area) +"bz" = (/obj/machinery/driver_button{id = "prisongun"; name = "Prison Mass Driver Button"; pixel_x = 24; req_access_txt = "1"; text = "chapel"},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"bA" = (/obj/machinery/door/unpowered/shuttle,/turf/unsimulated/shuttle/floor,/area) +"bB" = (/obj/machinery/door/airlock/external{name = "Prison Airlock"; req_access_txt = "1"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"bC" = (/obj/machinery/door/airlock/glass{name = "Gas Chamber"; req_access_txt = "1"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"bD" = (/obj/machinery/driver_button{id = "prisonvent"; name = "Gas Chamber Vent Button"; pixel_x = 24; req_access_txt = "1"; text = "gas chamber"},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"bE" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/shuttle/floor,/area) +"bF" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"bG" = (/obj/item/weapon/wrench,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"bH" = (/obj/machinery/door/poddoor{id = "prisonvent"; name = "Gas Chamber Vent"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"bI" = (/obj/structure/closet/emcloset,/obj/effect/landmark/corpse/away/box2550/hos,/turf/unsimulated/floor{tag = "icon-warning (NORTHEAST)"; icon_state = "warning"; dir = 5},/area/awaymission/box2550Away/security) +"bJ" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area) +"bK" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"bL" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{tag = "icon-warning (NORTH)"; icon_state = "warning"; dir = 1},/area/awaymission/box2550Away/security) +"bM" = (/turf/unsimulated/floor{tag = "icon-arrival"; icon_state = "arrival"},/area/awaymission/box2550Away/security) +"bN" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{tag = "icon-arrival"; icon_state = "arrival"},/area/awaymission/box2550Away/security) +"bO" = (/turf/unsimulated/floor{tag = "icon-arrival (SOUTHWEST)"; icon_state = "arrival"; dir = 10},/area/awaymission/box2550Away/security) +"bP" = (/turf/unsimulated/shuttle/wall{dir = 4; icon_state = "wall_space"},/area) +"bQ" = (/turf/unsimulated/shuttle/wall{icon_state = "wall_space"},/area) "bR" = (/obj/structure/shuttle/engine/propulsion{dir = 2; icon_state = "propulsion_l"; tag = "icon-burst_s"},/turf/space,/area) "bS" = (/obj/structure/shuttle/engine/propulsion{dir = 2; icon_state = "propulsion_r"; tag = "icon-burst_s"},/turf/space,/area) -"bT" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall_space"},/area) -"bU" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"bV" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"bT" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{tag = "icon-warning (EAST)"; icon_state = "warning"; dir = 4},/area/awaymission/box2550Away/security) +"bU" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"bV" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) "bW" = (/obj/structure/grille,/turf/space,/area) -"bX" = (/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area) +"bX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) "bY" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area) -"bZ" = (/turf/simulated/wall,/area/awaymission/box2550Away/maint) -"ca" = (/turf/simulated/wall,/area/awaymission/box2550Away/security) -"cb" = (/obj/structure/rack{dir = 1},/obj/item/clothing/head/helmet/swat{desc = "A helmet used in special operations."; name = "SWAT helmet"},/obj/item/clothing/gloves/combat,/obj/item/clothing/shoes/swat{desc = "Operative gear for special circumstances."},/obj/item/clothing/suit/armor/swat{desc = "A powerful suit of reinforced armor."; name = "SWAT suit"},/obj/item/weapon/shield/riot,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cc" = (/obj/structure/rack{dir = 1},/obj/item/clothing/gloves/combat,/obj/item/clothing/shoes/swat{desc = "Operative gear for special circumstances."},/obj/item/clothing/suit/armor/swat{desc = "A powerful suit of reinforced armor."; name = "SWAT suit"},/obj/item/clothing/head/helmet/swat{desc = "A helmet used in special operations."; name = "SWAT helmet"},/obj/item/weapon/shield/riot,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cd" = (/obj/machinery/flasher/portable,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"ce" = (/obj/structure/computerframe,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cf" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/machinery/door_control{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -2; pixel_y = 2; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cg" = (/obj/machinery/vending/security,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"ch" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"ci" = (/obj/item/weapon/extinguisher,/obj/item/device/radio/intercom{dir = 1; pixel_y = 23; frequency = 1447; broadcasting = 1},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cj" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"ck" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"cl" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"cm" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"cn" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"co" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cp" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cq" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cr" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cs" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/handcuffs/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"ct" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/machinery/recharger,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"cv" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"cw" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"cx" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"cy" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/machinery/door_control{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -2; pixel_y = 2; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cz" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/device/assembly/timer,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cA" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/radio,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cB" = (/obj/structure/closet/box2550away/red,/obj/effect/landmark/corpse/away/box2550/sec,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"cD" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"cE" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/stamp/hos,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cF" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cG" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cH" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cI" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/paper_bin,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cJ" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/clothing/glasses/sunglasses/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cK" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"cL" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = -27},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cM" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; tag = "icon-shock"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/security) -"cN" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTHEAST)"; icon_state = "rwindow"; dir = 5},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"cO" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp,/obj/machinery/door/window/southleft{name = "Armory Delivery"; req_access_txt = "1"},/obj/machinery/door/window/southleft{dir = 1; name = "Armory Delivery"; req_access_txt = "3"},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cP" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTHEAST)"; icon_state = "rwindow"; dir = 5},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"cQ" = (/obj/machinery/door/airlock/security{name = "Warden"; req_access_txt = "3"},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cR" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/paper/sop,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cS" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/flash/box2550away,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"cT" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/awaymission/box2550Away/security) -"cU" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/floor{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/awaymission/box2550Away/security) -"cV" = (/obj/machinery/door/window{base_state = "right"; dir = 8; icon = 'icons/obj/doors/windoor.dmi'; icon_state = "right"; name = "Head of Security"; req_access_txt = "19"},/turf/simulated/floor{tag = "icon-redcorner (EAST)"; icon_state = "redcorner"; dir = 4},/area/awaymission/box2550Away/security) -"cW" = (/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/box2550Away/security) -"cX" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"cY" = (/obj/structure/sign/securearea{tag = "icon-space"; name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/security) -"cZ" = (/turf/simulated/floor{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/awaymission/box2550Away/security) -"da" = (/turf/simulated/floor{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/awaymission/box2550Away/security) -"db" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/machinery/recharger,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dc" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/device/radio,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dd" = (/obj/structure/rack{dir = 8},/obj/item/weapon/storage/box/trackimp{pixel_x = -1},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"de" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"df" = (/obj/structure/closet/secure_closet/box2550away/hos,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dg" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/security) -"dh" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"di" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; location = "Warden"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/security) -"dj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/secure_closet/box2550away/security,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dk" = (/obj/structure/closet/secure_closet/box2550away/security,/obj/structure/disposalpipe/junction{dir = 0; icon_state = "pipe-y"},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dl" = (/obj/structure/closet/secure_closet/box2550away/security,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dm" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dn" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"do" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"dp" = (/turf/simulated/floor{icon_state = "corner_northwest"; tag = "icon-corner_northwest"},/area/awaymission/box2550Away/security) -"dq" = (/obj/structure/computerframe{anchored = 1; req_access_txt = "1"},/turf/simulated/floor{icon_state = "caution_north"; tag = "icon-caution_north"},/area/awaymission/box2550Away/security) -"dr" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/machinery/door/window/southleft{name = "Security"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) -"ds" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/machinery/door/window/southright{name = "Security"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) -"dt" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"du" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dv" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dw" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"dx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dy" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dz" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) -"dA" = (/obj/machinery/door/airlock/external{name = "Brig Airlock"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"dB" = (/turf/simulated/floor{tag = "icon-caution_west"; icon_state = "caution_west"},/area/awaymission/box2550Away/security) -"dC" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/security) -"dD" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) -"dE" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) -"dF" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) -"dG" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/awaymission/box2550Away/security) -"dH" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"dI" = (/turf/simulated/floor{tag = "icon-corner_west"; icon_state = "corner_west"},/area/awaymission/box2550Away/security) -"dJ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dK" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"dL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"dM" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell1"; name = "Brig Cell 1"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/security) -"dN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"dO" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell2"; name = "Brig Cell 2"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) -"dP" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell3"; name = "Brig Cell 3"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) -"dQ" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell4"; name = "Brig Cell 4"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) -"dR" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell5"; name = "Brig Cell 5"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) -"dS" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell6"; name = "Brig Cell 6"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) -"dT" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell7"; name = "Brig Cell 7"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) -"dU" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell8"; name = "Brig Cell 8"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) -"dV" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dW" = (/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) -"dX" = (/obj/structure/stool{pixel_y = 8},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"dY" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) -"dZ" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor,/area/awaymission/box2550Away/security) -"ea" = (/obj/structure/stool{pixel_y = 8},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) -"eb" = (/obj/machinery/flasher{id = "cell1"; pixel_x = -24},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"ec" = (/obj/machinery/flasher{id = "cell2"; pixel_x = -24},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"ed" = (/obj/machinery/flasher{id = "cell3"; pixel_x = -24},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"ee" = (/obj/machinery/flasher{id = "cell4"; pixel_x = -24},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) -"ef" = (/obj/machinery/flasher{id = "cell5"; pixel_x = -24},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) -"eg" = (/obj/machinery/flasher{id = "cell6"; pixel_x = -24},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) -"eh" = (/obj/machinery/flasher{id = "cell7"; pixel_x = -24},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) -"ei" = (/obj/machinery/flasher{id = "cell8"; pixel_x = -24},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) -"ej" = (/obj/structure/sign/securearea{tag = "icon-space"; name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"},/turf/simulated/wall,/area/awaymission/box2550Away/maint) -"ek" = (/obj/item/weapon/bedsheet,/obj/structure/stool/bed,/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) -"el" = (/obj/structure/closet/secure_closet/brig{name = "Brig Locker 1"; id = 1},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"em" = (/obj/structure/closet/secure_closet/brig{name = "Brig Locker 2"; id = 2},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"en" = (/obj/structure/closet/secure_closet/brig{name = "Brig Locker 3"; id = 3},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"eo" = (/obj/structure/closet/secure_closet/brig{name = "Brig Locker 4"; id = 4},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) -"ep" = (/obj/structure/closet/secure_closet/brig{id = 4; name = "Brig Locker 5"},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"eq" = (/obj/structure/closet/secure_closet/brig{id = 3; name = "Brig Locker 6"},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) -"er" = (/obj/structure/closet/secure_closet/brig{id = 2; name = "Brig Locker 7"},/turf/simulated/floor,/area/awaymission/box2550Away/security) -"es" = (/obj/structure/closet/secure_closet/brig{id = 1; name = "Brig Locker 8"},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) -"et" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"eu" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"ev" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"ew" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"ex" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"ey" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"ez" = (/obj/machinery/door/window/southleft{name = "Security"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/security) -"eA" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"eB" = (/obj/machinery/door/window/southright{name = "Security"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/security) -"eC" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"eD" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"eE" = (/turf/simulated/floor{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/awaymission/box2550Away/general) -"eF" = (/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/general) -"eG" = (/turf/simulated/floor{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/awaymission/box2550Away/general) -"eH" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"eI" = (/turf/simulated/floor,/area/awaymission/box2550Away/general) -"eJ" = (/turf/simulated/floor{tag = "icon-redcorner (NORTH)"; icon_state = "redcorner"; dir = 1},/area/awaymission/box2550Away/general) -"eK" = (/obj/machinery/bot/secbot/beepsky,/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=EVA"; location = "Security"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"eL" = (/turf/simulated/floor{tag = "icon-redcorner (EAST)"; icon_state = "redcorner"; dir = 4},/area/awaymission/box2550Away/general) -"eM" = (/obj/structure/closet/emcloset,/turf/simulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/general) -"eN" = (/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/general) -"eO" = (/obj/structure/noticeboard{name = "Wanted List"; desc = "A board for pinning important bounty information."; pixel_x = 1; pixel_y = -27},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/general) -"eP" = (/obj/structure/closet/emcloset,/turf/simulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/general) +"bZ" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell7"; name = "Brig Cell 7"; req_access_txt = "1"},/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"ca" = (/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/security) +"cb" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell8"; name = "Brig Cell 8"; req_access_txt = "1"},/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"cc" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"cd" = (/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"ce" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"cf" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell1"; name = "Brig Cell 1"; req_access_txt = "1"},/turf/unsimulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/security) +"cg" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell2"; name = "Brig Cell 2"; req_access_txt = "1"},/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"ch" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"ci" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell5"; name = "Brig Cell 5"; req_access_txt = "1"},/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"cj" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell6"; name = "Brig Cell 6"; req_access_txt = "1"},/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"ck" = (/turf/unsimulated/floor{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/awaymission/box2550Away/security) +"cl" = (/turf/unsimulated/floor{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/awaymission/box2550Away/security) +"cm" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell4"; name = "Brig Cell 4"; req_access_txt = "1"},/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"cn" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell3"; name = "Brig Cell 3"; req_access_txt = "1"},/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"co" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"cp" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"cq" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/security) +"cr" = (/turf/unsimulated/floor{tag = "icon-warning (SOUTHWEST)"; icon_state = "warning"; dir = 10},/area/awaymission/box2550Away/security) +"cs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/security) +"ct" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/awaymission/box2550Away/security) +"cu" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) +"cv" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/unsimulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) +"cw" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"cx" = (/obj/machinery/door/airlock/external{name = "Brig Airlock"; req_access_txt = "1"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"cy" = (/turf/unsimulated/floor{tag = "icon-warning (WEST)"; icon_state = "warning"; dir = 8},/area/awaymission/box2550Away/security) +"cz" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/turf/unsimulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) +"cA" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"cB" = (/turf/unsimulated/wall/other,/area/awaymission/box2550Away/maint) +"cC" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/disposalpipe/segment,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"cD" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"cE" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"cF" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"cG" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"cH" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"cI" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor{tag = "icon-warning (NORTH)"; icon_state = "warning"; dir = 1},/area/awaymission/box2550Away/security) +"cJ" = (/turf/unsimulated/floor{tag = "icon-warning (NORTHWEST)"; icon_state = "warning"; dir = 9},/area/awaymission/box2550Away/security) +"cK" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/machinery/door/window/southright{name = "Security"; req_access_txt = "1"},/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) +"cL" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/machinery/door/window/southleft{name = "Security"; req_access_txt = "1"},/turf/unsimulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"cM" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"cN" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"cO" = (/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/maint) +"cP" = (/obj/structure/closet/secure_closet/box2550away/security,/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"cQ" = (/obj/structure/closet/secure_closet/box2550away/security,/obj/structure/disposalpipe/junction{dir = 0; icon_state = "pipe-y"},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"cR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/secure_closet/box2550away/security,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"cS" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"cT" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"cU" = (/obj/structure/sign/securearea{tag = "icon-space"; name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/security) +"cV" = (/obj/structure/closet/secure_closet/box2550away/hos,/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"cW" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/security) +"cX" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"cY" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/device/radio,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"cZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/machinery/recharger,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"da" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"db" = (/obj/structure/rack{dir = 8},/obj/item/weapon/storage/box/trackimp{pixel_x = -1},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"dc" = (/turf/unsimulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/box2550Away/security) +"dd" = (/obj/machinery/door/window{base_state = "right"; dir = 8; icon = 'icons/obj/doors/windoor.dmi'; icon_state = "right"; name = "Head of Security"; req_access_txt = "19"},/turf/unsimulated/floor{tag = "icon-redcorner (EAST)"; icon_state = "redcorner"; dir = 4},/area/awaymission/box2550Away/security) +"de" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"df" = (/obj/structure/closet{name = "Evidence Closet"},/turf/unsimulated/floor{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/awaymission/box2550Away/security) +"dg" = (/obj/structure/closet/wardrobe/orange,/turf/unsimulated/floor{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/awaymission/box2550Away/security) +"dh" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"di" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"dj" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/flash/box2550away,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"dk" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/paper/sop,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"dl" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = -27},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"dm" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; tag = "icon-shock"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/security) +"dn" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp,/obj/machinery/door/window/southleft{name = "Armory Delivery"; req_access_txt = "1"},/obj/machinery/door/window/southleft{dir = 1; name = "Armory Delivery"; req_access_txt = "3"},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"do" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTHEAST)"; icon_state = "rwindow"; dir = 5},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"dp" = (/obj/machinery/door/airlock/security{name = "Warden"; req_access_txt = "3"},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"dq" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTHEAST)"; icon_state = "rwindow"; dir = 5},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"dr" = (/obj/machinery/vending/security,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"ds" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/clothing/glasses/sunglasses/box2550away,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"dt" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/paper_bin,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"du" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/stamp/hos,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"dv" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"dw" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"dx" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"dy" = (/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"dz" = (/turf/unsimulated/floor{tag = "icon-redcorner (NORTH)"; icon_state = "redcorner"; dir = 1},/area/awaymission/box2550Away/general) +"dA" = (/turf/unsimulated/floor{tag = "icon-redcorner (EAST)"; icon_state = "redcorner"; dir = 4},/area/awaymission/box2550Away/general) +"dB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"dC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"dD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"dE" = (/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/general) +"dF" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/general) +"dG" = (/obj/structure/noticeboard{name = "Wanted List"; desc = "A board for pinning important bounty information."; pixel_x = 1; pixel_y = -27},/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/general) +"dH" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/general) +"dI" = (/obj/machinery/bot/secbot/beepsky,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"dJ" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"dK" = (/turf/unsimulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/general) +"dL" = (/turf/unsimulated/floor{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/awaymission/box2550Away/general) +"dM" = (/turf/unsimulated/floor{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/awaymission/box2550Away/general) +"dN" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"dO" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"dP" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"dQ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"dR" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"dS" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"dT" = (/obj/machinery/door/window/southleft{name = "Security"; req_access_txt = "1"},/turf/unsimulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/security) +"dU" = (/obj/machinery/door/window/southright{name = "Security"; req_access_txt = "1"},/turf/unsimulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/security) +"dV" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access_txt = "13"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"dW" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"dX" = (/obj/item/weapon/bedsheet,/obj/structure/stool/bed,/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"dY" = (/obj/structure/closet/secure_closet/brig{name = "Brig Locker 1"; id = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"dZ" = (/obj/structure/sign/securearea{tag = "icon-space"; name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/maint) +"ea" = (/obj/structure/closet/secure_closet/brig{name = "Brig Locker 4"; id = 4},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"eb" = (/obj/structure/closet/secure_closet/brig{name = "Brig Locker 3"; id = 3},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"ec" = (/obj/structure/closet/secure_closet/brig{name = "Brig Locker 2"; id = 2},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"ed" = (/obj/structure/closet/secure_closet/brig{id = 4; name = "Brig Locker 5"},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"ee" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"ef" = (/obj/structure/closet/secure_closet/brig{id = 3; name = "Brig Locker 6"},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"eg" = (/obj/structure/closet/secure_closet/brig{id = 2; name = "Brig Locker 7"},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eh" = (/obj/structure/closet/secure_closet/brig{id = 1; name = "Brig Locker 8"},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"ei" = (/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"ej" = (/obj/machinery/flasher{id = "cell3"; pixel_x = -24},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"ek" = (/obj/machinery/flasher{id = "cell4"; pixel_x = -24},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"el" = (/obj/machinery/flasher{id = "cell5"; pixel_x = -24},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"em" = (/obj/machinery/flasher{id = "cell6"; pixel_x = -24},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"en" = (/obj/machinery/flasher{id = "cell1"; pixel_x = -24},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eo" = (/obj/machinery/flasher{id = "cell2"; pixel_x = -24},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"ep" = (/obj/machinery/flasher{id = "cell8"; pixel_x = -24},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"eq" = (/obj/machinery/flasher{id = "cell7"; pixel_x = -24},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"er" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"es" = (/obj/structure/stool{pixel_y = 8},/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"et" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"eu" = (/obj/effect/decal/cleanable/cobweb,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"ev" = (/obj/structure/stool{pixel_y = 8},/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"ew" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"ex" = (/obj/structure/rack{dir = 1},/obj/item/clothing/gloves/combat,/obj/item/clothing/shoes/swat{desc = "Operative gear for special circumstances."; flags = null},/obj/item/weapon/shield/riot,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"ey" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"ez" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eA" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/handcuffs/box2550away,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eB" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/machinery/recharger,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"eD" = (/obj/structure/rack{dir = 1},/obj/item/clothing/head/helmet/swat{desc = "A helmet used in special operations."; name = "SWAT helmet"},/obj/item/clothing/gloves/combat,/obj/item/clothing/shoes/swat{desc = "Operative gear for special circumstances."; flags = null},/obj/item/clothing/suit/armor/swat{desc = "A powerful suit of reinforced armor."; name = "SWAT suit"},/obj/item/weapon/shield/riot,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eE" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/machinery/door_control{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -2; pixel_y = 2; req_access_txt = "19"},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eF" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"eG" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/device/assembly/timer,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eH" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/radio,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"eJ" = (/obj/structure/closet/box2550away/red,/obj/effect/landmark/corpse/away/box2550/sec,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eK" = (/obj/machinery/flasher/portable,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eL" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/machinery/door_control{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -2; pixel_y = 2; req_access_txt = "19"},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"eN" = (/obj/structure/reagent_dispensers/watertank,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"eO" = (/obj/item/weapon/extinguisher,/obj/item/device/radio/intercom{dir = 1; pixel_y = 23; frequency = 1447; broadcasting = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eP" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/firstaid/regular,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) "eQ" = (/obj/structure/lattice,/turf/space,/area/awaymission/box2550Away/solar) -"eR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"eS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"eT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"eU" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"eV" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) -"eW" = (/obj/structure/table,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"eX" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"eY" = (/turf/simulated/wall,/area/awaymission/box2550Away/general) -"eZ" = (/obj/item/weapon/bedsheet,/obj/structure/stool/bed,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"fa" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/general) -"fb" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/general) -"fc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"fd" = (/obj/structure/stool{pixel_y = 8},/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"fe" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 2; icon_state = "right"; name = "cabin door"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"ff" = (/obj/structure/sign/securearea{tag = "icon-space"; name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) -"fg" = (/obj/item/stack/tile/plasteel,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"fh" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"fi" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"fj" = (/obj/machinery/door/airlock/glass{name = "Male Living Quarters"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"fk" = (/obj/machinery/door/airlock/glass{name = "Female Living Quarters"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"fl" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"fm" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"fn" = (/obj/machinery/door/window/northleft{name = "cabin door"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"fo" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"fp" = (/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) -"fq" = (/turf/simulated/floor{icon_state = "bluecorner"},/area/awaymission/box2550Away/general) -"fr" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"fs" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"ft" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"fu" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"fv" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"fw" = (/obj/machinery/door/airlock/external{name = "Auxillary Solar Maintenance"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"fx" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"fy" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"eR" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor,/area/awaymission/box2550Away/security) +"eS" = (/obj/structure/reagent_dispensers/fueltank,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"eT" = (/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/medical) +"eU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"eV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"eW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"eX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"eY" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"eZ" = (/turf/unsimulated/floor{tag = "icon-warning (EAST)"; icon_state = "warning"; dir = 4},/area/awaymission/box2550Away/general) +"fa" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"fb" = (/turf/unsimulated/floor{dir = 8; icon_state = "escape"; tag = "icon-escape (WEST)"},/area/awaymission/box2550Away/general) +"fc" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"fd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"fe" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"ff" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"fg" = (/turf/unsimulated/floor{dir = 1; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"fh" = (/turf/unsimulated/wall/other,/area/awaymission/box2550Away/general) +"fi" = (/obj/machinery/door/window/northright{tag = "icon-right"; icon_state = "right"; dir = 2},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"fj" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/general) +"fk" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/general) +"fl" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/obj/structure/window/basic{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"fm" = (/obj/machinery/door/window/northleft{tag = "icon-left"; icon_state = "left"; dir = 2},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"fn" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"fo" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/maint) +"fp" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/general) +"fq" = (/obj/structure/computerframe{icon = 'icons/obj/computer.dmi'; icon_state = "shuttle0"; name = "Shuttle Console"},/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"fr" = (/turf/simulated/shuttle/wall{dir = 0; icon_state = "wall_floor"},/area/awaymission/box2550Away/general) +"fs" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"ft" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"fu" = (/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/general) +"fv" = (/turf/unsimulated/floor{icon_state = "warning"; tag = "icon-warning (SOUTH)"},/area/awaymission/box2550Away/general) +"fw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"fx" = (/turf/unsimulated/floor{tag = "icon-warning (NORTH)"; icon_state = "warning"; dir = 1},/area/awaymission/box2550Away/general) +"fy" = (/turf/unsimulated/floor{tag = "icon-warning (NORTHWEST)"; icon_state = "warning"; dir = 9},/area/awaymission/box2550Away/general) "fz" = (/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area) -"fA" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"fB" = (/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"fC" = (/obj/machinery/bookbinder{pixel_y = 9},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"fD" = (/obj/item/device/radio/intercom{dir = 1; pixel_y = 20},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"fE" = (/obj/structure/table/reinforced,/obj/machinery/librarycomp{pixel_y = 8},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"fF" = (/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"fG" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"fH" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"fI" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"fJ" = (/obj/item/device/radio/intercom{broadcasting = 1; pixel_y = 20},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"fK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"fL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"fM" = (/obj/machinery/door/airlock{name = "Restrooms"; req_access_txt = "0"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"fN" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) -"fO" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/awaymission/box2550Away/general) -"fP" = (/obj/structure/rack,/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"fQ" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"fR" = (/obj/structure/table/reinforced,/obj/item/weapon/dice/d20,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"fS" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"fT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"fU" = (/turf/simulated/floor{tag = "icon-caution_south"; icon_state = "caution_south"},/area/awaymission/box2550Away/general) -"fV" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"fW" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"fX" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/storage) -"fY" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"fZ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"ga" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"gb" = (/obj/structure/sink{pixel_y = 20},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"gc" = (/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"gd" = (/obj/machinery/door/airlock{name = "Unit 1"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"ge" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal{density = 0; desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean."; dir = 8; icon = 'icons/obj/watercloset.dmi'; icon_state = "toilet00"; name = "toilet"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"gf" = (/obj/structure/rack{dir = 8},/obj/item/clothing/shoes/magboots,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"gg" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"gh" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/cell,/obj/item/weapon/pen{desc = "It writes upside down."; name = "Astronaut Pen"},/obj/item/weapon/paper,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"gi" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/machinery/camera/motion{c_tag = "EVA Storage"},/obj/item/clothing/head/welding,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"gj" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; tag = "icon-shock"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) -"gk" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"gl" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"gm" = (/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"gn" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"go" = (/obj/structure/bookcase,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"gp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"gq" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"gr" = (/turf/simulated/floor{tag = "icon-caution_west"; icon_state = "caution_west"},/area/awaymission/box2550Away/general) -"gs" = (/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/general) -"gt" = (/turf/simulated/floor{tag = "icon-corner_west"; icon_state = "corner_west"},/area/awaymission/box2550Away/general) -"gu" = (/obj/structure/computerframe,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"gv" = (/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"gw" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/device/flash/box2550away,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"gx" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/flash/box2550away,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"gy" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"gz" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"gA" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/machinery/cell_charger{pixel_y = 5},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"gB" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/aicard,/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"gC" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/circuitboard/olddoor,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"gD" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"gE" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"gF" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"gG" = (/obj/machinery/door/airlock{name = "Shower"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"gH" = (/turf/simulated/floor,/area/awaymission/box2550Away/command) -"gI" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"gJ" = (/obj/structure/rack{dir = 8},/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"gK" = (/obj/structure/closet/wardrobe/mixed,/obj/effect/landmark/corpse/away/box2550/det,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"gL" = (/obj/machinery/door/airlock{name = "Changing Room"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"gM" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"gN" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"gO" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"gP" = (/obj/structure/sink{pixel_y = 20},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"gQ" = (/obj/machinery/computer/arcade,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"gR" = (/obj/structure/table/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"gS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"gT" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"gU" = (/obj/structure/closet/emcloset,/turf/simulated/floor{tag = "icon-corner_west"; icon_state = "corner_west"},/area/awaymission/box2550Away/general) -"gV" = (/obj/structure/closet/emcloset,/turf/simulated/floor{tag = "icon-caution_south"; icon_state = "caution_south"},/area/awaymission/box2550Away/general) -"gW" = (/obj/machinery/vending/coffee,/turf/simulated/floor{tag = "icon-corner_east"; icon_state = "corner_east"},/area/awaymission/box2550Away/general) -"gX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"gY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"gZ" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"ha" = (/obj/machinery/power/terminal{tag = "icon-term (NORTH)"; icon_state = "term"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"hb" = (/obj/item/weapon/screwdriver{pixel_y = 16},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"hc" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"hd" = (/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"he" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"hf" = (/obj/machinery/gateway/centeraway,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"hg" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"hh" = (/obj/machinery/door/airlock{name = "Unit 2"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"hi" = (/obj/structure/rack{dir = 8},/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/mask/breath/box2550away,/obj/item/weapon/tank/jetpack,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"hj" = (/obj/structure/rack{dir = 4},/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/mask/breath/box2550away,/obj/item/weapon/tank/jetpack,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"hk" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"hl" = (/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"hm" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"hn" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"ho" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"hp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"hq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"hr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"fA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"fB" = (/turf/unsimulated/floor{tag = "icon-warning (WEST)"; icon_state = "warning"; dir = 8},/area/awaymission/box2550Away/general) +"fC" = (/turf/unsimulated/floor{dir = 4; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"fD" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"fE" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (NORTH)"; icon_state = "reinf_tabledir"; dir = 1},/obj/item/weapon/paper/pamphlet/box2550awayInfo,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"fF" = (/obj/structure/table/reinforced{dir = 5; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/paper/pamphlet/box2550awayInfo,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"fG" = (/obj/item/weapon/paper/crumpled/bloody{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
A body lies forever lost, stricken soundly from the past. Travel south to find the dirge, starting from the concierge.
HONK!
"; layer = 3; name = "Old Note #2"; pixel_y = 4},/obj/structure/table/reinforced{dir = 9; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/paper/pamphlet/box2550awayInfo,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"fH" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"fI" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; tag = "icon-shock"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/command) +"fJ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"fK" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"fL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"fM" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"fN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"fO" = (/obj/machinery/door/airlock/maintenance{name = "Autolathe Storage"; req_access_txt = "12"},/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"fP" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"fQ" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 2; icon_state = "right"; tag = "icon-left"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"fR" = (/turf/unsimulated/floor{icon_state = "escape"; tag = "icon-escape"},/area/awaymission/box2550Away/general) +"fS" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"fT" = (/turf/unsimulated/floor{dir = 8; icon_state = "escapecorner"; tag = "icon-escapecorner (WEST)"},/area/awaymission/box2550Away/general) +"fU" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"fV" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"fW" = (/turf/unsimulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"fX" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"fY" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"fZ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"ga" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"gb" = (/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"gc" = (/turf/unsimulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/security) +"gd" = (/obj/item/weapon/paper,/obj/structure/table/reinforced{tag = "icon-reinf_tabledir"; icon_state = "reinf_tabledir"},/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"ge" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHWEST)"; icon_state = "reinf_tabledir"; dir = 10},/obj/item/weapon/pen,/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"gf" = (/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"gg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"gh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"gi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"gj" = (/obj/machinery/vending/snack{active = 0; stat = 1},/obj/item/weapon/paper{anchored = 0; info = "If you're hungry, it's time to go home."; name = "Out of Order"},/turf/unsimulated/floor{tag = "icon-warning (NORTHWEST)"; icon_state = "warning"; dir = 9},/area/awaymission/box2550Away/general) +"gk" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{tag = "icon-warning (NORTHEAST)"; icon_state = "warning"; dir = 5},/area/awaymission/box2550Away/general) +"gl" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{tag = "icon-warning (NORTH)"; icon_state = "warning"; dir = 1},/area/awaymission/box2550Away/general) +"gm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"gn" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHEAST)"; icon_state = "reinf_tabledir"; dir = 6},/obj/machinery/recharger,/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"go" = (/obj/item/weapon/crowbar,/obj/item/device/radio/intercom{pixel_y = -29},/obj/item/device/flash/box2550away,/turf/unsimulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/security) +"gp" = (/turf/unsimulated/wall/other,/area/awaymission/box2550Away/command) +"gq" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"gr" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"gs" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"gt" = (/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"gu" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"gv" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"gw" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"gx" = (/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "28"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"gy" = (/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"gz" = (/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"gA" = (/obj/machinery/door/airlock/glass{name = "Robotics"; req_access_txt = "29"},/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"gB" = (/obj/item/weapon/extinguisher,/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"gC" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"gD" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{dir = 8; icon_state = "escape"; tag = "icon-escape (WEST)"},/area/awaymission/box2550Away/general) +"gE" = (/obj/structure/stool{dir = 1},/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"gF" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/box2550Away/general) +"gG" = (/obj/structure/closet/wardrobe/mixed,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"gH" = (/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/general) +"gI" = (/obj/machinery/portable_atmospherics/scrubber,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"gJ" = (/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"gK" = (/obj/structure/closet/secure_closet/personal,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"gL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"gM" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"gN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"gO" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"gP" = (/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"gQ" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"gR" = (/obj/item/weapon/wrench,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"gS" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"gT" = (/obj/structure/kitchenspike,/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"gU" = (/obj/structure/closet/secure_closet/box2550away/meat,/obj/effect/landmark/corpse/away/box2550/lawyer,/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"gV" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"gW" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/machinery/cell_charger,/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"gX" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/flash/box2550away,/obj/item/device/flash/box2550away,/obj/item/device/flash/box2550away,/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"gY" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/multitool,/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"gZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"ha" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{tag = "icon-warning (NORTH)"; icon_state = "warning"; dir = 1},/area/awaymission/box2550Away/general) +"hb" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{tag = "icon-warning (NORTHEAST)"; icon_state = "warning"; dir = 5},/area/awaymission/box2550Away/general) +"hc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"hd" = (/obj/structure/window/reinforced,/obj/machinery/door/window/westleft{base_state = "left"; dir = 4; icon_state = "left"; name = "Robotics Delivery"; req_access_txt = "29"},/turf/unsimulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/box2550Away/medical) +"he" = (/obj/structure/window/reinforced,/obj/machinery/door/window/eastright{base_state = "right"; dir = 8; icon_state = "right"; name = "Robotics Delivery"; req_access_txt = "34"},/turf/unsimulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/medical) +"hf" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/crowbar,/obj/item/device/assembly/prox_sensor,/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"hg" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"hh" = (/obj/structure/window/reinforced,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/box2550Away/general) +"hi" = (/turf/unsimulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/general) +"hj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"hk" = (/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/storage) +"hl" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"hm" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"hn" = (/obj/machinery/vending/snack{active = 0; stat = 1},/obj/item/weapon/paper{anchored = 0; info = "If you're hungry, it's time to go home."; name = "Out of Order"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"ho" = (/obj/machinery/vending/coffee{active = 0; stat = 1},/obj/item/weapon/paper{anchored = 0; info = "If you're thirsty, it's time to go home."; name = "Out of Order"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"hp" = (/obj/structure/reagent_dispensers/fueltank,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"hq" = (/obj/structure/reagent_dispensers/watertank,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"hr" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1359; pixel_x = -30},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) "hs" = (/obj/structure/lattice,/turf/space,/area/awaymission/box2550Away/general) -"ht" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"hu" = (/obj/structure/rack{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"hv" = (/obj/structure/rack{dir = 8},/obj/item/weapon/circuitboard/cloning,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"hw" = (/obj/structure/rack{dir = 4},/obj/item/weapon/circuitboard/secure_data,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"hx" = (/obj/structure/rack{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"hy" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"hz" = (/obj/machinery/gateway,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"hA" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"hB" = (/obj/machinery/door/airlock/command{icon_state = "door_closed"; locked = 0; name = "E.V.A."; req_access_txt = "18"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"hC" = (/obj/structure/rack{dir = 8},/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/mask/breath/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"hD" = (/obj/structure/rack{dir = 4},/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/mask/breath/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"hE" = (/obj/structure/dispenser,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"hF" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal{density = 0; desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean."; dir = 4; icon = 'icons/obj/watercloset.dmi'; icon_state = "toilet00"; name = "toilet"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"hG" = (/obj/machinery/door/airlock{name = "Unit 1"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"hH" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/simulated/wall,/area/awaymission/box2550Away/general) -"hI" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"hJ" = (/obj/machinery/door/window/eastright,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"hK" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"hL" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"hM" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"hN" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; pixel_x = 30},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"ht" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"hu" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"hv" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/extinguisher,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"hw" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/clothing/glasses/sunglasses/box2550away,/obj/item/weapon/storage/box/PDAs,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"hx" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/flash/box2550away,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"hy" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/assembly/signaler,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"hz" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/device/aicard,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"hA" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/storage/box/box2550away/ids,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"hB" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"hC" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"hD" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 2; icon_state = "right"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"hE" = (/obj/machinery/door/window/northleft{base_state = "left"; dir = 2; icon_state = "left"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"hF" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"hG" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"hH" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"hI" = (/obj/machinery/box2550away/fake_status_display,/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/general) +"hJ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/maint) +"hK" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/maint) +"hL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"hM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"hN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) "hO" = (/turf/simulated/shuttle/wall{dir = 8; icon_state = "wall_space"},/area/awaymission/box2550Away/general) "hP" = (/turf/simulated/shuttle/wall,/area/awaymission/box2550Away/general) "hQ" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) -"hR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"hS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"hR" = (/obj/machinery/door/window/eastright{dir = 2; name = "Hydroponics Delivery"; req_access_txt = "34"},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/general) +"hS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) "hT" = (/turf/simulated/shuttle/wall{dir = 1; icon_state = "wall_space"},/area/awaymission/box2550Away/general) -"hU" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Auxiliary Solar Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"hV" = (/obj/machinery/vending/assist,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"hW" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; pixel_y = 25},/obj/item/weapon/extinguisher,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"hX" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/wirecutters,/obj/item/device/flashlight,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"hY" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/t_scanner,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"hZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/assembly/igniter{pixel_x = -8; pixel_y = -4},/obj/item/device/assembly/igniter,/obj/item/weapon/screwdriver{pixel_y = 16},/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"ia" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"ib" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/multitool,/obj/machinery/cell_charger,/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"ic" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"id" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"ie" = (/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"if" = (/obj/item/weapon/cell,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"ig" = (/obj/structure/rack{dir = 4},/obj/item/weapon/circuitboard/card,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"ih" = (/obj/structure/rack{dir = 4},/obj/item/weapon/circuitboard/security,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"ii" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = 27},/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"ij" = (/obj/machinery/door/airlock{name = "Unit 3"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"ik" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"il" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/crowbar,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"im" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/extinguisher,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"in" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) -"io" = (/obj/machinery/hydroponics,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"ip" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"iq" = (/obj/structure/closet/crate/hydroponics/prespawned,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"ir" = (/obj/structure/closet/emcloset,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"is" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"it" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"iu" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"iv" = (/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"iw" = (/obj/structure/closet,/obj/effect/landmark/corpse/away/box2550/clown,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"hU" = (/obj/machinery/door/airlock/glass{req_access_txt = "35"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"hV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"hW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"hX" = (/obj/machinery/door/airlock/maintenance{density = 0; emagged = 1; explosion_resistance = 0; icon_state = "door0"; opacity = 0; operating = -1; req_access_txt = "12"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"hY" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/maint) +"hZ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"ia" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"ib" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"ic" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor{tag = "icon-blue (WEST)"; icon_state = "blue"; dir = 8},/area/awaymission/box2550Away/general) +"id" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"ie" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"if" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"ig" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor{tag = "icon-blue (EAST)"; icon_state = "blue"; dir = 4},/area/awaymission/box2550Away/general) +"ih" = (/obj/machinery/box2550away/fake_status_display{pixel_y = 2},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/maint) +"ii" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"ij" = (/obj/machinery/door/airlock/maintenance{name = "Primary Tool Storage"; req_access_txt = "12"},/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"ik" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"il" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"im" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"in" = (/turf/unsimulated/shuttle/floor,/area/awaymission/box2550Away/general) +"io" = (/turf/unsimulated/shuttle/wall,/area/awaymission/box2550Away/general) +"ip" = (/turf/unsimulated/shuttle/wall{dir = 1; icon_state = "wall_floor"},/area/awaymission/box2550Away/general) +"iq" = (/turf/unsimulated/shuttle/wall{icon_state = "wall_space"},/area/awaymission/box2550Away/general) +"ir" = (/obj/machinery/computer/arcade,/turf/unsimulated/shuttle/floor,/area/awaymission/box2550Away/general) +"is" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/unsimulated/shuttle/floor,/area/awaymission/box2550Away/general) +"it" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"iu" = (/obj/structure/bookcase{name = "Forbidden Knowledge"},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"iv" = (/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"iw" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) "ix" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall_floor"},/area/awaymission/box2550Away/general) "iy" = (/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) -"iz" = (/obj/structure/closet/wardrobe/mixed,/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"iz" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) "iA" = (/obj/structure/shuttle/engine/propulsion{dir = 8; icon_state = "burst_r"},/turf/space,/area/awaymission/box2550Away/general) -"iB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"iC" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"iD" = (/obj/item/stack/rods{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"iE" = (/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"iF" = (/obj/item/weapon/storage/box/lights/tubes,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"iG" = (/obj/structure/rack{dir = 8},/obj/item/weapon/circuitboard/scan_consolenew,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"iH" = (/obj/structure/rack{dir = 4},/obj/item/weapon/circuitboard/teleporter,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"iI" = (/obj/structure/rack{dir = 8},/obj/item/weapon/circuitboard/arcade,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"iJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"iK" = (/obj/item/weapon/crowbar,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"iL" = (/obj/machinery/door/airlock/maintenance{name = "Bathroom Maintenance"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"iM" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"iN" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"iO" = (/obj/machinery/door/airlock{name = "Unit 2"},/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"iP" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"iQ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/awaymission/box2550Away/general) -"iR" = (/obj/structure/disposalpipe/junction,/turf/simulated/wall,/area/awaymission/box2550Away/general) -"iS" = (/obj/machinery/seed_extractor,/turf/simulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) -"iT" = (/obj/item/weapon/reagent_containers/glass/bucket{pixel_y = 6},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"iU" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"iV" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"iW" = (/obj/structure/closet,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"iX" = (/obj/structure/table/woodentable{tag = "icon-woodentable (WEST)"; icon_state = "woodentable"; dir = 8},/obj/item/weapon/paper,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"iY" = (/obj/structure/table/woodentable,/obj/machinery/librarycomp{pixel_y = 8},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"iZ" = (/obj/structure/stool{pixel_y = 8},/obj/item/device/radio/intercom{desc = "Read WGW through this."; dir = 1; name = "WGW intercom"; pixel_y = 20; prison_radio = 1},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"ja" = (/obj/machinery/libraryscanner{pixel_y = 4},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"jb" = (/obj/structure/bookcase{name = "Forbidden Knowledge"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"jc" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) -"jd" = (/obj/structure/shuttle/engine/heater{dir = 4; icon_state = "heater"; tag = "icon-heater (WEST)"},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/general) +"iB" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"iC" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 1; icon_state = "right"; name = "Hydroponics"; req_access_txt = "35"},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/general) +"iD" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"iE" = (/obj/machinery/hydroponics,/turf/unsimulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/general) +"iF" = (/turf/unsimulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/general) +"iG" = (/obj/machinery/hydroponics,/obj/structure/disposalpipe/segment,/turf/unsimulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/general) +"iH" = (/obj/structure/reagent_dispensers/watertank,/turf/unsimulated/floor{tag = "icon-green (SOUTHWEST)"; icon_state = "green"; dir = 10},/area/awaymission/box2550Away/general) +"iI" = (/obj/machinery/space_heater,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"iJ" = (/obj/item/weapon/extinguisher,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"iK" = (/turf/unsimulated/floor{dir = 9; icon_state = "blue"},/area/awaymission/box2550Away/general) +"iL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"iM" = (/turf/unsimulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/box2550Away/general) +"iN" = (/turf/unsimulated/floor{dir = 5; icon_state = "blue"},/area/awaymission/box2550Away/general) +"iO" = (/turf/unsimulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/storage) +"iP" = (/turf/unsimulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/storage) +"iQ" = (/obj/structure/reagent_dispensers/fueltank,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"iR" = (/obj/structure/table{dir = 4; icon_state = "table_horizontal"; pixel_y = 0},/obj/item/weapon/storage/belt/utility,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"iS" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/crowbar,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"iT" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/wrench,/obj/item/device/analyzer,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"iU" = (/obj/structure/reagent_dispensers/watertank,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"iV" = (/obj/structure/table{dir = 8; icon_state = "table_horizontal"; pixel_y = 0},/obj/item/weapon/crowbar,/obj/item/device/assembly/prox_sensor,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"iW" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/shuttle/floor,/area/awaymission/box2550Away/general) +"iX" = (/obj/structure/shuttle/engine/heater{dir = 4; icon_state = "heater"; tag = "icon-heater (WEST)"},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"iY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"iZ" = (/turf/unsimulated/floor{tag = "icon-L6"; icon_state = "L6"},/area/awaymission/box2550Away/general) +"ja" = (/turf/unsimulated/floor{tag = "icon-L4"; icon_state = "L4"},/area/awaymission/box2550Away/general) +"jb" = (/turf/unsimulated/floor{tag = "icon-L2"; icon_state = "L2"},/area/awaymission/box2550Away/general) +"jc" = (/turf/unsimulated/floor{tag = "icon-L16"; icon_state = "L16"},/area/awaymission/box2550Away/general) +"jd" = (/turf/unsimulated/floor{desc = "There is some old writing on this floor. You are barely able to read out a few lines from a tangled scribble.
Nameless Poet of Clown Planet
"; icon_state = "L14"; tag = "icon-L14"},/area/awaymission/box2550Away/general) "je" = (/obj/structure/shuttle/engine/propulsion{dir = 8},/turf/space,/area/awaymission/box2550Away/general) -"jf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"jg" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = 27},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"jh" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"ji" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/cable_coil{pixel_x = 2; pixel_y = -2},/obj/item/weapon/cable_coil,/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"jj" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"jk" = (/obj/machinery/door/airlock/maintenance{name = "Tech Storage"; req_access_txt = "23"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"jl" = (/obj/structure/rack{dir = 1},/obj/item/clothing/mask/breath/box2550away,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"jm" = (/obj/structure/table{dir = 9; icon_state = "tabledir"},/obj/item/weapon/cable_coil,/obj/item/weapon/cell,/obj/machinery/cell_charger,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"jn" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"jo" = (/turf/simulated/floor{icon_state = "bluecorner"},/area/awaymission/box2550Away/command) -"jp" = (/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/box2550Away/command) -"jq" = (/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/command) -"jr" = (/obj/structure/closet/crate/rcd,/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/command) -"js" = (/obj/item/stack/rods{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"jt" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/stack/sheet/rglass{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"ju" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/awaymission/box2550Away/maint) -"jv" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) -"jw" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"jx" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/paper/hydroponics,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"jy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"jz" = (/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"jA" = (/obj/machinery/door/window/westright,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"jB" = (/obj/structure/bookcase{name = "bookcase (Religious)"},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"jC" = (/obj/structure/bookcase{name = "bookcase (Adult)"},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"jD" = (/obj/structure/bookcase{name = "bookcase (Self Help)"},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"jE" = (/obj/structure/bookcase{name = "bookcase (Fiction)"},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"jF" = (/obj/structure/table/woodentable{tag = "icon-woodentable (WEST)"; icon_state = "woodentable"; dir = 8},/obj/item/weapon/paper_bin,/obj/item/weapon/paper,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"jG" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Private Study"; req_access_txt = "37"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"jH" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"jI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"jJ" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"jK" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/weldingtool,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"jL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"jM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"jN" = (/obj/machinery/door/airlock/command{icon_state = "door_closed"; locked = 0; name = "E.V.A."; req_access_txt = "18"},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"jO" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) -"jP" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) -"jQ" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"jR" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor{tag = "icon-blue (EAST)"; icon_state = "blue"; dir = 4},/area/awaymission/box2550Away/general) -"jS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"jT" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"jU" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"jV" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/turf/simulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) -"jW" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"jX" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"jY" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = -28},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"jZ" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"ka" = (/obj/structure/table/woodentable{dir = 10},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"kb" = (/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"kc" = (/obj/structure/table/woodentable{dir = 6},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"kd" = (/obj/machinery/door/window/northright{name = "library desk door"; req_access_txt = "37"},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"ke" = (/turf/simulated/shuttle/wall{dir = 1; icon_state = "wall_floor"},/area/awaymission/box2550Away/general) -"kf" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/wrench,/obj/item/device/analyzer,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"kg" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"kh" = (/obj/structure/table{dir = 8; icon_state = "table_horizontal"; pixel_y = 0},/obj/item/weapon/crowbar,/obj/item/device/assembly/prox_sensor,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"ki" = (/obj/structure/table{dir = 4; icon_state = "table_horizontal"; pixel_y = 0},/obj/item/weapon/storage/belt/utility,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"kj" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"kk" = (/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/storage) -"kl" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; location = "Tool Storage"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/storage) -"km" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/crowbar,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"kn" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"ko" = (/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/awaymission/box2550Away/general) -"kp" = (/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/box2550Away/general) -"kq" = (/turf/simulated/floor{dir = 1; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) -"kr" = (/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) -"ks" = (/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/awaymission/box2550Away/general) -"kt" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor{tag = "icon-green (SOUTHWEST)"; icon_state = "green"; dir = 10},/area/awaymission/box2550Away/general) -"ku" = (/obj/machinery/hydroponics,/turf/simulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/general) -"kv" = (/obj/machinery/hydroponics,/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/general) -"kw" = (/turf/simulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/general) -"kx" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"ky" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 1; icon_state = "right"; name = "Hydroponics"; req_access_txt = "35"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/general) -"kz" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"kA" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"kB" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"jf" = (/turf/unsimulated/floor{tag = "icon-L12"; icon_state = "L12"},/area/awaymission/box2550Away/general) +"jg" = (/turf/unsimulated/floor{tag = "icon-L10"; icon_state = "L10"},/area/awaymission/box2550Away/general) +"jh" = (/turf/unsimulated/floor{tag = "icon-L8"; icon_state = "L8"},/area/awaymission/box2550Away/general) +"ji" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"jj" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"jk" = (/obj/structure/closet/box2550away/red,/turf/unsimulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"jl" = (/obj/item/device/radio/intercom{broadcasting = 1; pixel_y = 20},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"jm" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"jn" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) +"jo" = (/turf/unsimulated/floor{tag = "icon-L1"; icon_state = "L1"},/area/awaymission/box2550Away/general) +"jp" = (/turf/unsimulated/floor{tag = "icon-L5"; icon_state = "L5"},/area/awaymission/box2550Away/general) +"jq" = (/turf/unsimulated/floor{tag = "icon-L3"; icon_state = "L3"},/area/awaymission/box2550Away/general) +"jr" = (/turf/unsimulated/floor{tag = "icon-L15"; icon_state = "L15"},/area/awaymission/box2550Away/general) +"js" = (/turf/unsimulated/floor{tag = "icon-L9"; icon_state = "L9"},/area/awaymission/box2550Away/general) +"jt" = (/turf/unsimulated/floor{tag = "icon-L7"; icon_state = "L7"},/area/awaymission/box2550Away/general) +"ju" = (/turf/unsimulated/floor{desc = "There is some old writing on this floor. You are barely able to read out a few lines from a tangled scribble.
You have my salutations for getting this far--no more games. The treasure you seek is located inside the AI Satellite but you will need the right eyes to find it. Best of luck to you, friend.
HONK!
"; icon_state = "L13"; name = "floor"; tag = "icon-L13"},/area/awaymission/box2550Away/general) +"jv" = (/turf/unsimulated/floor{tag = "icon-L11"; icon_state = "L11"},/area/awaymission/box2550Away/general) +"jw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"jx" = (/obj/machinery/door/unpowered/shuttle,/turf/unsimulated/shuttle/floor,/area/awaymission/box2550Away/general) +"jy" = (/turf/unsimulated/shuttle/wall{dir = 4; icon_state = "wall_space"},/area/awaymission/box2550Away/general) +"jz" = (/obj/structure/closet/secure_closet/box2550away/security,/turf/unsimulated/floor{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/awaymission/box2550Away/security) +"jA" = (/obj/machinery/computer/card,/turf/unsimulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) +"jB" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{tag = "icon-warning (NORTHWEST)"; icon_state = "warning"; dir = 9},/area/awaymission/box2550Away/general) +"jC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"jD" = (/obj/machinery/box2550away/fake_status_display/ai{pixel_y = -28},/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"jE" = (/turf/unsimulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/box2550Away/command) +"jF" = (/obj/structure/table,/obj/item/weapon/storage/secure/briefcase,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"jG" = (/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/command) +"jH" = (/obj/item/weapon/paper/crumpled/bloody{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
No great mystery to unfold, thy next clue is so very near to hold. Pay close attention, for what you seek is thy own reflection.
HONK!
"; layer = 3; name = "Old Note #8"},/obj/structure/grille,/turf/unsimulated/floor/plating,/area) +"jI" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"jJ" = (/obj/item/weapon/paper/crumpled/bloody{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
Far away it sways so seldom, metal cage of ruin and boredom. In the midst of red and foil, one of six shall feed and toil.
HONK!
"; layer = 3; name = "Old Note #9"},/obj/structure/grille,/turf/unsimulated/floor/plating,/area) +"jK" = (/turf/unsimulated/floor{icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"jL" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/machinery/recharger,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"jM" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/pinpointer,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"jN" = (/obj/item/weapon/storage/photo_album{pixel_y = -10},/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/camera,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"jO" = (/turf/unsimulated/floor{tag = "icon-carpetside (NORTHWEST)"; icon_state = "carpetside"; dir = 9},/area/awaymission/box2550Away/security) +"jP" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{tag = "icon-carpetside (NORTH)"; icon_state = "carpetside"; dir = 1},/area/awaymission/box2550Away/security) +"jQ" = (/obj/machinery/door/airlock/security{name = "Detective"; req_access_txt = "4"},/turf/unsimulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"jR" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"jS" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/pen,/obj/item/weapon/hand_labeler,/obj/item/weapon/paper,/turf/unsimulated/floor{tag = "icon-carpetside (NORTH)"; icon_state = "carpetside"; dir = 1},/area/awaymission/box2550Away/security) +"jT" = (/obj/item/weapon/cigbutt,/turf/unsimulated/floor{tag = "icon-carpetside (NORTHEAST)"; icon_state = "carpetside"; dir = 5},/area/awaymission/box2550Away/security) +"jU" = (/obj/structure/closet/crate,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"jV" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/general) +"jW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"jX" = (/turf/unsimulated/wall/other,/area/awaymission/box2550Away/medical) +"jY" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"jZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/structure/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/structure/window{icon_state = "rwindow"; dir = 1; reinf = 1},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"ka" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"kb" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/maint) +"kc" = (/obj/item/weapon/storage/box/mousetraps,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"kd" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"ke" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"kf" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"kg" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Bridge Delivery"; req_access_txt = "34"},/turf/unsimulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/command) +"kh" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Bridge Delivery"; req_access_txt = "19"},/turf/unsimulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/box2550Away/command) +"ki" = (/obj/item/trash/cheesie,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"kj" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"kk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"kl" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = -27},/obj/structure/closet/secure_closet/box2550away/det,/turf/unsimulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"km" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"kn" = (/obj/structure/rack{dir = 8},/obj/item/weapon/storage/briefcase,/turf/unsimulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"ko" = (/obj/machinery/box2550away/fake_status_display{pixel_x = -1},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/command) +"kp" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access_txt = "20"},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"kq" = (/obj/machinery/turretid{pixel_x = -24},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"kr" = (/obj/machinery/door/airlock{name = "Unit 1"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"ks" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal/box2550away/toilet{tag = "icon-toilet10 (EAST)"; icon_state = "toilet10"; dir = 4},/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"kt" = (/obj/machinery/door/airlock{name = "Male Shower"; req_access_txt = "0"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"ku" = (/obj/machinery/door/airlock{name = "Female Shower"; req_access_txt = "0"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"kv" = (/obj/structure/rack,/obj/item/weapon/storage/belt/utility,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"kw" = (/obj/machinery/door/airlock/command{name = "Heads of Staff"; req_access_txt = "19"},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"kx" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"ky" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/kitchen/utensil/fork,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"kz" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/machinery/door/window/eastleft,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"kA" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"kB" = (/obj/structure/grille,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) "kC" = (/turf/simulated/shuttle/wall{icon_state = "wall_space"},/area/awaymission/box2550Away/general) -"kD" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) -"kE" = (/obj/machinery/computer/arcade,/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"kD" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = 27},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"kE" = (/obj/item/weapon/extinguisher,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/box2550Away/general) "kF" = (/obj/structure/shuttle/engine/propulsion{dir = 8; icon_state = "burst_l"},/turf/space,/area/awaymission/box2550Away/general) -"kG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"kH" = (/obj/machinery/status_display{pixel_y = 2; supply_display = 1},/turf/simulated/wall,/area/awaymission/box2550Away/maint) -"kI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"kJ" = (/obj/machinery/door/airlock/maintenance{name = "Primary Tool Storage"; req_access_txt = "12"},/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"kK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"kL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"kM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"kN" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall,/area/awaymission/box2550Away/maint) -"kO" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/awaymission/box2550Away/maint) -"kP" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"kQ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"kR" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"kS" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-blue (WEST)"; icon_state = "blue"; dir = 8},/area/awaymission/box2550Away/general) -"kT" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"kU" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-blue (EAST)"; icon_state = "blue"; dir = 4},/area/awaymission/box2550Away/general) -"kV" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"kW" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"kX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"kY" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/wall,/area/awaymission/box2550Away/maint) -"kZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"la" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"lb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"lc" = (/obj/machinery/door/airlock/glass{req_access_txt = "35"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"ld" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"le" = (/obj/machinery/door/window/eastright{dir = 2; name = "Hydroponics Delivery"; req_access_txt = "34"},/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; location = "Hydroponics"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/general) -"lf" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"lg" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"lh" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"li" = (/obj/machinery/door/window/northleft{base_state = "left"; dir = 2; icon_state = "left"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"lj" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 2; icon_state = "right"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"lk" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"ll" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"lm" = (/obj/machinery/status_display,/turf/simulated/wall,/area/awaymission/box2550Away/general) -"ln" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"lo" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"kG" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{tag = "icon-warning (SOUTHWEST)"; icon_state = "warning"; dir = 10},/area/awaymission/box2550Away/general) +"kH" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"kI" = (/obj/machinery/portable_atmospherics/scrubber,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"kJ" = (/obj/structure/sink{dir = 4; pixel_x = 12; step_x = 0},/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"kK" = (/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"kL" = (/obj/machinery/turret{dir = 8},/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"kM" = (/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"kN" = (/obj/machinery/turret{dir = 4},/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"kO" = (/obj/machinery/vending/coffee{active = 0; stat = 1},/obj/item/weapon/paper{anchored = 0; info = "If you're thirsty, it's time to go home."; name = "Out of Order"},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"kP" = (/turf/unsimulated/floor{tag = "icon-carpet9-4 (NORTH)"; icon_state = "carpet9-4"; dir = 1},/area/awaymission/box2550Away/command) +"kQ" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Pun Pun"},/turf/unsimulated/floor{tag = "icon-carpet13-5 (NORTH)"; icon_state = "carpet13-5"; dir = 1},/area/awaymission/box2550Away/command) +"kR" = (/turf/unsimulated/floor{tag = "icon-carpet13-5 (NORTH)"; icon_state = "carpet13-5"; dir = 1},/area/awaymission/box2550Away/command) +"kS" = (/turf/unsimulated/floor{tag = "icon-carpetside (SOUTHWEST)"; icon_state = "carpetside"; dir = 10},/area/awaymission/box2550Away/command) +"kT" = (/obj/machinery/computer/secure_data/detective_computer,/turf/unsimulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"kU" = (/obj/structure/table/woodentable{dir = 5},/obj/item/ammo_casing/c38,/obj/item/ammo_casing/c38,/obj/item/weapon/gun/projectile/revolver/detective,/turf/unsimulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"kV" = (/obj/structure/table/woodentable{dir = 9},/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30},/turf/unsimulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"kW" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"kX" = (/obj/machinery/door/window/northright{dir = 1; icon_state = "right"; tag = "icon-right"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"kY" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"kZ" = (/obj/structure/disposalpipe/junction,/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/maint) +"la" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes,/turf/unsimulated/floor{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/box2550Away/command) +"lb" = (/obj/item/trash/cheesie,/obj/item/trash/chips,/obj/item/trash/raisins,/obj/item/trash/syndi_cakes,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"lc" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/device/flashlight/lamp,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"ld" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/paper_bin,/obj/item/weapon/hand_labeler,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"le" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/command) +"lf" = (/obj/machinery/computer/card,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"lg" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/medical) +"lh" = (/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"li" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"lj" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/medical) +"lk" = (/obj/machinery/door/airlock/maintenance{name = "Morgue Maintenance"; req_access_txt = "12;6"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"ll" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"lm" = (/obj/machinery/door/airlock/maintenance{name = "Med-Sci Maintenance"; req_access_txt = "14;9"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"ln" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"lo" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/box2550Away/general) "lp" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall_space"},/area/awaymission/box2550Away/general) -"lq" = (/obj/structure/closet/secure_closet/box2550away/security,/turf/simulated/floor{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/awaymission/box2550Away/security) -"lr" = (/obj/structure/computerframe,/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) -"ls" = (/obj/machinery/computer/card,/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) -"lt" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"lu" = (/turf/simulated/floor{tag = "icon-L1"; icon_state = "L1"},/area/awaymission/box2550Away/general) -"lv" = (/turf/simulated/floor{tag = "icon-L3"; icon_state = "L3"},/area/awaymission/box2550Away/general) -"lw" = (/turf/simulated/floor{tag = "icon-L5"; icon_state = "L5"},/area/awaymission/box2550Away/general) -"lx" = (/turf/simulated/floor{tag = "icon-L7"; icon_state = "L7"},/area/awaymission/box2550Away/general) -"ly" = (/turf/simulated/floor{tag = "icon-L9"; icon_state = "L9"},/area/awaymission/box2550Away/general) -"lz" = (/turf/simulated/floor{tag = "icon-L11"; icon_state = "L11"},/area/awaymission/box2550Away/general) -"lA" = (/turf/simulated/floor{desc = "There is some old writing on this floor. You are barely able to read out a few lines from a tangled scribble.
You have my salutations for getting this far--no more games. The treasure you seek is located inside the AI Satellite but you will need the right eyes to find it. Best of luck to you, friend.
HONK!
"; icon_state = "L13"; name = "floor"; tag = "icon-L13"},/area/awaymission/box2550Away/general) -"lB" = (/turf/simulated/floor{tag = "icon-L15"; icon_state = "L15"},/area/awaymission/box2550Away/general) -"lC" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"lD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"lE" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"lF" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"lG" = (/obj/structure/closet/box2550away/red,/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) -"lH" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=CHW"; location = "Lockers"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"lI" = (/turf/simulated/floor{tag = "icon-L2"; icon_state = "L2"},/area/awaymission/box2550Away/general) -"lJ" = (/turf/simulated/floor{tag = "icon-L4"; icon_state = "L4"},/area/awaymission/box2550Away/general) -"lK" = (/turf/simulated/floor{tag = "icon-L6"; icon_state = "L6"},/area/awaymission/box2550Away/general) -"lL" = (/turf/simulated/floor{tag = "icon-L8"; icon_state = "L8"},/area/awaymission/box2550Away/general) -"lM" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Lockers"; location = "EVA"},/turf/simulated/floor{tag = "icon-L10"; icon_state = "L10"},/area/awaymission/box2550Away/general) -"lN" = (/turf/simulated/floor{tag = "icon-L12"; icon_state = "L12"},/area/awaymission/box2550Away/general) -"lO" = (/turf/simulated/floor{desc = "There is some old writing on this floor. You are barely able to read out a few lines from a tangled scribble.
Nameless Poet of Clown Planet
"; icon_state = "L14"; tag = "icon-L14"},/area/awaymission/box2550Away/general) -"lP" = (/turf/simulated/floor{tag = "icon-L16"; icon_state = "L16"},/area/awaymission/box2550Away/general) -"lQ" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Court"; location = "CHE"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"lR" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Diner"; location = "Library"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"lS" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"lT" = (/obj/machinery/vending/snack,/turf/simulated/floor{icon_state = "corner_northwest"; tag = "icon-corner_northwest"},/area/awaymission/box2550Away/general) -"lU" = (/turf/simulated/floor{icon_state = "caution_north"; tag = "icon-caution_north"},/area/awaymission/box2550Away/general) -"lV" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "caution_north"; tag = "icon-caution_north"},/area/awaymission/box2550Away/general) -"lW" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "corner_northeast"; tag = "icon-corner_northeast"},/area/awaymission/box2550Away/general) -"lX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"lY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"lZ" = (/turf/simulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/security) -"ma" = (/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) -"mb" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHWEST)"; icon_state = "reinf_tabledir"; dir = 10},/obj/item/weapon/pen,/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) -"mc" = (/obj/item/weapon/paper,/obj/structure/table/reinforced{tag = "icon-reinf_tabledir"; icon_state = "reinf_tabledir"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) -"md" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHEAST)"; icon_state = "reinf_tabledir"; dir = 6},/obj/machinery/recharger,/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) -"me" = (/obj/item/weapon/crowbar,/obj/item/device/radio/intercom{pixel_y = -29},/obj/item/device/flash/box2550away,/turf/simulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/security) -"mf" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=QM"; location = "CHW"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mg" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Library"; location = "Hydro"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mh" = (/turf/simulated/floor{icon_state = "escape"; tag = "icon-escape"},/area/awaymission/box2550Away/general) -"mi" = (/turf/simulated/floor{dir = 8; icon_state = "escapecorner"; tag = "icon-escapecorner (WEST)"},/area/awaymission/box2550Away/general) -"mj" = (/turf/simulated/floor{icon_state = "corner_northwest"; tag = "icon-corner_northwest"},/area/awaymission/box2550Away/general) -"mk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"ml" = (/obj/machinery/door/window/northleft{tag = "icon-left"; icon_state = "left"; dir = 2},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mm" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 2; icon_state = "right"; tag = "icon-left"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"mo" = (/obj/machinery/door/airlock/maintenance{name = "Autolathe Storage"; req_access_txt = "12"},/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"mp" = (/obj/item/weapon/paper{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
A body lies forever lost, stricken soundly from the past. Travel south to find the dirge, starting from the concierge.
HONK!
"; layer = 3; name = "Old Note #2"; pixel_y = 4},/obj/structure/table/reinforced{dir = 9; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/paper/pamphlet/box2550awayInfo,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mq" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (NORTH)"; icon_state = "reinf_tabledir"; dir = 1},/obj/item/weapon/paper/pamphlet/box2550awayInfo,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mr" = (/obj/structure/table/reinforced{dir = 5; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/paper/pamphlet/box2550awayInfo,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"ms" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"mt" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"mu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"mv" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"mw" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"mx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"my" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"mz" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"mA" = (/obj/machinery/door/window/northright{tag = "icon-right"; icon_state = "right"; dir = 2},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mB" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall,/area/awaymission/box2550Away/general) -"mC" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/wall,/area/awaymission/box2550Away/general) -"mD" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall,/area/awaymission/box2550Away/maint) -"mE" = (/turf/simulated/wall,/area/awaymission/box2550Away/medical) -"mF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"mG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"mH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"mI" = (/turf/simulated/floor{dir = 8; icon_state = "escape"; tag = "icon-escape (WEST)"},/area/awaymission/box2550Away/general) -"mJ" = (/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/general) -"mK" = (/turf/simulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/general) -"mL" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1359; pixel_x = -30},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mM" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mN" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mO" = (/obj/machinery/vending/coffee,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mP" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mQ" = (/obj/machinery/vending/cigarette,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mR" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"mS" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"mT" = (/turf/simulated/wall,/area/awaymission/box2550Away/storage) -"mU" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"mV" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/device/aicard,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"mW" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/assembly/signaler,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"mX" = (/obj/structure/computerframe,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"mY" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/storage/box/box2550away/ids,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"mZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/clothing/glasses/sunglasses/box2550away,/obj/item/weapon/storage/box/PDAs,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"na" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"nb" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/flash/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"nc" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/extinguisher,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"nd" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"ne" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"nf" = (/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"ng" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"nh" = (/obj/structure/closet/secure_closet/box2550away/meat,/obj/effect/landmark/corpse/away/box2550/lawyer,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"ni" = (/obj/structure/kitchenspike,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"nj" = (/obj/structure/window/reinforced,/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; location = "Robotics"},/obj/machinery/door/window/eastright{base_state = "right"; dir = 8; icon_state = "right"; name = "Robotics Delivery"; req_access_txt = "34"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/medical) -"nk" = (/obj/structure/window/reinforced,/obj/machinery/door/window/westleft{base_state = "left"; dir = 4; icon_state = "left"; name = "Robotics Delivery"; req_access_txt = "29"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/box2550Away/medical) -"nl" = (/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"nm" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"nn" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/crowbar,/obj/item/device/assembly/prox_sensor,/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"no" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/machinery/cell_charger,/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"np" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/flash/box2550away,/obj/item/device/flash/box2550away,/obj/item/device/flash/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"nq" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/multitool,/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"nr" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"ns" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "escape"; tag = "icon-escape (WEST)"},/area/awaymission/box2550Away/general) -"nt" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "caution_north"; tag = "icon-caution_north"},/area/awaymission/box2550Away/general) -"nu" = (/obj/machinery/computer/arcade,/turf/simulated/floor{icon_state = "corner_northeast"; tag = "icon-corner_northeast"},/area/awaymission/box2550Away/general) -"nv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"nw" = (/obj/structure/closet/wardrobe/mixed,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"nx" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"ny" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"nz" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"nA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"nB" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"nC" = (/obj/item/weapon/wrench,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"nD" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"nE" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"nF" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"nG" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"nH" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"nI" = (/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"nJ" = (/obj/machinery/door/airlock/glass{name = "Robotics"; req_access_txt = "29"},/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"nK" = (/obj/item/weapon/extinguisher,/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"nL" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"nM" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"nN" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"nO" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"nP" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"nQ" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"nR" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"nS" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"nT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"nU" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"nV" = (/obj/structure/table,/obj/item/device/multitool,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"nW" = (/obj/structure/closet/emcloset,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"nX" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"nY" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"nZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"oa" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"ob" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"oc" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"od" = (/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"oe" = (/obj/machinery/gibber,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"of" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"og" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/scalpel,/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"oh" = (/obj/machinery/recharge_station,/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"oi" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"oj" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lq" = (/obj/machinery/door/airlock{name = "Unit 2"},/obj/structure/disposalpipe/junction,/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"lr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"ls" = (/turf/unsimulated/floor{tag = "icon-carpetside (NORTHWEST)"; icon_state = "carpetside"; dir = 9},/area/awaymission/box2550Away/command) +"lt" = (/turf/unsimulated/floor{tag = "icon-carpetside (NORTH)"; icon_state = "carpetside"; dir = 1},/area/awaymission/box2550Away/command) +"lu" = (/obj/structure/table/woodentable{dir = 6},/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{tag = "icon-carpet13-5 (NORTH)"; icon_state = "carpet13-5"; dir = 1},/area/awaymission/box2550Away/security) +"lv" = (/turf/unsimulated/floor{tag = "icon-carpet9-4 (NORTH)"; icon_state = "carpet9-4"; dir = 1},/area/awaymission/box2550Away/security) +"lw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/security) +"lx" = (/obj/item/weapon/storage/secure/safe{pixel_x = -23},/turf/unsimulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"ly" = (/turf/unsimulated/floor{tag = "icon-carpetside (SOUTHWEST)"; icon_state = "carpetside"; dir = 10},/area/awaymission/box2550Away/security) +"lz" = (/obj/structure/table/woodentable{dir = 10},/obj/effect/decal/cleanable/generic,/obj/item/device/flashlight/lamp/green,/turf/unsimulated/floor{tag = "icon-carpet13-5 (NORTH)"; icon_state = "carpet13-5"; dir = 1},/area/awaymission/box2550Away/security) +"lA" = (/obj/item/trash/cheesie,/obj/item/trash/sosjerky,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"lB" = (/obj/machinery/door/airlock/command{icon_state = "door_locked"; locked = 1; name = "AI Upload"; req_access_txt = "16"},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"lC" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"lD" = (/turf/unsimulated/floor{tag = "icon-carpetside (NORTHEAST)"; icon_state = "carpetside"; dir = 5},/area/awaymission/box2550Away/command) +"lE" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/box2550Away/command) +"lF" = (/obj/item/trash/cheesie,/obj/item/trash/syndi_cakes,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"lG" = (/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/sosjerky,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"lH" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"lI" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"lJ" = (/obj/structure/closet/secure_closet/medical1,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"lK" = (/obj/machinery/computer/scan_consolenew,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"lL" = (/obj/machinery/dna_scannernew,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"lM" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"lN" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact-f"; initialize_directions = 12; layer = 3},/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"lO" = (/obj/machinery/atmospherics/pipe/simple{dir = 6; icon_state = "intact-f"; initialize_directions = 6; layer = 3},/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"lP" = (/obj/machinery/atmospherics/pipe/simple{dir = 10; icon_state = "intact-f"; layer = 3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/box2550Away/general) +"lQ" = (/turf/unsimulated/floor{icon_state = "bluecorner"},/area/awaymission/box2550Away/command) +"lR" = (/obj/machinery/door_control{id = "bridge blast"; name = "Blast Door Control"; pixel_y = -25},/turf/unsimulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/command) +"lS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"lT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"lU" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"lV" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"lW" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"lX" = (/obj/structure/closet,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"lY" = (/obj/machinery/autolathe,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"lZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/storage/toolbox/emergency,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"ma" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"mb" = (/obj/structure/closet/wardrobe/grey,/obj/effect/landmark/corpse/away/box2550/hop,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"mc" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"md" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"me" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"mf" = (/obj/structure/rack,/obj/item/weapon/storage/backpack,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"mg" = (/obj/machinery/recharge_station,/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"mh" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/circular_saw,/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"mi" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/structure/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/structure/window{icon_state = "rwindow"; reinf = 1},/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"mj" = (/obj/machinery/portable_atmospherics/pump,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"mk" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"ml" = (/obj/structure/table,/obj/item/device/multitool,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"mm" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"mn" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"mo" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"mp" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"mq" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"mr" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"ms" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/box2550Away/general) +"mt" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/scalpel,/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"mu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"mv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"mw" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"mx" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"my" = (/obj/machinery/gibber,/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"mz" = (/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "28"},/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"mA" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"mB" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"mC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"mD" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"; req_access_txt = "0"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"mE" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_x = -28; pixel_y = -7},/turf/unsimulated/floor{dir = 9; icon_state = "blue"},/area/awaymission/box2550Away/command) +"mF" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"mG" = (/turf/unsimulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/command) +"mH" = (/turf/unsimulated/floor{dir = 5; icon_state = "blue"},/area/awaymission/box2550Away/command) +"mI" = (/turf/unsimulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/box2550Away/command) +"mJ" = (/turf/unsimulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/box2550Away/general) +"mK" = (/turf/unsimulated/floor{tag = "icon-blue (SOUTHEAST)"; icon_state = "blue"; dir = 6},/area/awaymission/box2550Away/general) +"mL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"mM" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"mN" = (/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "28"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"mO" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"mP" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/structure/window{icon_state = "rwindow"; reinf = 1},/obj/structure/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"mQ" = (/obj/item/weapon/crowbar,/turf/unsimulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/command) +"mR" = (/turf/unsimulated/floor{tag = "icon-blue (SOUTHWEST)"; icon_state = "blue"; dir = 10},/area/awaymission/box2550Away/general) +"mS" = (/obj/structure/grille,/obj/machinery/box2550away/fake_status_display,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"mT" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"mU" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"mV" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"mW" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/maint) +"mX" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"mY" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"mZ" = (/obj/structure/closet/wardrobe/grey,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"na" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/storage/toolbox/electrical,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"nb" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"nc" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"nd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"ne" = (/obj/item/device/radio/intercom{pixel_y = -29},/obj/structure/reagent_dispensers/fueltank,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"nf" = (/turf/unsimulated/floor{tag = "icon-blue (EAST)"; icon_state = "blue"; dir = 4},/area/awaymission/box2550Away/general) +"ng" = (/obj/machinery/door/airlock/command{name = "Bridge"; req_access_txt = "19"},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"nh" = (/obj/machinery/door/airlock/glass{name = "Bridge"; req_access_txt = "19"},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"ni" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"nj" = (/obj/structure/sign/securearea,/turf/unsimulated/wall/other,/area/awaymission/box2550Away/command) +"nk" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"nl" = (/turf/unsimulated/floor{tag = "icon-blue (WEST)"; icon_state = "blue"; dir = 8},/area/awaymission/box2550Away/general) +"nm" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/machinery/microwave{pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"nn" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/kitchen/rollingpin,/obj/item/weapon/storage/box/donkpockets,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"no" = (/obj/machinery/computer/operating,/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"np" = (/obj/machinery/door/airlock/maintenance{name = "Robotics Maintenance"; req_access_txt = "12;29"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"nq" = (/obj/machinery/robotic_fabricator,/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"nr" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"ns" = (/obj/structure/optable,/obj/item/device/radio/intercom{pixel_y = -29},/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"nt" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; pixel_x = -28},/turf/unsimulated/floor{dir = 8; icon_state = "escape"; tag = "icon-escape (WEST)"},/area/awaymission/box2550Away/general) +"nu" = (/obj/structure/closet/crate,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/obj/item/stack/cable_coil,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/unsimulated/floor,/area/awaymission/box2550Away/medical) +"nv" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"nw" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"nx" = (/obj/item/stack/tile/plasteel,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"ny" = (/obj/structure/sign/securearea{tag = "icon-space"; name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/maint) +"nz" = (/obj/machinery/door/airlock/glass{name = "Female Living Quarters"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"nA" = (/obj/machinery/door/airlock/glass{name = "Male Living Quarters"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"nB" = (/obj/machinery/door/window/northleft{name = "cabin door"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"nC" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"nD" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"nE" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"nF" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"nG" = (/obj/item/device/radio/intercom{dir = 1; pixel_y = 20},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"nH" = (/obj/machinery/bookbinder{pixel_y = 9},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"nI" = (/obj/structure/table/reinforced,/obj/machinery/librarycomp{pixel_y = 8},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"nJ" = (/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"nK" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"nL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"nM" = (/obj/item/weapon/bedsheet,/obj/structure/stool/bed,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"nN" = (/obj/structure/table,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"nO" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"nP" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"nQ" = (/obj/machinery/door/airlock/external{name = "Auxillary Solar Maintenance"; req_access_txt = "13"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"nR" = (/obj/structure/rack,/obj/item/clothing/head/welding,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"nS" = (/obj/structure/table/reinforced,/obj/item/weapon/dice/d20,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"nT" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"nU" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"nV" = (/obj/machinery/door/airlock{name = "Restrooms"; req_access_txt = "0"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"nW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"nX" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"nY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"nZ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"oa" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"ob" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/wall/other,/area/awaymission/box2550Away/maint) +"oc" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/wall/other,/area/awaymission/box2550Away/general) +"od" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"oe" = (/obj/structure/stool{pixel_y = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"of" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 2; icon_state = "right"; name = "cabin door"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"og" = (/turf/unsimulated/shuttle/wall{dir = 8; icon_state = "wall_space"},/area/awaymission/box2550Away/general) +"oh" = (/turf/unsimulated/shuttle/wall{dir = 1; icon_state = "wall_space"},/area/awaymission/box2550Away/general) +"oi" = (/obj/machinery/vending/assist,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"oj" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Auxiliary Solar Access"; req_access_txt = "10"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) "ok" = (/obj/item/weapon/melee/classic_baton,/obj/structure/lattice,/turf/space,/area/awaymission/box2550Away/maint) -"ol" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"om" = (/obj/structure/closet/wardrobe/grey,/obj/effect/landmark/corpse/away/box2550/hop,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"on" = (/obj/structure/closet,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"oo" = (/obj/machinery/autolathe,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"op" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"oq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"or" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"os" = (/obj/machinery/door_control{id = "bridge blast"; name = "Blast Door Control"; pixel_y = -25},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/command) -"ot" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"ou" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"ov" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/structure/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/structure/window{icon_state = "rwindow"; reinf = 1},/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"ow" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/circular_saw,/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"ox" = (/obj/structure/rack,/obj/item/weapon/storage/backpack,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"oy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"oz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"oA" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"oB" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"oC" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"oD" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"oE" = (/obj/item/device/radio/intercom{pixel_y = -29},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"oF" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"oG" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/storage) -"oH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"oI" = (/turf/simulated/floor{tag = "icon-blue (EAST)"; icon_state = "blue"; dir = 4},/area/awaymission/box2550Away/general) -"oJ" = (/obj/machinery/door/airlock/command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"oK" = (/obj/machinery/door/airlock/glass{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"oL" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"oM" = (/turf/simulated/floor{tag = "icon-blue (WEST)"; icon_state = "blue"; dir = 8},/area/awaymission/box2550Away/general) -"oN" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/machinery/door/window/eastleft,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"oO" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/kitchen/rollingpin,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"oP" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/machinery/microwave{pixel_y = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"oQ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"oR" = (/obj/structure/optable,/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"oS" = (/obj/machinery/computer/operating,/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"oT" = (/obj/machinery/door/airlock/maintenance{name = "Robotics Maintenance"; req_access_txt = "12;29"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"oU" = (/obj/machinery/robotic_fabricator,/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"oV" = (/obj/structure/closet/crate,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/obj/item/weapon/cable_coil,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/medical) -"oW" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; pixel_x = -28},/turf/simulated/floor{dir = 8; icon_state = "escape"; tag = "icon-escape (WEST)"},/area/awaymission/box2550Away/general) -"oX" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"oY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"oZ" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"; req_access_txt = "0"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"pa" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"pb" = (/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/box2550Away/general) -"pc" = (/turf/simulated/floor{tag = "icon-blue (SOUTHEAST)"; icon_state = "blue"; dir = 6},/area/awaymission/box2550Away/general) -"pd" = (/turf/simulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/command) -"pe" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"pf" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_x = -28; pixel_y = -7},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/awaymission/box2550Away/command) -"pg" = (/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/box2550Away/command) -"ph" = (/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/awaymission/box2550Away/command) -"pi" = (/obj/item/weapon/crowbar,/turf/simulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/command) -"pj" = (/turf/simulated/floor{tag = "icon-blue (SOUTHWEST)"; icon_state = "blue"; dir = 10},/area/awaymission/box2550Away/general) -"pk" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/structure/window{icon_state = "rwindow"; reinf = 1},/obj/structure/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"pl" = (/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"pm" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"pn" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/wall,/area/awaymission/box2550Away/maint) -"po" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"pp" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"pq" = (/obj/structure/grille,/obj/machinery/status_display,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"pr" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"ps" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"pt" = (/obj/machinery/door/airlock{name = "Male Shower"; req_access_txt = "0"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"pu" = (/obj/machinery/door/airlock{name = "Female Shower"; req_access_txt = "0"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"pv" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = -27},/obj/structure/closet/secure_closet/box2550away/det,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) -"pw" = (/obj/machinery/computer/security/wooden_tv,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) -"px" = (/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) -"py" = (/obj/structure/rack{dir = 8},/obj/item/weapon/storage/briefcase,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) -"pz" = (/obj/machinery/status_display{pixel_x = -1},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) -"pA" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access_txt = "20"},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"pB" = (/obj/machinery/turretid{pixel_x = -24},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"pC" = (/obj/machinery/door/airlock/command{name = "Heads of Staff"; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"pD" = (/turf/simulated/wall,/area/awaymission/box2550Away/command) -"pE" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"pF" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = 27},/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "Kitchen"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"pG" = (/obj/structure/rack,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"pH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"pI" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "corner_northwest"; tag = "icon-corner_northwest"},/area/awaymission/box2550Away/general) -"pJ" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"pK" = (/obj/machinery/door/airlock/security{name = "Detective"; req_access_txt = "4"},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) -"pL" = (/turf/simulated/floor{icon_state = "carpetNW"},/area/awaymission/box2550Away/security) -"pM" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "carpetN"},/area/awaymission/box2550Away/security) -"pN" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/pen,/obj/item/weapon/hand_labeler,/obj/item/weapon/paper,/turf/simulated/floor{icon_state = "carpetN"},/area/awaymission/box2550Away/security) -"pO" = (/obj/item/weapon/cigbutt,/turf/simulated/floor{icon_state = "carpetNE"},/area/awaymission/box2550Away/security) -"pP" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/pinpointer,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"pQ" = (/obj/item/weapon/storage/photo_album{pixel_y = -10},/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/camera,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"pR" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/machinery/recharger,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"pS" = (/obj/item/weapon/paper{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
Far away it sways so seldom, metal cage of ruin and boredom. In the midst of red and foil, one of six shall feed and toil.
HONK!
"; layer = 3; name = "Old Note #9"},/obj/structure/grille,/turf/simulated/floor/plating,/area) -"pT" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"pU" = (/obj/machinery/ai_status_display{pixel_y = -28},/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"pV" = (/obj/item/weapon/paper{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
No great mystery to unfold, thy next clue is so very near to hold. Pay close attention, for what you seek is thy own reflection.
HONK!
"; layer = 3; name = "Old Note #8"},/obj/structure/grille,/turf/simulated/floor/plating,/area) -"pW" = (/obj/structure/table,/obj/item/weapon/storage/secure/briefcase,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"pX" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Bridge Delivery"; req_access_txt = "19"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/box2550Away/command) -"pY" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Bridge Delivery"; req_access_txt = "34"},/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "Bridge"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/command) -"pZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/structure/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/structure/window{icon_state = "rwindow"; dir = 1; reinf = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"qa" = (/obj/item/weapon/storage/box/mousetraps,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"qb" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"qc" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"qd" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) +"ol" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/assembly/igniter{pixel_x = -8; pixel_y = -4},/obj/item/device/assembly/igniter,/obj/item/weapon/screwdriver{pixel_y = 16},/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"om" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/t_scanner,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"on" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/wirecutters,/obj/item/device/flashlight,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"oo" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; pixel_y = 25},/obj/item/weapon/extinguisher,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"op" = (/obj/structure/rack{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"oq" = (/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"or" = (/obj/item/weapon/cell,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"os" = (/obj/structure/rack{dir = 4},/obj/item/weapon/circuitboard/card,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"ot" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = 27},/obj/item/clothing/glasses/meson,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"ou" = (/turf/unsimulated/wall/other,/area/awaymission/box2550Away/storage) +"ov" = (/obj/structure/rack{dir = 4},/obj/item/weapon/circuitboard/security,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"ow" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"ox" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"oy" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"oz" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/multitool,/obj/machinery/cell_charger,/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"oA" = (/obj/machinery/door/airlock{name = "Unit 3"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"},/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"oB" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal/box2550away/toilet{tag = "icon-toilet10 (WEST)"; icon_state = "toilet10"; dir = 8},/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"oC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"oD" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/crowbar,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"oE" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/extinguisher,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"oF" = (/obj/structure/rack{dir = 8},/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/mask/breath/box2550away,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"oG" = (/obj/structure/rack{dir = 4},/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/mask/breath/box2550away,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"oH" = (/obj/machinery/hydroponics,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"oI" = (/obj/structure/reagent_dispensers/watertank,/turf/unsimulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) +"oJ" = (/obj/structure/closet/crate/hydroponics/prespawned,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"oK" = (/obj/machinery/door/airlock,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"oL" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"oM" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"oN" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"oO" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"oP" = (/obj/structure/closet,/obj/effect/landmark/corpse/away/box2550/clown,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"oQ" = (/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"oR" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"oS" = (/obj/structure/bookcase,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"oT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"oU" = (/obj/structure/closet/wardrobe/mixed,/turf/unsimulated/shuttle/floor,/area/awaymission/box2550Away/general) +"oV" = (/turf/unsimulated/shuttle/wall{dir = 4; icon_state = "wall_floor"},/area/awaymission/box2550Away/general) +"oW" = (/obj/item/weapon/storage/box/lights/tubes,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"oX" = (/obj/structure/rack{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"oY" = (/obj/structure/rack{dir = 8},/obj/item/weapon/circuitboard/scan_consolenew,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"oZ" = (/obj/structure/rack{dir = 4},/obj/item/weapon/circuitboard/teleporter,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"pa" = (/obj/structure/rack{dir = 8},/obj/item/weapon/circuitboard/arcade,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"pb" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"pc" = (/obj/item/stack/rods{amount = 50},/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"pd" = (/obj/item/stack/sheet/glass{amount = 50},/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"pe" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"pf" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/stack/sheet/glass{amount = 50},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"pg" = (/obj/item/weapon/crowbar,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"ph" = (/obj/machinery/door/airlock/maintenance{name = "Bathroom Maintenance"; req_access_txt = "12"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"pi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"pj" = (/obj/machinery/seed_extractor,/turf/unsimulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) +"pk" = (/obj/item/weapon/reagent_containers/glass/bucket{pixel_y = 6},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"pl" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/firstaid/toxin,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"pm" = (/obj/machinery/door/airlock{name = "Unit 2"},/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"pn" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"po" = (/obj/structure/disposalpipe/junction,/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/general) +"pp" = (/obj/machinery/libraryscanner{pixel_y = 4},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"pq" = (/obj/structure/stool{pixel_y = 8},/obj/item/device/radio/intercom{desc = "Read WGW through this."; dir = 1; name = "\improper WGW intercom"; pixel_y = 20; prison_radio = 1},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"pr" = (/obj/structure/table/woodentable,/obj/machinery/librarycomp{pixel_y = 8},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"ps" = (/obj/structure/table/woodentable{tag = "icon-woodentable (WEST)"; icon_state = "woodentable"; dir = 8},/obj/item/weapon/paper,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"pt" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"pu" = (/obj/structure/closet,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"pv" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = 27},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"pw" = (/obj/structure/rack{dir = 1},/obj/item/clothing/mask/breath/box2550away,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"px" = (/obj/structure/closet/crate/rcd,/turf/unsimulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/command) +"py" = (/obj/item/stack/rods{amount = 50},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"pz" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/stack/sheet/rglass{amount = 50},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"pA" = (/turf/unsimulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/command) +"pB" = (/obj/structure/table{dir = 9; icon_state = "tabledir"},/obj/item/stack/cable_coil,/obj/item/weapon/cell,/obj/machinery/cell_charger,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"pC" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/weapon/hand_labeler,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"pD" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/stack/cable_coil{pixel_x = 2; pixel_y = -2},/obj/item/stack/cable_coil,/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"pE" = (/obj/machinery/door/airlock/maintenance{name = "Tech Storage"; req_access_txt = "23"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"pF" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"pG" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"pH" = (/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"pI" = (/obj/machinery/door/window/westright,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"pJ" = (/obj/structure/bookcase{name = "bookcase (Adult)"},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"pK" = (/obj/structure/bookcase{name = "bookcase (Religious)"},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"pL" = (/obj/structure/bookcase{name = "bookcase (Fiction)"},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"pM" = (/obj/structure/bookcase{name = "bookcase (Self Help)"},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"pN" = (/obj/structure/table/woodentable{tag = "icon-woodentable (WEST)"; icon_state = "woodentable"; dir = 8},/obj/item/weapon/paper_bin,/obj/item/weapon/paper,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"pO" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Private Study"; req_access_txt = "37"},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"pP" = (/obj/machinery/vending/hydronutrients,/turf/unsimulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) +"pQ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"pR" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/paper/hydroponics,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"pS" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"pT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"pU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"pV" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"pW" = (/obj/machinery/door/airlock/command{icon_state = "door_closed"; locked = 0; name = "E.V.A."; req_access_txt = "18"},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"pX" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{tag = "icon-blue (EAST)"; icon_state = "blue"; dir = 4},/area/awaymission/box2550Away/general) +"pY" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"pZ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"qa" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"qb" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/weldingtool,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"qc" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/storage/toolbox/electrical,/turf/unsimulated/floor,/area/awaymission/box2550Away/storage) +"qd" = (/obj/structure/table/woodentable,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) "qe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/space,/area/awaymission/box2550Away/general) "qf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/space,/area/awaymission/box2550Away/general) -"qg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"qh" = (/obj/machinery/door/airlock{name = "Unit 2"},/obj/structure/disposalpipe/junction,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"qi" = (/obj/structure/sink{dir = 4; pixel_x = 12; step_x = 0},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"qj" = (/obj/item/weapon/storage/secure/safe{pixel_x = -23},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) -"qk" = (/turf/simulated/floor{icon_state = "carpetSW"},/area/awaymission/box2550Away/security) -"ql" = (/obj/structure/table/woodentable{dir = 10},/obj/effect/decal/cleanable/generic,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor{icon_state = "carpetS"},/area/awaymission/box2550Away/security) -"qm" = (/obj/structure/table/woodentable{dir = 6},/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor{icon_state = "carpetS"},/area/awaymission/box2550Away/security) -"qn" = (/turf/simulated/floor{icon_state = "carpetSE"},/area/awaymission/box2550Away/security) -"qo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) -"qp" = (/turf/simulated/floor{icon_state = "carpetNW"},/area/awaymission/box2550Away/command) -"qq" = (/turf/simulated/floor{icon_state = "carpetN"},/area/awaymission/box2550Away/command) -"qr" = (/turf/simulated/floor{icon_state = "carpetNE"},/area/awaymission/box2550Away/command) -"qs" = (/obj/machinery/computer/arcade,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"qt" = (/obj/structure/grille,/turf/simulated/floor/plating,/area) -"qu" = (/obj/machinery/door/airlock/command{icon_state = "door_locked"; locked = 1; name = "AI Upload"; req_access_txt = "16"},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"qv" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/box2550Away/command) -"qw" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"qx" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"qy" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"qz" = (/obj/machinery/dna_scannernew,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"qA" = (/obj/machinery/computer/scan_consolenew,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"qB" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"qC" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"qD" = (/obj/structure/table/woodentable{dir = 9},/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) -"qE" = (/obj/structure/table/woodentable{dir = 5},/obj/item/ammo_casing/c38,/obj/item/ammo_casing/c38,/obj/item/weapon/gun/projectile/revolver/detective,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) -"qF" = (/obj/machinery/computer/secure_data/detective_computer,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) -"qG" = (/turf/simulated/floor{icon_state = "carpetSW"},/area/awaymission/box2550Away/command) -"qH" = (/turf/simulated/floor{icon_state = "carpetS"},/area/awaymission/box2550Away/command) -"qI" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Pun Pun"},/turf/simulated/floor{icon_state = "carpetS"},/area/awaymission/box2550Away/command) -"qJ" = (/turf/simulated/floor{icon_state = "carpetSE"},/area/awaymission/box2550Away/command) -"qK" = (/obj/machinery/vending/coffee,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"qL" = (/obj/machinery/turret{dir = 4},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"qM" = (/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"qN" = (/obj/machinery/turret{dir = 8},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"qO" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/box2550Away/command) -"qP" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/paper_bin,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"qQ" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/device/flashlight/lamp,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"qR" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/command) -"qS" = (/obj/machinery/computer/card,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"qT" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"qU" = (/obj/machinery/door/window/northright{dir = 1; icon_state = "right"; tag = "icon-right"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"qV" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"qW" = (/obj/structure/disposalpipe/junction,/turf/simulated/wall,/area/awaymission/box2550Away/maint) -"qX" = (/obj/machinery/door/airlock/maintenance{name = "Med-Sci Maintenance"; req_access_txt = "14;9"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"qY" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) -"qZ" = (/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"ra" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"rb" = (/obj/machinery/door/airlock/maintenance{name = "Morgue Maintenance"; req_access_txt = "12;6"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"rc" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/simulated/wall,/area/awaymission/box2550Away/medical) -"rd" = (/obj/structure/rack{dir = 4},/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas/box2550away,/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"re" = (/obj/machinery/door/airlock{name = "Unit 3"},/obj/structure/disposalpipe/junction,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"rf" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"rg" = (/obj/machinery/door/window{dir = 2; icon = 'icons/obj/doors/windoor.dmi'; name = "Captain's Quarters"; req_access_txt = "20"},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"rh" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"ri" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"rj" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"rk" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"rl" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/device/assembly/timer,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"rm" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/stamp/hop,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"rn" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"ro" = (/obj/structure/table/reinforced,/obj/machinery/door/window{dir = 4; icon = 'icons/obj/doors/windoor.dmi'; req_access_txt = "0"},/obj/machinery/door/window{base_state = "right"; dir = 8; icon = 'icons/obj/doors/windoor.dmi'; icon_state = "right"; name = "Heads of Staff"; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"rp" = (/obj/structure/closet,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"rq" = (/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"rr" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"rs" = (/obj/structure/stool/bed/chair,/obj/item/device/radio/intercom{dir = 4; pixel_x = 27},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"rt" = (/obj/machinery/computer/cloning,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"ru" = (/obj/machinery/clonepod,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"rv" = (/obj/structure/closet/l3closet,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"rw" = (/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) -"rx" = (/obj/structure/morgue,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) -"ry" = (/obj/item/weapon/paper{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
In plain sight the next clue lies, hidden only by your eyes. In a corner much South of here, where great minds accomplish work so dear.
HONK!
"; layer = 3; name = "Old Note #5"; pixel_x = -6; pixel_y = 4},/obj/structure/morgue,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) -"rz" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall,/area/awaymission/box2550Away/maint) -"rA" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/paper_bin,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"rB" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"rC" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/aiModule/reset,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"rD" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/aiModule/protectStation,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"rE" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = -27},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"rF" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/command) -"rG" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"rH" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"rI" = (/obj/machinery/door/window/westleft{name = "Med-Sci"; req_access_txt = "9"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"rJ" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/storage/box/gloves,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) -"rK" = (/obj/structure/morgue{contents = newlist(/area/medical/cmo)},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) -"rL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/machinery/status_display,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"rM" = (/obj/machinery/door/airlock{name = "Unit 3"},/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"rN" = (/obj/structure/disposalpipe/junction{dir = 4},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"rO" = (/obj/item/stack/sheet/rglass,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"rP" = (/obj/item/weapon/screwdriver,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"rQ" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/stamp/captain,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"rR" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"rS" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"rT" = (/obj/machinery/turret{dir = 1},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"rU" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire,/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away,/obj/item/clothing/glasses/sunglasses/box2550away,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"rV" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"rW" = (/obj/structure/closet/wardrobe/genetics_white,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"rX" = (/obj/structure/table{dir = 8; icon_state = "table_horizontal"; pixel_y = 0},/obj/item/weapon/paper{info = "Angela, while it may appear that the lab monkeys are communicating with each other, I assure you it's quite impossible. You claim that one monkey signed the passcode for a supply closet to another and the latter proceeded to open it. As I'm sure you know, there have literally been tens of thousands of studies of primate intelligence and there is no evidence of behavior even remotely that sophisticated. So either you've single handedly trumped the entire field of animal behaviorists or you're badly in need of a vacation."; name = "re: Damn Chimps"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"rY" = (/obj/structure/table{dir = 4; icon_state = "table_horizontal"; pixel_y = 0},/obj/item/weapon/storage/box/disks,/obj/item/weapon/storage/box/disks,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"rZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/crowbar,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) -"sa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"sb" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"sc" = (/obj/structure/rack,/obj/item/weapon/tank/jetpack,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"sd" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"se" = (/obj/structure/closet/secure_closet/box2550away/captains,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"sf" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/flashlight/lamp,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"sg" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"sh" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"si" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"sj" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/aiModule/asimov,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window{base_state = "right"; dir = 4; icon = 'icons/obj/doors/windoor.dmi'; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"sk" = (/obj/structure/computerframe,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"sl" = (/obj/item/device/radio/intercom{pixel_y = -25; frequency = 1447; broadcasting = 1},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"sm" = (/obj/machinery/ai_status_display{pixel_y = -28},/obj/structure/computerframe,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"sn" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"so" = (/obj/structure/closet/secure_closet/box2550away/hop,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"sp" = (/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"sq" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"sr" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) -"ss" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Washingon"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"st" = (/obj/machinery/door/window/southleft{dir = 1; name = "Monkey Pen"; req_access_txt = "9"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"su" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Garfield"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"sv" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"sw" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Kennedy"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"sx" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) -"sy" = (/obj/structure/morgue{contents = newlist(/obj/effect/landmark/corpse/away/box2550/cmo)},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) -"sz" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"sA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"sB" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"sC" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"sD" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/cell,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"sE" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/machinery/cell_charger,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"sF" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"sG" = (/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"sH" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"sI" = (/obj/machinery/door_control{name = "Recieving Access Control"; pixel_x = 0; pixel_y = 24; id = "recieving"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"sJ" = (/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/supply) -"sK" = (/obj/machinery/conveyor{dir = 4; id = "QM"},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/supply) -"sL" = (/obj/machinery/conveyor{dir = 4; id = "QM"},/obj/structure/plasticflaps,/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/supply) -"sM" = (/turf/simulated/floor{tag = "icon-caution_west"; icon_state = "caution_west"},/area/awaymission/box2550Away/supply) -"sN" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"sO" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access_txt = "20"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"sP" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) -"sQ" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) -"sR" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/awaymission/box2550Away/command) -"sS" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) -"sT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"sU" = (/obj/structure/disposalpipe/junction{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"sV" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) -"sW" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"sX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/window/northright{tag = "icon-right"; icon_state = "right"; dir = 2},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"sY" = (/obj/machinery/computer/security/telescreen{icon = 'icons/obj/status_display.dmi'; icon_state = "entertainment"; name = "Entertainment monitor"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/awaymission/box2550Away/maint) -"sZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/gmcloset{req_access_txt = "28"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"ta" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/reagent_dispensers/box2550away/beerkeg,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"tb" = (/obj/structure/disposalpipe/junction,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"tc" = (/obj/machinery/door/window/northleft{dir = 4; name = "Genetics"; req_access_txt = "9"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"td" = (/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"te" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Pierce"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"tf" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Harding"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"tg" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/general) -"th" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Maintenance"; req_access_txt = "12;41"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"ti" = (/obj/structure/closet/wardrobe/black,/obj/effect/landmark/corpse/away/box2550/captain,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"tj" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"tk" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"tl" = (/obj/structure/table,/obj/structure/noticeboard{pixel_y = 27},/obj/item/weapon/lighter/zippo,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"tm" = (/obj/structure/stool{pixel_y = 8},/obj/item/device/radio/intercom{pixel_y = 20},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"tn" = (/obj/machinery/door/airlock/maintenance{name = "Bar Maintenance"; req_access_txt = "12; 28"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"to" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"tp" = (/obj/structure/closet,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"tq" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Jackson"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"tr" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "McKinley"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"ts" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Bush"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"tt" = (/obj/structure/table,/turf/simulated/floor{dir = 8; icon_state = "escape"; tag = "icon-escape (WEST)"},/area/awaymission/box2550Away/general) -"tu" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/supply) -"tv" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire,/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away,/obj/item/clothing/glasses/meson,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"tw" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/supply) -"tx" = (/obj/machinery/conveyor{id = "QMLoad"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"ty" = (/obj/machinery/conveyor_switch{id = "QMLoad"},/turf/simulated/floor{tag = "icon-caution_west"; icon_state = "caution_west"},/area/awaymission/box2550Away/supply) -"tz" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"tA" = (/obj/machinery/conveyor_switch{id = "QM"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"tB" = (/obj/machinery/status_display{pixel_y = 2; supply_display = 1},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/supply) -"tC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"tD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"tE" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"tF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"tG" = (/obj/machinery/door/poddoor{id = "recieving"; name = "Cargo Pickup Door"; text = "null"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"tH" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"tI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"tJ" = (/obj/item/device/multitool,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"tK" = (/obj/machinery/computer/security/telescreen{icon = 'icons/obj/status_display.dmi'; icon_state = "entertainment"; name = "Entertainment monitor"},/turf/simulated/wall,/area/awaymission/box2550Away/general) -"tL" = (/obj/structure/table,/obj/item/clothing/head/cakehat,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"tM" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; location = "Bar"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"tN" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) -"tO" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Genetics Delivery"; req_access_txt = "34"},/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; location = "Genetics"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"tP" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Genetics Delivery"; req_access_txt = "9"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"tQ" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) -"tR" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"tS" = (/obj/structure/window/basic{tag = "icon-window (NORTHEAST)"; icon_state = "window"; dir = 5},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"tT" = (/obj/machinery/door/window/southleft{dir = 1; name = "exterior door"},/turf/simulated/floor{icon_state = "carpet1"},/area/awaymission/box2550Away/general) -"tU" = (/obj/machinery/door/window/southright{dir = 1; name = "exterior door"},/turf/simulated/floor{icon_state = "carpet1"},/area/awaymission/box2550Away/general) -"tV" = (/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"tW" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"tX" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"tY" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/supply) -"tZ" = (/obj/structure/closet/crate/internals,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"ua" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"ub" = (/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/supply) -"uc" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "QM #1"},/obj/machinery/bot/mulebot{home_destination = "QM #1"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/supply) -"ud" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"ue" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/radio,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"uf" = (/obj/structure/computerframe,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"ug" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/stamp,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"uh" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"ui" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"uj" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"uk" = (/obj/machinery/door/airlock/command{name = "Teleport Access"; req_access_txt = "17"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"ul" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/box2550away/cola,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"um" = (/obj/machinery/door/airlock{name = "Bar Storage"; req_access_txt = "28"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"un" = (/obj/machinery/door/airlock/glass{name = "Med-Sci"; req_access_txt = "9"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"uo" = (/obj/structure/sink{pixel_y = 20},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"up" = (/obj/structure/crematorium,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"uq" = (/obj/machinery/crema_switch{pixel_x = 22},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"ur" = (/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) -"us" = (/turf/simulated/floor{icon_state = "carpetW"},/area/awaymission/box2550Away/general) -"ut" = (/turf/simulated/floor{icon_state = "carpetE"},/area/awaymission/box2550Away/general) -"uu" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) -"uv" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) -"uw" = (/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) -"ux" = (/obj/machinery/mass_driver{dir = 4; id = "chapelgun"},/obj/machinery/door/window/westleft{name = "Chapel Mass Driver"; req_access_txt = "22"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"uy" = (/obj/machinery/door/poddoor{id = "chapelgun"; name = "Chapel Mass Driver"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"uz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"uA" = (/obj/machinery/door/airlock/maintenance{name = "Quartermaster's Office"; req_access_txt = "41"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"uB" = (/obj/structure/closet/crate,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"uC" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "QM #2"},/obj/machinery/bot/mulebot{home_destination = "QM #1"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/supply) -"uD" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"uE" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/stack/rods{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"uF" = (/obj/item/device/radio/intercom{dir = 4; pixel_x = 27},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"uG" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"uH" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"uI" = (/obj/item/device/radio/intercom{pixel_y = 20},/obj/structure/closet/crate,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"uJ" = (/obj/item/weapon/crowbar,/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) -"uK" = (/obj/item/device/radio/intercom{broadcasting = 1; freerange = 1; pixel_y = 20},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; frequency = 1447; pixel_x = 20; pixel_y = 20},/obj/item/device/radio/intercom{freerange = 1; pixel_x = -20; pixel_y = 20},/obj/item/device/radio/intercom{freerange = 1; frequency = 1359; pixel_x = -30},/obj/item/device/radio/intercom{freerange = 1; frequency = 1357; pixel_x = 30},/obj/item/device/radio/intercom{freerange = 1; frequency = 1355; pixel_x = -35; pixel_y = 35},/obj/item/device/radio/intercom{freerange = 1; frequency = 1353; pixel_x = 35; pixel_y = 35},/obj/effect/landmark/corpse/AICorpse{name = "XISC"},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"uL" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"uM" = (/obj/structure/table/woodentable{tag = "icon-woodentable (WEST)"; icon_state = "woodentable"; dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"uN" = (/obj/structure/closet/secure_closet/courtroom,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"uO" = (/obj/structure/piano{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"uP" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"uQ" = (/obj/structure/closet/gmcloset{req_access_txt = "28"},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"uR" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"uS" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"uT" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"uU" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = -28},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"uV" = (/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) -"uW" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) -"uX" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) -"uY" = (/turf/simulated/floor{icon_state = "carpetNW"},/area/awaymission/box2550Away/general) -"uZ" = (/turf/simulated/floor{icon_state = "carpetN"},/area/awaymission/box2550Away/general) -"va" = (/turf/simulated/floor{icon_state = "carpetNE"},/area/awaymission/box2550Away/general) -"vb" = (/obj/machinery/driver_button{id = "chapelgun"; name = "Chapel Mass Driver Button"; pixel_x = 24; req_access_txt = "22"; text = "chapel"},/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) -"vc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"vd" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"ve" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "QM #3"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/supply) -"vf" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/multitool,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"vg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"vh" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"vi" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"vj" = (/obj/machinery/turretid,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"vk" = (/obj/structure/table/woodentable{dir = 10},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"vl" = (/obj/structure/table/woodentable,/obj/item/weapon/paper/Court,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"vm" = (/obj/structure/table/woodentable{dir = 6},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"vn" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"vo" = (/obj/structure/table/woodentable{dir = 9},/obj/effect/decal/cleanable/generic,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"vp" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/paper_bin,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"vq" = (/obj/structure/rack{dir = 8},/obj/item/weapon/storage/briefcase,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"vr" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"vs" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"vt" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"vu" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"vv" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/obj/item/clothing/head/that,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"vw" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"vx" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"vy" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"vz" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Crematorium Access"; req_access_txt = "27"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) -"vA" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Crematorium Access"; req_access_txt = "27"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"vB" = (/turf/simulated/floor{icon_state = "carpet1"},/area/awaymission/box2550Away/general) -"vC" = (/turf/simulated/floor{icon_state = "carpet2"},/area/awaymission/box2550Away/general) -"vD" = (/obj/structure/table/woodentable{dir = 9},/turf/simulated/floor{icon_state = "carpet"},/area/awaymission/box2550Away/general) -"vE" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/paper_bin,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"vF" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"vG" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{dir = 8; name = "Cargo Office"; req_access_txt = "41"},/obj/machinery/door/window/westleft{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"vH" = (/obj/structure/closet/crate/medical,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"vI" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "QM #4"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/supply) -"vJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"vK" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"vL" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{name = "Reception Window"; req_access_txt = "0"},/obj/machinery/door/window/westleft{name = "Cargo Office"; req_access_txt = "31"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"vM" = (/obj/machinery/door/window/northright{base_state = "left"; dir = 8; icon_state = "left"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"vN" = (/obj/machinery/door/airlock/command{icon_state = "door_closed"; lockdownbyai = 0; locked = 0; name = "Teleport Access"; req_access_txt = "17"},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"vO" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Security"; location = "Court"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"vP" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable{dir = 10},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"vQ" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"vR" = (/obj/structure/closet/box2550away/lawcloset,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"vS" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"vT" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"vU" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"vV" = (/obj/structure/table/reinforced{dir = 9; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"vW" = (/obj/structure/table/reinforced{dir = 5; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"vX" = (/obj/structure/closet/crate,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"vY" = (/obj/structure/morgue,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"vZ" = (/turf/simulated/floor{icon_state = "carpetS"},/area/awaymission/box2550Away/general) -"wa" = (/obj/structure/table/woodentable{dir = 10},/turf/simulated/floor{icon_state = "carpet"},/area/awaymission/box2550Away/general) -"wb" = (/turf/simulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) -"wc" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"wd" = (/obj/item/device/radio/intercom{pixel_y = -24},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"we" = (/obj/structure/table,/obj/item/weapon/stamp,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"wf" = (/obj/machinery/door_control{name = "QM Loading Dock"; icon_state = "doorctrl0"; layer = 4; pixel_x = 0; pixel_y = -24; level = 2; req_access_txt = "0"; id = "QMLoaddoor"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"wg" = (/obj/machinery/autolathe,/turf/simulated/floor,/area/awaymission/box2550Away/supply) -"wh" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"wi" = (/obj/machinery/power/smes{charge = 5e+006},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"wj" = (/obj/machinery/power/terminal{dir = 8},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) -"wk" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"wl" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/stool/bed/chair{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"wm" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/window{dir = 4; icon = 'icons/obj/doors/windoor.dmi'; req_access_txt = "1"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"wn" = (/obj/machinery/door/airlock{name = "Law Office"; req_access_txt = "38"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"wo" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1357; pixel_x = 30},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"wp" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"wq" = (/obj/structure/stool{pixel_y = 8},/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Mr Deempisi"},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"wr" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/obj/item/weapon/gun/projectile/shotgun,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"ws" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"wt" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"wu" = (/obj/structure/computerframe,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"wv" = (/obj/machinery/door/airlock/medical{name = "Cryogenics"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"ww" = (/obj/item/weapon/wrench,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"wx" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) -"wy" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = -28},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) -"wz" = (/turf/simulated/floor{icon_state = "carpetSW"},/area/awaymission/box2550Away/general) -"wA" = (/turf/simulated/floor{icon_state = "carpetSE"},/area/awaymission/box2550Away/general) -"wB" = (/obj/item/device/radio/intercom{pixel_x = 31},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) -"wC" = (/obj/machinery/conveyor{id = "QMLoad"},/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor"; name = "Supply Dock Loading Door"; opacity = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"wD" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"wE" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"wF" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/machinery/status_display{pixel_y = 2; supply_display = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"wG" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"wH" = (/obj/machinery/door/airlock/external{name = "Supply Dock Airlock"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) -"wI" = (/obj/structure/closet/crate,/turf/simulated/floor,/area/awaymission/box2550Away/command) -"wJ" = (/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/command) -"wK" = (/turf/simulated/floor{tag = "icon-corner_west"; icon_state = "corner_west"},/area/awaymission/box2550Away/command) -"wL" = (/turf/simulated/floor{tag = "icon-caution_south"; icon_state = "caution_south"},/area/awaymission/box2550Away/command) -"wM" = (/turf/simulated/floor{tag = "icon-corner_east"; icon_state = "corner_east"},/area/awaymission/box2550Away/command) -"wN" = (/obj/structure/grille,/turf/simulated/wall,/area) -"wO" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) -"wP" = (/obj/item/weapon/paper{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
Lifeless bodies line the walls, onyx floor forever calls. Amidst the dull and sorrow, one of ten shall hold not hollow.
HONK!
"; layer = 3; name = "Old Note #4"; pixel_x = -2; pixel_y = 4},/obj/structure/table,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"wQ" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHWEST)"; icon_state = "reinf_tabledir"; dir = 10},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"wR" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHEAST)"; icon_state = "reinf_tabledir"; dir = 6},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"wS" = (/obj/machinery/door/window/northright{name = "Bar Door"; req_access_txt = "28"},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) -"wT" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/obj/item/weapon/paper_bin,/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Medbay"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"wU" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/obj/item/weapon/paper{info = "1. Attach oxygen to pipe loop.There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
If you are reading this note, I am dead and gone. I entrust to you my most prized possession. If you can find it.
Your first clue lies in a public place, across a starry gaze. Where two meet four, there you will find it stranded on the floor.
HONK!
"; layer = 3; name = "Old Note #1"; pixel_x = -6; pixel_y = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"zh" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"zi" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"zj" = (/obj/machinery/nuclearbomb{r_code = "LOLNO"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"zk" = (/obj/item/weapon/paper{info = "For safety reasons this nuke cannot be deployed. We apologise for the inconvenience. Have a nice day."},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"zl" = (/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"zm" = (/obj/item/weapon/mop,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"zn" = (/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"zo" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall,/area/awaymission/box2550Away/general) -"zp" = (/obj/structure/disposalpipe/junction,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) -"zq" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = -27},/obj/item/device/assembly/igniter,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"zr" = (/obj/structure/table/reinforced{name = "pharmacy counter"},/obj/machinery/door/window/northleft{dir = 4; icon_state = "left"; name = "Pharmacy Outer"; tag = "icon-left"},/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "Pharmacy Inner"; req_access_txt = "33"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"zs" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/gun/syringe,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"zt" = (/obj/machinery/door/airlock/maintenance{name = "Medical Maintenance"; req_access_txt = "14;5"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"zu" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"zv" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"zw" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"zx" = (/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"zy" = (/obj/item/weapon/light/tube,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"zz" = (/obj/item/weapon/wrench,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"zA" = (/obj/structure/closet/crate,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"zB" = (/obj/structure/mopbucket,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"zC" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"zD" = (/obj/structure/closet/jcloset,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"zE" = (/obj/structure/closet/l3closet,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"zF" = (/obj/structure/stool{pixel_y = 8},/obj/item/device/radio/intercom{pixel_y = -29},/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"zG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"zH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"zI" = (/obj/structure/rack,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"zJ" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) -"zK" = (/obj/item/weapon/grenade/chem_grenade,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"zL" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"zM" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/healthanalyzer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"zN" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"zO" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"zP" = (/obj/item/weapon/crowbar,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"zQ" = (/obj/structure/table,/obj/structure/bedsheetbin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"zR" = (/obj/structure/rack{dir = 1},/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"zS" = (/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"zT" = (/obj/machinery/door/airlock{name = "Emergency Storage"; req_access_txt = "0"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"zU" = (/obj/item/weapon/table_parts,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"zV" = (/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = -5},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"zW" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"zX" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/paper,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"zY" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"zZ" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"Aa" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/storage/box/beakers,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"Ab" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/storage/box/gloves,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"Ac" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"Ad" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"Ae" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/box/beakers,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"Af" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"Ag" = (/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/maint) -"Ah" = (/obj/item/weapon/storage/box/lights,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"Ai" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) -"Aj" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) -"Ak" = (/obj/structure/disposalpipe/junction{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) -"Al" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) -"Am" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/window/westleft{dir = 2; icon_state = "left"; name = "Virology"; req_access_txt = "39"; tag = "icon-left"},/obj/machinery/door/window/westleft{dir = 1; icon_state = "left"; name = "Virology"; req_access_txt = "39"; tag = "icon-left"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"An" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) -"Ao" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"Ap" = (/obj/structure/disposalpipe/junction{dir = 0; icon_state = "pipe-y"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) -"Aq" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) -"Ar" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"As" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) -"At" = (/turf/simulated/floor/plating{desc = "There is some old writing on this floor. You are barely able to read out a few lines from a tangled scribble.
In a chamber a great mirror lies, cut away it solemn cries. Travel bold as thou might, piercing vastness as a kite.
HONK!
"; name = "Old Note #6"},/area/awaymission/box2550Away/maint) -"Au" = (/obj/item/device/radio/intercom{dir = 4; pixel_x = 31},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"Av" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/engineering) -"Aw" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/engineering) -"Ax" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"Ay" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"Az" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) -"AA" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"AB" = (/obj/machinery/conveyor{dir = 4; id = "garbage"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"AC" = (/obj/machinery/conveyor{id = "garbage"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"AD" = (/obj/structure/disposalpipe/junction{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"AE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"AF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"AG" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"AH" = (/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"AI" = (/turf/simulated/floor{dir = 5; icon_state = "green"; tag = "icon-green (NORTHWEST)"},/area/awaymission/box2550Away/engineering) -"AJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"AK" = (/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) -"AL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"AM" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"AN" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"AO" = (/obj/machinery/door/window/westleft{dir = 8; icon_state = "left"; name = "Virology"; req_access_txt = "39"; tag = "icon-left"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"AP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"AQ" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_access_txt = "26;12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"AR" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"AS" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "waste_in"; name = "Waste Air Tank Control"; output_tag = "waste_out"},/turf/simulated/floor{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/box2550Away/engineering) -"AT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"AU" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "waste_sensor"; output = 63},/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) -"AV" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"AW" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Rose"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"AX" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Jade"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"AY" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"AZ" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 28},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"Ba" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/sign/biohazard,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"Bb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"Bc" = (/obj/machinery/door/airlock/maintenance{name = "Disposal Access"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"Bd" = (/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/maint) -"Be" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) -"Bf" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) -"Bg" = (/obj/structure/closet,/obj/effect/landmark/corpse/away/box2550/jan,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"Bh" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24;12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Bi" = (/turf/simulated/floor{tag = "icon-green (SOUTHEAST)"; icon_state = "green"; dir = 6},/area/awaymission/box2550Away/engineering) -"Bj" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"Bk" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Casey"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"Bl" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"Bm" = (/obj/structure/stool,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"Bn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"Bo" = (/obj/machinery/conveyor_switch{id = "garbage"},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/maint) -"Bp" = (/obj/machinery/door_control{id = "Disposal Entrance"; name = "Incinerator Access Control"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/maint) -"Bq" = (/obj/machinery/conveyor{id = "garbage"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Disposal Entrance"; name = "Incinerator Blast Door"; opacity = 0; p_open = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"Br" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"Bs" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Bt" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Bu" = (/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Bv" = (/obj/structure/window/basic{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Bw" = (/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Bx" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"By" = (/turf/simulated/wall,/area/awaymission/box2550Away/research) -"Bz" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Dave"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"BA" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "John"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"BB" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"BC" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/reagent_containers/glass/bottle/flu_virion,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"BD" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/reagent_containers/glass/bottle/cold,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"BE" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"BF" = (/obj/machinery/computer/pandemic{pixel_x = -4; pixel_y = 3},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) -"BG" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"BH" = (/obj/machinery/conveyor{id = "garbage"},/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "Disposal Entrance"; name = "Incinerator Blast Door"; opacity = 1},/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) -"BI" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'DANGER: FIRE'"; icon_state = "fire"; name = "DANGER: FIRE"; tag = "icon-fire"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) -"BJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"BK" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/window/basic,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"BL" = (/obj/structure/window/basic,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"BM" = (/obj/structure/alien/weeds,/obj/item/weapon/paper{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
Without guidance its shelter thou shall seek, desperate please so boldly thou will speak. A hand of mares across the stars shall cut, the central steed hides a secret underneath his gut.
HONK!
"; layer = 3; name = "Old Note #11"; pixel_y = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"BN" = (/obj/effect/landmark/corpse/facehugCorpse{name = "Curly"},/obj/structure/alien/weeds,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"BO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"BP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) -"BQ" = (/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"BR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"BS" = (/obj/machinery/conveyor{id = "garbage"},/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) -"BT" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_access_txt = "26;12"},/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) -"BU" = (/obj/machinery/igniter{icon_state = "igniter0"; id = "Incinerator"; on = 0},/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) -"BV" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"BW" = (/obj/structure/window/basic,/obj/structure/window/basic{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"BX" = (/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"BY" = (/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"BZ" = (/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Ca" = (/obj/effect/landmark/corpse/facehugCorpse{name = "Moe"},/obj/structure/alien/weeds,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"Cb" = (/obj/effect/landmark/corpse/facehugCorpse{name = "Larry"},/obj/structure/alien/weeds,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"Cc" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor{tag = "icon-arrival (WEST)"; icon_state = "arrival"; dir = 8},/area/awaymission/box2550Away/general) -"Cd" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Ce" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Cf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Cg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Ch" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) -"Ci" = (/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) -"Cj" = (/turf/simulated/floor{tag = "icon-arrival (WEST)"; icon_state = "arrival"; dir = 8},/area/awaymission/box2550Away/general) -"Ck" = (/obj/machinery/door_control{id = "Disposal Exit"; name = "Exterior Vent Control"; pixel_y = -25},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"Cl" = (/obj/structure/closet/box2550away/toxins_white,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Cm" = (/obj/item/device/analyzer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Cn" = (/obj/machinery/air_sensor{frequency = 1442; id_tag = "tox_storage"; output = 63},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Co" = (/obj/machinery/door/window/westleft{name = "Toxins Delivery"; req_access_txt = "8"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/research) -"Cp" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "Toxins Research"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/research) -"Cq" = (/turf/simulated/floor,/area/awaymission/box2550Away/research) -"Cr" = (/obj/machinery/status_display{pixel_x = -1},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/general) -"Cs" = (/obj/structure/window/reinforced,/turf/simulated/floor{tag = "icon-arrival (WEST)"; icon_state = "arrival"; dir = 8},/area/awaymission/box2550Away/general) -"Ct" = (/obj/effect/decal/cleanable/blood/gibs{tag = "icon-gibup1"; icon_state = "gibup1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"Cu" = (/obj/structure/computerframe,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Cv" = (/obj/item/device/radio/intercom{dir = 1; pixel_y = 20},/obj/machinery/computer/general_air_control{frequency = 1441; name = "Supply Air Tank Monitor"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Cw" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Cx" = (/turf/simulated/floor{tag = "icon-escape (NORTHEAST)"; icon_state = "escape"; dir = 5},/area/awaymission/box2550Away/engineering) -"Cy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"Cz" = (/obj/machinery/conveyor{id = "garbage"},/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "Disposal Exit"; name = "Disposal Exit Vent"; opacity = 1},/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) -"CA" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"CB" = (/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"CC" = (/turf/simulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) -"CD" = (/obj/effect/decal/cleanable/blood/gibs{tag = "icon-gibmid3"; icon_state = "gibmid3"},/obj/effect/decal/cleanable/blood/gibs{tag = "icon-gibbl3"; icon_state = "gibbl3"},/obj/effect/decal/cleanable/blood/gibs{tag = "icon-gib3"; icon_state = "gib3"},/obj/item/weapon/paper{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
One of five is bare and white, sitting empty without delight. Music drifts across the room, drinks are passed in earnest bloom.
HONK!
"; layer = 3; name = "Old Note #3"; pixel_y = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"CE" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"CF" = (/obj/machinery/door/window/westleft{name = "Atmospherics Control"; req_access_txt = "24"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"CG" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"},/turf/simulated/floor{tag = "icon-escape (EAST)"; icon_state = "escape"; dir = 4},/area/awaymission/box2550Away/engineering) -"CH" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) -"CI" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) +"qg" = (/obj/structure/table/woodentable{dir = 10},/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"qh" = (/obj/machinery/door/window/northright{name = "library desk door"; req_access_txt = "37"},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"qi" = (/obj/structure/table/woodentable{dir = 6},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"qj" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = -28},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"qk" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"ql" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/turf/unsimulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) +"qm" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"qn" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"qo" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"qp" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"qq" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"qr" = (/obj/structure/sink{pixel_y = 20},/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"qs" = (/obj/machinery/door/airlock{name = "Unit 1"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"qt" = (/obj/structure/rack{dir = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"qu" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"qv" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/cell,/obj/item/weapon/pen{desc = "It writes upside down."; name = "Astronaut Pen"},/obj/item/weapon/paper,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"qw" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/machinery/camera/motion{c_tag = "EVA Storage"},/obj/item/clothing/head/welding,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"qx" = (/obj/structure/reagent_dispensers/watertank,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"qy" = (/obj/structure/reagent_dispensers/fueltank,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"qz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"qA" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/device/flash/box2550away,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"qB" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/flash/box2550away,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"qC" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/aiModule/reset,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"qD" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"qE" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/machinery/cell_charger{pixel_y = 5},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"qF" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/aicard,/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"qG" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/circuitboard/olddoor,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"qH" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"qI" = (/obj/machinery/power/smes,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"qJ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"qK" = (/obj/structure/rack{dir = 8},/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"qL" = (/obj/machinery/gateway{dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"qM" = (/obj/machinery/gateway{dir = 9},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"qN" = (/obj/machinery/gateway{dir = 5},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"qO" = (/obj/machinery/door/airlock{name = "Shower"},/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"qP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"qQ" = (/turf/unsimulated/floor{tag = "icon-warning (SOUTHWEST)"; icon_state = "warning"; dir = 10},/area/awaymission/box2550Away/general) +"qR" = (/obj/machinery/door/airlock{name = "Changing Room"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"qS" = (/obj/structure/closet/wardrobe/mixed,/obj/effect/landmark/corpse/away/box2550/det,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"qT" = (/obj/structure/table/reinforced,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"qU" = (/obj/structure/sink{pixel_y = 20},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"qV" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"qW" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/storage/firstaid/regular,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"qX" = (/obj/machinery/gateway{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"qY" = (/obj/machinery/gateway/centeraway,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"qZ" = (/obj/machinery/gateway{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"ra" = (/obj/machinery/door/airlock{name = "Unit 2"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"},/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"rb" = (/obj/structure/rack{dir = 4},/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/mask/breath/box2550away,/obj/item/weapon/tank/jetpack,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"rc" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"rd" = (/obj/structure/rack{dir = 8},/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/mask/breath/box2550away,/obj/item/weapon/tank/jetpack,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"re" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rf" = (/obj/machinery/power/terminal{tag = "icon-term (NORTH)"; icon_state = "term"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rg" = (/obj/item/clothing/glasses/meson,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"rh" = (/obj/item/weapon/screwdriver{pixel_y = 16},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"ri" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{icon_state = "warning"; tag = "icon-warning (SOUTH)"},/area/awaymission/box2550Away/general) +"rj" = (/obj/machinery/vending/coffee{active = 0; stat = 1},/obj/item/weapon/paper{anchored = 0; info = "If you're thirsty, it's time to go home."; name = "Out of Order"},/turf/unsimulated/floor{tag = "icon-warning (SOUTHEAST)"; icon_state = "warning"; dir = 6},/area/awaymission/box2550Away/general) +"rk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"rl" = (/obj/structure/window/reinforced,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"rm" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"rn" = (/obj/machinery/door/airlock/command{icon_state = "door_closed"; locked = 0; name = "E.V.A."; req_access_txt = "18"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"ro" = (/obj/structure/dispenser,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"rp" = (/obj/machinery/gateway{dir = 6},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rq" = (/obj/machinery/gateway,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rr" = (/obj/machinery/gateway{dir = 10},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rs" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"rt" = (/obj/structure/rack{dir = 4},/obj/item/weapon/circuitboard/secure_data,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"ru" = (/obj/structure/rack{dir = 8},/obj/item/weapon/circuitboard/cloning,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"rv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"rw" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"rx" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"ry" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; pixel_x = 30},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"rz" = (/obj/machinery/door/window/eastright,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"rA" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/general) +"rB" = (/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"rC" = (/obj/structure/grille,/turf/unsimulated/wall/other,/area/awaymission/box2550Away/engineering) +"rD" = (/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/engineering) +"rE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"rF" = (/turf/unsimulated/floor{dir = 5; icon_state = "green"; tag = "icon-green (NORTHWEST)"},/area/awaymission/box2550Away/engineering) +"rG" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rH" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rI" = (/obj/machinery/door/window/westleft{dir = 8; icon_state = "left"; name = "Virology"; req_access_txt = "39"; tag = "icon-left"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"rJ" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"rK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"rL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rM" = (/obj/machinery/conveyor{id = "garbage"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rO" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_access_txt = "26;12"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rQ" = (/obj/structure/disposalpipe/junction{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rS" = (/turf/unsimulated/wall/other,/area/awaymission/box2550Away/engineering) +"rT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rV" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"rW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"rX" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "waste_in"; name = "Waste Air Tank Control"; output_tag = "waste_out"},/turf/unsimulated/floor{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/box2550Away/engineering) +"rY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"rZ" = (/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/maint) +"sa" = (/obj/machinery/door/airlock/maintenance{name = "Disposal Access"; req_access_txt = "12"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"sb" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Jade"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"sc" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 28},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"sd" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"se" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Rose"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"sf" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"sg" = (/obj/structure/closet/l3closet,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"sh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/sign/biohazard,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"si" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/medical) +"sj" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/medical) +"sk" = (/obj/structure/disposalpipe/junction{dir = 4},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/maint) +"sl" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/maint) +"sm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/window/westleft{dir = 2; icon_state = "left"; name = "Virology"; req_access_txt = "39"; tag = "icon-left"},/obj/machinery/door/window/westleft{dir = 1; icon_state = "left"; name = "Virology"; req_access_txt = "39"; tag = "icon-left"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"sn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/biohazard,/turf/unsimulated/wall/other,/area/awaymission/box2550Away/maint) +"so" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/maint) +"sp" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"sq" = (/obj/structure/disposalpipe/junction{dir = 0; icon_state = "pipe-y"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/maint) +"sr" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/maint) +"ss" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/medical) +"st" = (/obj/item/weapon/storage/box/lights,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"su" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"sv" = (/obj/structure/closet/secure_closet/personal,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"sw" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/maint) +"sx" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"sy" = (/obj/machinery/conveyor{dir = 4; id = "garbage"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"sz" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/hand_labeler,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"sA" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"sB" = (/obj/item/device/radio/intercom{dir = 4; pixel_x = 31},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"sC" = (/turf/unsimulated/floor/plating{desc = "There is some old writing on this floor. You are barely able to read out a few lines from a tangled scribble.
In a chamber a great mirror lies, cut away it solemn cries. Travel bold as thou might, piercing vastness as a kite.
HONK!
"; name = "Old Note #6"},/area/awaymission/box2550Away/maint) +"sD" = (/obj/structure/closet/crate,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"sE" = (/obj/structure/reagent_dispensers/watertank,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"sF" = (/obj/machinery/igniter{icon_state = "igniter0"; id = "Incinerator"; on = 0},/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/maint) +"sG" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_access_txt = "26;12"},/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/maint) +"sH" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"sI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"sJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"sK" = (/obj/machinery/conveyor{id = "garbage"},/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/maint) +"sL" = (/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = 0; pixel_y = 24},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"sM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"sN" = (/turf/unsimulated/wall/other,/area/awaymission/box2550Away/research) +"sO" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/window/basic,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"sP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/disposalpipe/segment,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"sQ" = (/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"sR" = (/obj/structure/window/basic,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"sS" = (/obj/effect/landmark/corpse/facehugCorpse{name = "Curly"},/obj/structure/alien/weeds,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"sT" = (/obj/structure/alien/weeds,/obj/item/weapon/paper/crumpled/bloody{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
Without guidance its shelter thou shall seek, desperate please so boldly thou will speak. A hand of mares across the stars shall cut, the central steed hides a secret underneath his gut.
HONK!
"; layer = 3; name = "Old Note #11"; pixel_y = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"sU" = (/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/research) +"sV" = (/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/maint) +"sW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/maint) +"sX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"sY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"sZ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"ta" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"tb" = (/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"tc" = (/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"td" = (/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"te" = (/obj/effect/landmark/corpse/facehugCorpse{name = "Moe"},/obj/structure/alien/weeds,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"tf" = (/obj/effect/landmark/corpse/facehugCorpse{name = "Larry"},/obj/structure/alien/weeds,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"tg" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor{tag = "icon-arrival (WEST)"; icon_state = "arrival"; dir = 8},/area/awaymission/box2550Away/general) +"th" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"ti" = (/obj/structure/window/basic{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"tj" = (/obj/structure/window/basic,/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"tk" = (/obj/structure/stool,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tl" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"tm" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tn" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Casey"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"to" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"tp" = (/obj/machinery/conveyor{id = "garbage"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Disposal Entrance"; name = "Incinerator Blast Door"; opacity = 0; p_open = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"tq" = (/obj/machinery/conveyor_switch{id = "garbage"},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/maint) +"tr" = (/obj/machinery/door_control{id = "Disposal Entrance"; name = "Incinerator Access Control"; pixel_x = 24; pixel_y = 0},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/maint) +"ts" = (/turf/unsimulated/floor{tag = "icon-green (SOUTHEAST)"; icon_state = "green"; dir = 6},/area/awaymission/box2550Away/engineering) +"tt" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/research) +"tu" = (/obj/structure/closet,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"tv" = (/obj/structure/closet,/obj/effect/landmark/corpse/away/box2550/jan,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"tw" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24;12"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"tx" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'DANGER: FIRE'"; icon_state = "fire"; name = "DANGER: FIRE"; tag = "icon-fire"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/maint) +"ty" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"tz" = (/obj/machinery/conveyor{id = "garbage"},/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "Disposal Entrance"; name = "Incinerator Blast Door"; opacity = 1},/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/maint) +"tA" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/reagent_containers/glass/bottle/cold,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tB" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/reagent_containers/glass/bottle/flu_virion,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tC" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/storage/box/gloves,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tD" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/storage/box/beakers,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tE" = (/obj/machinery/computer/pandemic{pixel_x = -4; pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tF" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/storage/box/syringes,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tG" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Dave"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tH" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "John"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tI" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tJ" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"tK" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"tL" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"tM" = (/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"tN" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/disposalpipe/segment,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"tO" = (/obj/machinery/door/airlock{name = "Custodial Closet"; req_access_txt = "26"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"tP" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Construction Site Access"; req_access_txt = "32"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"tQ" = (/obj/structure/sign/securearea{name = "CONSTRUCTION"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/general) +"tR" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"tS" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/obj/structure/window/basic{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"tT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/medical) +"tU" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/medical) +"tV" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/medical) +"tW" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"tX" = (/obj/machinery/door/window{base_state = "right"; dir = 1; icon_state = "right"; name = "Chemical Lab"; req_access_txt = "33"},/obj/machinery/door/window{base_state = "right"; dir = 2; icon_state = "right"; name = "Chemical Lab"; req_access_txt = "33"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tY" = (/obj/machinery/door/window{dir = 1; icon = 'icons/obj/doors/windoor.dmi'; name = "Chemical Lab"; req_access_txt = "33"},/obj/machinery/door/window{dir = 2; icon = 'icons/obj/doors/windoor.dmi'; name = "Chemical Lab"; req_access_txt = "33"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tZ" = (/obj/machinery/door/window/eastright{dir = 2; name = "Medbay"; req_access_txt = "5"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"ua" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/medical) +"ub" = (/obj/machinery/sleep_console{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uc" = (/obj/machinery/sleeper{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"ud" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/general) +"ue" = (/obj/item/weapon/storage/box/lights/tubes,/obj/structure/disposalpipe/junction{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"uf" = (/obj/item/weapon/mop,/obj/item/weapon/storage/box/lights,/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"ug" = (/obj/structure/reagent_dispensers/watertank,/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"uh" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"ui" = (/obj/machinery/door/window/westleft{name = "Janitoral Delivery"; req_access_txt = "26"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/unsimulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/general) +"uj" = (/obj/item/weapon/reagent_containers/glass/bucket,/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"uk" = (/obj/structure/closet/secure_closet/chemical,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"ul" = (/obj/machinery/chem_dispenser,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"um" = (/obj/machinery/chem_master,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"un" = (/obj/structure/disposalpipe/segment,/obj/structure/table/reinforced{name = "black market counter"},/obj/machinery/door/window/northleft{dir = 4; icon_state = "left"; name = "Black Market"; req_access_txt = "33"; tag = "icon-left"},/obj/structure/falsewall,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"uo" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves,/obj/item/clothing/mask/muzzle,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"up" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/box/syringes,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uq" = (/obj/item/weapon/paper/crumpled/bloody{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
If you are reading this note, I am dead and gone. I entrust to you my most prized possession. If you can find it.
Your first clue lies in a public place, across a starry gaze. Where two meet four, there you will find it stranded on the floor.
HONK!
"; layer = 3; name = "Old Note #1"; pixel_x = -6; pixel_y = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"ur" = (/obj/structure/reagent_dispensers/fueltank,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"us" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/box/gloves,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"ut" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Confession Booth"; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"uu" = (/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uv" = (/obj/item/device/radio/intercom{dir = 1; frequency = 1443; name = "Confession Intercom"; pixel_y = 24},/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"uw" = (/turf/unsimulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) +"ux" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 2; icon_state = "right"; name = "Medbay Supplies"; req_access_txt = "5"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uy" = (/obj/machinery/door/window/westleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Medbay Supplies"; req_access_txt = "5"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uz" = (/obj/structure/closet/coffin,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uA" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uB" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uC" = (/obj/structure/table/woodentable{dir = 10},/obj/item/device/multitool,/turf/unsimulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uD" = (/obj/structure/window/reinforced{dir = 5},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"uE" = (/obj/structure/closet/coffin,/turf/unsimulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uF" = (/obj/item/weapon/caution{desc = "Caution! Construction Zone!"; name = "caution sign"},/turf/unsimulated/floor{icon_state = "warning"; tag = "icon-warning (SOUTH)"},/area/awaymission/box2550Away/general) +"uG" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"uH" = (/obj/machinery/vending/medical,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uI" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uJ" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/gun/syringe,/obj/item/weapon/storage/box/syringes,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uK" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uL" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/maint) +"uM" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"uN" = (/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uO" = (/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uP" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uQ" = (/obj/item/weapon/table_parts,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"uR" = (/obj/item/weapon/extinguisher,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"uS" = (/obj/machinery/door/airlock{name = "Emergency Storage"; req_access_txt = "0"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"uT" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uU" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/wall/other,/area/awaymission/box2550Away/medical) +"uV" = (/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = -5},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uW" = (/obj/machinery/door/window/eastright{dir = 1; name = "Medbay"; req_access_txt = "5"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uX" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/paper,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uY" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"uZ" = (/obj/structure/closet/crate,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"va" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vb" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vc" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/hand_labeler,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vd" = (/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/maint) +"ve" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/box/beakers,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vf" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vg" = (/obj/item/weapon/storage/toolbox/electrical,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"vh" = (/obj/item/weapon/paper{info = "For safety reasons this nuke cannot be deployed. We apologise for the inconvenience. Have a nice day."},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"vi" = (/obj/machinery/nuclearbomb{r_code = "LOLNO"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"vj" = (/obj/item/weapon/mop,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"vk" = (/obj/machinery/space_heater,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"vl" = (/obj/structure/reagent_dispensers/fueltank,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"vm" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"vn" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"vo" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"vp" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/maint) +"vq" = (/obj/machinery/door/airlock/maintenance{name = "Medical Maintenance"; req_access_txt = "14;5"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"vr" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/gun/syringe,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vs" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vt" = (/obj/structure/table/reinforced{name = "pharmacy counter"},/obj/machinery/door/window/northleft{dir = 4; icon_state = "left"; name = "Pharmacy Outer"; tag = "icon-left"},/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "Pharmacy Inner"; req_access_txt = "33"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vu" = (/obj/structure/disposalpipe/junction,/turf/unsimulated/wall/other,/area/awaymission/box2550Away/medical) +"vv" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = -27},/obj/item/device/assembly/igniter,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vw" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/general) +"vx" = (/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"vy" = (/obj/item/weapon/storage/belt/utility,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"vz" = (/obj/item/weapon/light/tube,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/storage) +"vA" = (/obj/item/weapon/wrench,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"vB" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"vC" = (/obj/structure/mopbucket,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"vD" = (/obj/structure/closet/l3closet,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"vE" = (/obj/structure/closet/jcloset,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"vF" = (/obj/item/weapon/crowbar,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vG" = (/obj/structure/table,/obj/structure/bedsheetbin,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vH" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vI" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/healthanalyzer,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vJ" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/firstaid/toxin,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vK" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/storage/firstaid/fire,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vL" = (/obj/structure/rack{dir = 1},/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"vM" = (/obj/structure/stool{pixel_y = 8},/obj/item/device/radio/intercom{pixel_y = -29},/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"vN" = (/obj/item/weapon/grenade/chem_grenade,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vO" = (/obj/structure/rack,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/head/welding,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"vP" = (/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vQ" = (/turf/unsimulated/floor{tag = "icon-carpetside (EAST)"; icon_state = "carpetside"; dir = 4},/area/awaymission/box2550Away/general) +"vR" = (/turf/unsimulated/floor{tag = "icon-carpet7-3"; icon_state = "carpet7-3"; dir = 2},/area/awaymission/box2550Away/general) +"vS" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"vT" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"vU" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"vV" = (/obj/structure/morgue,/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"vW" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = -28},/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"vX" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"vY" = (/obj/structure/closet/crate,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vZ" = (/obj/machinery/door/airlock/medical{name = "Cryogenics"; req_access_txt = "5"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"wa" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"wb" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"wc" = (/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wd" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"we" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/obj/item/weapon/gun/projectile/shotgun,/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wf" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wg" = (/obj/structure/stool{pixel_y = 8},/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Mr Deempisi"},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wh" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/stool/bed/chair{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"wi" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/window{dir = 4; icon = 'icons/obj/doors/windoor.dmi'; req_access_txt = "1"},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"wj" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"wk" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1357; pixel_x = 30},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"wl" = (/obj/machinery/door/airlock{name = "Law Office"; req_access_txt = "38"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"wm" = (/turf/unsimulated/floor{tag = "icon-carpet5-1"; icon_state = "carpet5-1"; dir = 2},/area/awaymission/box2550Away/general) +"wn" = (/turf/unsimulated/floor{tag = "icon-carpetside"; icon_state = "carpetside"; dir = 2},/area/awaymission/box2550Away/general) +"wo" = (/turf/unsimulated/floor{tag = "icon-carpet9-4 (NORTH)"; icon_state = "carpet9-4"; dir = 1},/area/awaymission/box2550Away/general) +"wp" = (/obj/item/device/radio/intercom{pixel_x = 31},/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"wq" = (/obj/machinery/power/smes{charge = 5e+006},/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"wr" = (/obj/machinery/power/terminal{dir = 8},/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"ws" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"wt" = (/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"wu" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"wv" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"ww" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/wall/other,/area/awaymission/box2550Away/supply) +"wx" = (/obj/machinery/autolathe,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"wy" = (/obj/machinery/conveyor{id = "QMLoad"},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"wz" = (/turf/unsimulated/wall/other,/area/awaymission/box2550Away/supply) +"wA" = (/obj/structure/table,/obj/item/weapon/stamp,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"wB" = (/obj/item/device/radio/intercom{pixel_y = -24},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"wC" = (/obj/machinery/door_control{name = "QM Loading Dock"; icon_state = "doorctrl0"; layer = 4; pixel_x = 0; pixel_y = -24; level = 2; req_access_txt = "0"; id = "QMLoaddoor"},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"wD" = (/obj/machinery/conveyor_switch{id = "QMLoad"},/turf/unsimulated/floor{tag = "icon-warning (WEST)"; icon_state = "warning"; dir = 8},/area/awaymission/box2550Away/supply) +"wE" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"wF" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"wG" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"wH" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"wI" = (/obj/structure/table/reinforced{dir = 5; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/syringe,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"wJ" = (/turf/unsimulated/floor{tag = "icon-carpet13-5 (NORTH)"; icon_state = "carpet13-5"; dir = 1},/area/awaymission/box2550Away/general) +"wK" = (/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/awaymission/box2550Away/general) +"wL" = (/turf/unsimulated/floor{tag = "icon-carpet5-1 (NORTH)"; icon_state = "carpet5-1"; dir = 1},/area/awaymission/box2550Away/general) +"wM" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"wN" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable{dir = 10},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"wO" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"wP" = (/obj/structure/closet/box2550away/lawcloset,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"wQ" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wR" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wS" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wT" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wU" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wV" = (/obj/structure/table/reinforced{dir = 9; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wW" = (/turf/unsimulated/floor{dir = 8; icon_state = "carpet2"; tag = "icon-carpetcorner (WEST)"},/area/awaymission/box2550Away/general) +"wX" = (/obj/structure/table/woodentable{dir = 10},/turf/unsimulated/floor{icon_state = "carpet"},/area/awaymission/box2550Away/general) +"wY" = (/obj/machinery/door/airlock/command{icon_state = "door_closed"; lockdownbyai = 0; locked = 0; name = "Teleport Access"; req_access_txt = "17"},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"wZ" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{name = "Reception Window"; req_access_txt = "0"},/obj/machinery/door/window/westleft{name = "Cargo Office"; req_access_txt = "31"},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"xa" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"xb" = (/obj/machinery/door/window/northright{base_state = "left"; dir = 8; icon_state = "left"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"xc" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{dir = 8; name = "Cargo Office"; req_access_txt = "41"},/obj/machinery/door/window/westleft{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"xd" = (/obj/structure/closet/crate,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"xe" = (/turf/unsimulated/floor{tag = "icon-warning (WEST)"; icon_state = "warning"; dir = 8},/area/awaymission/box2550Away/supply) +"xf" = (/obj/structure/closet/crate/medical,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"xg" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/paper_bin,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"xh" = (/turf/unsimulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/supply) +"xi" = (/turf/unsimulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/supply) +"xj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"xk" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/storage/firstaid/regular,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"xl" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"xm" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"xn" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/obj/item/clothing/head/that,/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"xo" = (/obj/machinery/vending/boozeomat,/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"xp" = (/obj/structure/table/woodentable,/obj/item/weapon/paper/Court,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"xq" = (/obj/structure/table/woodentable{dir = 6},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"xr" = (/obj/structure/table/woodentable{dir = 10},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"xs" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"xt" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/paper_bin,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"xu" = (/obj/structure/rack{dir = 8},/obj/item/weapon/storage/briefcase,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"xv" = (/obj/structure/table/woodentable{dir = 9},/obj/effect/decal/cleanable/generic,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"xw" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Crematorium Access"; req_access_txt = "27"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"xx" = (/turf/unsimulated/floor{tag = "icon-carpet6-2"; icon_state = "carpet6-2"; dir = 2},/area/awaymission/box2550Away/general) +"xy" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Crematorium Access"; req_access_txt = "27"},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"xz" = (/turf/unsimulated/floor{tag = "icon-carpetside (NORTH)"; icon_state = "carpetside"; dir = 1},/area/awaymission/box2550Away/general) +"xA" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"xB" = (/turf/unsimulated/floor{dir = 1; icon_state = "carpet2"; tag = "icon-carpetcorner (NORTH)"},/area/awaymission/box2550Away/general) +"xC" = (/obj/structure/table/woodentable{dir = 9},/turf/unsimulated/floor{icon_state = "carpet"},/area/awaymission/box2550Away/general) +"xD" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"xE" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/multitool,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"xF" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"xG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"xH" = (/obj/machinery/turretid,/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"xI" = (/obj/machinery/turret{dir = 1},/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"xJ" = (/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"xK" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"xL" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"xM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"xN" = (/obj/structure/table/woodentable{tag = "icon-woodentable (WEST)"; icon_state = "woodentable"; dir = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"xO" = (/obj/structure/closet/secure_closet/courtroom,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"xP" = (/obj/structure/piano{dir = 4},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"xQ" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"xR" = (/obj/machinery/computer/security/telescreen{icon = 'icons/obj/stationobjs.dmi'; icon_state = "entertainment"; name = "Entertainment monitor"; stat = 1},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/general) +"xS" = (/obj/structure/closet/gmcloset{req_access_txt = "28"},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"xT" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"xU" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"xV" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xW" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"xX" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xY" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"xZ" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) +"ya" = (/turf/unsimulated/floor{tag = "icon-carpet10-8 (NORTH)"; icon_state = "carpet10-8"; dir = 1},/area/awaymission/box2550Away/general) +"yb" = (/obj/machinery/driver_button{id = "chapelgun"; name = "Chapel Mass Driver Button"; pixel_x = 24; req_access_txt = "22"; text = "chapel"},/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yc" = (/obj/machinery/door/airlock/maintenance{name = "Quartermaster's Office"; req_access_txt = "41"},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"yd" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"ye" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"yf" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/stack/rods{amount = 50},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"yg" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"yh" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"yi" = (/obj/item/device/radio/intercom{dir = 4; pixel_x = 27},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"yj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"yk" = (/obj/item/device/radio/intercom{broadcasting = 1; freerange = 1; pixel_y = 20},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; frequency = 1447; pixel_x = 20; pixel_y = 20},/obj/item/device/radio/intercom{freerange = 1; pixel_x = -20; pixel_y = 20},/obj/item/device/radio/intercom{freerange = 1; frequency = 1359; pixel_x = -30},/obj/item/device/radio/intercom{freerange = 1; frequency = 1357; pixel_x = 30},/obj/item/device/radio/intercom{freerange = 1; frequency = 1355; pixel_x = -35; pixel_y = 35},/obj/item/device/radio/intercom{freerange = 1; frequency = 1353; pixel_x = 35; pixel_y = 35},/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"yl" = (/obj/item/device/radio/intercom{pixel_y = 20},/obj/structure/closet/crate,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"ym" = (/obj/item/weapon/crowbar,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"yn" = (/obj/structure/closet/coffin,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yo" = (/obj/structure/table/woodentable{dir = 9},/obj/item/device/flashlight/lamp,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yp" = (/obj/structure/table/woodentable{tag = "icon-woodentable (NORTH)"; icon_state = "woodentable"; dir = 1},/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yq" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yr" = (/obj/structure/closet/coffin,/obj/effect/landmark/corpse/away/box2550/cmo,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"ys" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/paper_bin,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yt" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Chaplain's Office"; req_access_txt = "22"},/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yu" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yv" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yw" = (/obj/machinery/door/airlock/glass{name = "Chief Medical Officer"; req_access_txt = "40"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yx" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Medbay Delivery"; req_access_txt = "34"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yy" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Medbay Delivery"; req_access_txt = "5"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yz" = (/obj/structure/reagent_dispensers/watertank,/obj/structure/disposalpipe/segment,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"yA" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire,/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away,/obj/item/clothing/glasses/meson,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"yB" = (/obj/structure/closet/wardrobe/chaplain_black,/turf/unsimulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yC" = (/obj/item/device/radio/intercom{dir = 1; pixel_y = 20},/turf/unsimulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yD" = (/obj/structure/noticeboard{dir = 1; pixel_y = 27},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yE" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Confession Booth (Chaplain)"; req_access_txt = "22"},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"yF" = (/obj/item/device/radio/intercom{frequency = 1443; name = "Confession Intercom"; pixel_y = -24},/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"yG" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/paper_bin,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yH" = (/obj/structure/table{dir = 9; icon_state = "tabledir"},/obj/item/weapon/scalpel,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yI" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{broadcasting = 1; pixel_y = 20},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yJ" = (/obj/structure/sink{pixel_y = 20},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yK" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"yL" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"yM" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"yN" = (/obj/machinery/door/airlock{name = "Bar Entrance"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"yO" = (/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/supply) +"yP" = (/obj/machinery/conveyor{id = "QMLoad"},/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor"; name = "Supply Dock Loading Door"; opacity = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"yQ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"yR" = (/obj/machinery/door/airlock/external{name = "Supply Dock Airlock"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"yS" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/supply) +"yT" = (/obj/machinery/door/airlock/maintenance{name = "QM Office Maintenance"; req_access_txt = "12;31"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"yU" = (/obj/structure/closet/coffin,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yV" = (/obj/machinery/door/window/northright{dir = 1; name = "Chaplain's Office"; req_access_txt = "22"},/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yW" = (/obj/machinery/door/window/northleft{dir = 1; name = "Chaplain's Office"; req_access_txt = "22"},/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yX" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"yY" = (/obj/structure/table,/obj/item/weapon/dice/d20,/obj/item/weapon/dice,/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"yZ" = (/obj/structure/table/woodentable{tag = "icon-woodentable (NORTH)"; icon_state = "woodentable"; dir = 1},/obj/item/weapon/paper_bin,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"za" = (/obj/structure/table/woodentable{tag = "icon-woodentable (NORTH)"; icon_state = "woodentable"; dir = 1},/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"zb" = (/obj/structure/table/woodentable{tag = "icon-woodentable (NORTH)"; icon_state = "woodentable"; dir = 1},/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"zc" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"zd" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHEAST)"; icon_state = "reinf_tabledir"; dir = 6},/obj/item/weapon/storage/box/gloves,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"ze" = (/obj/item/device/radio/intercom{dir = 4; pixel_x = 27},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zf" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"zg" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"zh" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"zi" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"zj" = (/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"zk" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"zl" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"zm" = (/obj/machinery/conveyor{id = "QMLoad"},/obj/structure/plasticflaps,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"zn" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"zo" = (/obj/structure/grille,/turf/unsimulated/wall/normal,/area) +"zp" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/command) +"zq" = (/obj/machinery/teleport/hub,/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/command) +"zr" = (/obj/structure/rack,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas/box2550away,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"zs" = (/obj/machinery/door/window/eastright{name = "Cargo Office"; req_access_txt = "31"},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"zt" = (/obj/structure/closet/crate,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"zu" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/command) +"zv" = (/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/command) +"zw" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"zx" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHEAST)"; icon_state = "reinf_tabledir"; dir = 6},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"zy" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHWEST)"; icon_state = "reinf_tabledir"; dir = 10},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"zz" = (/obj/machinery/door/window/northright{name = "Bar Door"; req_access_txt = "28"},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"zA" = (/obj/item/weapon/paper/crumpled/bloody{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
Lifeless bodies line the walls, onyx floor forever calls. Amidst the dull and sorrow, one of ten shall hold not hollow.
HONK!
"; layer = 3; name = "Old Note #4"; pixel_x = -2; pixel_y = 4},/obj/structure/table,/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"zB" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/obj/item/weapon/paper_bin,/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Medbay"; req_access_txt = "5"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zC" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zD" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/reagent_containers/syringe/antitoxin,/obj/item/weapon/reagent_containers/syringe/inaprovaline,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zE" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/obj/item/weapon/paper{info = "1. Attach oxygen to pipe loop.There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
The quest concludes soundly with each step, for so little is left kept. In a mirrored hall the last clue waits, the final number unseen one's destiny creates.
HONK!
"; layer = 3; name = "Old Note #12"; pixel_y = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/general) +"AR" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/general) +"AS" = (/obj/machinery/atmospherics/pipe/simple{dir = 5; icon_state = "intact-f"; layer = 3},/turf/simulated/shuttle/wall,/area/awaymission/box2550Away/general) +"AT" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/general) +"AU" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact-f"; initialize_directions = 9; layer = 3},/turf/simulated/shuttle/wall,/area/awaymission/box2550Away/general) +"AV" = (/obj/machinery/portable_atmospherics/pump,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"AW" = (/obj/machinery/door/airlock{name = "Unit 3"},/obj/structure/disposalpipe/junction,/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"AX" = (/obj/structure/rack{dir = 4},/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas/box2550away,/obj/item/clothing/head/welding,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"AY" = (/obj/machinery/vending/snack{active = 0; stat = 1},/obj/item/weapon/paper{anchored = 0; info = "If you're hungry, it's time to go home."; name = "Out of Order"},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"AZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"Ba" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"Bb" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"Bc" = (/obj/machinery/door/window{dir = 2; icon = 'icons/obj/doors/windoor.dmi'; name = "Captain's Quarters"; req_access_txt = "20"},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"Bd" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/raisins,/obj/item/trash/syndi_cakes,/turf/unsimulated/floor{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/box2550Away/command) +"Be" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/device/assembly/timer,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"Bf" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/stamp/hop,/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"Bg" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"Bh" = (/obj/structure/table/reinforced,/obj/machinery/door/window{dir = 4; icon = 'icons/obj/doors/windoor.dmi'; req_access_txt = "0"},/obj/machinery/door/window{base_state = "right"; dir = 8; icon = 'icons/obj/doors/windoor.dmi'; icon_state = "right"; name = "Heads of Staff"; req_access_txt = "19"},/turf/unsimulated/floor,/area/awaymission/box2550Away/command) +"Bi" = (/obj/item/weapon/paper/crumpled/bloody{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
In plain sight the next clue lies, hidden only by your eyes. In a corner much South of here, where great minds accomplish work so dear.
HONK!
"; layer = 3; name = "Old Note #5"; pixel_x = -6; pixel_y = 4},/obj/structure/morgue,/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) +"Bj" = (/obj/structure/stool/bed/chair,/obj/item/device/radio/intercom{dir = 4; pixel_x = 27},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Bk" = (/obj/machinery/clonepod,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Bl" = (/obj/machinery/computer/cloning,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Bm" = (/obj/structure/closet/l3closet,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Bn" = (/obj/item/weapon/storage/firstaid/regular,/obj/machinery/atmospherics/pipe/simple,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/box2550Away/general) +"Bo" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"Bp" = (/obj/machinery/door/airlock/command{name = "Teleport Access"; req_access_txt = "17"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"Bq" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"Br" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/supply) +"Bs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"Bt" = (/obj/structure/closet/crate/freezer,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"Bu" = (/obj/structure/closet/crate/internals,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"Bv" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"Bw" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/radio,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"Bx" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/stamp,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"By" = (/obj/machinery/door/poddoor{id = "chapelgun"; name = "Chapel Mass Driver"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"Bz" = (/obj/machinery/mass_driver{dir = 4; id = "chapelgun"},/obj/machinery/door/window/westleft{name = "Chapel Mass Driver"; req_access_txt = "22"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"BA" = (/obj/machinery/door/airlock/glass{name = "Med-Sci"; req_access_txt = "9"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"BB" = (/obj/machinery/crema_switch{pixel_x = 22},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"BC" = (/obj/structure/crematorium,/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"BD" = (/obj/machinery/door/airlock{name = "Bar Storage"; req_access_txt = "28"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"BE" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola,/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"BF" = (/obj/item/device/multitool,/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"BG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"BH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"BI" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"BJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"BK" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"BL" = (/obj/machinery/door/poddoor{id = "recieving"; name = "Cargo Pickup Door"; text = "null"},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"BM" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"BN" = (/obj/machinery/conveyor_switch{id = "QM"},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"BO" = (/obj/machinery/box2550away/fake_status_display{pixel_y = 2},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/supply) +"BP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/supply) +"BQ" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire,/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away,/obj/item/clothing/glasses/meson,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"BR" = (/obj/structure/window/basic{tag = "icon-window (NORTHEAST)"; icon_state = "window"; dir = 5},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"BS" = (/obj/machinery/door/window/southright{dir = 1; name = "exterior door"},/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/awaymission/box2550Away/general) +"BT" = (/obj/machinery/door/window/southleft{dir = 1; name = "exterior door"},/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/awaymission/box2550Away/general) +"BU" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"BV" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/turf/unsimulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) +"BW" = (/obj/structure/closet,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"BX" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Genetics Delivery"; req_access_txt = "9"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"BY" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Genetics Delivery"; req_access_txt = "34"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"BZ" = (/obj/structure/closet/crate/freezer,/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"Ca" = (/obj/structure/table,/obj/item/clothing/head/cakehat,/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"Cb" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Maintenance"; req_access_txt = "12;41"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Cc" = (/turf/unsimulated/floor{tag = "icon-warning (EAST)"; icon_state = "warning"; dir = 4},/area/awaymission/box2550Away/supply) +"Cd" = (/obj/machinery/conveyor{dir = 4; id = "QM"},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/supply) +"Ce" = (/obj/machinery/conveyor{dir = 4; id = "QM"},/obj/structure/plasticflaps,/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/supply) +"Cf" = (/obj/structure/closet/wardrobe/black,/obj/effect/landmark/corpse/away/box2550/captain,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Cg" = (/obj/structure/stool{pixel_y = 8},/obj/item/device/radio/intercom{pixel_y = 20},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"Ch" = (/obj/machinery/door/airlock/maintenance{name = "Bar Maintenance"; req_access_txt = "12; 28"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"Ci" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"Cj" = (/obj/structure/table,/obj/structure/noticeboard{pixel_y = 27},/obj/item/weapon/lighter/zippo,/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"Ck" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Jackson"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Cl" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "McKinley"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Cm" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/medical) +"Cn" = (/obj/structure/table,/turf/unsimulated/floor{dir = 8; icon_state = "escape"; tag = "icon-escape (WEST)"},/area/awaymission/box2550Away/general) +"Co" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{tag = "icon-warning (EAST)"; icon_state = "warning"; dir = 4},/area/awaymission/box2550Away/general) +"Cp" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Bush"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Cq" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"Cr" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/hand_labeler,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"Cs" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/cell,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"Ct" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/machinery/cell_charger,/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"Cu" = (/obj/machinery/door_control{name = "Recieving Access Control"; pixel_x = 0; pixel_y = 24; id = "recieving"},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"Cv" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/supply) +"Cw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Cx" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access_txt = "20"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/command) +"Cy" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/command) +"Cz" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"CA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/gmcloset{req_access_txt = "28"},/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"CB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"CC" = (/obj/structure/disposalpipe/junction,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"CD" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/window/northright{tag = "icon-right"; icon_state = "right"; dir = 2},/turf/unsimulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"CE" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/general) +"CF" = (/obj/machinery/computer/security/telescreen{icon = 'icons/obj/stationobjs.dmi'; icon_state = "entertainment"; name = "Entertainment monitor"; stat = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/maint) +"CG" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"CH" = (/obj/structure/disposalpipe/junction{dir = 4},/obj/structure/grille,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"CI" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/command) "CJ" = (/obj/structure/lattice,/turf/space,/area/awaymission/box2550Away/maint) "CK" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/space,/area/awaymission/box2550Away/maint) -"CL" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"CM" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"CN" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"CO" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"CP" = (/obj/machinery/portable_atmospherics/canister/air,/obj/structure/window/basic{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"CQ" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"CR" = (/obj/machinery/door/window{base_state = "left"; dir = 2; icon_state = "left"; name = "Toxins Delivery"; req_access_txt = "34"},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"CS" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; pixel_x = -30},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"CT" = (/obj/structure/window/reinforced,/turf/simulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) -"CU" = (/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Atmos Delivery"; req_access_txt = "24"; tag = "icon-left"},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/engineering) -"CV" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"CW" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"CX" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/machinery/embedded_controller/radio/access_controller{exterior_door_tag = "atmos_access_external"; id_tag = "atmos_access_console"; interior_door_tag = "atmos_access_internal"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"CY" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/device/t_scanner,/obj/item/device/t_scanner,/obj/item/device/t_scanner,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"CZ" = (/turf/simulated/wall,/area/awaymission/box2550Away/engineering) -"Da" = (/turf/simulated/floor{tag = "icon-escape (SOUTHEAST)"; icon_state = "escape"; dir = 6},/area/awaymission/box2550Away/engineering) -"Db" = (/obj/machinery/door/airlock/maintenance{name = "Chemical Lab Maintenance"; req_access_txt = "12;7"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Dc" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) -"Dd" = (/obj/machinery/door/airlock/medical{name = "Toxin Storage"; req_access_txt = "8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"De" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"Df" = (/obj/item/weapon/crowbar,/turf/simulated/floor,/area/awaymission/box2550Away/general) -"Dg" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; location = "Atmospherics"},/obj/machinery/door/window{base_state = "left"; dir = 2; icon_state = "left"; name = "Atmos Delivery"; req_access_txt = "34"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/engineering) -"Dh" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Di" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Dj" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Dk" = (/obj/structure/rack{dir = 4},/obj/item/clothing/suit/fire,/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Dl" = (/obj/machinery/pipedispenser/disposal,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Dm" = (/obj/machinery/door/poddoor{id = "mixingwaste"; name = "Waste Vent"},/turf/simulated/floor/engine,/area/awaymission/box2550Away/research) -"Dn" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/wrench,/obj/item/weapon/wirecutters,/obj/item/weapon/screwdriver{pixel_y = 16},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Do" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/weldingtool,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Dp" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = -5},/obj/item/device/assembly/timer,/obj/item/device/assembly/timer{pixel_x = 4; pixel_y = -8},/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = -5},/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = -5},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Dq" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/machinery/air_sensor{frequency = 1442; id_tag = "tox_main"; output = 63; pixel_y = 30},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Dr" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Ds" = (/obj/structure/dispenser,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Dt" = (/obj/machinery/access_button{pixel_x = 27; pixel_y = -6; master_tag = "tox_access_console"; frequency = 1451; command = "cycle_interior"},/obj/item/weapon/extinguisher,/obj/structure/disposalpipe/junction{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Du" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) -"Dv" = (/turf/simulated/floor{dir = 9; icon_state = "green"; tag = "icon-green (NORTHWEST)"},/area/awaymission/box2550Away/general) -"Dw" = (/turf/simulated/floor{tag = "icon-greencorner (NORTH)"; icon_state = "greencorner"; dir = 1},/area/awaymission/box2550Away/general) -"Dx" = (/obj/machinery/access_button{command = "cycle_exterior"; master_tag = "atmos_access_console"; pixel_x = 24},/turf/simulated/floor{tag = "icon-arrival (NORTHEAST)"; icon_state = "arrival"; dir = 5},/area/awaymission/box2550Away/general) -"Dy" = (/obj/machinery/access_button{command = "cycle_interior"; master_tag = "atmos_access_console"; pixel_x = -24},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Dz" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"DA" = (/turf/simulated/floor{icon_state = "corner_northeast"; tag = "icon-corner_northeast"},/area/awaymission/box2550Away/engineering) -"DB" = (/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/awaymission/box2550Away/engineering) -"DC" = (/turf/simulated/floor/engine/vacuum,/area/awaymission/box2550Away/research) -"DD" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1359; pixel_x = -30},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"DE" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"DF" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"DG" = (/obj/machinery/door/airlock/glass{frequency = 1451; icon_state = "door_locked"; id_tag = "tox_access_interior"; locked = 1; name = "Toxins Research Access"; req_access_txt = "7"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/awaymission/box2550Away/research) -"DH" = (/obj/machinery/embedded_controller/radio/access_controller{pixel_x = -1; pixel_y = -24; frequency = 1451; id_tag = "tox_access_console"; exterior_door_tag = "tox_access_exterior"; interior_door_tag = "tox_access_interior"},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"DI" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"DJ" = (/obj/machinery/door/airlock/medical{frequency = 1451; icon_state = "door_locked"; id_tag = "tox_access_exterior"; locked = 1; name = "Toxins Research"; req_access_txt = "7"},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"DK" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=AIE"; location = "AftH"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"DL" = (/turf/simulated/floor{dir = 4; icon_state = "arrival"; tag = "icon-arrival (EAST)"},/area/awaymission/box2550Away/general) -"DM" = (/obj/machinery/door/airlock/maintenance{frequency = 1449; icon_state = "door_locked"; id_tag = "atmos_access_external"; locked = 1; name = "Atmospherics Access"; req_access_txt = "24"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"DN" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"DO" = (/obj/machinery/access_button{master_tag = "atmos_access_console"; pixel_y = -24},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"DP" = (/obj/machinery/door/airlock/maintenance{frequency = 1449; icon_state = "door_locked"; id_tag = "atmos_access_internal"; locked = 1; name = "Atmospherics Access"; req_access_txt = "24"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"DQ" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "tox_in"; name = "Toxin Supply Control"; output_tag = "tox_out"},/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/engineering) -"DR" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "tox_sensor"},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/awaymission/box2550Away/engineering) -"DS" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/awaymission/box2550Away/engineering) -"DT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"DU" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"DV" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) -"DW" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) -"DX" = (/turf/simulated/floor{tag = "icon-green (SOUTHWEST)"; icon_state = "green"; dir = 10},/area/awaymission/box2550Away/general) -"DY" = (/turf/simulated/floor{tag = "icon-greencorner (WEST)"; icon_state = "greencorner"; dir = 8},/area/awaymission/box2550Away/general) -"DZ" = (/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"; tag = "icon-yellowcorner (WEST)"},/area/awaymission/box2550Away/general) -"Ea" = (/turf/simulated/floor{icon_state = "yellowcorner"; tag = "icon-yellowcorner"},/area/awaymission/box2550Away/general) -"Eb" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "bluecorner"},/area/awaymission/box2550Away/general) -"Ec" = (/turf/simulated/floor{tag = "icon-arrival (SOUTHEAST)"; icon_state = "arrival"; dir = 6},/area/awaymission/box2550Away/general) -"Ed" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/engineering) -"Ee" = (/turf/simulated/floor{tag = "icon-corner_east"; icon_state = "corner_east"},/area/awaymission/box2550Away/engineering) -"Ef" = (/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"Eg" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"Eh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"Ei" = (/turf/simulated/wall,/area) -"Ej" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'DANGER: FIRE'"; icon_state = "fire"; name = "DANGER: FIRE"; tag = "icon-fire"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) -"Ek" = (/obj/machinery/door_control{id = "mixingwaste"; name = "Waste Vent Control"; pixel_x = 0; pixel_y = 24},/obj/machinery/embedded_controller/radio/airlock_controller{pixel_x = -26; id_tag = "tox_airlock_control"; exterior_door_tag = "tox_airlock_exterior"; interior_door_tag = "tox_airlock_interior"; airpump_tag = "tox_airlock_pump"; sensor_tag = "tox_airlock_sensor"; sanitize_external = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"El" = (/obj/machinery/air_sensor{frequency = 1442; id_tag = "tox_mix"; output = 63},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Em" = (/obj/item/weapon/extinguisher,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"En" = (/obj/machinery/computer/general_air_control{frequency = 1442; icon_state = "alert:0"; name = "Toxin Lab Air Monitor"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Eo" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Ep" = (/obj/structure/table{dir = 1; icon_state = "tabledir"},/obj/item/weapon/wrapping_paper,/obj/item/weapon/wirecutters,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Eq" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/device/assembly,/obj/item/device/assembly,/obj/item/device/assembly,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Er" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/machinery/cell_charger,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Es" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Et" = (/obj/structure/closet/l3closet,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Eu" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/general) -"Ev" = (/obj/structure/closet/secure_closet/box2550away/scientist,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Ew" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Ex" = (/obj/structure/closet/l3closet,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Ey" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Ez" = (/obj/machinery/space_heater,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"EA" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"EB" = (/obj/machinery/door/poddoor{id = "mixvent"; name = "Mixer Room Vent"},/turf/simulated/floor/engine/vacuum,/area/awaymission/box2550Away/research) -"EC" = (/obj/machinery/sparker{id = "mixingsparker"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/engine/vacuum,/area/awaymission/box2550Away/research) -"ED" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; name = "VACUUM AREA"},/turf/simulated/wall,/area/awaymission/box2550Away/research) -"EE" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/turf/simulated/floor/engine/vacuum,/area/awaymission/box2550Away/research) -"EF" = (/obj/machinery/door_control{name = "Mixing Room Vent Control"; pixel_x = -23; pixel_y = -10; id = "mixvent"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"EG" = (/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"EH" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/grenade/chem_grenade,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"EI" = (/obj/structure/table{dir = 2; icon_state = "tabledir"},/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler{pixel_x = -3; pixel_y = 4},/obj/item/device/assembly/signaler{pixel_x = 7; pixel_y = 6},/obj/item/device/assembly/signaler{pixel_x = -6; pixel_y = -3},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"EJ" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor{pixel_x = -7; pixel_y = 6},/obj/item/device/assembly/prox_sensor{pixel_x = 8; pixel_y = -4},/obj/item/device/assembly/prox_sensor{pixel_x = 2; pixel_y = -8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"EK" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/multitool,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"EL" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"EM" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"EN" = (/obj/item/device/radio/intercom{dir = 4; pixel_x = 27},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"EO" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"EP" = (/obj/structure/dispenser,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"EQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"ER" = (/turf/simulated/floor{dir = 5; icon_state = "yellow"; tag = "icon-yellow (NORTHEAST)"},/area/awaymission/box2550Away/engineering) -"ES" = (/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/awaymission/box2550Away/engineering) -"ET" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"EU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"EV" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "tox_airlock_exterior"; locked = 1; name = "Mixing Room Exterior Airlock"; req_access_txt = "7"},/turf/simulated/floor/engine/vacuum,/area/awaymission/box2550Away/research) -"EW" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "tox_airlock_interior"; locked = 1; name = "Mixing Room Interior Airlock"; req_access_txt = "7"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"EX" = (/obj/machinery/door/airlock/medical{name = "Toxins Research"; req_access_txt = "7;8"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"EY" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"EZ" = (/obj/machinery/door/window/southleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Head of Research"; req_access_txt = "19"},/obj/machinery/door/window/southleft{dir = 4; name = "Head of Research"; req_access_txt = "19"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Fa" = (/obj/machinery/door/window/southleft{dir = 8; name = "Head of Research"; req_access_txt = "19"},/obj/machinery/door/window/southleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Head of Research"; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/general) -"Fb" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Access"; req_access_txt = "24"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Fc" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "co2_in"; name = "Carbon Dioxide Supply Control"; output_tag = "co2_out"},/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) -"Fd" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "co2_sensor"},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/awaymission/box2550Away/engineering) -"Fe" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/awaymission/box2550Away/engineering) -"Ff" = (/obj/machinery/ignition_switch{pixel_x = -22; pixel_y = 10; id = "mixingsparker"},/turf/simulated/floor/engine/vacuum,/area/awaymission/box2550Away/research) -"Fg" = (/obj/machinery/computer/security/telescreen{name = "Test Chamber Telescreen"; pixel_x = 0; pixel_y = -1; network = "Toxins"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) -"Fh" = (/obj/machinery/door/window/southleft{dir = 8; name = "Head of Research"; req_access_txt = "19"},/obj/machinery/door/window/southleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Head of Research"; req_access_txt = "19"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Fi" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/paper_bin,/obj/item/weapon/stamp/rd,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Fj" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/machinery/computer/security/telescreen{name = "Toxins Monitor"; network = "RD"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Fk" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/device/flashlight/lamp,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Fl" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/clipboard,/obj/item/weapon/paper{name = "Scientific Report"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Fm" = (/turf/simulated/floor{dir = 6; icon_state = "yellow"; tag = "icon-yellow (SOUTHEAST)"},/area/awaymission/box2550Away/engineering) -"Fn" = (/obj/machinery/driver_button{id = "toxinsdriver"; pixel_y = -24},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Fo" = (/obj/item/device/radio/intercom{pixel_y = -28},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Fp" = (/obj/structure/closet/secure_closet/box2550away/scientist,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Fq" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/device/healthanalyzer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Fr" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/pen,/obj/item/weapon/circuitboard/aicore,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Fs" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Ft" = (/obj/machinery/computer/aifixer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Fu" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/storage/box/gloves,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"Fv" = (/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/general) -"Fw" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 1; icon_state = "right"; name = "Specimen Door"; req_access_txt = "19"},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/general) -"Fx" = (/obj/machinery/door/poddoor{id = "toxinsdriver"; name = "Toxins Launcher Bay Door"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"Fy" = (/obj/machinery/door/airlock/glass{name = "Toxins Mass Driver"; req_access_txt = "7"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Fz" = (/obj/machinery/door/airlock/maintenance{name = "Mixing Room Maintenance"; req_access_txt = "12;7;8"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"FA" = (/obj/structure/closet/box2550away/toxins_white,/obj/effect/landmark/corpse/away/box2550/scientist,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"FB" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/analyzer/plant_analyzer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"FC" = (/obj/structure/computerframe,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) -"FD" = (/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/general) -"FE" = (/obj/structure/lamarr,/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/general) -"FF" = (/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/general) -"FG" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"FH" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"FI" = (/turf/simulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/engineering) -"FJ" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/engineering) -"FK" = (/turf/simulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/engineering) -"FL" = (/turf/simulated/floor{tag = "icon-blue (SOUTHWEST)"; icon_state = "blue"; dir = 10},/area/awaymission/box2550Away/engineering) -"FM" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/box2550Away/engineering) -"FN" = (/turf/simulated/floor{tag = "icon-blue (SOUTHEAST)"; icon_state = "blue"; dir = 6},/area/awaymission/box2550Away/engineering) -"FO" = (/turf/simulated/floor{tag = "icon-arrival (SOUTHWEST)"; icon_state = "arrival"; dir = 10},/area/awaymission/box2550Away/engineering) -"FP" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1443; input_tag = "air_in"; name = "Mixed Air Supply Control"; output_tag = "air_out"; pressure_setting = 2000},/turf/simulated/floor{tag = "icon-arrival"; icon_state = "arrival"},/area/awaymission/box2550Away/engineering) -"FQ" = (/turf/simulated/floor{tag = "icon-arrival (SOUTHEAST)"; icon_state = "arrival"; dir = 6},/area/awaymission/box2550Away/engineering) -"FR" = (/obj/structure/window/reinforced{desc = "There is some old writing on this window. You are barely able to read out a few lines from a tangled scribble.
Eight guests sit adjourned, four lines filled with void. The green wall beckons one beyond, thou warned one must certainly abscond.
HONK!
"; dir = 5; name = "Old Note #7"},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"FS" = (/obj/machinery/mass_driver{dir = 8; id = "toxinsdriver"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"FT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"FU" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"FV" = (/obj/machinery/door/window/southleft{name = "Toxins Monkey Pen"; req_access_txt = "7"},/obj/machinery/door/window/southleft{dir = 1; name = "Toxins Monkey Pen"; req_access_txt = "7"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"FW" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"FX" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"FY" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"FZ" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; location = "Engineering"},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/machinery/door/window/eastright{base_state = "left"; dir = 1; icon_state = "left"; name = "Engineering Delivery"; req_access_txt = "34"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/engineering) -"Ga" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Gb" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Gc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Gd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Ge" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Francis"},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"Gf" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Ludwig"},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"Gg" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Karl"},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"Gh" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"Gi" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/machinery/power/smes,/turf/simulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) -"Gj" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) -"Gk" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/power/smes,/turf/simulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) -"Gl" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/computerframe,/turf/simulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) -"Gm" = (/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/machinery/door/window/southleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Engineering Delivery"; req_access_txt = "23"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/engineering) -"Gn" = (/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) -"Go" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/storage/toolbox/electrical,/obj/item/device/t_scanner,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Gp" = (/obj/structure/closet/secure_closet/box2550away/engineering_personal,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Gq" = (/obj/structure/closet/secure_closet/box2550away/engineering_personal,/obj/item/device/radio/intercom{broadcasting = 1; pixel_y = 20},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Gr" = (/obj/structure/rack{dir = 8},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/head/welding,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Gs" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Rene"},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"Gt" = (/obj/machinery/air_sensor{frequency = 1442; id_tag = "tox_monkey"; output = 63},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"Gu" = (/obj/effect/landmark/corpse/slimeCorpse{name = "grey baby slime (Metroid)"},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"Gv" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Immanuel"},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"Gw" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) -"Gx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "Maintenance Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Gy" = (/obj/machinery/door/airlock/maintenance{name = "Engineering Maintenance Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Gz" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor{dir = 8; icon_state = "yellow"; tag = "icon-yellow (WEST)"},/area/awaymission/box2550Away/engineering) -"GA" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"GB" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) -"GC" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/storage/toolbox/electrical,/obj/item/device/t_scanner,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"GD" = (/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"GE" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/device/analyzer,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"GF" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/maint) -"GG" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "William"},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"GH" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Ferdinand"},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"GI" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Frederick"},/turf/simulated/floor,/area/awaymission/box2550Away/research) -"GJ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"GK" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"GL" = (/turf/simulated/floor{dir = 8; icon_state = "yellow"; tag = "icon-yellow (WEST)"},/area/awaymission/box2550Away/engineering) -"GM" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"GN" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"GO" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"GP" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/paper,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/pen,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"GQ" = (/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/awaymission/box2550Away/engineering) -"GR" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2_sensor"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/awaymission/box2550Away/engineering) -"GS" = (/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/awaymission/box2550Away/engineering) -"GT" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "o2_sensor"},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/awaymission/box2550Away/engineering) -"GU" = (/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/awaymission/box2550Away/engineering) -"GV" = (/obj/machinery/air_sensor{frequency = 1443; id_tag = "air_sensor"; output = 7},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/awaymission/box2550Away/engineering) -"GW" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) -"GX" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/machinery/cell_charger,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"GY" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"GZ" = (/obj/structure/rack{dir = 8},/obj/item/clothing/mask/breath/box2550away,/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Ha" = (/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Hb" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Hc" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Hd" = (/obj/structure/closet/secure_closet/box2550away/engineering_electrical,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"He" = (/obj/structure/closet/secure_closet/box2550away/engineering_welding,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Hf" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Hg" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Hh" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/awaymission/box2550Away/engineering) -"Hi" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/awaymission/box2550Away/engineering) -"Hj" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/awaymission/box2550Away/engineering) -"Hk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Hl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; tag = "icon-shock"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Hm" = (/obj/machinery/door/airlock/engineering{name = "Power Storage"; req_access_txt = "10"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Hn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Ho" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/machinery/status_display{pixel_x = -31},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Hp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Hq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/status_display{pixel_x = -31},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Hr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Hs" = (/obj/machinery/field/generator,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Ht" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Hu" = (/obj/machinery/door/poddoor{id = "Secure Storage"; name = "Engineering Secure Storage"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Hv" = (/turf/simulated/floor{tag = "icon-caution_west"; icon_state = "caution_west"},/area/awaymission/box2550Away/engineering) -"Hw" = (/turf/simulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/engineering) -"Hx" = (/turf/simulated/floor{dir = 1; icon_state = "yellowcorner"; tag = "icon-yellowcorner (NORTH)"},/area/awaymission/box2550Away/engineering) -"Hy" = (/turf/simulated/floor{dir = 4; icon_state = "yellowcorner"; tag = "icon-yellowcorner (EAST)"},/area/awaymission/box2550Away/engineering) -"Hz" = (/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/engineering) -"HA" = (/obj/machinery/power/rad_collector,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"HB" = (/turf/simulated/floor{icon_state = "yellowcorner"; tag = "icon-yellowcorner"},/area/awaymission/box2550Away/engineering) -"HC" = (/turf/simulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) -"HD" = (/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"; tag = "icon-yellowcorner (WEST)"},/area/awaymission/box2550Away/engineering) -"HE" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1359; pixel_x = -30},/turf/simulated/floor{tag = "icon-caution_west"; icon_state = "caution_west"},/area/awaymission/box2550Away/engineering) -"HF" = (/obj/item/weapon/extinguisher,/turf/simulated/floor{dir = 6; icon_state = "yellow"; tag = "icon-yellow (SOUTHEAST)"},/area/awaymission/box2550Away/engineering) -"HG" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"HH" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"HI" = (/obj/item/weapon/extinguisher,/turf/simulated/floor{dir = 10; icon_state = "yellow"; tag = "icon-yellow (SOUTHWEST)"},/area/awaymission/box2550Away/engineering) -"HJ" = (/obj/item/weapon/wrench,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"HK" = (/obj/structure/closet/crate,/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) -"HL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"HM" = (/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/closet/secure_closet/box2550away/ce,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"HN" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"HO" = (/obj/machinery/door/window{dir = 1; name = "Chef Engineer's Office"; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"HP" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"HQ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"HR" = (/obj/structure/closet/crate,/turf/simulated/floor{dir = 8; icon_state = "yellow"; tag = "icon-yellow (WEST)"},/area/awaymission/box2550Away/engineering) -"HS" = (/obj/machinery/the_singularitygen,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"HT" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"HU" = (/obj/structure/table/reinforced{dir = 9; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/item/weapon/stamp/ce,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"HV" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"HW" = (/obj/structure/table/reinforced{dir = 5; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/weldingtool,/obj/item/weapon/wrench,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"HX" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"HY" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) -"HZ" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHWEST)"; icon_state = "reinf_tabledir"; dir = 10},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Ia" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir"; icon_state = "reinf_tabledir"},/obj/machinery/door_control{id = "Secure Storage"; name = "Engineering Secure Storage"; pixel_y = 8; req_access_txt = "11"},/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Ib" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir"; icon_state = "reinf_tabledir"},/obj/structure/window/reinforced,/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "Singularity"; name = "Singularity Shutters"; pixel_y = 8; req_access_txt = "11"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Ic" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir"; icon_state = "reinf_tabledir"},/obj/machinery/door_control{icon_state = "doorctrl0"; id = "Engineering"; name = "Engine Security Doors"; pixel_y = 8; req_access_txt = "11"},/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Id" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHEAST)"; icon_state = "reinf_tabledir"; dir = 6},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/item/weapon/storage/pill_bottle/kelotane,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Ie" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor{dir = 8; icon_state = "yellow"; tag = "icon-yellow (WEST)"},/area/awaymission/box2550Away/engineering) -"If" = (/obj/item/weapon/storage/pill_bottle/kelotane,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Ig" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Ih" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "West Airlock Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Ii" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor1"; id = "Singularity"; name = "Window Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Ij" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor1"; id = "Singularity"; name = "Window Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Ik" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor1"; id = "Singularity"; name = "Window Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Il" = (/obj/structure/sign/securearea{tag = "icon-space"; name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/engineering) -"Im" = (/turf/simulated/floor{tag = "icon-corner_west"; icon_state = "corner_west"},/area/awaymission/box2550Away/engineering) -"In" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Io" = (/obj/item/clothing/head/hardhat,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Ip" = (/obj/item/weapon/weldingtool,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Iq" = (/obj/item/stack/rods,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Ir" = (/obj/item/weapon/caution{desc = "Caution! Construction Zone!"; name = "caution sign"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Is" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"It" = (/obj/structure/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Iu" = (/obj/item/weapon/screwdriver{pixel_y = 16},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Iv" = (/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/engineering) -"Iw" = (/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/engineering) -"Ix" = (/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Iy" = (/obj/structure/window{icon_state = "rwindow"; dir = 4; invisibility = 0; reinf = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Iz" = (/obj/item/device/radio,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"IA" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) -"IB" = (/obj/machinery/door/airlock/external{name = "West Solar Maintenance"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"IC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'DANGER'"; name = "DANGER"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/engineering) -"ID" = (/obj/machinery/door/airlock/external{name = "East Solar Maintenance"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"IE" = (/obj/machinery/door/airlock/engineering{name = "Singularity Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"IF" = (/obj/machinery/the_singularitygen,/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) -"IG" = (/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/maint) -"IH" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"II" = (/obj/item/device/flashlight,/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) -"IJ" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"IK" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/engineering) -"IL" = (/obj/item/clothing/mask/cigarette,/obj/item/weapon/weldingtool,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"IM" = (/obj/item/clothing/suit/fire,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"IN" = (/obj/item/device/analyzer,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"IO" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"IP" = (/obj/item/weapon/storage/pill_bottle/antitox,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"IQ" = (/obj/machinery/door/airlock/engineering{name = "Port Solar Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"IR" = (/obj/machinery/door/airlock/engineering{name = "Starboard Solar Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"IS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"IT" = (/obj/item/clothing/gloves/yellow,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"IU" = (/obj/machinery/power/terminal,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"IV" = (/obj/item/device/multitool,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"IW" = (/obj/structure/window{icon_state = "rwindow"; reinf = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"IX" = (/obj/item/weapon/cigbutt,/obj/structure/window{icon_state = "rwindow"; reinf = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"IY" = (/obj/structure/window{icon_state = "rwindow"; reinf = 1},/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"IZ" = (/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Ja" = (/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) -"Jb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) -"Jc" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/solar) -"Jd" = (/obj/machinery/power/rad_collector,/turf/simulated/floor{dir = 9; icon_state = "yellow"; tag = "icon-yellow (NORTHWEST)"},/area/awaymission/box2550Away/engineering) -"Je" = (/obj/machinery/power/rad_collector,/turf/simulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/engineering) -"Jf" = (/obj/structure/dispenser,/turf/simulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/engineering) -"Jg" = (/obj/structure/computerframe,/turf/simulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/engineering) -"Jh" = (/obj/machinery/power/rad_collector,/turf/simulated/floor{dir = 5; icon_state = "yellow"; tag = "icon-yellow (NORTHEAST)"},/area/awaymission/box2550Away/engineering) -"Ji" = (/obj/structure/table,/obj/item/clothing/gloves/yellow,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Jj" = (/obj/item/weapon/cigbutt,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Jk" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/extinguisher,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Jl" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/clothing/suit/fire,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) -"Jm" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/clothing/suit/fire,/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) +"CL" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/command) +"CM" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Harding"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"CN" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Pierce"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"CO" = (/obj/machinery/door/window/northleft{dir = 4; name = "Genetics"; req_access_txt = "9"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"CP" = (/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"CQ" = (/turf/unsimulated/floor{tag = "icon-warning (EAST)"; icon_state = "warning"; dir = 4},/area/awaymission/box2550Away/engineering) +"CR" = (/obj/machinery/field/generator,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"CS" = (/obj/structure/closet/crate,/turf/unsimulated/floor{dir = 8; icon_state = "yellow"; tag = "icon-yellow (WEST)"},/area/awaymission/box2550Away/engineering) +"CT" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"CU" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"CV" = (/obj/structure/table/reinforced{dir = 5; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/weldingtool,/obj/item/weapon/wrench,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"CW" = (/obj/structure/closet/crate,/turf/unsimulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) +"CX" = (/obj/structure/table/reinforced{dir = 9; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/item/weapon/stamp/ce,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"CY" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"CZ" = (/obj/machinery/door/poddoor{id = "Secure Storage"; name = "Engineering Secure Storage"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Da" = (/turf/unsimulated/floor{tag = "icon-warning (WEST)"; icon_state = "warning"; dir = 8},/area/awaymission/box2550Away/engineering) +"Db" = (/obj/machinery/power/rad_collector,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Dc" = (/obj/item/weapon/storage/pill_bottle/kelotane,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Dd" = (/obj/structure/reagent_dispensers/fueltank,/turf/unsimulated/floor{dir = 8; icon_state = "yellow"; tag = "icon-yellow (WEST)"},/area/awaymission/box2550Away/engineering) +"De" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHEAST)"; icon_state = "reinf_tabledir"; dir = 6},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/item/weapon/storage/pill_bottle/kelotane,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Df" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir"; icon_state = "reinf_tabledir"},/obj/machinery/door_control{icon_state = "doorctrl0"; id = "Engineering"; name = "Engine Security Doors"; pixel_y = 8; req_access_txt = "11"},/obj/structure/window/reinforced,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Dg" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir"; icon_state = "reinf_tabledir"},/obj/structure/window/reinforced,/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "Singularity"; name = "Singularity Shutters"; pixel_y = 8; req_access_txt = "11"},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Dh" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir"; icon_state = "reinf_tabledir"},/obj/machinery/door_control{id = "Secure Storage"; name = "Engineering Secure Storage"; pixel_y = 8; req_access_txt = "11"},/obj/structure/window/reinforced,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Di" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHWEST)"; icon_state = "reinf_tabledir"; dir = 10},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Dj" = (/obj/structure/reagent_dispensers/fueltank,/turf/unsimulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) +"Dk" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access_txt = "13"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Dl" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "West Airlock Security Doors"; opacity = 0},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Dm" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor1"; id = "Singularity"; name = "Window Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Dn" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor1"; id = "Singularity"; name = "Window Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Do" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor1"; id = "Singularity"; name = "Window Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Dp" = (/turf/unsimulated/floor{tag = "icon-warning (SOUTHEAST)"; icon_state = "warning"; dir = 6},/area/awaymission/box2550Away/engineering) +"Dq" = (/turf/unsimulated/floor{tag = "icon-warning (SOUTHWEST)"; icon_state = "warning"; dir = 10},/area/awaymission/box2550Away/engineering) +"Dr" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ds" = (/obj/structure/sign/securearea{tag = "icon-space"; name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/engineering) +"Dt" = (/obj/item/clothing/head/hardhat,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Du" = (/obj/item/stack/rods,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Dv" = (/obj/item/weapon/weldingtool,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Dw" = (/obj/item/weapon/caution{desc = "Caution! Construction Zone!"; name = "caution sign"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Dx" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Dy" = (/obj/item/weapon/screwdriver{pixel_y = 16},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Dz" = (/obj/structure/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"DA" = (/obj/item/weapon/storage/toolbox/emergency,/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/engineering) +"DB" = (/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/engineering) +"DC" = (/obj/item/device/flashlight,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"DD" = (/obj/structure/window{icon_state = "rwindow"; dir = 4; invisibility = 0; reinf = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"DE" = (/obj/item/weapon/cigbutt,/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/engineering) +"DF" = (/obj/item/device/radio,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"DG" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/storage/toolbox/electrical,/obj/item/device/t_scanner,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"DH" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"DI" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/unsimulated/floor{dir = 8; icon_state = "yellow"; tag = "icon-yellow (WEST)"},/area/awaymission/box2550Away/engineering) +"DJ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/unsimulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) +"DK" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "Maintenance Security Doors"; opacity = 0},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"DL" = (/obj/machinery/door/airlock/maintenance{name = "Engineering Maintenance Access"; req_access_txt = "10"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"DM" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"DN" = (/obj/machinery/portable_atmospherics/scrubber,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"DO" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Rene"},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"DP" = (/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"DQ" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Immanuel"},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"DR" = (/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/engineering) +"DS" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/device/analyzer,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"DT" = (/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"DU" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"DV" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Frederick"},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"DW" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Ferdinand"},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"DX" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "William"},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"DY" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"DZ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ea" = (/turf/unsimulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) +"Eb" = (/turf/unsimulated/floor{dir = 8; icon_state = "yellow"; tag = "icon-yellow (WEST)"},/area/awaymission/box2550Away/engineering) +"Ec" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ed" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Ee" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/paper,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/pen,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Ef" = (/turf/unsimulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/awaymission/box2550Away/engineering) +"Eg" = (/turf/unsimulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/awaymission/box2550Away/engineering) +"Eh" = (/turf/unsimulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/awaymission/box2550Away/engineering) +"Ei" = (/turf/unsimulated/wall/normal,/area) +"Ej" = (/obj/machinery/door/airlock/external,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"Ek" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"El" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"Em" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"En" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Eo" = (/obj/structure/closet/secure_closet/box2550away/engineering_electrical,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Ep" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Eq" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/machinery/cell_charger,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Er" = (/obj/structure/closet/wardrobe/engineering_yellow,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Es" = (/obj/structure/rack{dir = 8},/obj/item/clothing/mask/breath/box2550away,/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Et" = (/obj/structure/dispenser,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Eu" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"Ev" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/unsimulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/awaymission/box2550Away/engineering) +"Ew" = (/obj/structure/reagent_dispensers/fueltank,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Ex" = (/obj/structure/reagent_dispensers/watertank,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Ey" = (/obj/structure/closet/secure_closet/box2550away/engineering_welding,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Ez" = (/obj/machinery/portable_atmospherics/canister/air,/turf/unsimulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/awaymission/box2550Away/engineering) +"EA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/awaymission/box2550Away/engineering) +"EB" = (/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"EC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"ED" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"EE" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"EF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/box2550away/fake_status_display{pixel_x = -31},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"EG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; tag = "icon-shock"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"EH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"EI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/machinery/box2550away/fake_status_display{pixel_x = -31},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"EJ" = (/obj/machinery/door/airlock/engineering{name = "Power Storage"; req_access_txt = "10"},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"EK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"EL" = (/obj/structure/window/reinforced{dir = 5},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"EM" = (/turf/unsimulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/engineering) +"EN" = (/turf/unsimulated/floor{dir = 1; icon_state = "yellowcorner"; tag = "icon-yellowcorner (NORTH)"},/area/awaymission/box2550Away/engineering) +"EO" = (/turf/unsimulated/floor{dir = 4; icon_state = "yellowcorner"; tag = "icon-yellowcorner (EAST)"},/area/awaymission/box2550Away/engineering) +"EP" = (/turf/unsimulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) +"EQ" = (/turf/unsimulated/floor{icon_state = "yellowcorner"; tag = "icon-yellowcorner"},/area/awaymission/box2550Away/engineering) +"ER" = (/turf/unsimulated/floor{dir = 8; icon_state = "yellowcorner"; tag = "icon-yellowcorner (WEST)"},/area/awaymission/box2550Away/engineering) +"ES" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1359; pixel_x = -30},/turf/unsimulated/floor{tag = "icon-warning (WEST)"; icon_state = "warning"; dir = 8},/area/awaymission/box2550Away/engineering) +"ET" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"EU" = (/obj/item/weapon/extinguisher,/turf/unsimulated/floor{dir = 6; icon_state = "yellow"; tag = "icon-yellow (SOUTHEAST)"},/area/awaymission/box2550Away/engineering) +"EV" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"EW" = (/obj/item/weapon/extinguisher,/turf/unsimulated/floor{dir = 10; icon_state = "yellow"; tag = "icon-yellow (SOUTHWEST)"},/area/awaymission/box2550Away/engineering) +"EX" = (/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/closet/secure_closet/box2550away/ce,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"EY" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"EZ" = (/obj/item/weapon/wrench,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Fa" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/closet/emcloset,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Fb" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Fc" = (/obj/machinery/door/window{dir = 1; name = "Chef Engineer's Office"; req_access_txt = "19"},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Fd" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Fe" = (/obj/machinery/the_singularitygen,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ff" = (/turf/unsimulated/floor{dir = 5; icon_state = "yellow"; tag = "icon-yellow (NORTHEAST)"},/area/awaymission/box2550Away/engineering) +"Fg" = (/turf/unsimulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/awaymission/box2550Away/engineering) +"Fh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Fi" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; name = "VACUUM AREA"},/turf/unsimulated/wall/normal,/area/awaymission/box2550Away/research) +"Fj" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/research) +"Fk" = (/obj/machinery/door_control{name = "Mixing Room Vent Control"; pixel_x = -23; pixel_y = -10; id = "mixvent"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Fl" = (/obj/machinery/door/poddoor{id = "mixvent"; name = "Mixer Room Vent"},/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/research) +"Fm" = (/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/research) +"Fn" = (/obj/machinery/sparker{id = "mixingsparker"; pixel_x = 0; pixel_y = 24},/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/research) +"Fo" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Fp" = (/turf/unsimulated/floor{icon_state = "yellowcorner"; tag = "icon-yellowcorner"},/area/awaymission/box2550Away/general) +"Fq" = (/turf/unsimulated/floor{dir = 8; icon_state = "yellowcorner"; tag = "icon-yellowcorner (WEST)"},/area/awaymission/box2550Away/general) +"Fr" = (/obj/item/device/radio/intercom{dir = 4; pixel_x = 27},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Fs" = (/obj/machinery/sleeper{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Ft" = (/obj/machinery/sleep_console{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Fu" = (/obj/structure/closet/l3closet,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Fv" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/multitool,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Fw" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor{pixel_x = -7; pixel_y = 6},/obj/item/device/assembly/prox_sensor{pixel_x = 8; pixel_y = -4},/obj/item/device/assembly/prox_sensor{pixel_x = 2; pixel_y = -8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Fx" = (/obj/structure/table{dir = 2; icon_state = "tabledir"},/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler{pixel_x = -3; pixel_y = 4},/obj/item/device/assembly/signaler{pixel_x = 7; pixel_y = 6},/obj/item/device/assembly/signaler{pixel_x = -6; pixel_y = -3},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Fy" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/grenade/chem_grenade,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Fz" = (/obj/item/weapon/storage/firstaid/toxin,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"FA" = (/obj/machinery/portable_atmospherics/canister/air,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"FB" = (/obj/machinery/space_heater,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"FC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"FD" = (/obj/machinery/door_control{id = "mixingwaste"; name = "Waste Vent Control"; pixel_x = 0; pixel_y = 24},/obj/machinery/embedded_controller/radio/airlock_controller{pixel_x = -26; id_tag = "tox_airlock_control"; exterior_door_tag = "tox_airlock_exterior"; interior_door_tag = "tox_airlock_interior"; airpump_tag = "tox_airlock_pump"; sensor_tag = "tox_airlock_sensor"; sanitize_external = 1},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"FE" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'DANGER: FIRE'"; icon_state = "fire"; name = "DANGER: FIRE"; tag = "icon-fire"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/research) +"FF" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/general) +"FG" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/machinery/cell_charger,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"FH" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/device/assembly,/obj/item/device/assembly,/obj/item/device/assembly,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"FI" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"FJ" = (/obj/structure/table{dir = 1; icon_state = "tabledir"},/obj/item/weapon/wrapping_paper,/obj/item/weapon/wirecutters,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"FK" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"FL" = (/obj/item/weapon/extinguisher,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"FM" = (/obj/machinery/computer/general_air_control{frequency = 1442; icon_state = "alert:0"; name = "Toxin Lab Air Monitor"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"FN" = (/obj/structure/closet/secure_closet/box2550away/scientist,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"FO" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"FP" = (/obj/structure/closet/l3closet,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"FQ" = (/turf/unsimulated/floor{dir = 6; icon_state = "yellow"; tag = "icon-yellow (SOUTHEAST)"},/area/awaymission/box2550Away/engineering) +"FR" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/machinery/computer/security/telescreen{name = "Toxins Monitor"; network = list("RD"); stat = 1},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"FS" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/device/flashlight/lamp,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"FT" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/paper_bin,/obj/item/weapon/stamp/rd,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"FU" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/clipboard,/obj/item/weapon/paper{name = "Scientific Report"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"FV" = (/obj/machinery/door/window/southleft{dir = 8; name = "Head of Research"; req_access_txt = "19"},/obj/machinery/door/window/southleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Head of Research"; req_access_txt = "19"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"FW" = (/obj/machinery/computer/security/telescreen{name = "Test Chamber Telescreen"; network = list("Toxins"); pixel_x = 0; pixel_y = -1; stat = 1},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/research) +"FX" = (/obj/machinery/ignition_switch{pixel_x = -22; pixel_y = 10; id = "mixingsparker"},/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/research) +"FY" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Access"; req_access_txt = "24"},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"FZ" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/unsimulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/awaymission/box2550Away/engineering) +"Ga" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "co2_in"; name = "Carbon Dioxide Supply Control"; output_tag = "co2_out"},/turf/unsimulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) +"Gb" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Gc" = (/obj/machinery/door/window/southleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Head of Research"; req_access_txt = "19"},/obj/machinery/door/window/southleft{dir = 4; name = "Head of Research"; req_access_txt = "19"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Gd" = (/obj/machinery/door/airlock/medical{name = "Toxins Research"; req_access_txt = "7;8"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Ge" = (/obj/machinery/door/window/southleft{dir = 8; name = "Head of Research"; req_access_txt = "19"},/obj/machinery/door/window/southleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Head of Research"; req_access_txt = "19"},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"Gf" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "tox_airlock_interior"; locked = 1; name = "Mixing Room Interior Airlock"; req_access_txt = "7"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Gg" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "tox_airlock_exterior"; locked = 1; name = "Mixing Room Exterior Airlock"; req_access_txt = "7"},/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/research) +"Gh" = (/turf/unsimulated/floor{tag = "icon-blue (SOUTHWEST)"; icon_state = "blue"; dir = 10},/area/awaymission/box2550Away/engineering) +"Gi" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"},/turf/unsimulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/box2550Away/engineering) +"Gj" = (/turf/unsimulated/floor{tag = "icon-blue (SOUTHEAST)"; icon_state = "blue"; dir = 6},/area/awaymission/box2550Away/engineering) +"Gk" = (/turf/unsimulated/floor{tag = "icon-arrival (SOUTHWEST)"; icon_state = "arrival"; dir = 10},/area/awaymission/box2550Away/engineering) +"Gl" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1443; input_tag = "air_in"; name = "Mixed Air Supply Control"; output_tag = "air_out"; pressure_setting = 2000},/turf/unsimulated/floor{tag = "icon-arrival"; icon_state = "arrival"},/area/awaymission/box2550Away/engineering) +"Gm" = (/turf/unsimulated/floor{tag = "icon-arrival (SOUTHEAST)"; icon_state = "arrival"; dir = 6},/area/awaymission/box2550Away/engineering) +"Gn" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Go" = (/turf/unsimulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/engineering) +"Gp" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"},/turf/unsimulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/engineering) +"Gq" = (/turf/unsimulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/engineering) +"Gr" = (/obj/machinery/door/airlock/glass{name = "Toxins Mass Driver"; req_access_txt = "7"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Gs" = (/obj/machinery/door/poddoor{id = "toxinsdriver"; name = "Toxins Launcher Bay Door"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"Gt" = (/obj/structure/lamarr,/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/general) +"Gu" = (/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/general) +"Gv" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Gw" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Gx" = (/turf/unsimulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/general) +"Gy" = (/obj/machinery/door/airlock/maintenance{name = "Mixing Room Maintenance"; req_access_txt = "12;7;8"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Gz" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/analyzer/plant_analyzer,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"GA" = (/obj/structure/closet/box2550away/toxins_white,/obj/effect/landmark/corpse/away/box2550/scientist,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"GB" = (/obj/item/device/radio/intercom{pixel_y = -28},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"GC" = (/obj/machinery/driver_button{id = "toxinsdriver"; pixel_y = -24},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"GD" = (/obj/structure/closet/secure_closet/box2550away/scientist,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"GE" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/device/healthanalyzer,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"GF" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/storage/box/gloves,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"GG" = (/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/general) +"GH" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 1; icon_state = "right"; name = "Specimen Door"; req_access_txt = "19"},/turf/unsimulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/general) +"GI" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/pen,/obj/item/weapon/circuitboard/aicore,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"GJ" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"GK" = (/obj/machinery/computer/aifixer,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"GL" = (/obj/structure/closet/secure_closet/box2550away/engineering_personal,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"GM" = (/obj/structure/rack{dir = 8},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/head/welding,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"GN" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/power/smes,/turf/unsimulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) +"GO" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) +"GP" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/machinery/power/smes,/turf/unsimulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) +"GQ" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) +"GR" = (/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/machinery/door/window/southleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Engineering Delivery"; req_access_txt = "23"},/turf/unsimulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/engineering) +"GS" = (/obj/structure/closet/secure_closet/box2550away/engineering_personal,/obj/item/device/radio/intercom{broadcasting = 1; pixel_y = 20},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"GT" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/storage/toolbox/electrical,/obj/item/device/t_scanner,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"GU" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Francis"},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"GV" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Karl"},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"GW" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Ludwig"},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"GX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"GY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"GZ" = (/obj/structure/window/reinforced{desc = "There is some old writing on this window. You are barely able to read out a few lines from a tangled scribble.
Eight guests sit adjourned, four lines filled with void. The green wall beckons one beyond, thou warned one must certainly abscond.
HONK!
"; dir = 5; name = "Old Note #7"},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"Ha" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"Hb" = (/obj/machinery/door/window/southleft{name = "Toxins Monkey Pen"; req_access_txt = "7"},/obj/machinery/door/window/southleft{dir = 1; name = "Toxins Monkey Pen"; req_access_txt = "7"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Hc" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"Hd" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"He" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"Hf" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"Hg" = (/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/machinery/door/window/eastright{base_state = "left"; dir = 1; icon_state = "left"; name = "Engineering Delivery"; req_access_txt = "34"},/turf/unsimulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/engineering) +"Hh" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Hi" = (/obj/machinery/mass_driver{dir = 8; id = "toxinsdriver"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"Hj" = (/obj/item/device/analyzer,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Hk" = (/obj/structure/closet/box2550away/toxins_white,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Hl" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Hm" = (/obj/effect/decal/cleanable/blood/gibs{tag = "icon-gibup1"; icon_state = "gibup1"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Hn" = (/obj/structure/window/reinforced,/turf/unsimulated/floor{tag = "icon-arrival (WEST)"; icon_state = "arrival"; dir = 8},/area/awaymission/box2550Away/general) +"Ho" = (/obj/machinery/box2550away/fake_status_display{pixel_x = -1},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/general) +"Hp" = (/obj/machinery/door/window/westleft{name = "Toxins Delivery"; req_access_txt = "8"},/turf/unsimulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/research) +"Hq" = (/turf/unsimulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/research) +"Hr" = (/obj/item/device/radio/intercom{dir = 1; pixel_y = 20},/obj/machinery/computer/general_air_control{frequency = 1441; name = "Supply Air Tank Monitor"},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Hs" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Ht" = (/turf/unsimulated/floor{tag = "icon-escape (NORTHEAST)"; icon_state = "escape"; dir = 5},/area/awaymission/box2550Away/engineering) +"Hu" = (/obj/machinery/conveyor{id = "garbage"},/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "Disposal Exit"; name = "Disposal Exit Vent"; opacity = 1},/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/maint) +"Hv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Hw" = (/turf/unsimulated/floor{tag = "icon-arrival (WEST)"; icon_state = "arrival"; dir = 8},/area/awaymission/box2550Away/general) +"Hx" = (/obj/machinery/door_control{id = "Disposal Exit"; name = "Exterior Vent Control"; pixel_y = -25},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Hy" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"Hz" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"HA" = (/obj/structure/window/reinforced,/turf/unsimulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) +"HB" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; pixel_x = -30},/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"HC" = (/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Atmos Delivery"; req_access_txt = "24"; tag = "icon-left"},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/unsimulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/engineering) +"HD" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"HE" = (/obj/machinery/portable_atmospherics/canister/air,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"HF" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"HG" = (/obj/machinery/portable_atmospherics/canister/air,/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"HH" = (/obj/machinery/door/window{base_state = "left"; dir = 2; icon_state = "left"; name = "Toxins Delivery"; req_access_txt = "34"},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"HI" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"HJ" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/machinery/embedded_controller/radio/access_controller{exterior_door_tag = "atmos_access_external"; id_tag = "atmos_access_console"; interior_door_tag = "atmos_access_internal"},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"HK" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/device/t_scanner,/obj/item/device/t_scanner,/obj/item/device/t_scanner,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"HL" = (/turf/unsimulated/floor{tag = "icon-escape (SOUTHEAST)"; icon_state = "escape"; dir = 6},/area/awaymission/box2550Away/engineering) +"HM" = (/turf/unsimulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) +"HN" = (/obj/effect/decal/cleanable/blood/gibs{tag = "icon-gibmid3"; icon_state = "gibmid3"},/obj/effect/decal/cleanable/blood/gibs{tag = "icon-gibbl3"; icon_state = "gibbl3"},/obj/effect/decal/cleanable/blood/gibs{tag = "icon-gib3"; icon_state = "gib3"},/obj/item/weapon/paper/crumpled/bloody{info = "There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.
One of five is bare and white, sitting empty without delight. Music drifts across the room, drinks are passed in earnest bloom.
HONK!
"; layer = 3; name = "Old Note #3"; pixel_y = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"HO" = (/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"HP" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"HQ" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"HR" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/engineering) +"HS" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"},/turf/unsimulated/floor{tag = "icon-escape (EAST)"; icon_state = "escape"; dir = 4},/area/awaymission/box2550Away/engineering) +"HT" = (/obj/machinery/door/window/westleft{name = "Atmospherics Control"; req_access_txt = "24"},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"HU" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"HV" = (/obj/machinery/door/poddoor{id = "mixingwaste"; name = "Waste Vent"},/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/research) +"HW" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"HX" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = -5},/obj/item/device/assembly/timer,/obj/item/device/assembly/timer{pixel_x = 4; pixel_y = -8},/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = -5},/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = -5},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"HY" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/weldingtool,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"HZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/wrench,/obj/item/weapon/wirecutters,/obj/item/weapon/screwdriver{pixel_y = 16},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Ia" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/research) +"Ib" = (/obj/machinery/access_button{pixel_x = 27; pixel_y = -6; master_tag = "tox_access_console"; frequency = 1451; command = "cycle_interior"},/obj/item/weapon/extinguisher,/obj/structure/disposalpipe/junction{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Ic" = (/obj/structure/dispenser,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Id" = (/obj/machinery/portable_atmospherics/pump,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Ie" = (/turf/unsimulated/floor{tag = "icon-greencorner (NORTH)"; icon_state = "greencorner"; dir = 1},/area/awaymission/box2550Away/general) +"If" = (/turf/unsimulated/floor{dir = 9; icon_state = "green"; tag = "icon-green (NORTHWEST)"},/area/awaymission/box2550Away/general) +"Ig" = (/obj/machinery/access_button{command = "cycle_exterior"; master_tag = "atmos_access_console"; pixel_x = 24},/turf/unsimulated/floor{tag = "icon-arrival (NORTHEAST)"; icon_state = "arrival"; dir = 5},/area/awaymission/box2550Away/general) +"Ih" = (/obj/structure/rack{dir = 4},/obj/item/clothing/suit/fire,/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Ii" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Ij" = (/obj/machinery/access_button{command = "cycle_interior"; master_tag = "atmos_access_console"; pixel_x = -24},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"Ik" = (/turf/unsimulated/floor{tag = "icon-warning (NORTHEAST)"; icon_state = "warning"; dir = 5},/area/awaymission/box2550Away/engineering) +"Il" = (/turf/unsimulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/awaymission/box2550Away/engineering) +"Im" = (/obj/machinery/door/window{base_state = "left"; dir = 2; icon_state = "left"; name = "Atmos Delivery"; req_access_txt = "34"},/turf/unsimulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/engineering) +"In" = (/obj/item/weapon/crowbar,/turf/unsimulated/floor,/area/awaymission/box2550Away/general) +"Io" = (/obj/machinery/door/airlock/medical{name = "Toxin Storage"; req_access_txt = "8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Ip" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/research) +"Iq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"Ir" = (/obj/machinery/door/airlock/maintenance{name = "Chemical Lab Maintenance"; req_access_txt = "12;7"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Is" = (/obj/machinery/pipedispenser/disposal,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"It" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Iu" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Iv" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Iw" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/wall/other,/area/awaymission/box2550Away/research) +"Ix" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Iy" = (/obj/structure/sign/securearea,/turf/unsimulated/wall/other,/area/awaymission/box2550Away/research) +"Iz" = (/turf/unsimulated/floor{tag = "icon-greencorner (WEST)"; icon_state = "greencorner"; dir = 8},/area/awaymission/box2550Away/general) +"IA" = (/turf/unsimulated/floor{tag = "icon-green (SOUTHWEST)"; icon_state = "green"; dir = 10},/area/awaymission/box2550Away/general) +"IB" = (/turf/unsimulated/floor{tag = "icon-arrival (SOUTHEAST)"; icon_state = "arrival"; dir = 6},/area/awaymission/box2550Away/general) +"IC" = (/obj/structure/sign/securearea,/turf/unsimulated/wall/other,/area/awaymission/box2550Away/engineering) +"ID" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"IE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/research) +"IF" = (/obj/machinery/embedded_controller/radio/access_controller{pixel_x = -1; pixel_y = -24; frequency = 1451; id_tag = "tox_access_console"; exterior_door_tag = "tox_access_exterior"; interior_door_tag = "tox_access_interior"},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"IG" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"IH" = (/obj/machinery/door/airlock/medical{frequency = 1451; icon_state = "door_locked"; id_tag = "tox_access_exterior"; locked = 1; name = "Toxins Research"; req_access_txt = "7"},/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"II" = (/turf/unsimulated/floor{dir = 4; icon_state = "arrival"; tag = "icon-arrival (EAST)"},/area/awaymission/box2550Away/general) +"IJ" = (/obj/machinery/door/airlock/maintenance{frequency = 1449; icon_state = "door_locked"; id_tag = "atmos_access_external"; locked = 1; name = "Atmospherics Access"; req_access_txt = "24"},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"IK" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"IL" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1359; pixel_x = -30},/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"IM" = (/obj/machinery/door/airlock/glass{frequency = 1451; icon_state = "door_locked"; id_tag = "tox_access_interior"; locked = 1; name = "Toxins Research Access"; req_access_txt = "7"},/obj/structure/disposalpipe/segment,/turf/unsimulated/floor,/area/awaymission/box2550Away/research) +"IN" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"IO" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/unsimulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/awaymission/box2550Away/engineering) +"IP" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "tox_in"; name = "Toxin Supply Control"; output_tag = "tox_out"},/turf/unsimulated/floor{tag = "icon-warning (EAST)"; icon_state = "warning"; dir = 4},/area/awaymission/box2550Away/engineering) +"IQ" = (/obj/machinery/door/airlock/maintenance{frequency = 1449; icon_state = "door_locked"; id_tag = "atmos_access_internal"; locked = 1; name = "Atmospherics Access"; req_access_txt = "24"},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"IR" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"IS" = (/obj/machinery/access_button{master_tag = "atmos_access_console"; pixel_y = -24},/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"IT" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/clothing/suit/fire,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"IU" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/clothing/suit/fire,/turf/unsimulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) +"IV" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/extinguisher,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"IW" = (/obj/structure/table,/obj/item/clothing/gloves/yellow,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"IX" = (/obj/item/weapon/cigbutt,/turf/unsimulated/floor,/area/awaymission/box2550Away/engineering) +"IY" = (/obj/machinery/power/solar/fake,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/solar) +"IZ" = (/obj/machinery/power/rad_collector,/turf/unsimulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/engineering) +"Ja" = (/obj/structure/dispenser,/turf/unsimulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/engineering) +"Jb" = (/obj/structure/computerframe{anchored = 1},/turf/unsimulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/engineering) +"Jc" = (/obj/machinery/power/rad_collector,/turf/unsimulated/floor{dir = 5; icon_state = "yellow"; tag = "icon-yellow (NORTHEAST)"},/area/awaymission/box2550Away/engineering) +"Jd" = (/obj/machinery/power/rad_collector,/turf/unsimulated/floor{dir = 9; icon_state = "yellow"; tag = "icon-yellow (NORTHWEST)"},/area/awaymission/box2550Away/engineering) +"Je" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Jf" = (/obj/item/device/flashlight,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Jg" = (/obj/machinery/power/terminal,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Jh" = (/obj/item/weapon/storage/pill_bottle/antitox,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Ji" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Jj" = (/obj/item/weapon/cigbutt,/obj/structure/window{icon_state = "rwindow"; reinf = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Jk" = (/obj/structure/window{icon_state = "rwindow"; reinf = 1},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Jl" = (/obj/item/device/multitool,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Jm" = (/obj/item/clothing/head/welding,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Jn" = (/obj/structure/window{icon_state = "rwindow"; reinf = 1},/obj/item/weapon/cigbutt,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Jo" = (/obj/item/clothing/gloves/yellow,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Jp" = (/obj/machinery/door/airlock/engineering{name = "Starboard Solar Access"; req_access_txt = "10"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Jq" = (/obj/machinery/door/airlock/engineering{name = "Port Solar Access"; req_access_txt = "10"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Jr" = (/obj/item/weapon/cigbutt,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Js" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Jt" = (/obj/item/device/analyzer,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ju" = (/obj/item/clothing/suit/fire,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Jv" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor/bluegrid,/area/awaymission/box2550Away/engineering) +"Jw" = (/obj/item/clothing/mask/cigarette,/obj/item/weapon/weldingtool,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Jx" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'DANGER'"; name = "DANGER"},/turf/unsimulated/wall/other,/area/awaymission/box2550Away/engineering) +"Jy" = (/obj/machinery/door/airlock/external{name = "East Solar Maintenance"; req_access_txt = "13"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"Jz" = (/obj/item/device/flashlight,/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/engineering) +"JA" = (/obj/item/weapon/wrench,/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"JB" = (/obj/machinery/door/airlock/external{name = "West Solar Maintenance"; req_access_txt = "13"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/maint) +"JC" = (/obj/machinery/door/airlock/engineering{name = "Singularity Access"; req_access_txt = "10"},/turf/unsimulated/floor/plating,/area/awaymission/box2550Away/engineering) +"JD" = (/obj/machinery/the_singularitygen,/turf/unsimulated/floor/engine,/area/awaymission/box2550Away/engineering) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1843,39 +1860,39 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacadadacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadabacacacacacacaeaeacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabadadadadadadaeaeadadadadadadabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacaeaeacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacaeaeacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababadadadadafagahaiadadadadababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaadaaadajakajaladaaadaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaadaaadamaganaoadaaadaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadapapapapapapaqaqapapapapapapaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapapapapaparararapasatarauaparavarapapapapapaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapawakakaxayaqazapaAaqaqazapayaqazaxakakawapaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadapaBaCakapayaqazaDaEaFaqazaGayaqazapakaCaBapaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapapapapapayaqazaHayaqaqazaHayaqazapapapapapadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapawakakaxayaqazaIaJaqaqaKaLayaqazaxaMakawapadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapaBaCakapayaqazaNaOaqaqaPaQayaqazapakaCaBapaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapapapapapayaqazaHayaqaqazaHayaqazapapapapapadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadapaSakakaxayaqazaTaUaqaqaVaWayaqazaxakakawapadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapaBaCakapayaqazapaXaYaZbaapayaqazapakaCaBapaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapapapapapayaqazapbbbcbcbdapayaqazapapapapapaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapawakakaxayaqbebfbfbfbfbfbfbgaqazaxakakbhapadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapaBaCakapayaqaqaqbibibibibiaqaqazapakaCaBapadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRapapapapapbjaqaqbkblbmbmbmbnapaqaqapapapapapaRadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadapbjaqbiboajbpbqbqbrapaqaqbsakakakbtadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRadapbjbkaLbubvbqbwbxbqapaqbyapapapapapbzadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapbjaqbAakbAbBbwbwbBapaqaqbCakakapadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapbjbkaLbubDbqbEbEbqapaqbFapapbCapadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadapbjaqbGbHajbqbIbIbqapbJbKafaqaqbLaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapbMbNbObPambQbRbSbTapaqaqbUaqbVbLaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadapapapapapapaaaaaaaaapapapapapapapadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadaRaaaaaaaaaaadadadadadaRaRadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaRadaaaaaaaaaaadaaadaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabakakakakakakadadakakakakakakabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalalalalalalalalalalalalalalabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadabakakakakakakalalakakakakakakabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabadadadadadadalaladadadadadadabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabakakakakakakalalakakakakakakabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalalalalalalalalalalalalalalabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabakakakakakakalalakakakakakakabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababadadadadagaiahajadadadadababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaadaaadacaeacafadaaadaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaadaaadazaiaAayadaaadaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaoaoaoaoaoaoamamaoaoaoaoaoaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaoaoaoaoauauauaoatavauawaoauaxauaoaoaoaoaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaoaraeaeasapamaqaoanamamaqaoapamaqasaeaearaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaoaCaBaeaoapamaqaQaPaRamaqaOapamaqaoaeaBaCaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaoaoaoaoapamaqaNapamamaqaNapamaqaoaoaoaoaoadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaraeaeasapamaqaJaIamamaLaKapamaqasaMaearaoadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaoaCaBaeaoapamaqaEaDamamaGaFapamaqaoaeaBaCaoaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaoaoaoaoaoapamaqaNapamamaqaNapamaqaoaoaoaoaoadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaobdaeaeasapamaqbcbbamambaaZapamaqasaeaearaoadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaoaCaBaeaoapamaqaoaVaXaWaYaoapamaqaoaeaBaCaoaHaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaoaoaoaoapamaqaoaTaSaSaUaoapamaqaoaoaoaoaoaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaraeaeasapambebgbgbgbgbgbgbfamaqasaeaebhaoadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaCaBaeaoapamamambibibibibiamamaqaoaeaBaCaoadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHaoaoaoaoaobjamamblbmbkbkbkbnaoamamaoaoaoaoaoaHadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaobjambibqacbrbsbsbtaoamamboaeaeaebpadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHadaobjblaKbwbxbsbvbubsaoambzaoaoaoaoaobyadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaobjambBaebBbAbvbvbAaoamambCaeaeaoadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaobjblaKbwbFbsbEbEbsaoambDaoaobCaoadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaobjambLbIacbsbJbJbsaobKbGagamambHaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaobObMbNbTazbQbRbSbPaoamambUambVbHaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaoaoaoaoaoaoaaaaaaaaaoaoaoaoaoaoaoadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadaHaaaaaaaaaaadadadadadaHaHadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaHadaaaaaaaaaaadaaadaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaadaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1903,140 +1920,140 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbXbWaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaaaaadaaaaadaaaaaaaaaaaaaaadaaaaaaaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaaaaadaaaaadaaaaaaaaaaadaaadaaaaaaaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaaaaaRadaaadaaaaaaaaaRadaRadadaaaaaaadaRadaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYaRadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYapapapapapapapapapapapapapapapapapapbZbZbZaRadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWapapapapapcaapcbcccdcdcdcecfapcgaqaqchaqaqcicjckclcmcnaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWapcececoaFaqapcbaqaqaqaqbVcpapaqcqcrcsaFaqaqctcucvcvcwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcxaqcqcyaFaqapcbaqaqaqaqaqctapaqcqczcAaFaqaqcBcCcvcvcwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWcDaqaqcEaqaqapcFcGaqaqcHcHcHapaqcqcIcJaFaqaqcgapcvcvcKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcacacaapcLaqaqaqaqcMcNcOcPcQapapapapaqcqcRcSaFaqcqceapcvcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWcacTcUapcGaqaqaqaqcVbfcWbfbfbfbfbfbgaqaqaqaqaqaqaqaqapcvcvbZbZadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacXcYapapcacZdaapdbdcdddedfdgdhdidhdhdhdhdhdhdhdhdjdkdldldldmapcvcvcvbZadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadndobvdpdqapapdrdsapdtduapdtduapdvcaaHdwaHcaapdxduapdtdyapdtduapapdzcvcvcnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAakdAdBaqdCcZbgbebfbfbfbfbfbfbfbfdDcZbfdadDbfbfbfbfbfdEdFdFdFdFdGdgdHcvcwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLbubDdIbidCayaqaqaqaqaqaqaqaqaqaqdJcZbfdadJaqaqaqaqaqaqaqaqaqaqazapdKcvcwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadLapapapdMdNapdOdNapdPdNapdQdNcacZbfdaapdRdNapdSdNapdTdNapdUdNcadKcvcKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvcvcaaqdVcaaqdVcadWdVcaaqdXcacZbfdacaaqdYcaaqdVcaaqdYcadZeacadKcvbZadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvcvcaebdWcaecaqcaeddWcaeeaqcacZbfdacaefdWcaegaqcaehaqcaeiaqcadKcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZbZejcvcvcaekelcaekemcaekencaekeocacZbfdacaekepcaekeqcaekercaekescaetdHbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeucveucvcvapevewapevexapeyexcMevexapezeAeBapeCeDcMeyexapeyexapevexcacvdKcnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZbZbZcvcvbZeEeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeGbZcvdKcwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvcveHeIeIeIeIeIeIeIeIeIeIeIeIeJeKeLeIeIeIeIeIeIeIeIeIeIeIeIeHcvdKcwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvcvbZeMeNeNeNeNeNeNeNeNeNeNeNeJeIeLeOeNeNeNeNeNeNeNeNeNeNePbZcvdKcKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacaceQacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZbZbZcvcvbZbZbZbZbZbZbZbZbZbZbZbZbZeJeIeLbZbZbZbZbZbZeReSeSeTbZbZbZcvdKbZbZbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcveHcvcvcvcvcvcvcvcvcvcvcvcvcvcveHeJeIeLeHcvcvcvcvcvcvcvcvcvcvcvcvcveteUcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacaeacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvbZdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzeJeIeLdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzeVcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabadadadadadaeadadadadadabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvdzeWeXeYeWeZeYeWeZeYeWeXeYeWeZfaeJeIeLfaeWeZeYeWeZeYeWeZeYeWeXeYeWeZfbcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZeReSeSeSeSfcbZbZadadadadabacacacacacaeacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvdzfdfeeYfdfeeYfdfeeYfdfeeYfdfefaeJeIeLfafdfeeYfdfeeYfdfeeYfdfeeYfdfefbcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzdzffeReSeSeSeSeTbZfgcvcvcvcvcvfhfiaaadaaaaabaeaeaeaeaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacncvcneIeIeIeIeIeIeIeIeIeIeIeIeIeIfjeIeIeIfkeIeIeIeIeIeIeIeIeIeIeIeIeIeIflcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZeubZaaadaaadaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeucveucvcvcvcvcvcvcvcvcvcvcvcvcvcvfmaaadaaaaabacacacacacaeacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwcvcweIeIeYfnfoeYfnfoeYfnfoeYfnfofafpeIfqfafnfoeYfnfoeYfnfoeYfnfoeYeIeIfrcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvbZadadaaadadeYeYeYeYeYeYfaeYfsftftftftfuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzdzdzdzbZbZbZbZbZbZeHbZbZbZbZbZcvfmaaadaaaaababaaadaafvfwfvaaadaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKcvcKfxeIeYeZeWeYeZeWeYeZeWeYeZeWfafpeIfqfaeZeWeYeZeWeYeZeWeYeZeWeYeIeIfycvbZaafzaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaabZbZbZbZbZbZbZbZeuejbZbZfAbZbZeYfBfBfCfDfEfBfBfFeIfGeIfFfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafIeIeIeIfJeIeIeIeIeIeIeIeIeIeIbZcvfKaaadaaaaaaadaaadaafLcvfLaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadbZcvbZeYfMeYeYeYeYbZbZdzdzfNfNfNfNfNfpeIfqfNfNfNfNbZbZbZbZeYeYeYeYeYfMeYfOcvbZaaadaaaaadadadadbZeRfcbZaaaaaaaaaaaaaaaaaabZcvcvcvcvcveHcvcvcvcvcvcvcvfPbZfBfBfBfBfBfBfBeIfQfRfSeIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafTfUeIfUeIeIeIeIfUeIfUeIeIeIeIbZcvbZadadadadadadadaddzfVfwfWdzadadadadadadadadadadadadfXfXfYfZfZfZgafXfXbZbZbZbZbZbZbZcvbZgbgcgcgcgdgedzcvfNgfgfggghgigjfpeIfqgjgkglfNgmcvcvbZeIeIeYgbgbgcgcfOcvbZaaadaabZeRgngnfcbZcvcvbZbZbZbZeReSeSeSeSfcbZcvbZbZeHbZbZbZbZbZbZbZbZcvcvbZfBgogogogogofBfFeIfFeIfFfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadeYgpgqgpgreIeIgsgpgqgpgtfUeIeIbZcvbZaaadaaadaaadaaadffgucvgvdzaaaaadaaadaaadaaadaaadaafXgwgxgygzgAgBgCfXdzcvgDgEgFcvbZcvbZeYgGeYgcfOeYbZcvfNgHgHgHgHgHgIfpeIfqgIgHgHfNgJcvcvbZgKeIgLgcgcgcgcfOeHbZbZbZbZbZcvcvcvcvbZcvcvcvcvcveHcvcvcvcvcvcvcvcvbZeIeIgMgNgNgOeIgPgQbZcvcveHfBfBfBfBfBfBfBeIfQgRfSeIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadfafagSgTgSgUgVfUgWgSgTgXgYfagreIbZcvbZbZbZbZadadadadaddzgZcvhadzaRaRadaaadaaadaaadaaaRaRfXhbhchchchchchdfXdzcvhehfhgcvbZcvbZgcgceYgchhgedzcvfNgHhigHhjgHhkfpeIfqhkgHgHfNgJcvcvbZbZeYeYgceYgGeYfOcvcvbZcvcveHcvcvcvcvcvcvcvcvcvcvbZcvcvcvcvcvcvcvcvbZeIeIhlhlhlhleIeIhmbZcvcvbZfBgogogogogofBfFeIhneIfFfHaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhogqhpftftftfthqgqhrhsfagreIbZcvbZcvcvbZaaaaadaaaRdzcvcvcvdzfXfXfXfXfXfXfXfXfXfXdzaRhthchuhvhchwhxhdfXdzcvhyhzhAcvbZcvbZgcgceYgcfOeYbZcvhBgHhCgHhDgHhkfpeIfqhkgHhEfNfNfNcvcvbZhFhGgceYgcgcfOcvcvbZcvcveYeYeYeYhHeYeYeYeYeYeYeYeYeYhHeYeYbZeHbZbZhIhJhKhKhKhLhMeIhNbZbZcvbZfBfBfBfBfBfBfBeIfFeIfFeIfTaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahOhPhQhPhPhRhShPhPhQhPhTfagreIbZcveHcvcvbZaaaaaRaaaddzdzhUdzdzhVhWhXhYhZiaibicidiedzbZfXifighxhcihhxiifXdzcvcvcvcvcvcvcvbZeYgceYgcijgedzcvfNgHhCgHhDgHikfpeIfqikgHgHilimfNcvcvbZeYfOgceYgcgcfOcvcvbZcvcveYinioioioioioioioeIeIeIipeIeIiqeYireIirishIitiufFfFivhMeIeIiwbZcvbZfBgogogogogofBfBeYeYeYeYfafafafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahOhPhPhPixiyiziziyiziziyiyhPiAiBgreIbZcvbZcvcvbZeReSeSfcbZbZcvcvcveHieieieieieiCieiDiEieeHcvfXiFhuiGhciHiIiffXdziJcvcvcvcvbZcviKbZbZbZiLeVbZbZcvfNgHgHgHgHgHgjfpeIfqgjgHgHiMiNfNcvcvbZhFiOiPiQiPiPiRcvcvbZcvcveYiSeIeIeIeIeIeIiTeIeIiUeYeIeIiqeYeIeIeIiVhIitiufFfFivhMeIeIiWbZcvbZfBfBfBfBfBfBfBfBiXiYiZjaeYjbjbfaadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahPixjchPiyiyjcjciyjcjcjciyjdjejfgrjgbZcvbZcvcveHcvcvcvcvfhjhcvcvcvbZjiieieieieieieieiejjbZcvdzdzdzdzjkdzdzdzbZdzjlcvcvcvcvdzcvfgcvbZcvcvdKbZcvcvfNjmjnjojpjqfNfpeIfqfNjpjrjsjtfNcvcvbZbZbZiLbZbZbZjucvcvjhcvcveYjveIeIeIjweIeIeIeIeIjxeYeIeIiqeYeIeIeIiVhIitjyjzjzjzjAeIeIbZbZcvbZfBgojBjCjDjEfBfBjFfBfBfBjGfFjHfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajIiyiyhQiyiyjcjciyjcjcjciyjdjejfgreIbZcvbZcvcvbZcvcvcvcvfhjhcvcvcvbZjJieieieieiCieieiejKbZcvcvcvbZcvcvcvbZcvcvcvcvcvcvcvcvdzcvjhjhjhcvcvdKcvcvcvfNjLjMfNjNjOfNjPjQjRfNjNfNjSjTfNcvcvjUcvcvcvcvcvcvjucvcvjhcvcveYjVeIeIeIjWeIeIiTeIeIjXeYeIeIeIeYjYeIeIiVeIeIjZjZjZjZeIeIeIbZcvcvbZfBfBfBfBfBfBfBfBkakbkckdfafFfFfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahPkejchPiyiyjcjciyjcjcjciyjdjejfgreIbZcvbZcvcvbZcvcvcvcvcvcvcvcvcvbZkfieiekgkhkikjkkklkmbZcvcvcvcvcvcvcveHcvcvcvcvcvcvcvcvdzcvcvcvcvcvcvdKcvcvgmeYhshsknkokpkpkqeIkrkpksknhshseYcvcvbZfhcvcvcvcvcvdKcvcvcvcvcveYktkukukukvkukukukweIeIeYkxeIkyeYeIeIeIkzeIkAkAeIeIkAkAeIeIbZcvcvbZfBfBfBfBfBfBkBfBfBfBfBfBfajbjbfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakChPhPhPkeiyiykDiyiykEiyiyhPkFkGgreIcacacacacacacacabZbZbZbZbZbZbZkHkIkJkKkLkLkLkLkMkJkIdzbZbZbZdzeHdzbZbZbZbZbZdzdzeHdzdzbZbZbZbZbZbZbZkNjUkOkOiQkPkQkRkSkTkTkTkTkTkTkUkVkQkWiQkOkOkOkOkXkOkOkOkOkYkOkOkOkOkOiQiQkZiQiQlaiQiQlbeYlceYeYhRldleeYeIeIeIeYlflglhliljlklglgllbZeHbZdzlmeYeYeYeYeYeYlnliljlofafafafafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakChPhQhPhPhRhShPhPhQhPlpfagreIcalqbflrlslrdacaeIeIjQeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIfJeIeIeIeIeIeIeIeIeIlteIeIeIeIeIeIeIeIeIeIeIeIeIlulvlwlxlylzlAlBeIeIeIeIeIeIeIeIeIeIeIeIeIeIlteIeIeIeIfJeIeIeIeIeIeIeIjWeIeIeIeIeIeIeIeIeIeIeIjQeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIgslCadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlDgqlEftftftftlFgqlDhsfagreIcalGaqaqcGaqazaHeIeIjQeIeIeIeIeIeIeIeIeIlHeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIlteIeIeIeIeIeIeIeIeIeIeIeIeIlIlJlKlLlMlNlOlPeIeIeIeIeIeIeIeIeIeIeIeIlQeIlteIeIeIeIeIeIeIeIeIeIeIeIjWeIeIeIeIeIeIeIeIeIeIeIjQeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIlRgslSaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadfafagSgTgSlTlUlVlWlXgTgXlYfagreIcalZmambmcmdmecaeIeIjQeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIlteImfeIfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpeIeIeIlteIeIeIeIeIeIeIeIeIeIeIeIjWeIeIeIeIeIeIeIeIeImgeIjQmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmieIgslSadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadeYhogqhogreIeIgshrgqhomjlUeIeIcacacamkfUmkcacaeIeIbZbZbZeHeYeYeYeYeYeYmlmmeYeYeYeYeYdzmnmomnbZbZbZeIirirmpmqmqmreIeIfafaeIeIkrmsmtmtftftftftmugjmvmwmwmxmxmxmxmxmwmwmygjfsftftftftmtmtmzkqeIeIfalklglglglglhfamlmAfamBiQmCiQiQiQiQiQjUmDbZeIeIeImEmEmEmEmEmEmEmEmEmEmFmGmGmGmGmHmEbZbZbZbZbZmIeIgshpftmzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalDlUeIlUeIeIeIeIlUeIlUeIeIeIeIeImJmJmJmJmKeIeIeIeIbZcvcvcvfamLirirmMmNeIeImOmPmQeImRbZieiemSbZcvbZeImTmTmTmTmTmTmUmTmTmTeIeIkrfHadadadadadadadfNmVmWmXmYmZmXnanbmXnancfNadadadadadadadndkqeIeInenfnfnfnfnfnfnfnfnfnfngeYnhgcnininieYcvdKbZeIeIeInjnknlnlnlnlnlnlnlnlnmnnnonpnqnrmEcvcvcvcvbZnseIeIntnunvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahoeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeImKeIeIeIeIbZcvcvcvfanweIeIeIeIeIeIeIeIeIeImRbZieieiebZcvbZeHbZnxnxnxieieienynznAeIeIkrfHadadadadfNfNfNfNgHgHnBnCgHnBgHgHnBgHgHfNfNfNfNadadadadndkqeIeInDnfnEnFnGnHnfnEnFnGnHnfnIgcgcgcgcgceYcvdKbZeIeIeInJnlnlnlnlnlnKnlnlnlnlnLnlnlnLnlmEcvcvcvcvbZnseIeIeIgshpftftmuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYfanMmtmtmtmtmtmtmtnNeYfaeIeIbZbZbZbZbZbZbZbZbZbZbZcvcvcvnOnweIeIhmnPnQnRhmeIeIeImRbZieieiebZcvcvcvbZnSnSnSieieieieienTeIeIkrnUmufafNfNfNnVmXnWgHgHgHgHgHgHgHgHgHgHgHnWmXnXfNfNfNfanYnZkqeIeInDnfnEoaobnHnfnEoaocnHnfeYodeYgcgcoeeYcvdKbZeIeIeIofnlnlnlnlogmEohnlnlnlnlnlnlnlnlmEcvcvbZbZbZnseIeIeIeIoigTgToiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadojgUeIeIbZokbZcvcvcvcvcvcvcvcvcvcvcvolomeIeIhmjXgNgOhmeIeIeImRbZonooiebZcvcvcvbZopieieieieieieienTeIeIkrkpkpksoqorfNgHnBgHgHgHgHjojpjpjposgHgHgHgHnBgHfNoroqkokpkpkqeIeInDnfnEotounHnfnEotounHnfovnfeYeYeYeYeYbZdKbZeIeIeImEnlnlnlnlowmEohnlnlnlnlnlnlnlnlmEcvcvbZoxbZnseIeIeIgsoyftftmuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaozoAmugreIbZbZbZbZbZbZbZbZbZbZoBoCeHbZfafxeIeIeIeIeIeIeIeIeIeImRbZmTmTmTbZcvcvcvbZoDieieoEkgieoFoGoHeIeIeIeIeIoIoJoroKgHgHgHgHgHfNfNjOoLjOfNfNgHgHgHgHgHoKoroJoMeIeIeIeIeInDnfnfnfnfnfnfnfnfnfnfnfoNnfoOoPoPeYcvcvdKbZeIeIeImEoQnloRoSmEmEmEoTmEmEoUoUoUoUoVmEcvcvbZcvbZoWeIeIeIgsnvaaadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqgTgqeIeIoXaaaaaaaaadadaaaaoYcvcvcvbZfaeYeYoZeYeIeIpaeIeIeIeImRbZcvcvcvcvcvcvcvbZbZcacacacacacacacaeIeIfqpbpbpcoqorfNpdpdpdpegHfNpfpgpgpgphfNgHgHpdpdpifNoroqpjpbpbfpeIeInDnfnEnFnGnHnfnEnFnGnHnfpknfnfnfnfplcvcvpmkOkTkTkTkOpnbZbZbZbZcvcvcvcvbZpogngngnppbZcvcvcvcvbZnseIeIeIgspqadfzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaozprmugreIndadadadadadadadadpscvcvcvdzhFhGgcgceYeYptfOpueYeYeIeIbZcvcvcvcvcvcvcvcvcvcapvpwpxpxpxpycaeIeIfqfNfNfNfNfNfNpzpAfNfNfNfNpBgHgHgHgHfNfNfNfNpCfNfNfNfNfNfNpDfpeIeInDnfnEpEobnHnfnEoaobnHnfoNnfnfnfpFeYcvjhjubZeIeIeIbZpGbZcvcvbZcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvbZmIeIeIeIgsnvaaadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpHpIeIeIndaaaaaaaaadaaaaaapscvcvcvbZeYfOgcgceYgcgcfOgcgceYeIeIeHcvcvcvcvbZpJcvcvcvpKpxpLpMpNpOpxpKeIeIfqfNpPpQpRgHgHgHgHgHpDpSfNpTjpjpjppUfNpVpDpWgHgHnWgHnWgHpXpYfpeIeInDnfnEotounHnfnEotounHnfpZqaqaqbqceYcvcvjumOeIeIeIbZcvcvcvcveHcvcvqdqdqdqdqdqdqdcvcvbZcvcvbZbZmIeIeIeIgshpqeqeqfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeYfsftmueYeYeYeYeYfaeIeIndaaaaaaaaadaaaaaaqgcvcvcvdzhFqhgcqieYgcgcfOgcgceYeIeIbZbZbZbZbZbZbZbZcvcvcaqjqkqlqmqnpxqoeIeIfqfNgHnBqpqqqqqqqrqspDqtfNfNfNqufNfNfNqtpDgHgHgHqvqvgHgHfNfNfpeIeIqwnfnfnfnfqxnfnfnfnfnfnfeYeYeYeYfOeYcvcvjumPeIeIeIbZcvcvcvcvbZcvcvqdqyqzqAqzqAqdcvcvbZcvcveHeImIeIeIeIeIoigTgToiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqBgUeIeIndaaaaaaaaadaaaaaabZcvcvcvbZeYfOgcqieYgcgcfOgcgceYqCqCqCqCqCqCqCqCbZcvcvcvcaqDqEpxpxpxqFcaeIeIfqfNgHgHqGqHqHqIqJqKpDfNqLqMqMgHqMqMqNfNpDgHgHqOqPqQqRgHqSfNfpeIeIbZbZbZbZbZbZbZqTqUqTbZbZbZcvcvcvkNqVqVqVqWbZeIeIeImEqXmEqdqdqdqYqdqdqZqZraqZraqYmErbmEmErcmEmEnseIeIeIgsoyqeqeqfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaozoAmugreIndadadadadfzadadadbZbZrdcvdzhFregcqieYgcgcfOgcgceYrfrfrfrfrfrfrfrfbZcvcvbZcacacacacacacacaeIeIfqfNrgrhrhpTgHgHgHgHpDfNrigHqMgHqMgHrjfNpDrkgHqOrlrmqRgHrnrofpeIeIbZrpcvcvcvrpbZeIrqeIeHcvcvcvcvcvbZbZbZcvdKeHeIeIeIrrqZrsqdqzrtruqZrvqZqZqZqZqZqdrwrwrxrwryrwmEnseIeIeIgslSadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqgTgqeIeIndaaaaaaaaadaaaaaaaabZbZcvbZeYfOgcqirzkOkOkYkOkOkOkOkOkOkOkOkOmDbZbZcvcvcvcvcvcvcvcvcvcvbZeIeIfqfNgHqSmXrArBgHgHpDfNfNrCgHgHgHgHgHrDfNfNpDrEgHrFrFgHgHmXfNfpeIeIbZbZbZcvcvbZbZrqeIrqbZbZbZcvcvcvbZpJfgcvdKbZeIeIeIrGrHqZqdqZraqZqZrIqZqZqZqZqZqdrJrwrKrwrxrwmEnseIeIeIgsrLadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaozprmugreIndaaaaaaaaadaaaaaaaaaabZcvdzhFrMrNiPpnrOrPcvcvcvcvcvcvcvcvcvcvdKcveHcvcvcvcvcvcvcvcvcvcveHeIeIfqfNrEgHnBrQgHgHgHrRadrSqMrTqMgHqMrTqMfNadpDgHgHgHgHgHgHfNfNfpeIeIbZcvcvcvcvcmbZeIrqeIbZrUcvcvcvcvcvcvcvcvdKbZeIeInfrVrHqZrrqZqZqZqZrWqZqZqZrXrYqdrZrwrwrwrwrwmEoWeIeIeIgslSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpHpIeIeIndaaaaaaaaadaaaaaaaaaasacvbZbZrzpnbZbZsbgneScvcvbZbZbZbZbZrzkOqWbZbZbZbZbZbZbZbZbZbZbZbZbZeIeIfqfNscsdsesfrBgHsgshadsisjgHskslsmgHsnfNadpDsospgHgHgHsqsrpDfpeIeIbZcvcvcvcvcveHrqeIrqbZrUcvcvrPeYeYeYeYeYdKbZeIeInfnfqZqZrVqZqZqZqZqdssstsusvswqdsxrwsyrwrxrwmEnseIeIeIgslSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanMmtmtmtmtmtmtmtnNeYfaeYsznZadadadadadadadadadadsAcvcvcvdKcvcveHcvcvcvcvcvbZsBsCsDsEsFsGsHsGsGsIsJsKsKsLsKsKsMsGsGsNeIeIfqfNfNfNfNfNfNfNsOfNadfNfNfNfNfNfNsPfNfNadfNfNfNfNfNfNfNsQsRsSkTkTkOsTqVqVsUkOsVsWsXsWsVsYkOkOsViQsZtataiQtbbZeIeInfnfqZqZtcqZqZqZtdqdqZteqZtfqZqdrwrwrxrwrxrwmEnseIeIeItglSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzdzthdzeVbZbZbZbZbZbZbZbZbZsGsGsGsGsGsGsHsGsGsGsJsKsKsLsKsKsMsGsGlXeIeIeIeHcvcvcvcvcvbZcvbZadfNqLqMqMqMqMqMqNfNadbZticvcvcvcvcvcveHeIeIeIeHcvcvcvetiQtjrqrqtktltkrqrqtmeYgcgcgctndKbZeIeInfrrrHqZtoqZqZqZtpqdtqqZtrqZtsqdrwrwrxrwrxrwmEtteIeIeItgfTaaaaaaaaaaaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatusGsGtvtwtxtysGsGsGsGsGsGsGsGsGsGsGsGsGtwtzsGtAtBtCtDtEtDtFtGtHtDtIeIeIeIbZcvcvcvcvcvbZcvbZadfNqMgHgHgHgHgHtJfNadbZrUcvcvcvcvcvcvbZeIeIeIbZcvcvcvcvtKtkrqrqrqrqrqrqrqtLeYgctMtNeYdKbZjYeIeIrVrHqZtOtPqZqZtpqdqdqdqdqdqdqdtQmEmEtRmEmEmEeYtStTtUtSeYtVtVtVtVtVtVeYeYeYeYadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatutWtXtXtYtxsMtZuasGsGsGsGsGsGsGsGsGubucuduesGsGufuguhuiufsGsGsGujlXeIeIeIfNfNfNfNfNfNjOukfNadfNqMgHpDpDpDgHqMfNadfaeYeYeYeYeYeYeYeYeIeIeIbZcvcvcvcveYultkrqrqrqrqrqrqtkeYeYumeYeYdKbZeIeIeImEmErcmEmEmEunmEmEuoqZrwqZrwqZrwqZbZcveYupuqeYurusutuuuvuuuvuwuruwuruxgTgTuyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzufsGsGuAtxsMuBuBsGsGsGsGsGsGsGsGsGubuCuDuEsGsGsGsGsGuisGsGsGsGujhreIeIuFfNnauGuGuHuIuJsgfNadfNqMgHpDuKpDgHqMfNadfauLuMuLeIfJeIuNneeIeIeIeYeYeYeYeYeYuOtkrqrquPuPrqrqrqtKrqrquQuRdKuSeIeIeIrruTuTtdmEuUqZqZqZqZqZmEmEmEmEmEmEbZcveYfFfFeYuVusutuWuXuWuXuYuZvavbeYeYeYeYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavcvdsGsGtutxsMuBuBsGsGsGsGsGsGsGsGsGubveuDvfsGsGsGsGsGvgsGsGsGsGsGvheIeIeIjOgHvigHgHgHgHsgfNadfNqMrTgHvjgHrTqMfNadfaeIvkvlvmuLeIeIqweIeIeIisvnvovpvqeYvrtkrqvsvtvrvurqtkvvrqrqvwnDdKvxeIeIeIrGqZqZvymEqZqZqZqZqZqZmEqZqZqZqZqZbZcvvzfFfFvAuZvBvBuZuZuZuZvCvDuturuwurtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatuvEsGvFvGtxsMuBvHsGsGsGsGsGsGsGsGsGubvIvJvKsGsGsGsGvFvLsGsGsGsGsGvMeIeIeIvNgHgHgHgHgHgHgHfNadfNqMgHgHgHgHgHqMfNadfaeIeIeIeIeIeIeIjQeIvOeIqwvnvPvQvReYvStkrqvsvTvSvurqtkvUrqrqvVnDdKvxeIeInfrVqZqZvymEvWqZqZqZvXqZrcqZqZqZqZqZbZcveYvYfFeYvZvBvBvZvZvZvZvCwautuVwbuVtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatuwcwdwetutxtywfsGsGsGsGsGsGsGsGsGsGsGsGtwwgsGsGsGsGsGwhsGsGsGsGujsNeIeIeIfNgHgHgHgHgHgHgHfNadfNfNqMqMwiwjqMfNfNadfaeIwkwlwmeIeIeIjQeIeIeIwnfBfBwoeYeYrqrqrqrqwpwprqrqwqvUrqrqwrqwdKwseIeInfnfqZqZqZwtwuqZqZqZvXqZwvqZqZqZwwqZbZcveYvYwxeYwyusutuuuvuuuvwzvZwAwBeYeYeYeYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatututututuwCwDwEwFwGwHwDwEwEwEwGsGsGsGsGsHsGsGsGsGsGsGvgsGsGsGsGujlXeIeIeIfNwIgHwJwKwLwLwMfNadwNfNfNfNfNfNfNfNwNadfakAkAkAeIkAkAkAneeIeIeInefBwOfBeYwPtkrqrqrqrqrqrqrqtkwQwRwSeYeYdKbZeIeInfnfqZqZqZwTvyqZqZqZvXqZmEwUwVwWwWqZbZcveYeYeYeYuVusutuWuXuWuXwbuVwbuVeYwXwYtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawZxaxbaaaaxbxcxbaaaaaaxdsGxesGsGsHsGsGsGsGsGsGxfsGsGsGxeujhreIeIeIfNwIwIxgxhxixjxkfNbzwNwNwNwNwNwNwNwNwNbzfakAkAkAeIkAkAkAqweIeIeIqwxlxmxneYtkrqrqrqrqrqtkxotkrqrqrqrqrqxpdKbZeIeInfxqxrxsxtmExuqZqZqZqZxvqdqdqdqdqdqddzcveYfFxweYurvBvBuweYeYeYeYxxxyeYeYxzxAtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxdwCxdaaaaxdwHxdaaaaaatututututuxBxCxDxDxDxDxDxDxDxDxDxDxDxDltltltfNfNfNfNfNfNfNfNfNfafafafafafafafafafafafaxExFxGjQxExFxGeYltltlteYeYeYeYfaxExFxFxGxHxExFxFxFxGxHxExFxGfajubZeIeIeIrVqZqZqZxIqZqZqZqZqZqZqduoxJxKwuxLdzcveYxMfFxNuVwbuVwbeYxOuVxPuVwbuVwbwXwYtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZxQcvxRxRxRcvgmgmcvcvcvcvcvbZeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIjWjQeIeIeIxSxTqZqZqZqZqZqZqZqZqZxUqZrHxVraxWdzcveYeYeYeYuruwuruwxXuwxYxZyayburuwycxAtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZydqVqVqVqVqVqVqVqVdHcvcvcveHeIyeeIeIeIeIeIeIeIeIeIeIeIeIeIyfeIeIeIygeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIjWjQeIyheImEmEyiyjmEmEykylqZqZqZqdymqZqZqZqZdzcveYynfFyouVwbuVwbeYwbypyqyrwbuVwbwXwYtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZbZbZpogngngnysbZbZjucvcvcvbZireIeIeIeIytfUyteIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIjWjQeIeIeImEyuqZqZyumEqZqZqZyvqZqdywqZqZyxyyyzcveYfFyAeYuruwuruweYyBuruwuruwuruwuruweYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaadadadadkNqVqVmDbZfafafafafayCyDyCfafafafafaeHbZbZeIeIeIfaeYeYyEeYeYeYbZbZbZbZeHbZbZbZbZbZbZyFyGbZbZyFyGbZbZeHbZbZbZbZyHyIyIyJyIyKqdqdyLyMqdqyqZqZqymEykylqZyNyOqdqdyPyQqYqdeVeHbZbZbZbZbZeHbZbZbZjubZbZbZbZbZbZbZbZbZbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaadmTmTmTmTcvdKcvfaeIeIeIeIeIeIeIeIeIeIeIfacvyRkOkTkTkTySyTyUkTyVyWyXyYcvcvcvcvcvcvcvcvcvcvcvcvcvbZcvcvcvcvcvcvcvcvcvyZqZzazbzczcqZqZqZqZqdzdqZqZzercqZqZqZyNqZqyzfzfzfzfmEdKcvcvcvcvcvcvcvcvcvcvdKcvcvcvcvcvcvcvcvzgbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTzhzimTcvdKcvfaeIgTeIeIeIeIeIeIzjzkzlfacvdKbZeIeIeIfazmjWeIeIznzokOkOqVqVsTsTsTkOkOqVqVqVqVqVkXqVqVqVqVkOkOkOkOkOzpzqqZqZqZqZqZqZqZrHzrqZqZqZzsmEykylqZyNqZqZqZqZqZqZztdKcvcvcvcvcvcvrzkXkOkOpnzuzvzvzvzvzvzwbZbZbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTzxzymTmTdKcvfagTeIeIeIkxeIzzeIzAzAeIfacvdKbZeIeIeIeYzBzCzDzEzFeYcvcvcvcvcvcvcvcvbZzGeSeSeSzHbZzIbZcvcveHcvcvcvcvzJzKqZqZqZqZqZqZqZzLqdzMzNzOzsmEzPqZqZyNzQrazfzfzfzfmEdKcvzRzRbZbZbZjucvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTzShchczTdKcvfaeIeIgTeIeIgTeIeIeIeIzUfacvdKbZeIeIeIeYeYeYeYeYeYeYbZbZbZeHbZbZbZbZbZaaaaaaaaaabZbZbZbZbZejbZcvcvcvzJzVzWqZqZzWqZqZzWzXqdmEmEmEmEmExsmEmEyNmEmEmEmEmEmEmEjubZbZbZbZcvcvdKcvejbZbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTzSzYhcmTdKcvfaeIeIgTgTeIgTeIjweIzAeIfacvdKbZeIeIeIbZcvbZcvcvcvcvcvcvcvcvcvcvcvbZadaaaaaaaaaaadaaaaaaaaaabZcvcvcvzJzZAaAbAcAdAeyxqZAfqdcvcvcvcveHAgeHcvdKcvcvcvcvcvcveHdKcvcvcvcvcvcvdKcveucveuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTAhAhmTmTdKcvfafafafafafafafafbfafafafacvdKbZeIeIeIbZcvbZcvcvcvcvcvcvcvcvcvcvcvbZadadadaaaaaaadaaaaaaaabZbZbZcvcvAiyIyIyIyIyIyIyIyIAjyIqVqVAksVAlAmsVsVAnsVsVsVsVsVsVkOAoqVqVqVApsVsVAqdzdzdzdzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTArAsmTAtdKcvcvcvcvcvcvcvcvcvdKcvcveHcvcvdKbZeIeIAubZcvjhcvAvAvAvAvAvAvAvAvAvAvAvAvAvadAwAwAwAwAwaaaaaaeucveucvcvcvcvcvcvcvcvcvcvcvcvcvcvcveVAxqZqZqZqZqZqdtdqZzfAyqdbZbZbZbZcvAzAAABABABABACdzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTmTmTmTbZkNkOADqVqVqVkOsTsTsTkYAEAFkOqVqVAGbZeIeIeIbZcvjhcvAvAHAHAHAHAHAHAHAHAHAHAIAJadAwAKAKAKAwadadadbZbZbZbZbZALgngngngngngnAMdzdzdzdzdzeVANqZqZqZqZqZAOqZqZqZqZAPadaaaabZcvzGeSeSzHAQARACdzadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaaaRaRaRaRaRadbZjucvcvcvcvcvcvcvcvcvcvbZcvcvcvbZeIeIeIbZcvbZcvAvAHAHAHAHAHAHAHAHAHAHASATadAwAUAKAKAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAVAWqZAXAYAZqZqZqZqZqZyxBamGmGmGBbqdadaaaabZcvBcBdBdBdBdfKACdzadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadfzadadadadadadadadadadadadjucvBeBeBeBeBfBeBeBeBeBeBeBgrpbZeIeIeIbZcvbZcvBhAHAHAHAHAHAHAHAHAHAHBiATadAwAKAKAKAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjqZBkqZAOBlqZqZBmqZqZqZAOqZqZqZqZAVadaaaabZcvBnBdBdBoBpbZBqdzaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRadaRadaRaRaRaRaRaRaRaRaRaRaRaRBrcvBeBsBsBtBuBvBwBxBwBwBydzdzdzeIeIeIbZcvcvcvAvAHAHAHAHAHAHAHAHAHAHAHATadAwAwAwAwAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjBzqZBAAYBBBCBDAaAbBEBFAYtdqZzfAyBjaaaaaabZbZbZcvBGbZbZbZBHdzBIdzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRadaRadaRaRaRaRaRaRaRaRaRaRaRaRBJcvBeBKBLBLBwBwBwBwBwBwByBMBNdzeIeIeIbZbZcvdzAvAHAHAHAHAHAHAHAHAHAHAHATadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBOmGBbqdqdqdyPmGmGmGBbqdqdqdyPmGmGBPaaaaaaaabZcvcvetdHBQBRBSBTBUdzadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRadaRadaRaRaRaRaRaRaRaRaRaRaRaRjucvBeBVBwBtBwBWBLBXBYBZBeCaCbdzeIeICcbZcvcvfhAvAHAHAHAHAHAHAHAHAHAHAHCdCeCeCeCfCfCgaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvcvcvdKcvAQBSChCidzadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadfzadadadadadadadadadadadbZjucvBeBLBLBLBwBwBwBvBLBLBedzdzdzeIeICjbZbZAvAvAvAvAvAvAvAHAHAHAHAHAHAHAHAHAHAHAHAHATadAwAwAwAwAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvcvcvdKCkBRBSbZCidzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaaaaadbZbZbZbZbZdKcvBeClCmCnBwBwBwBwBwBwCoCpCqCreIeICsbZCtAvAHCuCvCuCwAvAHAHAHAHAHAHAHAHAHAHAHAHCxATadAwAKAKAKAwadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZbZbZeRCybZdzCzdzdzdzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaaadadfvcvcvcvcvdKcvCABwBwBwBwBvBYBvCBCBBeBeCqfaeIeICCbZCDAvAHAHCEAHAHCFAHAHAHAHAHAHAHAHAHAHAHAHCGATadAwCHCIAKAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCJCJCKCLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaadadadadadCMcvcvcvcvdKcvCNBwBwBwBwBvCOCPCQCQCQBeCRfaCSeICTbZbZAvCUCVCWCXCYAvAHAHAHAHCZCZCZAHAHAHAHAHDaATadAwAKAKAKAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaadaaaaaaaaBeBeBfBeBeDbDcDcDcDcDdDeBeBeBeBeBefafaeIeYeIeIDfeYirCZDgAvDhDiDjAvAHAHAHAHDkCZDlAHAHAHAHAHAHATadAwAwAwAwAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBeBeDmBeBeaaaaadaaBeDnDoDpDqBwDrDrDrDsBwDtDuCqCqCqBeDvDwDwDweIeIeIkrkrkrDxAvAHAHAHAvDyAHAHAHDkCZDzAHAHAHAHAHDAATadAwDBDBDBAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRadadBeDCDCDCBeaaadadaaBeDDDEDEBwBwBwBwBwBwBwDFDGCqDHDIDJCCeIeIeIeIDKeIeIeIeIDLDMDNDOAHDPAHAHAHAHDkCZAHAHAHAHAHAHDQATadAwDRDSDBAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeBeBeBeBeBeBeBeBeBeBeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRBeByDTByByBeBfBeByBeBwBwBwBwBwBwBwBwBwBwDUDVBeBeBeDWDXkwDYeYDZeIEaeYEbfqEcEdAvAvAvAvAHAHAHAHCZCZCZAHAHAHAHAHEeATadAwDBDBDBAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeCqCqEfCqCqBeBeEgEgEgEhadadadadadadadEiEiadadadadababBeEjBeByBeByEkBwBwBwBwElEmBeEnBwBwEoEpEqErEsBwBwEtEufbEvEwExfafafafafaDZeIEafafafafafaEyEyEyAvAHAHAHAHEzEzEzAHAHAHAHAHAHATadAwAwAwAwAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeCqCqCqCqCqCqCqBeEgEgEgEAadaaaaaaaaaaaaaaaaaaaaaaaaabaaEBDCECEDEEByEFBwBwBwBwBwEGBeBwBwBwEHEIEJEKBwBwBwEtfangnfnfnfnfELEMENfaDZeIEafaEOEOAHEPAHAHAHEQAHAHAHAHAHAHAHAHAHAHAHAHERATadAwESESESAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeCqCqCqCqCqCqCqCqBeEABeETEUadadadadadadadEiEiadadadadabaaEBDCDCEVDCEWBwBwBwBwBwBwBwEXBwBwBwBwEYBwEYBwBwBwBwEZnfnfnfnfnfnfnfnfFaDZeIEafaAHAHAHAHAHAHAHFbAHAHAHAHAHAHAHAHAHAHAHAHFcATadAwFdFeESAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeCqCqCqCqCqCqCqCqCqCqCqBeBeBeaaaaaaaaaaaaaaaaaaaaaaaaaaabaaEBDCDCEDFfByBwBwBwBwBwBwBwFgBwBwBwBwBwBwBwBwBwBwBwFhnfnfFiFjFkFlnfnffaDZeIEafaAHAHAHAHAHAHAHEQAHAHAHAHAHAHAHAHAHAHAHAHFmATadAwESESESAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeCqCqCqCqCqCqCqCqCqCqCqBeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababBeBeBeBeBeBeBwFnBwBwFoBwBwByBwBwBwBwBwBwBwBwBwBwFpfaFqnfFrFsFtFuFvFwfaDZeIEafaAHAHAHAHAHAHAHAvAHAHAHAHAHAHAHAHAHAHAHAHAHATadAwAwAwAwAwadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeCqCqCqCqCqCqCqCqCqCqCqFxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBeByByByByByByFyByByByByFzByByBwBwBwBwBwBwBwBwBwBwFAfaFBnfnfnfFCobFDFEfaDZeIFFfaAHFGAHAHAHFHAHAvAHFIFJFKAHFLFMFNAHFOFPFQAHATadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeFRCqCqCqEgEgEgEgEgEgEgFxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFxEgEgEgEgFSBycvcvcvcvcvBeFTFUFVFWFXFYBwBwBeBeBefafafafafafafafafaCZFZGaGbCZAvAvAvAvAvAvAvAvGcCfCfCfCfCfCfCfCfCfCfCfCfGdadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeCqCqCqCqCqCqCqCqCqCqCqFxaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadBeBeBeBeByByByByBycvcvcvcvcvBeGeCqGfGgCqGhBwBwBecvcvCZAvGiGjGkGjGkGjGlAvGmAHGnAvGoGpGpGqGpGpGrAvadadadadadadadadadadadadaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeCqCqCqCqCqCqCqCqCqCqCqBeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZbZejcvcvcvcvcvcvbZcvBeCqGsGtGuGvGhGwGwBecvcvGxGyAHAHAHAHAHAHAHAvGzGAGBAvGCAHAHAHAHGDGECZAwAwAwAwAwAwAwAwAwAwAwAwAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeCqCqCqCqCqCqCqCqCqCqCqBeBeBeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRGFcveucvcvcvcvbZbZbZcvBeGGCqGHGICqGJGwGwBecvcvCZAvAHAHAHAHAHAHAHGKGLAHGnGMGNAHAHAHAHGOGPCZAwGQGRGQAwGSGTGSAwGUGVGUAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeCqCqCqCqCqCqCqCqBeEABeETEUadadadadadadadEiEiadadadadadadadaRbZbZpogngngnysbZaabZcvBeBeBeGWBeBeBeBeBeBecvcvcvAvGXGYGZHaAHAHEPHbGLAHGnHbHcAHAHHdHeHfHgCZAwGQHhGQAwGSHiGSAwGUHjGUAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeCqCqCqCqCqCqCqBeEgEgEgEAaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRadadaaaaaaaaaaaaaabZcvcvcvcvcvcvcvcvcvcvcvcvcvAvAvAvAvHkHlHmHnCfHoGLAHGnHpCfHqGaHnCfHrAvCZAwGQGQGQAwGSGSGSAwGUGUGUAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeCqCqEfCqCqBeBeEgEgEgEUaRaRaRaRaRaRaREiEiaRaRaRaRaRaRaRaRadaaaaaaaaaaaaaaaabZcvcvcvcvcvcvcvcvcvcvcvcvcvAvHsHtHuHvAHHwHwHwHwHxAHHyHwHwHwHwAHAHHzHuHAAvAwAwAwAwAwAwAwAwAwAwAwAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeBeBeBeBeBeBeBeBeBeBeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaabZpogngngnysbZbZbZpogngngnysAvHsHtHuHvAHAHAHHBHCHCAHHCHCHDAHAHAHAHHzHuHAAvadaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvAvAvCZHEAHAHHBHFHGHHAHHGHHHIHDAHAHAHHzAvHtAvadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvHsHtHuHvAHHJHKHLHMHNHOHNHPHQHRAHAHAHHzAvHSAvadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRAvHsHtHuHvAHAHHKHTHUAHHVAHHWHXHRAHAHAHHzAvHtAvaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvAvAvAvAHAHAHHYHTHZIaIbIcIdHXIeIfAHAHHzHuHAAvadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadIgIhIgAHAHAHAvIiIjIjIjIjIjIjIjIkAvAHAHHzHuHAAvadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAvAvIlImEeAvAvInInInInInInInInInAvAvImEeAvAvAvaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvAHAHAHAvHtIoIpIqHtIrHtHtHtHtHtAvAHAHAHAvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvAHAHAHAvHtHtHtHtHtHtHtHtHtHtHtAvAHAHAHAvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvAHAHHtIsItIuHsIvIwIwIwIwHsIxIyIsHtAHAHAvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaRaRaRAvAHAHAvAvHtIzIwIAAKAKAKAKIwHtHtAvAvAHAHAvaRaRaRaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacabaaaaaaaRdzIBAvAHHzICHtHtHtIwAKAKAKAKAKIwHtHtHtICHvAHAvIDdzaRaaaaaaabacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaeaeaeaeaeaeaeaeaeaeaeaeacadaaaRaRffcvAvAHHzIEHtHtIrIwAKAKIFAKAKIwIrHtHtIEHvAHAvIGffaRaRaaaaacaeaeaeaeaeaeaeaeaeaeaeabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacadaeacacacacacacacacacacacabadaRaRdzdzIBAvAHHzICHtHtIHIwIIAKAKAKAKIwHtIJHtICHvAHAvIDdzdzaRaRaaabacacacacacacacacacacaeadacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeadadadadadadadadadadadaaaaaRdzdzcvcvdzAHAHAvAvHtHtIwAKAKAKAKAKIKILHtAvAvAHAHdzcvIMdzdzaRaaaaadadadadadadadadadadaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacadaeacacacacacacacacacacacadaaaRoYgucvcvdzHDAHHtIsItHtHsIwIwIwIwIwHsINIyIsHtAHHBdzcvcvguIOaRaaadacacacacacacacacacacaeadacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabadadadadadaaaeaeaeaeaeaeaeaeaeaeaeaeacaRaRpsIPgZcvIQGLAHAvAvHtHtHtHtHtIrHtHtIJHtHtAvAvAHGnIRiKgZcvpsaRaRacaeaeaeaeaeaeaeaeaeaeaeaaaaaaadadadabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacadaeacacacacacacacacacacacadadaaISITIUcvdzHxAHAvIVHtIWIXIWIWIYIWIWIWIWHtIZAvAHHydzJaIUIPISaaaaadacacacacacacacacacacaeadacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeadaaadaaaaadadadadaaaaaaaaaadzdzgvcvdzAHAHAvAvAvHkCfCfCfCfCfCfCfJbAvAvAvAHAHdzcvgvdzdzadaaaRadadadadadadadadadadaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacadaeJcacacacacacacacacacacabadadaddzdzdzAvAHAHAHGnAvJdHwJeJfJgHwJeHwJhAvGLAHAHAHAvdzdzdzaaadaaabacacacacacacacacacacaeadacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaeaeaeaeaeaeaeaeaeaeaeaeacadadaaaaaaaaAvJiAHAHGnGaGLAHJjAHAHAHAHAHGnGaGLAHAHJiAvaaaaadadadaaacaeaeaeaeaeaeaeaeaeaeaeabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRababacacacacacacacacacacacabaaaaaaaaaaaaAvAvAvAvAvAvGLAHAHAHAHAHJkJlJmAvAvAvAvAvAvaRadadadaaaaabacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRabababababababababababababaaaaaaaaaaaaadadaaadadAvAvAvAvAvAvAvAvAvAvAvaaadaaadadaRadaRaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadadadadadadaaaaaaaaadaaaaaaaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWafbWaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaaaadaaaaadaaaaaaaaaaaaaaadaaaaaaaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaaaadaaaaadaaaaaaaaaaadaaadaaaaaaaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaaaaHadaaadaaaaaaaaaHadaHadadaaaaaaadaHadaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaHaHbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYaHadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaocOcOcOaHadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaoaoaoaoaocaaoexexeKeKeKdheLaodramameRamameOePeMeNeScEaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaodhdheyaRamaoexamamamambVewaoamdiezeAaRamameBeCcdcdcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWeFamdieEaRamaoeDamamamamameBaoamdieGeHaRamameJeIcdcdcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWdxamamduamamaodvdeamamdwdwdwaoamdidtdsaRamamdraocdcdccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcacacaaodlamamamamdmdodndqdpaoaoaoaoamdidkdjaRamdidhaocdcdcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWcadgdfaodeamamamamddbgdcbgbgbgbgbgbfamamamamamamamamaocdcdcOcOadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTcUaoaocackclaocZcYdbdacVcscXcWcXcXcXcXcXcXcXcXcRcQcPcPcPcSaocdcdcdcOadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacMcNbxcJcIaoaocLcKaocDcAaocDcAaocHcaaNcFaNcaaocGcAaocDcCaocDcAaoaocBcdcdcEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxaecxcyamcqckbfbebgbgbgbgbgbgbgbgczckbgclczbgbgbgbgbgcvcucucucuctcscwcdcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKbwbFcrbicqapamamamamamamamamamamcpckbgclcpamamamamamamamamamamaqaocecdcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachaoaoaocfbXaocgbXaocnbXaocmbXcackbgclaocibXaocjbXaobZbXaocbbXcacecdccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcdcdcaamercaamercaeiercaamescackbgclcaametcaamercaametcaeuevcacecdcOadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcdcdcaeneicaeoamcaejeicaekamcackbgclcaeleicaemamcaeqamcaepamcacecdcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcOdZcdcdcadXdYcadXeccadXebcadXeacackbgclcadXedcadXefcadXegcadXehcaeecwcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVcddVcdcdaodNdWaodNdOaodPdOdmdNdOaodTdSdUaodRdQdmdPdOaodPdOaodNdOcacdcecEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcOcOcdcdcOdLdKdKdKdKdKdKdKdKdKdKdKdKdKdKdKdKdKdKdKdKdKdKdKdKdKdMcOcdcecoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcdcddJdydydydydydydydydydydydydzdIdAdydydydydydydydydydydydydJcdcecoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcdcdcOdFdEdEdEdEdEdEdEdEdEdEdEdzdydAdGdEdEdEdEdEdEdEdEdEdEdHcOcdceccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabakakakakakeQakakakakakabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcOcOcdcdcOcOcOcOcOcOcOcOcOcOcOcOcOdzdydAcOcOcOcOcOcOdCdBdBdDcOcOcOcdcecOcOcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalalalalalalalalalalalabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcddJcdcdcdcdcdcdcdcdcdcdcdcdcdcddJdzdydAdJcdcdcdcdcdcdcdcdcdcdcdcdcdeeoacdcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabakakakakakalakakakakakabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcdcOcBcBcBcBcBcBcBcBcBcBcBcBcBcBcBdzdydAcBcBcBcBcBcBcBcBcBcBcBcBcBcBcBobcdcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabadadadadadaladadadadadabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcdcBnNodfunNnMfunNnMfunNodfunNnMfhdzdydAfhnNnMfunNnMfunNnMfunNodfunNnMoccdcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOdCdBdBdBdBnWcOcOadadadadabakakakakakalakakakakakabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcdcBoeoffuoeoffuoeoffuoeoffuoeoffhdzdydAfhoeoffuoeoffuoeoffuoeoffuoeofoccdcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBcBnydCdBdBdBdBdDcOnxcdcdcdcdcdiInwaaadaaaaabalalalalalalalalalalalabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEcdcEdydydydydydydydydydydydydydynAdydydynzdydydydydydydydydydydydydydynvcdcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOdVcOaaadaaadaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVcddVcdcdcdcdcdcdcdcdcdcdcdcdcdcdnFaaadaaaaabakakakakakalakakakakakabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacocdcodydyfunBnCfunBnCfunBnCfunBnCfhfWdyjKfhnBnCfunBnCfunBnCfunBnCfudydynDcdcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcdcOadadaaadadfufufufufufufhfufdeXeXeXeXnEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBcBcBcBcOcOcOcOcOcOdJcOcOcOcOcOcdnFaaadaaaaababaaadaanPnQnPaaadaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccdccmZdyfunMnNfunMnNfunMnNfunMnNfhfWdyjKfhnMnNfunMnNfunMnNfunMnNfudydynOcdcOaafzaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaacOcOcOcOcOcOcOcOdVdZcOcOnLcOcOfuivivnHnGnIivivnJdynKdynJgLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanXdydydyjldydydydydydydydydydycOcdnYaaadaaaaaaadaaadaanZcdnZaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadcOcdcOfunVfufufufucOcOcBcBgpgpgpgpgpfWdyjKgpgpgpgpcOcOcOcOfufufufufunVfujVcdcOaaadaaaaadadadadcOdCnWcOaaaaaaaaaaaaaaaaaacOcdcdcdcdcddJcdcdcdcdcdcdcdnRcOivivivivivivivdynTnSnUdygLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqzfvdyfvdydydydyfvdyfvdydydydycOcdcOadadadadadadadadcBqmnQqncBadadadadadadadadadadadadououqpqoqoqoqqououcOcOcOcOcOcOcOcdcOqrgygygyqsoBcBcdgpqtqtquqvqwfIfWdyjKfIqxqygpiJcdcdcOdydyfuqrqrgygyjVcdcOaaadaacOdCmTmTnWcOcdcdcOcOcOcOdCdBdBdBdBnWcOcdcOcOdJcOcOcOcOcOcOcOcOcdcdcOivoSoSoSoSoSivnJdynJdynJgLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadfuqPfsqPfBdydyeZqPfsqPqQfvdydycOcdcOaaadaaadaaadaaadnyqHcdqIcBaaaaadaaadaaadaaadaaadaaouqAqBqCqDqEqFqGoucBcdqMqLqNcdcOcdcOfuqOfugyjVfucOcdgpgPgPgPgPgPqJfWdyjKqJgPgPgpqKcdcdcOqSdyqRgygygygyjVdJcOcOcOcOcOcdcdcdcdcOcdcdcdcdcddJcdcdcdcdcdcdcdcdcOdydyqWmdmdlWdyqUqVcOcdcddJivivivivivivivdynTqTnUdygLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadfhfhgmgfgmkGrifvrjgmgfgirkfhfBdycOcdcOcOcOcOadadadadadcBrecdrfcBaHaHadaaadaaadaaadaaaHaHourhoqoqoqoqoqrgoucBcdqZqYqXcdcOcdcOgygyfugyraoBcBcdgpgPrdgPrbgPrcfWdyjKrcgPgPgpqKcdcdcOcOfufugyfuqOfujVcdcdcOcdcddJcdcdcdcdcdcdcdcdcdcdcOcdcdcdcdcdcdcdcdcOdydyrlrlrlrldydylVcOcdcdcOivoSoSoSoSoSivnJdyrmdynJgLaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadftfsfaeXeXeXeXrvfsfAhsfhfBdycOcdcOcdcdcOaaaaadaaaHcBcdcdcdcBououououououououououcBaHrsoqoXruoqrtoprgoucBcdrrrqrpcdcOcdcOgygyfugyjVfucOcdrngPoFgPoGgPrcfWdyjKrcgProgpgpgpcdcdcOkskrgyfugygyjVcdcdcOcdcdfufufufurAfufufufufufufufufurAfufucOdJcOcOoMrzrxrxrxrwoRdyrycOcOcdcOivivivivivivivdynJdynJdyqzaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaogiojxioiohMjwioiojxioohfhfBdycOcddJcdcdcOaaaaaHaaadcBcBojcBcBoiooonomoloyozowoxgJcBcOouorosopoqovopotoucBcdcdcdcdcdcdcdcOfugyfugyoAoBcBcdgpgPoFgPoGgPoCfWdyjKoCgPgPoDoEgpcdcdcOfujVgyfugygyjVcdcdcOcdcdfuoIoHoHoHoHoHoHoHdydydyoKdydyoJfufPdyfPoLoMoNoOnJnJoQoRdydyoPcOcdcOivoSoSoSoSoSivivfufufufufhfhfhfhadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaogioioiooVinoUoUinoUoUininioiAoTfBdycOcdcOcdcdcOdCdBdBnWcOcOcdcdcddJgJgJgJgJgJpbgJpcpdgJdJcdouoWoXoYoqoZpaoroucBpicdcdcdcdcOcdpgcOcOcOphobcOcOcdgpgPgPgPgPgPfIfWdyjKfIgPgPpepfgpcdcdcOkspmpnfkpnpnpocdcdcOcdcdfupjdydydydydydypkdydyplfudydyoJfudydydyptoMoNoOnJnJoQoRdydypucOcdcOivivivivivivivivpsprpqppfuiuiufhadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiooViWioininiWiWiniWiWiWiniXjeiYfBpvcOcdcOcdcddJcdcdcdcdiIkBcdcdcdcOpDgJgJgJgJgJgJgJgJpFcOcdcBcBcBcBpEcBcBcBcOcBpwcdcdcdcdcBcdnxcdcOcdcdcecOcdcdgppBpClQjEpAgpfWdyjKgpjEpxpypzgpcdcdcOcOcOphcOcOcOkbcdcdkBcdcdfupPdydydypQdydydydydypRfudydyoJfudydydyptoMoNpGpHpHpHpIdydycOcOcdcOivoSpKpJpMpLivivpNivivivpOnJpSfhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapTininjxininiWiWiniWiWiWiniXjeiYfBdycOcdcOcdcdcOcdcdcdcdiIkBcdcdcdcOqcgJgJgJgJpbgJgJgJqbcOcdcdcdcOcdcdcdcOcdcdcdcdcdcdcdcdcBcdkBkBkBcdcdcecdcdcdgppZqagppWnjgppYfUpXgppWgppUpVgpcdcdfncdcdcdcdcdcdkbcdcdkBcdcdfuqldydydyfVdydypkdydymcfudydydyfuqjdydyptdydyqkqkqkqkdydydycOcdcdcOivivivivivivivivqgqdqiqhfhnJnJfhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaioipiWioininiWiWiniWiWiWiniXjeiYfBdycOcdcOcdcdcOcdcdcdcdcdcdcdcdcdcOiTgJgJiUiViRiQiPiOiScOcdcdcdcdcdcdcddJcdcdcdcdcdcdcdcdcBcdcdcdcdcdcdcecdcdiJfuhshsiLiKiMiMfgdyfCiMiNiLhshsfucdcdcOiIcdcdcdcdcdcecdcdcdcdcdfuiHiEiEiEiGiEiEiEiFdydyfuiDdyiCfudydydyiBdyizizdydyizizdydycOcdcdcOiviviviviviviwivivivivivfhiuiufhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiqioioioipininisininirininiokFitfBdycacacacacacacacacOcOcOcOcOcOcOihiiijikililililimijiicBcOcOcOcBdJcBcOcOcOcOcOcBcBhXcBcBcOcOcOcOcOcOcOhYfnhJhJfkiahZidicibibibibibibigifhZiefkhJhJhJhJhLhJhJhJhJhKhJhJhJhJhJfkfkhWfkfkhVfkfkhSfuhUfufuhMhNhRfudydydyfuhFfeflhEhDfffefehCcOdJcOcBhIfufufufufufuhHhEhDhGfhfhfhfhfhadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiqiojxioiohMjwioiojxiojyfhfBdycajzbgjnjAjnclcadydyfUdydydydydydydydydydydydydydydydydydydydydydydyjldydydydydydydydydyfXdydydydydydydydydydydydydyjojqjpjtjsjvjujrdydydydydydydydydydydydydydyfXdydydydyjldydydydydydydyfVdydydydydydydydydydydyfUdydydydydydydydydydydydydydydydydydydydydydydyeZjmadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhjfsjieXeXeXeXjjfshjhsfhfBdycajkamamdeamaqaNdydyfUdydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydyfXdydydydydydydydydydydydydyjbjaiZjhjgjfjdjcdydydydydydydydydydydydydydyfXdydydydydydydydydydydydyfVdydydydydydydydydydydyfUdydydydydydydydydydydydydydydydydydydydydydydyeZfSaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadfhfhgmgfgmgjfxglgkgggfgighfhfBdycagcgbgegdgngocadydyfUdydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydyfXdydydyfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWdydydyfXdydydydydydydydydydydydyfVdydydydydydydydydydydyfUfRfRfRfRfRfRfRfRfRfRfRfRfRfRfRfRfRfRfRfRfRfTdyeZfSadadaaaaaahOhPgafZfYhPhTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadfuftfsftfBdydyeZfAfsftfyfxdydycacacafwfvfwcacadydycOcOcOdJfufufufufufufmfQfufufufufucBfNfOfNcOcOcOdyfPfPfGfEfEfFdydyfhfhdydyfCfDfcfceXeXeXeXfLfIfMfKfKfHfHfHfHfHfKfKfJfIfdeXeXeXeXfcfceYfgdydyfhfffefefefeflfhfmfifhfjfkfpfkfkfkfkfkfnfocOdydydyeTeTeTeTeTeTeTeTeTeTeVeUeUeUeUeWeTcOcOcOcOcOfbdyeZfaeXeYaaaaaahPixiyfqiyfrhPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjfxdyfxdydydydyfxdyfxdydydydydyhihihihigHdydydydycOcdcdcdfhhrfPfPhqhpdydyhohnhmdygKcOgJgJhlcOcdcOdyhkhkhkhkhkhkhBhkhkhkdydyfCgLadadadadadadadgphzhyhuhAhwhuhthxhuhthvgpadadadadadadadgqfgdydygVgtgtgtgtgtgtgtgtgtgtgSfugUgygTgTgTfucdcecOdydydyhehdgzgzgzgzgzgzgzgzhghfgWgXgYgZeTcdcdcdcdcOgDdydyhahbhcaaaaaahPiyiygEiyhhhPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaftdydydydydydydydydydydydydydydydydydydygHdydydydycOcdcdcdfhgGdydydydydydydydydydygKcOgJgJgJcOcdcOdJcOgIgIgIgJgJgJgOgMgNdydyfCgLadadadadgpgpgpgpgPgPgQgRgPgQgPgPgQgPgPgpgpgpgpadadadadgqfgdydygrgtgsgvgugwgtgsgvgugwgtgxgygygygygyfucdcecOdydydygAgzgzgzgzgzgBgzgzgzgzgCgzgzgCgzeTcdcdcdcdcOgDdydydyeZfaeXeXfLhPiygEiygEgFhPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafufhmqfcfcfcfcfcfcfcmrfufhdydycOcOcOcOcOcOcOcOcOcOcOcdcdcdmmgGdydylVmnmomplVdydydygKcOgJgJgJcOcdcdcdcOmjmjmjgJgJgJgJgJlSdydyfCmkfLfhgpgpgpmlhukfgPgPgPgPgPgPgPgPgPgPgPkfhumxgpgpgpfhmwmvfgdydygrgtgskAkxgwgtgskAmAgwgtfumzfugygymyfucdcecOdydydymugzgzgzgzmteTmggzgzgzgzgzgzgzgzeTcdcdcOcOcOgDdydydydylMgfgflMhQiyiyiyiymshPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmekGdydycOokcOcdcdcdcdcdcdcdcdcdcdcdmambdydylVmcmdlWlVdydydygKcOlXlYgJcOcdcdcdcOlZgJgJgJgJgJgJgJlSdydyfCiMiMiNlTlUgpgPgQgPgPgPgPlQjEjEjElRgPgPgPgPgQgPgplUlTiKiMiMfgdydygrgtgskajYgwgtgskajYgwgtmigtfufufufufucOcecOdydydyeTgzgzgzgzmheTmggzgzgzgzgzgzgzgzeTcdcdcOmfcOgDdydydyeZlleXeXfLhPiygEgEgEgFhPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakknkfLfBdycOcOcOcOcOcOcOcOcOcOmYmXdJcOfhmZdydydydydydydydydydygKcOhkhkhkcOcdcdcdcOnagJgJneiUgJnbncnddydydydydynfnglUnhgPgPgPgPgPgpgpnjninjgpgpgPgPgPgPgPnhlUngnldydydydydygrgtgtgtgtgtgtgtgtgtgtgtkzgtnnnmnmfucdcdcecOdydydyeTnrgznsnoeTeTeTnpeTeTnqnqnqnqnueTcdcdcOcdcOntdydydyeZhcaaadadhPiyiyiyiykEhPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafsgffsdydymLaaaaaaaaadadaaaamCcdcdcdcOfhfufumDfudydymBdydydydygKcOcdcdcdcdcdcdcdcOcOcacacacacacacacadydyjKmJmJmKlTlUgpmGmGmGmFgPgpmEmImImImHgpgPgPmGmGmQgplUlTmRmJmJfWdydygrgtgsgvgugwgtgsgvgugwgtmPgtgtgtgtmNcdcdmOhJibibibhJmWcOcOcOcOcdcdcdcdcOmVmTmTmTmUcOcdcdcdcdcOgDdydydyeZmSadfzaamMiygEgEgEgFmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakkkjfLfBdygqadadadadadadadadjWcdcdcdcBkskrgygyfufuktjVkufufudydycOcdcdcdcdcdcdcdcdcdcaklkmjRjRjRkncadydyjKgpgpgpgpgpgpkokpgpgpgpgpkqgPgPgPgPgpgpgpgpkwgpgpgpgpgpgpjGfWdydygrgtgskykxgwgtgskAkxgwgtkzgtgtgtkDfucdkBkbcOdydydycOkvcOcdcdcOcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcOfbdydydyeZhcaaadadhPiyiyiyiykEhPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjCjBdydygqaaaaaaaaadaaaaaajWcdcdcdcOfujVgygyfugygyjVgygyfudydydJcdcdcdcdcOjUcdcdcdjQjRjOjPjSjTjRjQdydyjKgpjMjNjLgPgPgPgPgPjGjJgpjIjEjEjEjDgpjHjGjFgPkikfgPkfgPkhkgfWdydygrgtgskajYgwgtgskajYgwgtjZkckckdkefucdcdkbhodydydycOcdcdcdcddJcdcdjXjXjXjXjXjXjXcdcdcOcdcdcOcOfbdydydyeZfaqeqeqfhPiygEgEgEgFhPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafufufdeXfLfufufufufufhdydygqaaaaaaaaadaaaaaalrcdcdcdcBkslqgykJfugygyjVgygyfudydycOcOcOcOcOcOcOcOcdcdcalxlylzlulvjRlwdydyjKgpgPgQlsltltltlDlCjGabgpgpgplBgpgpgpabjGlAlGlFlElEgPgPgpgpfWdydylHgtgtgtgtlIgtgtgtgtgtgtfufufufujVfucdcdkbhndydydycOcdcdcdcdcOcdcdjXlJlLlKlLlKjXcdcdcOcdcddJdyfbdydydydylMgfgflMhQlOlNlNlNlPhPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkHkGdydygqaaaaaaaaadaaaaaacOcdcdcdcOfujVgykJfugygyjVgygyfukIkIkIkIkIkIkIkIcOcdcdcdcakVkUjRjRjRkTcadydyjKgpgPgPkSkRkRkQkPkOjGgpkNkMkMgPkMkMkLgpjGkKlblaldlclegPlfgpfWdydycOcOcOcOcOcOcOkWkXkWcOcOcOcdcdcdhYkYkYkYkZcOdydydyeTlmeTjXjXjXlgjXjXlhlhlilhlilgeTlkeTeTljeTeTgDdydydyeZllqeqeqfhPlngEgEgElohPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakknkfLfBdygqadadadadfzadadadcOcOAXcdcBksAWgykJfugygyjVgygyfuAVAVAVAVAVAVAVAVcOcdcdcOcacacacacacacacadydyjKgpBcBbBbjIgPgPgPgPjGgpBagPkMgPkMgPAZgpjGAYkKBdBeBflegPBgBhfWdydycOtucdcdcdtucOdywcdydJcdcdcdcdcdcOcOcOcdcedJdydydyxWlhBjjXlLBlBklhBmlhlhlhlhlhjXAfAfAgAfBiAfeTgDdydydyeZfSadaaaahPlniyiyiyBnhPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafsgffsdydygqaaaaaaaaadaaaaaaaacOcOcdcOfujVgykJvphJhJhKhJhJhJhJhJhJhJhJhJfocOcOcdcdcdcdcdcdcdcdcdcdcOdydyjKgpgPlfhuAFzVgPgPjGgpgpAHgPgPgPgPgPAGgpgpjGAKALAIAJgPgPhugpfWdydycOcOcOcdcdcOcOwcdywccOcOcOcdcdcdcOjUnxcdcecOdydydyxAvslhjXlhlilhlhAMlhlhlhlhlhjXANAfAOAfAgAfeTgDdydydyeZAPadaaaahPASATAQARAUhPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakkkjfLfBdygqaaaaaaaaadaaaaaaaaaacOcdcBksAvAupnmWAwApcdcdcdcdcdcdcdcdcdcdcecddJcdcdcdcdcdcdcdcdcdcddJdydyjKgpAtgPgQAsgPgPgPAqadArkMxIkMgPkMxIkMgpadjGABgPgPgPgPgPgpgpfWdydycOcdcdcdcdeScOdywcdycOAocdcdcdcdcdcdcdcdcecOdydygtwGvslhxWlhlhlhlhAAlhlhlhAzAyjXAxAfAfAfAfAfeTntdydydyeZfSaaaaaakCACADADADAElpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjCjBdydygqaaaaaaaaadaaaaaaaaaaAacdcOcOvpmWcOcOzZmTdBcdcdcOcOcOcOcOvphJkZcOcOcOcOcOcOcOcOcOcOcOcOcOdydyjKgpzOzNzQzPzVgPxJzWadzXzYgPzRzSzTgPzUgpadjGAmAngPgPgPAlAkjGfWdydycOcdcdcdcdcddJwcdywccOAocdcdApfufufufufucecOdydygtgtlhlhwGlhlhlhlhjXAbAcAdAiAhjXAjAfAeAfAgAfeTgDdydydyeZfSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamqfcfcfcfcfcfcfcmrfufhfuCzmvadadadadadadadadadadCwcdcdcdcecdcddJcdcdcdcdcdcOCqCrCsCtCvwtzlwtwtCuCcCdCdCeCdCdxewtwtwudydyjKgpgpgpgpgpgpgpCxgpadgpgpgpgpgpgpCygpgpadgpgpgpgpgpgpgpCICLCGibibhJrRkYkYCHhJslCECDCEslCFhJhJslfkCACBCBfkCCcOdydygtgtlhlhCOlhlhlhsAjXlhCNlhCMlhjXAfAfAgAfAgAfeTgDdydydyCofSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBcBCbcBobcOcOcOcOcOcOcOcOcOwtwtwtwtwtwtzlwtwtwtCcCdCdCeCdCdxewtwtggdydydydJcdcdcdcdcdcOcdcOadgpkNkMkMkMkMkMkLgpadcOCfcdcdcdcdcdcddJdydydydJcdcdcdeefkCiwcwcwUCjwUwcwcCgfugygygyChcecOdydygtxWvslhCmlhlhlhBWjXCklhCllhCpjXAfAfAgAfAgAfeTCndydydyCoqzaaaaaaaaaaaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwtwtBQwwwywDwtwtwtwtwtwtwtwtwtwtwtwtwtwwBMwtBNBOBPBHBIBHBGBLBKBHBJdydydycOcdcdcdcdcdcOcdcOadgpkMgPgPgPgPgPBFgpadcOAocdcdcdcdcdcdcOdydydycOcdcdcdcdxRwUwcwcwcwcwcwcwcCafugygyBZfucecOqjdydywGvslhBYBXlhlhBWjXjXjXjXjXjXjXBVeTeTBUeTeTeTfuBRBTBSBRfuuDuDuDuDuDuDfufufufuadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzBqBsBsBrwyxeBuBtwtwtwtwtwtwtwtwtwtxhxiBvBwwtwtydBxBoyjydwtwtwtwvggdydydygpgpgpgpgpgpnjBpgpadgpkMgPjGjGjGgPkMgpadfhfufufufufufufufudydydycOcdcdcdcdfuBEwUwcwcwcwcwcwcwUfufuBDfufucecOdydydyeTeTljeTeTeTBAeTeTyJlhAflhAflhAflhcOcdfuBCBBfuuNvRvQvTvSvTvSuOuNuOuNBzgfgfByaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayeydwtwtycwyxexdxdwtwtwtwtwtwtwtwtwtxhxixDyfwtwtwtwtwtyjwtwtwtwtwvfAdydyyigphtyhyhygylymxJgpadgpkMgPjGykjGgPkMgpadfhxsxNxsdyjldyxOgVdydydyfufufufufufuxPwUwcwcxQxQwcwcwcxRwcwcxSxTcexUdydydyxWxVxVsAeTxXlhlhlhlhlheTeTeTeTeTeTcOcdfunJnJfuuuvRvQxZxYxZxYxxxzyaybfufufufuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxGxFwtwtwzwyxexdxdwtwtwtwtwtwtwtwtwtxhxixDxEwtwtwtwtwtxMwtwtwtwtwtxLdydydynjgPxKgPgPgPgPxJgpadgpkMxIgPxHgPxIkMgpadfhdyxrxpxqxsdydylHdydydyoLwMxvxtxufuxlwUwcwRxmxlwSwcwUxnwcwcxogrcewHdydydyxAlhlhwFeTlhlhlhlhlhlheTlhlhlhlhlhcOcdxwnJnJxyxxwKwKxzxzxzxzxBxCvQuNuOuNuDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzxgwtxaxcwyxexdxfwtwtwtwtwtwtwtwtwtxhxixjxkwtwtwtwtxawZwtwtwtwtwtxbdydydywYgPgPgPgPgPgPgPgpadgpkMgPgPgPgPgPkMgpadfhdydydydydydydyfUdydydylHwMwNwOwPfuwTwUwcwRwQwTwSwcwUwfwcwcwVgrcewHdydygtwGlhlhwFeTwIlhlhlhvYlhljlhlhlhlhlhcOcdfuvVnJfuwLwKwKwJwJwJwJwWwXvQuuuwuuuDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwEwBwAwzwywDwCwtwtwtwtwtwtwtwtwtwtwtwtwwwxwtwtwtwtwtwswtwtwtwtwvwudydydygpgPgPgPgPgPgPgPgpadgpgpkMkMwqwrkMgpgpadfhdywjwhwidydydyfUdydydywlivivwkfufuwcwcwcwcwdwdwcwcwgwfwcwcwelHcevXdydygtgtlhlhlhwawblhlhlhvYlhvZlhlhlhvPlhcOcdfuvVvUfuvWvRvQvTvSvTvSwmwnwowpfufufufuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawzwzwzwzwzyPzGzFzIzHyRzGzFzFzFzHwtwtwtwtzlwtwtwtwtwtwtxMwtwtwtwtwvggdydydygpztgPzKzJzMzMzLgpadzogpgpgpgpgpgpgpzoadfhizizizdyizizizgVdydydygVivzwivfuzAwUwcwcwcwcwcwcwcwUzyzxzzfufucecOdydygtgtlhlhlhzBwFlhlhlhvYlheTzEzDzCzClhcOcdfufufufuuuvRvQxZxYxZxYuwuuuwuufuuzuEuDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaznzmzkaaaazkzjzkaaaaaayQwtziwtwtzlwtwtwtwtwtwtzswtwtwtziwvfAdydydygpztztzvzuzpzqzrgpbyzozozozozozozozozobyfhizizizdyizizizlHdydydylHzazbyZfuwUwcwcwcwcwcwUyYwUwcwcwcwcwcyXcecOdydygtzfzguWzheTzdlhlhlhlhzejXjXjXjXjXjXcBcdfunJzcfuuNwKwKuOfufufufuyWyVfufuyUynuDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayQyPyQaaaayQyRyQaaaaaawzwzwzwzwzySyTyOyOyOyOyOyOyOyOyOyOyOyOfXfXfXgpgpgpgpgpgpgpgpgpfhfhfhfhfhfhfhfhfhfhfhfhyKyLyMfUyKyLyMfufXfXfXfufufufufhyKyLyLyMyNyKyLyLyLyMyNyKyLyMfhkbcOdydydywGlhlhlhyDlhlhlhlhlhlhjXyJyIyHwbyGcBcdfuyFnJyEuuuwuuuwfuyBuuyCuuuwuuuwuzuEuDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOyzcdyAyAyAcdiJiJcdcdcdcdcdcOdydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydyfVfUdydydyyxyylhlhlhlhlhlhlhlhlhywlhvsyvliyucBcdfufufufuuNuOuNuOytuOyqyoypysuNuOyrynuDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOurkYkYkYkYkYkYkYkYcwcdcdcddJdydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydyfVfUdydydyeTeTuyuxeTeTucublhlhlhjXuslhlhlhlhcBcdfuuvnJutuuuwuuuwfuuwuAuCuBuwuuuwuzuEuDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcOcOmVmTmTmTuGcOcOkbcdcdcdcOfPdydydydyuFfvuFdydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydydyfVfUdydydyeTuHlhlhuHeTlhlhlhuIlhjXuJlhlhsguKuLcdfunJuMfuuNuOuNuOfuuPuNuOuNuOuNuOuNuOfuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaaaadadadadhYkYkYfocOfhfhfhfhfhtQtPtQfhfhfhfhfhdJcOcOdydydyfhfufutOfufufucOcOcOcOdJcOcOcOcOcOcOtRtScOcOtRtScOcOdJcOcOcOcOtVsjsjtTsjtUjXjXtYtXjXlJlhlhlJeTucublhuatZjXjXsHtWlgjXobdJcOcOcOcOcOdJcOcOcOkbcOcOcOcOcOcOcOcOcOcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaaaaaadhkhkhkhkcdcecdfhdydydydydydydydydydydyfhcduhhJibibibudufueibugujuicdcdcdcdcdcdcdcdcdcdcdcdcdcdcOcdcdcdcdcdcdcdcdcdunlhulumukuklhlhlhlhjXuolhlhupljlhlhlhualhlJsusususueTcecdcdcdcdcdcdcdcdcdcdcecdcdcdcdcdcdcdcduqcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaaaaaaahkvkvlhkcdcecdfhdygfdydydydydydyvivhvgfhcdcecOdydydyfhvjfVdydyvxvwhJhJkYkYrRrRrRhJhJkYkYkYkYkYhLkYkYkYkYhJhJhJhJhJvuvvlhlhlhlhlhlhlhvsvtlhlhlhvreTucublhualhlhlhlhlhlhvqcecdcdcdcdcdcdvphLhJhJmWvovmvmvmvmvmvncOcOcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaaaaaaahkvyvzhkhkcecdfhgfdydydyiDdyvAdyuZuZdyfhcdcecOdydydyfuvCvBvEvDvMfucdcdcdcdcdcdcdcdcOrPdBdBdBrNcOvOcOcdcddJcdcdcdcduUvNlhlhlhlhlhlhlhvHjXvIvKvJvreTvFlhlhuavGlisusususueTcecdvLvLcOcOcOkbcdcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaaaaaaahkuRoqoquScecdfhdydygfdydygfdydydydyuQfhcdcecOdydydyfufufufufufufucOcOcOdJcOcOcOcOcOaaaaaaaaaacOcOcOcOcOdZcOcdcdcduUuVuTlhlhuTlhlhuTuXjXeTeTeTeTeTuWeTeTuaeTeTeTeTeTeTeTkbcOcOcOcOcdcdcecddZcOcOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaaaaaaahkuRuYoqhkcecdfhdydygfgfdygfdypQdyuZdyfhcdcecOdydydycOcdcOcdcdcdcdcdcdcdcdcdcdcdcOadaaaaaaaaaaadaaaaaaaaaacOcdcdcduUvctDtCvavbvesglhvfjXcdcdcdcddJvddJcdcecdcdcdcdcdcddJcecdcdcdcdcdcdcecddVcddVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaaaaaaahkststhkhkcecdfhfhfhfhfhfhfhfhocfhfhfhfhcdcecOdydydycOcdcOcdcdcdcdcdcdcdcdcdcdcdcOadadadaaaaaaadaaaaaaaacOcOcOcdcdsssjsjsjsjsjsjsjsjsisjkYkYskslsnsmslslsoslslslslslslhJspkYkYkYsqslslsrcBcBcBcBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaaaaaaahksDsEhksCcecdcdcdcdcdcdcdcdcdcecdcddJcdcdcecOdydysBcOcdkBcdrSrSrSrSrSrSrSrSrSrSrSrSrSadrCrCrCrCrCaaaaaadVcddVcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdobszlhlhlhlhlhjXsAlhsusvjXcOcOcOcOcdswsxsysysysyrMcBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaaaaaaahkhkhkhkcOhYhJrQkYkYkYhJrRrRrRhKrUrThJkYkYrVcOdydydycOcdkBcdrSrBrBrBrBrBrBrBrBrBrBrFrEadrCrDrDrDrCadadadcOcOcOcOcOrGmTmTmTmTmTmTrHcBcBcBcBcBobrJlhlhlhlhlhrIlhlhlhlhrKadaaaacOcdrPdBdBrNrOrLrMcBadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaaaaaaaaHaHaHaHaHadcOkbcdcdcdcdcdcdcdcdcdcdcOcdcdcdcOdydydycOcdcOcdrSrBrBrBrBrBrBrBrBrBrBrXrWadrCrDrDrDrCadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasfselhsbsdsclhlhlhlhlhsgsheUeUeUrYjXadaaaacOcdsarZrZrZrZnYrMcBadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadfzadadadadadadadadadadadadkbcdsNsNsNsNttsNsNsNsNsNsNtvtucOdydydycOcdcOcdtwrBrBrBrBrBrBrBrBrBrBtsrWadrCrDrDrDrCadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatllhtnlhrItmlhlhtklhlhlhrIlhlhlhlhsfadaaaacOcdtorZrZtqtrcOtpcBaHaHaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaHaHaHaHadaHadaHaHaHaHaHaHaHaHaHaHaHaHtNcdsNtKtKtitLtMsQtJsQsQsUcBcBcBdydydycOcdcdcdrSrBrBrBrBrBrBrBrBrBrBrBrWadrCrCrCrCrCadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatltGlhtHsdtItBtAtDtCtFtEsdsAlhsusvtlaaaaaacOcOcOcdtycOcOcOtzcBtxcBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaHaHaHaHadaHadaHaHaHaHaHaHaHaHaHaHaHaHsPcdsNsOsRsRsQsQsQsQsQsQsUsTsScBdydydycOcOcdcBrSrBrBrBrBrBrBrBrBrBrBrBrWadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasIeUrYjXjXjXsHeUeUeUrYjXjXjXsHeUeUsMaaaaaaaacOcdcdeecwsLsJsKsGsFcBadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaHaHaHaHadaHadaHaHaHaHaHaHaHaHaHaHaHaHkbcdsNthsQtisQtjsRtbtdtcsNtetfcBdydytgcOcdcdiIrSrBrBrBrBrBrBrBrBrBrBrBtasZsZsZsXsXsYaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcdcdcdcecdrOsKsWsVcBadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadfzadadadadadadadadadadadcOkbcdsNsRsRsRsQsQsQtMsRsRsNcBcBcBdydyHwcOcOrSrSrSrSrSrSrSrBrBrBrBrBrBrBrBrBrBrBrBrBrWadrCrCrCrCrCadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcdcdcdceHxsJsKcOsVcBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaaaaaaaaaadcOcOcOcOcOcecdsNHkHjsQsQsQsQsQsQsQHpHqDPHodydyHncOHmrSrBHlHrHlHsrSrBrBrBrBrBrBrBrBrBrBrBrBHtrWadrCrDrDrDrCadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcOcOdCHvcOcBHucBcBcBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaaaaaaaadadnPcdcdcdcdcecdHPsQsQsQsQtMtdtMHOHOsNsNDPfhdydyHMcOHNrSrBrBHUrBrBHTrBrBrBrBrBrBrBrBrBrBrBrBHSrWadrCrDHRrDrCadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCJCJCKHQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaadadadadadHzcdcdcdcdcecdHysQsQsQsQtMHFHGHEHEHEsNHHfhHBdyHAcOcOrSHCHDHIHJHKrSrBrBrBrBDRDRDRrBrBrBrBrBHLrWadrCrDrDrDrCadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaHadaaaaadaaaaaaaasNsNttsNsNIrIpIpIpIpIoIqsNsNsNsNsNfhfhdyfudydyInfufPDRImrSIuIvItrSrBrBrBrBIhDRIsrBrBrBrBrBrBrWadrCrCrCrCrCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsNsNHVsNsNaaaaadaasNHZHYHXHWsQIdIdIdIcsQIbIaDPDPDPsNIfIeIeIedydydyfCfCfCIgrSrBrBrBrSIjrBrBrBIhDRIirBrBrBrBrBIkrWadrCIlIlIlrCadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHadadsNFmFmFmsNaaadadaasNILIKIKsQsQsQsQsQsQsQINIMDPIFIGIHHMdydydydydydydydydyIIIJIRISrBIQrBrBrBrBIhDRrBrBrBrBrBrBIPrWadrCIlIOIlrCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNsNsNsNsNsNsNsNsNsNsNsNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaHaHaHaHsNsUIEsUsUsNttsNsUsNsQsQsQsQsQsQsQsQsQsQIxIwsNsNsNIyIAiFIzfuFqdyFpfuIDjKIBICrSrSrSrSrBrBrBrBDRDRDRrBrBrBrBrBDprWadrCIlIlIlrCadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNsNDPDPELDPDPsNsNEBEBEBFCadadadadadadadEiEiadadadadababsNFEsNsUsNsUFDsQsQsQsQsQFLsNFMsQsQFKFJFHFGFIsQsQFuFFocFNFOFPfhfhfhfhfhFqdyFpfhfhfhfhfhFAFAFArSrBrBrBrBFBFBFBrBrBrBrBrBrBrWadrCrCrCrCrCadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNsNDPDPDPDPDPDPDPsNEBEBEBEjadaaaaaaaaaaaaaaaaaaaaaaaaabaaFlFmFnFiFjsUFksQsQsQsQsQFzsNsQsQsQFyFxFwFvsQsQsQFufhgSgtgtgtgtFsFtFrfhFqdyFpfhFoForBEtrBrBrBFhrBrBrBrBrBrBrBrBrBrBrBrBFfrWadrCFgFgFgrCadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNsNDPDPDPDPDPDPDPDPsNEjsNEkEladadadadadadadEiEiadadadadabaaFlFmFmGgFmGfsQsQsQsQsQsQsQGdsQsQsQsQGbsQGbsQsQsQsQGcgtgtgtgtgtgtgtgtGeFqdyFpfhrBrBrBrBrBrBrBFYrBrBrBrBrBrBrBrBrBrBrBrBGarWadrCFgFZFgrCadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNDPDPDPDPDPDPDPDPDPDPDPsNsNsNaaaaaaaaaaaaaaaaaaaaaaaaaaabaaFlFmFmFiFXsUsQsQsQsQsQsQsQFWsQsQsQsQsQsQsQsQsQsQsQFVgtgtFTFRFSFUgtgtfhFqdyFpfhrBrBrBrBrBrBrBFhrBrBrBrBrBrBrBrBrBrBrBrBFQrWadrCFgFgFgrCadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNDPDPDPDPDPDPDPDPDPDPDPsNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababsNsNsNsNsNsNsQGCsQsQGBsQsQsUsQsQsQsQsQsQsQsQsQsQGDfhGEgtGIGJGKGFGGGHfhFqdyFpfhrBrBrBrBrBrBrBrSrBrBrBrBrBrBrBrBrBrBrBrBrBrWadrCrCrCrCrCadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNDPDPDPDPDPDPDPDPDPDPDPGsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsNsUsUsUsUsUsUGrsUsUsUsUGysUsUsQsQsQsQsQsQsQsQsQsQGAfhGzgtgtgtGvkxGuGtfhFqdyGxfhrBGwrBrBrBGnrBrSrBGoGpGqrBGhGiGjrBGkGlGmrBrWadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNGZDPDPDPEBEBEBEBEBEBEBGsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGsEBEBEBEBHisUcdcdcdcdcdsNHaHcHbHeHdHfsQsQsNsNsNfhfhfhfhfhfhfhfhfhDRHgEEHhDRrSrSrSrSrSrSrSrSGXsXsXsXsXsXsXsXsXsXsXsXsXGYadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNDPDPDPDPDPDPDPDPDPDPDPGsaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadsNsNsNsNsUsUsUsUsUcdcdcdcdcdsNGUDPGWGVDPDMsQsQsNcdcdDRrSGPGOGNGOGNGOGQrSGRrBEarSGTGLGLGSGLGLGMrSadadadadadadadadadadadadaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNDPDPDPDPDPDPDPDPDPDPDPsNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOcOdZcdcdcdcdcdcdcOcdsNDPDODPDPDQDMDNDNsNcdcdDKDLrBrBrBrBrBrBrBrSDIDHDJrSDGrBrBrBrBDTDSDRrCrCrCrCrCrCrCrCrCrCrCrCrCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNDPDPDPDPDPDPDPDPDPDPDPsNsNsNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHdVcddVcdcdcdcdcOcOcOcdsNDXDPDWDVDPDUDNDNsNcdcdDRrSrBrBrBrBrBrBrBEcEbrBEaDZDYrBrBrBrBEdEeDRrCEfEfEfrCEgEgEgrCEhEhEhrCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNsNDPDPDPDPDPDPDPDPsNEjsNEkEladadadadadadadEiEiadadadadadadadaHcOcOmVmTmTmTuGcOaacOcdsNsNsNEusNsNsNsNsNsNcdcdcdrSEqEpEsErrBrBEtEmEbrBEaEmEnrBrBEoEyExEwDRrCEfEvEfrCEgEAEgrCEhEzEhrCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNsNDPDPDPDPDPDPDPsNEBEBEBEjaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHadadaaaaaaaaaaaaaacOcdcdcdcdcdcdcdcdcdcdcdcdcdrSrSrSrSEHEGEJEDsXEIEbrBEaECsXEFEEEDsXEKrSDRrCEfEfEfrCEgEgEgrCEhEhEhrCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNsNDPDPELDPDPsNsNEBEBEBElaHaHaHaHaHaHaHEiEiaHaHaHaHaHaHaHaHadaaaaaaaaaaaaaaaacOcdcdcdcdcdcdcdcdcdcdcdcdcdrSCRCPCZDarBEMEMEMEMENrBEOEMEMEMEMrBrBCQCZDbrSrCrCrCrCrCrCrCrCrCrCrCrCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasNsNsNsNsNsNsNsNsNsNsNsNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaacOmVmTmTmTuGcOcOcOmVmTmTmTuGrSCRCPCZDarBrBrBEQEPEPrBEPEPERrBrBrBrBCQCZDbrSadaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarSrSrSDRESrBrBEQEUETEVrBETEVEWERrBrBrBCQrSCPrSadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarSCRCPCZDarBEZCWEYEXFbFcFbFaFdCSrBrBrBCQrSFerSadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHrSCRCPCZDarBrBCWCYCXrBCUrBCVCTCSrBrBrBCQrSCPrSaHaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarSrSrSrSrBrBrBDjCYDiDhDgDfDeCTDdDcrBrBCQCZDbrSadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadDkDlDkrBrBrBrSDoDmDmDmDmDmDmDmDnrSrBrBCQCZDbrSadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadrSrSDsDqDprSrSDrDrDrDrDrDrDrDrDrrSrSDqDprSrSrSaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarSrBrBrBrSCPDtDvDuCPDwCPCPCPCPCPrSrBrBrBrSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarSrBrBrBrSCPCPCPCPCPCPCPCPCPCPCPrSrBrBrBrSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarSrBrBCPDxDzDyCRDADBDBDBDBCRDCDDDxCPrBrBrSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaHaHaHrSrBrBrSrSCPDFDBDErDrDrDrDDBCPCPrSrSrBrBrSaHaHaHaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababakakakakakakakakakakakabaaaaaaaHcBJBrSrBCQJxCPCPCPDBrDrDrDrDrDDBCPCPCPJxDarBrSJycBaHaaaaaaabakakakakakakakakakakababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababalalalalalalalalalalalalakadaaaHaHnycdrSrBCQJCCPCPDwDBrDrDJDrDrDDBDwCPCPJCDarBrScdnyaHaHaaaaakalalalalalalalalalalalabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabakakakakakadalakakakakakakakakakakakabadaHaHcBcBJBrSrBCQJxCPCPJADBJzrDrDrDrDDBCPJrCPJxDarBrSJycBcBaHaHaaabakakakakakakakakakakaladakakakakakabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalalalalalalaladadadadadadadadadadadaaaaaHcBcBcdcdcBrBrBrSrSCPCPDBrDrDrDrDrDJvJwCPrSrSrBrBcBcdJucBcBaHaaaaadadadadadadadadadadalalalalalalalabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabakakakakakadalakakakakakakakakakakakadaaaHmCqHcdcdcBERrBCPDxDzCPCRDBDBDBDBDBCRJtDDDxCPrBEQcBcdcdqHJsaHaaadakakakakakakakakakakaladakakakakakabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabadadadadadaaalalalalalalalalalalalalakaHaHjWJhrecdJqEbrBrSrSCPCPCPCPCPDwCPCPJrCPCPrSrSrBEaJppgrecdjWaHaHakalalalalalalalalalalalaaaaaaadadadabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabakakakakakadalakakakakakakakakakakakadadaaJiJoJgcdcBENrBrSJlCPJkJjJkJkJnJkJkJkJkCPJmrSrBEOcBJfJgJhJiaaaaadakakakakakakakakakakaladakakakakakabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalalalalalalaladaaadaaaaadadadadaaaaaaaaaacBcBqIcdcBrBrBrSrSrSEHsXsXsXsXsXsXsXJerSrSrSrBrBcBcdqIcBcBadaaaHadadadadadadadadadadalalalalalalalabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabakakakakakadalIYakakakakakakakakakakabadadadcBcBcBrSrBrBrBEarSJdEMIZJaJbEMIZEMJcrSEbrBrBrBrScBcBcBaaadaaabakakakakakakakakakakaladakakakakakabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababalalalalalalalalalalalalakadadaaaaaaaarSIWrBrBEaEEEbrBIXrBrBrBrBrBEaEEEbrBrBIWrSaaaaadadadaaakalalalalalalalalalalalabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHababakakakakakakakakakakakabaaaaaaaaaaaarSrSrSrSrSrSEbrBrBrBrBrBIVITIUrSrSrSrSrSrSaHadadadaaaaabakakakakakakakakakakababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaHabababababababababababababaaaaaaaaaaaaadadaaadadrSrSrSrSrSrSrSrSrSrSrSaaadaaadadaHadaHaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadadadadadadaaaaaaaaadaaaaaaaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -2089,3 +2106,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/MetaStation.v39B.II.dmm b/_maps/map_files/MetaStation.v39C.dmm similarity index 97% rename from _maps/map_files/MetaStation.v39B.II.dmm rename to _maps/map_files/MetaStation.v39C.dmm index d876719803c..774af957285 100644 --- a/_maps/map_files/MetaStation.v39B.II.dmm +++ b/_maps/map_files/MetaStation.v39C.dmm @@ -91,10 +91,10 @@ "abM" = (/obj/machinery/door/airlock/external{name = "Escape Pod Two"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/processing) "abN" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "grimy"},/area/security/main) "abO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/starboard) -"abP" = (/obj/structure/table,/obj/machinery/recharger,/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = -30},/obj/machinery/door_control{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = 26; pixel_y = -26; req_access_txt = "2"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden) +"abP" = (/obj/effect/spawner/lootdrop{loot = list("/obj/structure/grille","/obj/structure/grille","/obj/structure/grille","/obj/structure/grille","/obj/structure/grille","/obj/item/weapon/cigbutt","/obj/item/trash/cheesie","/obj/item/trash/candy","/obj/item/trash/chips","/obj/item/trash/deadmouse","/obj/item/trash/pistachios","/obj/item/trash/plate","/obj/item/trash/popcorn","/obj/item/trash/raisins","/obj/item/trash/sosjerky","/obj/item/trash/syndi_cakes"); name = "maint grille or trash spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "abQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/security/warden) "abR" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/structure/table/woodentable,/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1424; listening = 1; name = "Interrogation Intercom"; pixel_x = 0; pixel_y = -31},/turf/simulated/floor{icon_state = "grimy"},/area/security/main) -"abS" = (/obj/structure/closet/crate/medical,/obj/item/weapon/cable_coil,/turf/simulated/floor/plating,/area/maintenance/starboard) +"abS" = (/obj/structure/closet/crate/medical,/obj/item/stack/cable_coil,/turf/simulated/floor/plating,/area/maintenance/starboard) "abT" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Starboard Solar Access"; req_access_txt = "10"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/starboard) "abU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/maintenance{name = "Brig Maintenance"; req_access_txt = "0"; req_one_access_txt = "63;12"},/turf/simulated/floor/plating,/area/maintenance/fore) "abV" = (/obj/structure/closet,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating,/area/maintenance/starboard) @@ -134,7 +134,7 @@ "acD" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden) "acE" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden) "acF" = (/obj/effect/landmark/start{name = "Warden"},/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden) -"acG" = (/obj/machinery/computer/prisoner,/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden) +"acG" = (/obj/machinery/computer/prisoner,/obj/machinery/door_control{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = 25; pixel_y = -25; req_access_txt = "2"},/obj/machinery/flasher_button{id = "secentranceflasher"; name = "Brig Entrance Flasher"; pixel_x = 24; pixel_y = -34; req_access_txt = "1"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden) "acH" = (/obj/structure/table,/obj/item/weapon/paper{desc = ""; info = "Labor Camp Facility Operation Guide
"
- else
- dat+="None"
- else
- dat+="No current wanted issue found.
"
- else
- dat+="None"
- else
- dat+="Apart from some uninteresting Classified ads, there's nothing on this page..."
- if(scribble_page==curr_page)
- dat+="
"
+ else
+ dat+="None"
+ else
+ dat+="No current wanted issue found.
"
+ else
+ dat+="None"
+ else
+ dat+="Apart from some uninteresting Classified ads, there's nothing on this page..."
+ if(scribble_page==curr_page)
+ dat+=""
- for(var/t in typesof(/area))
- master += text("[]\n", t)
- //Foreach goto(26)
- src << browse(master)
- return
-*/
-
-/mob/verb/memory()
- set name = "Notes"
- set category = "IC"
- if(mind)
- mind.show_memory(src)
- else
- src << "The game appears to have misplaced your mind datum, so we can't show you your notes."
-
-/mob/verb/add_memory(msg as message)
- set name = "Add Note"
- set category = "IC"
-
- msg = copytext(msg, 1, MAX_MESSAGE_LEN)
- msg = sanitize(msg)
-
- if(mind)
- mind.store_memory(msg)
- else
- src << "The game appears to have misplaced your mind datum, so we can't show you your notes."
-
-/mob/proc/store_memory(msg as message, popup, sane = 1)
- msg = copytext(msg, 1, MAX_MESSAGE_LEN)
-
- if (sane)
- msg = sanitize(msg)
-
- if (length(memory) == 0)
- memory += msg
- else
- memory += "
[msg]"
-
- if (popup)
- memory()
-
-/*
-/mob/verb/help()
- set name = "Help"
- src << browse('html/help.html', "window=help")
- return
-*/
-
-/mob/verb/abandon_mob()
- set name = "Respawn"
- set category = "OOC"
-
- if (!( abandon_allowed ))
- return
- if ((stat != 2 || !( ticker )))
- usr << "\blue You must be dead to use this!"
- return
-
- log_game("[usr.name]/[usr.key] used abandon mob.")
-
- usr << "\blue Please roleplay correctly!"
-
- if(!client)
- log_game("[usr.key] AM failed due to disconnect.")
- return
- client.screen.Cut()
- if(!client)
- log_game("[usr.key] AM failed due to disconnect.")
- return
-
- var/mob/new_player/M = new /mob/new_player()
- if(!client)
- log_game("[usr.key] AM failed due to disconnect.")
- del(M)
- return
-
- M.key = key
-// M.Login() //wat
- return
-
-/client/verb/changes()
- set name = "Changelog"
- set category = "OOC"
- getFiles(
- 'html/postcardsmall.jpg',
- 'html/somerights20.png',
- 'html/88x31.png',
- 'html/bug-minus.png',
- 'html/cross-circle.png',
- 'html/hard-hat-exclamation.png',
- 'html/image-minus.png',
- 'html/image-plus.png',
- 'html/music-minus.png',
- 'html/music-plus.png',
- 'html/tick-circle.png',
- 'html/wrench-screwdriver.png',
- 'html/spell-check.png',
- 'html/burn-exclamation.png',
- 'html/chevron.png',
- 'html/chevron-expand.png',
- 'html/changelog.css',
- 'html/changelog.js',
- 'html/changelog.html'
- )
- src << browse('html/changelog.html', "window=changes;size=675x650")
- if(prefs.lastchangelog != changelog_hash)
- prefs.lastchangelog = changelog_hash
- prefs.save_preferences()
- winset(src, "rpane.changelog", "background-color=none;font-style=;")
-
-/mob/verb/observe()
- set name = "Observe"
- set category = "OOC"
- var/is_admin = 0
-
- if(check_rights_for(client,R_ADMIN))
- is_admin = 1
- else if(stat != DEAD || istype(src, /mob/new_player))
- usr << "\blue You must be observing to use this!"
- return
-
- if(is_admin && stat == DEAD)
- is_admin = 0
-
- var/list/names = list()
- var/list/namecounts = list()
- var/list/creatures = list()
-
- for(var/obj/O in world) //EWWWWWWWWWWWWWWWWWWWWWWWW ~needs to be optimised
- if(!O.loc)
- continue
- if(istype(O, /obj/item/weapon/disk/nuclear))
- var/name = "Nuclear Disk"
- if (names.Find(name))
- namecounts[name]++
- name = "[name] ([namecounts[name]])"
- else
- names.Add(name)
- namecounts[name] = 1
- creatures[name] = O
-
- if(istype(O, /obj/machinery/singularity))
- var/name = "Singularity"
- if (names.Find(name))
- namecounts[name]++
- name = "[name] ([namecounts[name]])"
- else
- names.Add(name)
- namecounts[name] = 1
- creatures[name] = O
-
- if(istype(O, /obj/machinery/bot))
- var/name = "BOT: [O.name]"
- if (names.Find(name))
- namecounts[name]++
- name = "[name] ([namecounts[name]])"
- else
- names.Add(name)
- namecounts[name] = 1
- creatures[name] = O
-
-
- for(var/mob/M in sortAtom(mob_list))
- var/name = M.name
- if (names.Find(name))
- namecounts[name]++
- name = "[name] ([namecounts[name]])"
- else
- names.Add(name)
- namecounts[name] = 1
-
- creatures[name] = M
-
-
- client.perspective = EYE_PERSPECTIVE
-
- var/eye_name = null
-
- var/ok = "[is_admin ? "Admin Observe" : "Observe"]"
- eye_name = input("Please, select a player!", ok, null, null) as null|anything in creatures
-
- if (!eye_name)
- return
-
- var/mob/mob_eye = creatures[eye_name]
-
- if(client && mob_eye)
- client.eye = mob_eye
- if (is_admin)
- client.adminobs = 1
- if(mob_eye == client.mob || client.eye == client.mob)
- client.adminobs = 0
-
-/mob/verb/cancel_camera()
- set name = "Cancel Camera View"
- set category = "OOC"
- reset_view(null)
- unset_machine()
- if(istype(src, /mob/living))
- if(src:cameraFollow)
- src:cameraFollow = null
-
-/mob/Topic(href, href_list)
- if(href_list["mach_close"])
- var/t1 = text("window=[href_list["mach_close"]]")
- unset_machine()
- src << browse(null, t1)
-
- if(href_list["refresh"])
- if(machine && in_range(src, usr))
- show_inv(machine)
-
- if(!usr.stat && usr.canmove && !usr.restrained() && Adjacent(usr))
- if(href_list["item"])
- var/slot = text2num(href_list["item"])
- var/obj/item/what = get_item_by_slot(slot)
-
- if(what && what.canremove)
- visible_message("[usr] tries to remove [src]'s [what.name].", \
- "[usr] tries to remove [src]'s [what.name].")
- what.add_fingerprint(usr)
- if(do_mob(usr, src, STRIP_DELAY))
- if(what && Adjacent(usr))
- u_equip(what)
- else
- what = usr.get_active_hand()
- if(what && what.mob_can_equip(src, slot, 1))
- visible_message("[usr] tries to put [what] on [src].")
- if(do_mob(usr, src, STRIP_DELAY * 0.5))
- if(what && Adjacent(usr))
- usr.u_equip(what)
- equip_to_slot_if_possible(what, slot, 0, 1)
-
- if(usr.machine == src)
- if(Adjacent(usr))
- show_inv(usr)
- else
- usr << browse(null,"window=mob\ref[src]")
-
-
-/mob/MouseDrop(mob/M)
- ..()
- if(M != usr) return
- if(usr == src) return
- if(!Adjacent(usr)) return
- if(istype(M, /mob/living/silicon/ai)) return
- show_inv(usr)
-
-
-/mob/verb/stop_pulling()
-
- set name = "Stop Pulling"
- set category = "IC"
-
- if(pulling)
- pulling.pulledby = null
- pulling = null
-
-/mob/proc/start_pulling(var/atom/movable/AM)
- if ( !AM || !usr || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
- return
- if (!( AM.anchored ))
- AM.add_fingerprint(src)
-
- // If we're pulling something then drop what we're currently pulling and pull this instead.
- if(pulling)
- // Are we trying to pull something we are already pulling? Then just stop here, no need to continue.
- if(AM == pulling)
- return
- stop_pulling()
-
- src.pulling = AM
- AM.pulledby = src
- if(ismob(AM))
- var/mob/M = AM
- if(!iscarbon(src))
- M.LAssailant = null
- else
- M.LAssailant = usr
-
-
-/mob/proc/can_use_hands()
- return
-
-/mob/proc/is_active()
- return (0 >= usr.stat)
-
-/mob/proc/see(message)
- if(!is_active())
- return 0
- src << message
- return 1
-
-/mob/proc/show_viewers(message)
- for(var/mob/M in viewers())
- M.see(message)
-
-/*
-adds a dizziness amount to a mob
-use this rather than directly changing var/dizziness
-since this ensures that the dizzy_process proc is started
-currently only humans get dizzy
-
-value of dizziness ranges from 0 to 1000
-below 100 is not dizzy
-*/
-/mob/proc/make_dizzy(var/amount)
- if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy
- return
-
- dizziness = min(1000, dizziness + amount) // store what will be new value
- // clamped to max 1000
- if(dizziness > 100 && !is_dizzy)
- spawn(0)
- dizzy_process()
-
-
-/*
-dizzy process - wiggles the client's pixel offset over time
-spawned from make_dizzy(), will terminate automatically when dizziness gets <100
-note dizziness decrements automatically in the mob's Life() proc.
-*/
-/mob/proc/dizzy_process()
- is_dizzy = 1
- while(dizziness > 100)
- if(client)
- var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70
- client.pixel_x = amplitude * sin(0.008 * dizziness * world.time)
- client.pixel_y = amplitude * cos(0.008 * dizziness * world.time)
-
- sleep(1)
- //endwhile - reset the pixel offsets to zero
- is_dizzy = 0
- if(client)
- client.pixel_x = 0
- client.pixel_y = 0
-
-// jitteriness - copy+paste of dizziness
-
-/mob/proc/make_jittery(var/amount)
- if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy
- return
-
- jitteriness = min(1000, jitteriness + amount) // store what will be new value
- // clamped to max 1000
- if(jitteriness > 100 && !is_jittery)
- spawn(0)
- jittery_process()
-
-
-// Typo from the oriignal coder here, below lies the jitteriness process. So make of his code what you will, the previous comment here was just a copypaste of the above.
-/mob/proc/jittery_process()
- var/old_x = pixel_x
- var/old_y = pixel_y
- is_jittery = 1
- while(jitteriness > 100)
-// var/amplitude = jitteriness*(sin(jitteriness * 0.044 * world.time) + 1) / 70
-// pixel_x = amplitude * sin(0.008 * jitteriness * world.time)
-// pixel_y = amplitude * cos(0.008 * jitteriness * world.time)
-
- var/amplitude = min(4, jitteriness / 100)
- pixel_x = rand(-amplitude, amplitude)
- pixel_y = rand(-amplitude/3, amplitude/3)
-
- sleep(1)
- //endwhile - reset the pixel offsets to zero
- is_jittery = 0
- pixel_x = old_x
- pixel_y = old_y
-
-/mob/Stat()
- ..()
-
- if(client && client.holder)
-
- if(statpanel("Status")) //not looking at that panel
- stat(null,"Location:\t([x], [y], [z])")
- stat(null,"CPU:\t[world.cpu]")
- stat(null,"Instances:\t[world.contents.len]")
-
- if(master_controller)
- stat(null,"MasterController-[last_tick_duration] ([master_controller.processing?"On":"Off"]-[controller_iteration])")
- stat(null,"Air-[master_controller.air_cost]\t#[global_activeturfs]")
- stat(null,"Sun-[master_controller.sun_cost]")
- stat(null,"Mob-[master_controller.mobs_cost]\t#[mob_list.len]")
- stat(null,"Dis-[master_controller.diseases_cost]\t#[active_diseases.len]")
- stat(null,"Mch-[master_controller.machines_cost]\t#[machines.len]")
- stat(null,"Obj-[master_controller.objects_cost]\t#[processing_objects.len]")
- stat(null,"Net-[master_controller.networks_cost]\tPnet-[master_controller.powernets_cost]")
- stat(null,"NanoUI-[master_controller.nano_cost]\t#[nanomanager.processing_uis.len]")
- stat(null,"Tick-[master_controller.ticker_cost]\tALL-[master_controller.total_cost]")
- else
- stat(null,"MasterController-ERROR")
-
- if(listed_turf && client)
- if(!TurfAdjacent(listed_turf))
- listed_turf = null
- else
- statpanel(listed_turf.name, null, listed_turf)
- for(var/atom/A in listed_turf)
- if(A.invisibility > see_invisible)
- continue
- statpanel(listed_turf.name, null, A)
-
- if(spell_list.len)
- for(var/obj/effect/proc_holder/spell/S in spell_list)
- switch(S.charge_type)
- if("recharge")
- statpanel("[S.panel]","[S.charge_counter/10.0]/[S.charge_max/10]",S)
- if("charges")
- statpanel("[S.panel]","[S.charge_counter]/[S.charge_max]",S)
- if("holdervar")
- statpanel("[S.panel]","[S.holder_var_type] [S.holder_var_amount]",S)
-
-
-
-// facing verbs
-/mob/proc/canface()
- if(!canmove) return 0
- if(client.moving) return 0
- if(world.time < client.move_delay) return 0
- if(stat==2) return 0
- if(anchored) return 0
- if(notransform) return 0
- if(restrained()) return 0
- return 1
-
-//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it.
-//Robots and brains have their own version so don't worry about them
-/mob/proc/update_canmove()
-
- if(stat || weakened || paralysis || resting || (status_flags & FAKEDEATH) || buckled)
- canmove = 0
- if(!lying)
- if(resting) //Presuming that you're resting on a bed, which would look goofy lying the wrong way
- lying = 90
- else
- lying = pick(90, 270) //180 looks like shit since BYOND inverts rather than turns in that case
- else if(stunned)
- canmove = 0
- else
- lying = 0
- canmove = 1
- if(buckled)
- anchored = 1
- if(istype(buckled, /obj/structure/stool/bed/chair))
- lying = 0
- else
- lying = 90 //Everything else faces right. TODO: Allow left-facing beds
-
- if(lying)
- density = 0
- drop_r_hand()
- drop_l_hand()
- else
- density = 1
-
- //Temporarily moved here from the various life() procs
- //I'm fixing stuff incrementally so this will likely find a better home.
- //It just makes sense for now. ~Carn
-
- if(lying != lying_prev)
- update_transform()
- if(update_icon) //forces a full overlay update
- update_icon = 0
- regenerate_icons()
-
- return canmove
-
-
-/mob/verb/eastface()
- set hidden = 1
- if(!canface()) return 0
- dir = EAST
- client.move_delay += movement_delay()
- return 1
-
-
-/mob/verb/westface()
- set hidden = 1
- if(!canface()) return 0
- dir = WEST
- client.move_delay += movement_delay()
- return 1
-
-
-/mob/verb/northface()
- set hidden = 1
- if(!canface()) return 0
- dir = NORTH
- client.move_delay += movement_delay()
- return 1
-
-
-/mob/verb/southface()
- set hidden = 1
- if(!canface()) return 0
- dir = SOUTH
- client.move_delay += movement_delay()
- return 1
-
-
-/mob/proc/IsAdvancedToolUser()//This might need a rename but it should replace the can this mob use things check
- return 0
-
-
-/mob/proc/Stun(amount)
- if(status_flags & CANSTUN)
- stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
- update_canmove()
- return
-
-/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
- if(status_flags & CANSTUN)
- stunned = max(amount,0)
- update_canmove()
- return
-
-/mob/proc/AdjustStunned(amount)
- if(status_flags & CANSTUN)
- stunned = max(stunned + amount,0)
- update_canmove()
- return
-
-/mob/proc/Weaken(amount)
- if(status_flags & CANWEAKEN)
- weakened = max(max(weakened,amount),0)
- update_canmove() //updates lying, canmove and icons
- return
-
-/mob/proc/SetWeakened(amount)
- if(status_flags & CANWEAKEN)
- weakened = max(amount,0)
- update_canmove() //updates lying, canmove and icons
- return
-
-/mob/proc/AdjustWeakened(amount)
- if(status_flags & CANWEAKEN)
- weakened = max(weakened + amount,0)
- update_canmove() //updates lying, canmove and icons
- return
-
-/mob/proc/Paralyse(amount)
- if(status_flags & CANPARALYSE)
- paralysis = max(max(paralysis,amount),0)
- update_canmove()
- return
-
-/mob/proc/SetParalysis(amount)
- if(status_flags & CANPARALYSE)
- paralysis = max(amount,0)
- update_canmove()
- return
-
-/mob/proc/AdjustParalysis(amount)
- if(status_flags & CANPARALYSE)
- paralysis = max(paralysis + amount,0)
- update_canmove()
- return
-
-/mob/proc/Sleeping(amount)
- sleeping = max(max(sleeping,amount),0)
- update_canmove()
- return
-
-/mob/proc/SetSleeping(amount)
- sleeping = max(amount,0)
- update_canmove()
- return
-
-/mob/proc/AdjustSleeping(amount)
- sleeping = max(sleeping + amount,0)
- update_canmove()
- return
-
-/mob/proc/Resting(amount)
- resting = max(max(resting,amount),0)
- update_canmove()
- return
-
-/mob/proc/SetResting(amount)
- resting = max(amount,0)
- update_canmove()
- return
-
-/mob/proc/AdjustResting(amount)
- resting = max(resting + amount,0)
- update_canmove()
+/mob/Del()//This makes sure that mobs with clients/keys are not just deleted from the game.
+ mob_list -= src
+ dead_mob_list -= src
+ living_mob_list -= src
+ ghostize()
+ ..()
+
+var/next_mob_id = 0
+/mob/New()
+ tag = "mob_[next_mob_id++]"
+ mob_list += src
+ if(stat == DEAD)
+ dead_mob_list += src
+ else
+ living_mob_list += src
+ ..()
+
+/mob/proc/Cell()
+ set category = "Admin"
+ set hidden = 1
+
+ if(!loc) return 0
+
+ var/datum/gas_mixture/environment = loc.return_air()
+
+ var/t = "\blue Coordinates: [x],[y] \n"
+ t+= "\red Temperature: [environment.temperature] \n"
+ t+= "\blue Nitrogen: [environment.nitrogen] \n"
+ t+= "\blue Oxygen: [environment.oxygen] \n"
+ t+= "\blue Plasma : [environment.toxins] \n"
+ t+= "\blue Carbon Dioxide: [environment.carbon_dioxide] \n"
+ for(var/datum/gas/trace_gas in environment.trace_gases)
+ usr << "\blue [trace_gas.type]: [trace_gas.moles] \n"
+
+ usr.show_message(t, 1)
+
+/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
+
+ if(!client) return
+
+ msg = copytext(msg, 1, MAX_MESSAGE_LEN)
+
+ if (type)
+ if(type & 1 && (sdisabilities & BLIND || blinded || paralysis) )//Vision related
+ if (!( alt ))
+ return
+ else
+ msg = alt
+ type = alt_type
+ if (type & 2 && (sdisabilities & DEAF || ear_deaf))//Hearing related
+ if (!( alt ))
+ return
+ else
+ msg = alt
+ type = alt_type
+ if ((type & 1 && sdisabilities & BLIND))
+ return
+ // Added voice muffling for Issue 41.
+ if(stat == UNCONSCIOUS || sleeping > 0)
+ src << "... You can almost hear someone talking ..."
+ else
+ src << msg
+ return
+
+// Show a message to all mobs in sight of this one
+// This would be for visible actions by the src mob
+// message is the message output to anyone who can see e.g. "[src] does something!"
+// self_message (optional) is what the src mob sees e.g. "You do something!"
+// blind_message (optional) is what blind people will hear e.g. "You hear something!"
+
+/mob/visible_message(var/message, var/self_message, var/blind_message)
+ for(var/mob/M in viewers(src))
+ var/msg = message
+ if(self_message && M==src)
+ msg = self_message
+ M.show_message( msg, 1, blind_message, 2)
+
+// Show a message to all mobs in sight of this atom
+// Use for objects performing visible actions
+// message is output to anyone who can see, e.g. "The [src] does something!"
+// blind_message (optional) is what blind people will hear e.g. "You hear something!"
+/atom/proc/visible_message(var/message, var/blind_message)
+ for(var/mob/M in viewers(src))
+ M.show_message( message, 1, blind_message, 2)
+
+
+/mob/proc/movement_delay()
+ return 0
+
+/mob/proc/Life()
+ return
+
+/mob/proc/get_item_by_slot(slot_id)
+ switch(slot_id)
+ if(slot_l_hand)
+ return l_hand
+ if(slot_r_hand)
+ return r_hand
+ return null
+
+/mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag)
+ if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) )))
+ if (!( L ))
+ return null
+ else
+ return L.container
+ else
+ if (!( L ))
+ L = new /obj/effect/list_container/mobl( null )
+ L.container += src
+ L.master = src
+ if (istype(l_hand, /obj/item/weapon/grab))
+ var/obj/item/weapon/grab/G = l_hand
+ if (!( L.container.Find(G.affecting) ))
+ L.container += G.affecting
+ if (G.affecting)
+ G.affecting.ret_grab(L, 1)
+ if (istype(r_hand, /obj/item/weapon/grab))
+ var/obj/item/weapon/grab/G = r_hand
+ if (!( L.container.Find(G.affecting) ))
+ L.container += G.affecting
+ if (G.affecting)
+ G.affecting.ret_grab(L, 1)
+ if (!( flag ))
+ if (L.master == src)
+ var/list/temp = list( )
+ temp += L.container
+ //L = null
+ del(L)
+ return temp
+ else
+ return L.container
+ return
+
+/mob/proc/restrained()
+ return
+
+//This proc is called whenever someone clicks an inventory ui slot.
+/mob/proc/attack_ui(slot)
+ var/obj/item/W = get_active_hand()
+
+ if(istype(W))
+ if(equip_to_slot_if_possible(W, slot,0,0,0))
+ return 1
+
+ if(!W)
+ // Activate the item
+ var/obj/item/I = get_item_by_slot(slot)
+ if(istype(I))
+ I.attack_hand(src)
+
+ return 0
+
+/mob/proc/put_in_any_hand_if_possible(obj/item/W as obj, del_on_fail = 0, disable_warning = 1, redraw_mob = 1)
+ if(equip_to_slot_if_possible(W, slot_l_hand, del_on_fail, disable_warning, redraw_mob))
+ return 1
+ else if(equip_to_slot_if_possible(W, slot_r_hand, del_on_fail, disable_warning, redraw_mob))
+ return 1
+ return 0
+
+//This is a SAFE proc. Use this instead of equip_to_splot()!
+//set del_on_fail to have it delete W if it fails to equip
+//set disable_warning to disable the 'you are unable to equip that' warning.
+//unset redraw_mob to prevent the mob from being redrawn at the end.
+/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1)
+ if(!istype(W)) return 0
+ if(!W.mob_can_equip(src, slot, disable_warning))
+ if(del_on_fail)
+ del(W)
+ else
+ if(!disable_warning)
+ src << "\red You are unable to equip that." //Only print if del_on_fail is false
+ return 0
+ equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail.
+ return 1
+
+//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task.
+//In most cases you will want to use equip_to_slot_if_possible()
+/mob/proc/equip_to_slot(obj/item/W as obj, slot)
+ return
+
+//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such.
+/mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot)
+ equip_to_slot_if_possible(W, slot, 1, 1, 0)
+
+//The list of slots by priority. equip_to_appropriate_slot() uses this list. Doesn't matter if a mob type doesn't have a slot.
+var/list/slot_equipment_priority = list( \
+ slot_back,\
+ slot_wear_id,\
+ slot_w_uniform,\
+ slot_wear_suit,\
+ slot_wear_mask,\
+ slot_head,\
+ slot_shoes,\
+ slot_gloves,\
+ slot_ears,\
+ slot_glasses,\
+ slot_belt,\
+ slot_s_store,\
+ slot_l_store,\
+ slot_r_store\
+ )
+
+//puts the item "W" into an appropriate slot in a human's inventory
+//returns 0 if it cannot, 1 if successful
+/mob/proc/equip_to_appropriate_slot(obj/item/W)
+ if(!istype(W)) return 0
+
+ for(var/slot in slot_equipment_priority)
+ if(equip_to_slot_if_possible(W, slot, 0, 1, 1)) //del_on_fail = 0; disable_warning = 0; redraw_mob = 1
+ return 1
+
+ return 0
+
+/mob/proc/reset_view(atom/A)
+ if (client)
+ if (istype(A, /atom/movable))
+ client.perspective = EYE_PERSPECTIVE
+ client.eye = A
+ else
+ if (isturf(loc))
+ client.eye = client.mob
+ client.perspective = MOB_PERSPECTIVE
+ else
+ client.perspective = EYE_PERSPECTIVE
+ client.eye = loc
+ return
+
+
+/mob/proc/show_inv(mob/user)
+ user.set_machine(src)
+ var/dat = {"
+
+ [name]
+
+
Left Hand: [(l_hand&&!(l_hand.flags&ABSTRACT)) ? l_hand : "Nothing"]
+
Right Hand: [(r_hand&&!(r_hand.flags&ABSTRACT)) ? r_hand : "Nothing"]
+
Close
+ "}
+ user << browse(dat, "window=mob\ref[src];size=325x500")
+ onclose(user, "mob\ref[src]")
+
+
+/mob/verb/mode()
+ set name = "Activate Held Object"
+ set category = "Object"
+ set src = usr
+
+ if(istype(loc,/obj/mecha)) return
+
+ if(hand)
+ var/obj/item/W = l_hand
+ if (W)
+ W.attack_self(src)
+ update_inv_l_hand(0)
+ else
+ var/obj/item/W = r_hand
+ if (W)
+ W.attack_self(src)
+ update_inv_r_hand(0)
+ if(next_move < world.time)
+ next_move = world.time + 2
+ return
+
+/*
+/mob/verb/dump_source()
+
+ var/master = ""
+ for(var/t in typesof(/area))
+ master += text("[]\n", t)
+ //Foreach goto(26)
+ src << browse(master)
+ return
+*/
+
+/mob/verb/memory()
+ set name = "Notes"
+ set category = "IC"
+ if(mind)
+ mind.show_memory(src)
+ else
+ src << "The game appears to have misplaced your mind datum, so we can't show you your notes."
+
+/mob/verb/add_memory(msg as message)
+ set name = "Add Note"
+ set category = "IC"
+
+ msg = copytext(msg, 1, MAX_MESSAGE_LEN)
+ msg = sanitize(msg)
+
+ if(mind)
+ mind.store_memory(msg)
+ else
+ src << "The game appears to have misplaced your mind datum, so we can't show you your notes."
+
+/mob/proc/store_memory(msg as message, popup, sane = 1)
+ msg = copytext(msg, 1, MAX_MESSAGE_LEN)
+
+ if (sane)
+ msg = sanitize(msg)
+
+ if (length(memory) == 0)
+ memory += msg
+ else
+ memory += "
[msg]"
+
+ if (popup)
+ memory()
+
+/*
+/mob/verb/help()
+ set name = "Help"
+ src << browse('html/help.html', "window=help")
+ return
+*/
+
+/mob/verb/abandon_mob()
+ set name = "Respawn"
+ set category = "OOC"
+
+ if (!( abandon_allowed ))
+ return
+ if ((stat != 2 || !( ticker )))
+ usr << "\blue You must be dead to use this!"
+ return
+
+ log_game("[usr.name]/[usr.key] used abandon mob.")
+
+ usr << "\blue Please roleplay correctly!"
+
+ if(!client)
+ log_game("[usr.key] AM failed due to disconnect.")
+ return
+ client.screen.Cut()
+ if(!client)
+ log_game("[usr.key] AM failed due to disconnect.")
+ return
+
+ var/mob/new_player/M = new /mob/new_player()
+ if(!client)
+ log_game("[usr.key] AM failed due to disconnect.")
+ del(M)
+ return
+
+ M.key = key
+// M.Login() //wat
+ return
+
+/client/verb/changes()
+ set name = "Changelog"
+ set category = "OOC"
+ getFiles(
+ 'html/postcardsmall.jpg',
+ 'html/somerights20.png',
+ 'html/88x31.png',
+ 'html/bug-minus.png',
+ 'html/cross-circle.png',
+ 'html/hard-hat-exclamation.png',
+ 'html/image-minus.png',
+ 'html/image-plus.png',
+ 'html/music-minus.png',
+ 'html/music-plus.png',
+ 'html/tick-circle.png',
+ 'html/wrench-screwdriver.png',
+ 'html/spell-check.png',
+ 'html/burn-exclamation.png',
+ 'html/chevron.png',
+ 'html/chevron-expand.png',
+ 'html/changelog.css',
+ 'html/changelog.js',
+ 'html/changelog.html'
+ )
+ src << browse('html/changelog.html', "window=changes;size=675x650")
+ if(prefs.lastchangelog != changelog_hash)
+ prefs.lastchangelog = changelog_hash
+ prefs.save_preferences()
+ winset(src, "rpane.changelog", "background-color=none;font-style=;")
+
+/mob/verb/observe()
+ set name = "Observe"
+ set category = "OOC"
+ var/is_admin = 0
+
+ if(check_rights_for(client,R_ADMIN))
+ is_admin = 1
+ else if(stat != DEAD || istype(src, /mob/new_player))
+ usr << "\blue You must be observing to use this!"
+ return
+
+ if(is_admin && stat == DEAD)
+ is_admin = 0
+
+ var/list/names = list()
+ var/list/namecounts = list()
+ var/list/creatures = list()
+
+ for(var/obj/O in world) //EWWWWWWWWWWWWWWWWWWWWWWWW ~needs to be optimised
+ if(!O.loc)
+ continue
+ if(istype(O, /obj/item/weapon/disk/nuclear))
+ var/name = "Nuclear Disk"
+ if (names.Find(name))
+ namecounts[name]++
+ name = "[name] ([namecounts[name]])"
+ else
+ names.Add(name)
+ namecounts[name] = 1
+ creatures[name] = O
+
+ if(istype(O, /obj/machinery/singularity))
+ var/name = "Singularity"
+ if (names.Find(name))
+ namecounts[name]++
+ name = "[name] ([namecounts[name]])"
+ else
+ names.Add(name)
+ namecounts[name] = 1
+ creatures[name] = O
+
+ if(istype(O, /obj/machinery/bot))
+ var/name = "BOT: [O.name]"
+ if (names.Find(name))
+ namecounts[name]++
+ name = "[name] ([namecounts[name]])"
+ else
+ names.Add(name)
+ namecounts[name] = 1
+ creatures[name] = O
+
+
+ for(var/mob/M in sortAtom(mob_list))
+ var/name = M.name
+ if (names.Find(name))
+ namecounts[name]++
+ name = "[name] ([namecounts[name]])"
+ else
+ names.Add(name)
+ namecounts[name] = 1
+
+ creatures[name] = M
+
+
+ client.perspective = EYE_PERSPECTIVE
+
+ var/eye_name = null
+
+ var/ok = "[is_admin ? "Admin Observe" : "Observe"]"
+ eye_name = input("Please, select a player!", ok, null, null) as null|anything in creatures
+
+ if (!eye_name)
+ return
+
+ var/mob/mob_eye = creatures[eye_name]
+
+ if(client && mob_eye)
+ client.eye = mob_eye
+ if (is_admin)
+ client.adminobs = 1
+ if(mob_eye == client.mob || client.eye == client.mob)
+ client.adminobs = 0
+
+/mob/verb/cancel_camera()
+ set name = "Cancel Camera View"
+ set category = "OOC"
+ reset_view(null)
+ unset_machine()
+ if(istype(src, /mob/living))
+ if(src:cameraFollow)
+ src:cameraFollow = null
+
+/mob/Topic(href, href_list)
+ if(href_list["mach_close"])
+ var/t1 = text("window=[href_list["mach_close"]]")
+ unset_machine()
+ src << browse(null, t1)
+
+ if(href_list["refresh"])
+ if(machine && in_range(src, usr))
+ show_inv(machine)
+
+ if(!usr.stat && usr.canmove && !usr.restrained() && Adjacent(usr))
+ if(href_list["item"])
+ var/slot = text2num(href_list["item"])
+ var/obj/item/what = get_item_by_slot(slot)
+
+ if(what && what.canremove)
+ visible_message("[usr] tries to remove [src]'s [what.name].", \
+ "[usr] tries to remove [src]'s [what.name].")
+ what.add_fingerprint(usr)
+ if(do_mob(usr, src, STRIP_DELAY))
+ if(what && Adjacent(usr))
+ u_equip(what)
+ else
+ what = usr.get_active_hand()
+ if(what && what.mob_can_equip(src, slot, 1))
+ visible_message("[usr] tries to put [what] on [src].")
+ if(do_mob(usr, src, STRIP_DELAY * 0.5))
+ if(what && Adjacent(usr))
+ usr.u_equip(what)
+ equip_to_slot_if_possible(what, slot, 0, 1)
+
+ if(usr.machine == src)
+ if(Adjacent(usr))
+ show_inv(usr)
+ else
+ usr << browse(null,"window=mob\ref[src]")
+
+
+/mob/MouseDrop(mob/M)
+ ..()
+ if(M != usr) return
+ if(usr == src) return
+ if(!Adjacent(usr)) return
+ if(istype(M, /mob/living/silicon/ai)) return
+ show_inv(usr)
+
+
+/mob/verb/stop_pulling()
+
+ set name = "Stop Pulling"
+ set category = "IC"
+
+ if(pulling)
+ pulling.pulledby = null
+ pulling = null
+
+/mob/proc/start_pulling(var/atom/movable/AM)
+ if ( !AM || !usr || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
+ return
+ if (!( AM.anchored ))
+ AM.add_fingerprint(src)
+
+ // If we're pulling something then drop what we're currently pulling and pull this instead.
+ if(pulling)
+ // Are we trying to pull something we are already pulling? Then just stop here, no need to continue.
+ if(AM == pulling)
+ return
+ stop_pulling()
+
+ src.pulling = AM
+ AM.pulledby = src
+ if(ismob(AM))
+ var/mob/M = AM
+ if(!iscarbon(src))
+ M.LAssailant = null
+ else
+ M.LAssailant = usr
+
+
+/mob/proc/can_use_hands()
+ return
+
+/mob/proc/is_active()
+ return (0 >= usr.stat)
+
+/mob/proc/see(message)
+ if(!is_active())
+ return 0
+ src << message
+ return 1
+
+/mob/proc/show_viewers(message)
+ for(var/mob/M in viewers())
+ M.see(message)
+
+/*
+adds a dizziness amount to a mob
+use this rather than directly changing var/dizziness
+since this ensures that the dizzy_process proc is started
+currently only humans get dizzy
+
+value of dizziness ranges from 0 to 1000
+below 100 is not dizzy
+*/
+/mob/proc/make_dizzy(var/amount)
+ if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy
+ return
+
+ dizziness = min(1000, dizziness + amount) // store what will be new value
+ // clamped to max 1000
+ if(dizziness > 100 && !is_dizzy)
+ spawn(0)
+ dizzy_process()
+
+
+/*
+dizzy process - wiggles the client's pixel offset over time
+spawned from make_dizzy(), will terminate automatically when dizziness gets <100
+note dizziness decrements automatically in the mob's Life() proc.
+*/
+/mob/proc/dizzy_process()
+ is_dizzy = 1
+ while(dizziness > 100)
+ if(client)
+ var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70
+ client.pixel_x = amplitude * sin(0.008 * dizziness * world.time)
+ client.pixel_y = amplitude * cos(0.008 * dizziness * world.time)
+
+ sleep(1)
+ //endwhile - reset the pixel offsets to zero
+ is_dizzy = 0
+ if(client)
+ client.pixel_x = 0
+ client.pixel_y = 0
+
+// jitteriness - copy+paste of dizziness
+
+/mob/proc/make_jittery(var/amount)
+ if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy
+ return
+
+ jitteriness = min(1000, jitteriness + amount) // store what will be new value
+ // clamped to max 1000
+ if(jitteriness > 100 && !is_jittery)
+ spawn(0)
+ jittery_process()
+
+
+// Typo from the oriignal coder here, below lies the jitteriness process. So make of his code what you will, the previous comment here was just a copypaste of the above.
+/mob/proc/jittery_process()
+ var/old_x = pixel_x
+ var/old_y = pixel_y
+ is_jittery = 1
+ while(jitteriness > 100)
+// var/amplitude = jitteriness*(sin(jitteriness * 0.044 * world.time) + 1) / 70
+// pixel_x = amplitude * sin(0.008 * jitteriness * world.time)
+// pixel_y = amplitude * cos(0.008 * jitteriness * world.time)
+
+ var/amplitude = min(4, jitteriness / 100)
+ pixel_x = rand(-amplitude, amplitude)
+ pixel_y = rand(-amplitude/3, amplitude/3)
+
+ sleep(1)
+ //endwhile - reset the pixel offsets to zero
+ is_jittery = 0
+ pixel_x = old_x
+ pixel_y = old_y
+
+/mob/Stat()
+ ..()
+
+ if(client && client.holder)
+
+ if(statpanel("Status")) //not looking at that panel
+ stat(null,"Location:\t([x], [y], [z])")
+ stat(null,"CPU:\t[world.cpu]")
+ stat(null,"Instances:\t[world.contents.len]")
+
+ if(master_controller)
+ stat(null,"MasterController-[last_tick_duration] ([master_controller.processing?"On":"Off"]-[controller_iteration])")
+ stat(null,"Air-[master_controller.air_cost]\t#[global_activeturfs]")
+ stat(null,"Sun-[master_controller.sun_cost]")
+ stat(null,"Mob-[master_controller.mobs_cost]\t#[mob_list.len]")
+ stat(null,"Dis-[master_controller.diseases_cost]\t#[active_diseases.len]")
+ stat(null,"Mch-[master_controller.machines_cost]\t#[machines.len]")
+ stat(null,"Obj-[master_controller.objects_cost]\t#[processing_objects.len]")
+ stat(null,"Net-[master_controller.networks_cost]\tPnet-[master_controller.powernets_cost]")
+ stat(null,"NanoUI-[master_controller.nano_cost]\t#[nanomanager.processing_uis.len]")
+ stat(null,"Tick-[master_controller.ticker_cost]\tALL-[master_controller.total_cost]")
+ else
+ stat(null,"MasterController-ERROR")
+
+ if(listed_turf && client)
+ if(!TurfAdjacent(listed_turf))
+ listed_turf = null
+ else
+ statpanel(listed_turf.name, null, listed_turf)
+ for(var/atom/A in listed_turf)
+ if(A.invisibility > see_invisible)
+ continue
+ statpanel(listed_turf.name, null, A)
+
+ if(spell_list.len)
+ for(var/obj/effect/proc_holder/spell/S in spell_list)
+ switch(S.charge_type)
+ if("recharge")
+ statpanel("[S.panel]","[S.charge_counter/10.0]/[S.charge_max/10]",S)
+ if("charges")
+ statpanel("[S.panel]","[S.charge_counter]/[S.charge_max]",S)
+ if("holdervar")
+ statpanel("[S.panel]","[S.holder_var_type] [S.holder_var_amount]",S)
+
+
+
+// facing verbs
+/mob/proc/canface()
+ if(!canmove) return 0
+ if(client.moving) return 0
+ if(world.time < client.move_delay) return 0
+ if(stat==2) return 0
+ if(anchored) return 0
+ if(notransform) return 0
+ if(restrained()) return 0
+ return 1
+
+//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it.
+//Robots and brains have their own version so don't worry about them
+/mob/proc/update_canmove()
+ var/ko = weakened || paralysis || stat || (status_flags & FAKEDEATH)
+ var/bed = !(buckled && istype(buckled, /obj/structure/stool/bed/chair))
+ if(ko || resting || stunned)
+ drop_l_hand()
+ drop_r_hand()
+ else
+ lying = 0
+ canmove = 1
+ if(buckled)
+ lying = 90 * bed
+ else
+ if((ko || resting) && !lying)
+ fall(ko)
+ anchored = buckled
+ canmove = !(ko || resting || stunned || buckled)
+ density = !lying
+ update_transform()
+ lying_prev = lying
+ if(update_icon) //forces a full overlay update
+ update_icon = 0
+ regenerate_icons()
+ return canmove
+
+/mob/proc/fall(var/forced)
+ drop_l_hand()
+ drop_r_hand()
+
+/mob/verb/eastface()
+ set hidden = 1
+ if(!canface()) return 0
+ dir = EAST
+ client.move_delay += movement_delay()
+ return 1
+
+
+/mob/verb/westface()
+ set hidden = 1
+ if(!canface()) return 0
+ dir = WEST
+ client.move_delay += movement_delay()
+ return 1
+
+
+/mob/verb/northface()
+ set hidden = 1
+ if(!canface()) return 0
+ dir = NORTH
+ client.move_delay += movement_delay()
+ return 1
+
+
+/mob/verb/southface()
+ set hidden = 1
+ if(!canface()) return 0
+ dir = SOUTH
+ client.move_delay += movement_delay()
+ return 1
+
+
+/mob/proc/IsAdvancedToolUser()//This might need a rename but it should replace the can this mob use things check
+ return 0
+
+
+/mob/proc/Stun(amount)
+ if(status_flags & CANSTUN)
+ stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
+ update_canmove()
+ return
+
+/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
+ if(status_flags & CANSTUN)
+ stunned = max(amount,0)
+ update_canmove()
+ return
+
+/mob/proc/AdjustStunned(amount)
+ if(status_flags & CANSTUN)
+ stunned = max(stunned + amount,0)
+ update_canmove()
+ return
+
+/mob/proc/Weaken(amount)
+ if(status_flags & CANWEAKEN)
+ weakened = max(max(weakened,amount),0)
+ update_canmove() //updates lying, canmove and icons
+ return
+
+/mob/proc/SetWeakened(amount)
+ if(status_flags & CANWEAKEN)
+ weakened = max(amount,0)
+ update_canmove() //updates lying, canmove and icons
+ return
+
+/mob/proc/AdjustWeakened(amount)
+ if(status_flags & CANWEAKEN)
+ weakened = max(weakened + amount,0)
+ update_canmove() //updates lying, canmove and icons
+ return
+
+/mob/proc/Paralyse(amount)
+ if(status_flags & CANPARALYSE)
+ paralysis = max(max(paralysis,amount),0)
+ update_canmove()
+ return
+
+/mob/proc/SetParalysis(amount)
+ if(status_flags & CANPARALYSE)
+ paralysis = max(amount,0)
+ update_canmove()
+ return
+
+/mob/proc/AdjustParalysis(amount)
+ if(status_flags & CANPARALYSE)
+ paralysis = max(paralysis + amount,0)
+ update_canmove()
+ return
+
+/mob/proc/Sleeping(amount)
+ sleeping = max(max(sleeping,amount),0)
+ update_canmove()
+ return
+
+/mob/proc/SetSleeping(amount)
+ sleeping = max(amount,0)
+ update_canmove()
+ return
+
+/mob/proc/AdjustSleeping(amount)
+ sleeping = max(sleeping + amount,0)
+ update_canmove()
+ return
+
+/mob/proc/Resting(amount)
+ resting = max(max(resting,amount),0)
+ update_canmove()
+ return
+
+/mob/proc/SetResting(amount)
+ resting = max(amount,0)
+ update_canmove()
+ return
+
+/mob/proc/AdjustResting(amount)
+ resting = max(resting + amount,0)
+ update_canmove()
return
\ No newline at end of file
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 06389ef9e8a..231eaaccd48 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -493,7 +493,7 @@
return 1
if(ispath(MP, /mob/living/simple_animal/hostile/carp))
return 1
- if(ispath(MP, /mob/living/simple_animal/mushroom))
+ if(ispath(MP, /mob/living/simple_animal/hostile/mushroom))
return 1
if(ispath(MP, /mob/living/simple_animal/shade))
return 1
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 6af3aa2b6eb..fabce6b4abd 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -1,354 +1,358 @@
-/* Photography!
- * Contains:
- * Camera
- * Camera Film
- * Photos
- * Photo Albums
- */
-
-/*
- * Film
- */
-/obj/item/device/camera_film
- name = "film cartridge"
- icon = 'icons/obj/items.dmi'
- desc = "A camera film cartridge. Insert it into a camera to reload it."
- icon_state = "film"
- item_state = "electropack"
- w_class = 1.0
-
-
-/*
- * Photo
- */
-/obj/item/weapon/photo
- name = "photo"
- icon = 'icons/obj/items.dmi'
- icon_state = "photo"
- item_state = "paper"
- w_class = 1.0
- var/icon/img //Big photo image
- var/scribble //Scribble on the back.
- var/blueprints = 0 //Does it include the blueprints?
-
-
-/obj/item/weapon/photo/attack_self(mob/user)
- examine()
-
-
-/obj/item/weapon/photo/attackby(obj/item/weapon/P, mob/user)
- if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
- var/txt = sanitize(input(user, "What would you like to write on the back?", "Photo Writing", null) as text)
- txt = copytext(txt, 1, 128)
- if(loc == user && user.stat == 0)
- scribble = txt
- ..()
-
-
-/obj/item/weapon/photo/examine()
- set src in oview(1)
- if(is_blind(usr)) return
-
- if(in_range(usr, src))
- show(usr)
- usr << desc
- else
- usr << "It is too far away."
-
-
-/obj/item/weapon/photo/proc/show(mob/user)
- user << browse_rsc(img, "tmp_photo.png")
- user << browse("[name] " \
- + "" \
- + "
Written on the back:
[scribble]" : ]"\
- + "", "window=book;size=200x[scribble ? 400 : 200]")
- onclose(user, "[name]")
-
-
-/obj/item/weapon/photo/verb/rename()
- set name = "Rename photo"
- set category = "Object"
- set src in usr
-
- var/n_name = copytext(sanitize(input(usr, "What would you like to label the photo?", "Photo Labelling", null) as text), 1, MAX_NAME_LEN)
- //loc.loc check is for making possible renaming photos in clipboards
- if((loc == usr || loc.loc && loc.loc == usr) && usr.stat == 0)
- name = "photo[(n_name ? text("- '[n_name]'") : null)]"
- add_fingerprint(usr)
-
-
-/*
- * Photo album
- */
-/obj/item/weapon/storage/photo_album
- name = "photo album"
- icon = 'icons/obj/items.dmi'
- icon_state = "album"
- item_state = "briefcase"
- can_hold = list("/obj/item/weapon/photo",)
-
-
-/*
- * Camera
- */
-/obj/item/device/camera
- name = "camera"
- icon = 'icons/obj/items.dmi'
- desc = "A polaroid camera. 10 photos left."
- icon_state = "camera"
- item_state = "electropack"
- w_class = 2.0
- flags = CONDUCT
- slot_flags = SLOT_BELT
- m_amt = 2000
- var/pictures_max = 10
- var/pictures_left = 10
- var/on = 1
- var/blueprints = 0 //are blueprints visible in the current photo being created?
- var/list/aipictures = list() //Allows for storage of pictures taken by AI, in a similar manner the datacore stores info
-
-
-/obj/item/device/camera/ai_camera //camera AI can take pictures with
- name = "AI photo camera"
- var/in_camera_mode = 0
-
- verb/picture()
- set category ="AI Commands"
- set name = "Take Image"
- set src in usr
-
- toggle_camera_mode()
-
- verb/viewpicture()
- set category ="AI Commands"
- set name = "View Images"
- set src in usr
-
- viewpictures()
-
-
-/obj/item/device/camera/attack(mob/living/carbon/human/M, mob/user)
- return
-
-
-/obj/item/device/camera/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/device/camera_film))
- if(pictures_left)
- user << "[src] still has some film in it!"
- return
- user << "You insert [I] into [src]."
- user.drop_item()
- del(I)
- pictures_left = pictures_max
- return
- ..()
-
-
-/obj/item/device/camera/proc/camera_get_icon(turf/the_turf, blueprints)
- //Bigger icon base to capture those icons that were shifted to the next tile
- //i.e. pretty much all wall-mounted machinery
- var/icon/res = icon('icons/effects/96x96.dmi', "")
-
- var/icon/turficon = build_composite_icon(the_turf)
- res.Blend(turficon, ICON_OVERLAY, 33, 33)
-
- var/atoms[] = list()
- for(var/atom/A in the_turf)
- if(A.invisibility) continue
- atoms.Add(A)
-
- //Sorting icons based on levels
- var/gap = atoms.len
- var/swapped = 1
- while (gap > 1 || swapped)
- swapped = 0
- if(gap > 1)
- gap = round(gap / 1.247330950103979)
- if(gap < 1)
- gap = 1
- for(var/i = 1; gap + i <= atoms.len; i++)
- var/atom/l = atoms[i] //Fucking hate
- var/atom/r = atoms[gap+i] //how lists work here
- if(l.layer > r.layer) //no "atoms[i].layer" for me
- atoms.Swap(i, gap + i)
- swapped = 1
-
- for(var/i; i <= atoms.len; i++)
- var/atom/A = atoms[i]
- if(A)
- var/icon/img = getFlatIcon(A, A.dir)//build_composite_icon(A)
- if(istype(img, /icon))
- res.Blend(new/icon(img, "", A.dir), ICON_OVERLAY, 33 + A.pixel_x, 33 + A.pixel_y)
- if(!blueprints && istype(A, /obj/item/blueprints))
- blueprints = 1
- return res
-
-
-/obj/item/device/camera/proc/camera_get_mobs(turf/the_turf)
- var/mob_detail
- for(var/mob/living/carbon/A in the_turf)
- if(A.invisibility) continue
- var/holding = null
- if(A.l_hand || A.r_hand)
- if(A.l_hand) holding = "They are holding \a [A.l_hand]"
- if(A.r_hand)
- if(holding)
- holding += " and \a [A.r_hand]"
- else
- holding = "They are holding \a [A.r_hand]"
-
- if(!mob_detail)
- mob_detail = "You can see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. "
- else
- mob_detail += "You can also see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]."
- return mob_detail
-
-
-/obj/item/device/camera/proc/captureimage(atom/target, mob/user, flag) //Proc for both regular and AI-based camera to take the image
- var/x_c = target.x - 1
- var/y_c = target.y + 1
- var/z_c = target.z
-
- var/icon/temp = icon('icons/effects/96x96.dmi',"")
- temp.Blend("#000", ICON_OVERLAY)
- var/mobs = ""
- var/viewer = user
- var/list/seen
- if(!istype(user,/mob/living/silicon/ai)) //crappy check, but without it AI photos would be subject to line of sight from the AI Eye object. Made the best of it by moving the sec camera check inside
- if(user.client) //To make shooting through security cameras possible
- viewer = user.client.eye
- seen = hear(world.view, viewer)
- else
- seen = hear(world.view, target)
- for(var/i = 1; i <= 3; i++)
- for(var/j = 1; j <= 3; j++)
- var/turf/T = locate(x_c, y_c, z_c)
- if(T in seen)
- if(istype(user,/mob/living/silicon/ai))
- if(0 == cameranet.checkTurfVis(T)) //Checks to see if this turf is visible to the AI's cameras
- x_c++ //because continue would skip the x_c++ further down, and it is rather important to this proc to work right
- continue
- temp.Blend(camera_get_icon(T), ICON_OVERLAY, 32 * (j-1-1), 32 - 32 * (i-1))
- mobs += camera_get_mobs(T)
- x_c++
- y_c--
- x_c -= 3
- if(!istype(usr,/mob/living/silicon/ai))
- printpicture(user, temp, mobs, blueprints, flag)
- else
- aipicture(user, temp, mobs, blueprints)
-
-
-
-/obj/item/device/camera/proc/printpicture(mob/user, icon/temp, mobs, blueprints, flag) //Normal camera proc for creating photos
- var/obj/item/weapon/photo/P = new/obj/item/weapon/photo()
- user.put_in_hands(P)
- var/icon/small_img = icon(temp)
- var/icon/ic = icon('icons/obj/items.dmi',"photo")
- small_img.Scale(8, 8)
- ic.Blend(small_img,ICON_OVERLAY, 10, 13)
- P.icon = ic
- P.img = temp
- P.desc = mobs
- P.pixel_x = rand(-10, 10)
- P.pixel_y = rand(-10, 10)
-
- if(blueprints)
- P.blueprints = 1
- blueprints = 0
-
-
-/obj/item/device/camera/proc/aipicture(mob/user, icon/temp, mobs, blueprints) //instead of printing a picture like a regular camera would, we do this instead for the AI
-
- var/icon/small_img = icon(temp)
- var/icon/ic = icon('icons/obj/items.dmi',"photo")
- small_img.Scale(8, 8)
- ic.Blend(small_img,ICON_OVERLAY, 10, 13)
- var/icon = ic
- var/img = temp
- var/desc = mobs
- var/pixel_x = rand(-10, 10)
- var/pixel_y = rand(-10, 10)
-
- if(blueprints)
- blueprints = 1
-
- injectaialbum(icon, img, desc, pixel_x, pixel_y, blueprints)
-
-
-/datum/picture
- var/name = "image"
- var/list/fields = list()
-
-
-/obj/item/device/camera/proc/injectaialbum(var/icon, var/img, var/desc, var/pixel_x, var/pixel_y, var/blueprints) //stores image information to a list similar to that of the datacore
- var/numberer = 1
- for(var/datum/picture in src.aipictures)
- numberer++
- var/datum/picture/P = new()
- P.fields["name"] = "Image [numberer]"
- P.fields["icon"] = icon
- P.fields["img"] = img
- P.fields["desc"] = desc
- P.fields["pixel_x"] = pixel_x
- P.fields["pixel_y"] = pixel_y
- P.fields["blueprints"] = blueprints
-
- aipictures += P
- usr << "Image recorded" //feedback to the AI player that the picture was taken
-
-
-/obj/item/device/camera/ai_camera/proc/viewpictures() //AI proc for viewing pictures they have taken
- var/list/nametemp = list()
- var/find
- var/datum/picture/selection
- if(src.aipictures.len == 0)
- usr << "No images saved"
- return
- for(var/datum/picture/t in src.aipictures)
- nametemp += t.fields["name"]
- find = input("Select image (numbered in order taken)") in nametemp
- var/obj/item/weapon/photo/P = new/obj/item/weapon/photo()
- for(var/datum/picture/q in src.aipictures)
- if(q.fields["name"] == find)
- selection = q
- break // just in case some AI decides to take 10 thousand pictures in a round
- P.icon = selection.fields["icon"]
- P.img = selection.fields["img"]
- P.desc = selection.fields["desc"]
- P.pixel_x = selection.fields["pixel_x"]
- P.pixel_y = selection.fields["pixel_y"]
-
- P.show(usr)
- usr << P.desc
- del P //so 10 thousdand pictures items are not left in memory should an AI take them and then view them all.
-
-/obj/item/device/camera/afterattack(atom/target, mob/user, flag)
- if(!on || !pictures_left || ismob(target.loc)) return
- captureimage(target, user, flag)
-
- playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, 1, -3)
-
- pictures_left--
- desc = "A polaroid camera. It has [pictures_left] photos left."
- user << "[pictures_left] photos left."
- icon_state = "camera_off"
- on = 0
- spawn(64)
- icon_state = "camera"
- on = 1
-
-/obj/item/device/camera/ai_camera/proc/toggle_camera_mode()
- if(in_camera_mode)
- camera_mode_off()
- else
- camera_mode_on()
-
-/obj/item/device/camera/ai_camera/proc/camera_mode_off()
- src.in_camera_mode = 0
- usr << "Camera Mode deactivated"
-
-/obj/item/device/camera/ai_camera/proc/camera_mode_on()
- src.in_camera_mode = 1
+/* Photography!
+ * Contains:
+ * Camera
+ * Camera Film
+ * Photos
+ * Photo Albums
+ */
+
+/*
+ * Film
+ */
+/obj/item/device/camera_film
+ name = "film cartridge"
+ icon = 'icons/obj/items.dmi'
+ desc = "A camera film cartridge. Insert it into a camera to reload it."
+ icon_state = "film"
+ item_state = "electropack"
+ w_class = 1.0
+
+
+/*
+ * Photo
+ */
+/obj/item/weapon/photo
+ name = "photo"
+ icon = 'icons/obj/items.dmi'
+ icon_state = "photo"
+ item_state = "paper"
+ w_class = 1.0
+ var/icon/img //Big photo image
+ var/scribble //Scribble on the back.
+ var/blueprints = 0 //Does it include the blueprints?
+
+
+/obj/item/weapon/photo/attack_self(mob/user)
+ examine()
+
+
+/obj/item/weapon/photo/attackby(obj/item/weapon/P, mob/user)
+ if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
+ var/txt = sanitize(input(user, "What would you like to write on the back?", "Photo Writing", null) as text)
+ txt = copytext(txt, 1, 128)
+ if(loc == user && user.stat == 0)
+ scribble = txt
+ ..()
+
+
+/obj/item/weapon/photo/examine()
+ set src in oview(1)
+ if(is_blind(usr)) return
+
+ if(in_range(usr, src))
+ show(usr)
+ usr << desc
+ else
+ usr << "It is too far away."
+
+
+/obj/item/weapon/photo/proc/show(mob/user)
+ user << browse_rsc(img, "tmp_photo.png")
+ user << browse("[name] " \
+ + "" \
+ + "
Written on the back:
[scribble]" : ]"\
+ + "", "window=book;size=200x[scribble ? 400 : 200]")
+ onclose(user, "[name]")
+
+
+/obj/item/weapon/photo/verb/rename()
+ set name = "Rename photo"
+ set category = "Object"
+ set src in usr
+
+ var/n_name = copytext(sanitize(input(usr, "What would you like to label the photo?", "Photo Labelling", null) as text), 1, MAX_NAME_LEN)
+ //loc.loc check is for making possible renaming photos in clipboards
+ if((loc == usr || loc.loc && loc.loc == usr) && usr.stat == 0)
+ name = "photo[(n_name ? text("- '[n_name]'") : null)]"
+ add_fingerprint(usr)
+
+
+/*
+ * Photo album
+ */
+/obj/item/weapon/storage/photo_album
+ name = "photo album"
+ icon = 'icons/obj/items.dmi'
+ icon_state = "album"
+ item_state = "briefcase"
+ can_hold = list("/obj/item/weapon/photo",)
+
+
+/*
+ * Camera
+ */
+/obj/item/device/camera
+ name = "camera"
+ icon = 'icons/obj/items.dmi'
+ desc = "A polaroid camera. 10 photos left."
+ icon_state = "camera"
+ item_state = "electropack"
+ w_class = 2.0
+ flags = CONDUCT
+ slot_flags = SLOT_BELT
+ m_amt = 2000
+ var/pictures_max = 10
+ var/pictures_left = 10
+ var/on = 1
+ var/blueprints = 0 //are blueprints visible in the current photo being created?
+ var/list/aipictures = list() //Allows for storage of pictures taken by AI, in a similar manner the datacore stores info
+
+
+/obj/item/device/camera/ai_camera //camera AI can take pictures with
+ name = "AI photo camera"
+ var/in_camera_mode = 0
+
+ verb/picture()
+ set category ="AI Commands"
+ set name = "Take Image"
+ set src in usr
+
+ toggle_camera_mode()
+
+ verb/viewpicture()
+ set category ="AI Commands"
+ set name = "View Images"
+ set src in usr
+
+ viewpictures()
+
+
+/obj/item/device/camera/attack(mob/living/carbon/human/M, mob/user)
+ return
+
+
+/obj/item/device/camera/attackby(obj/item/I, mob/user)
+ if(istype(I, /obj/item/device/camera_film))
+ if(pictures_left)
+ user << "[src] still has some film in it!"
+ return
+ user << "You insert [I] into [src]."
+ user.drop_item()
+ del(I)
+ pictures_left = pictures_max
+ return
+ ..()
+
+
+/obj/item/device/camera/proc/camera_get_icon(turf/the_turf)
+ //Bigger icon base to capture those icons that were shifted to the next tile
+ //i.e. pretty much all wall-mounted machinery
+ var/icon/res = icon('icons/effects/96x96.dmi', "")
+
+ var/icon/turficon = build_composite_icon(the_turf)
+ res.Blend(turficon, ICON_OVERLAY, 33, 33)
+
+ var/atoms[] = list()
+ for(var/atom/A in the_turf)
+ if(A.invisibility) continue
+ atoms.Add(A)
+
+ //Sorting icons based on levels
+ var/gap = atoms.len
+ var/swapped = 1
+ while (gap > 1 || swapped)
+ swapped = 0
+ if(gap > 1)
+ gap = round(gap / 1.247330950103979)
+ if(gap < 1)
+ gap = 1
+ for(var/i = 1; gap + i <= atoms.len; i++)
+ var/atom/l = atoms[i] //Fucking hate
+ var/atom/r = atoms[gap+i] //how lists work here
+ if(l.layer > r.layer) //no "atoms[i].layer" for me
+ atoms.Swap(i, gap + i)
+ swapped = 1
+
+ for(var/i; i <= atoms.len; i++)
+ var/atom/A = atoms[i]
+ if(A)
+ var/icon/img = getFlatIcon(A, A.dir)//build_composite_icon(A)
+ if(istype(img, /icon))
+ res.Blend(new/icon(img, "", A.dir), ICON_OVERLAY, 33 + A.pixel_x, 33 + A.pixel_y)
+
+ if(istype(A, /obj/item/blueprints))
+ blueprints = 1
+
+ return res
+
+
+/obj/item/device/camera/proc/camera_get_mobs(turf/the_turf)
+ var/mob_detail
+ for(var/mob/living/carbon/A in the_turf)
+ if(A.invisibility) continue
+ var/holding = null
+ if(A.l_hand || A.r_hand)
+ if(A.l_hand) holding = "They are holding \a [A.l_hand]"
+ if(A.r_hand)
+ if(holding)
+ holding += " and \a [A.r_hand]"
+ else
+ holding = "They are holding \a [A.r_hand]"
+
+ if(!mob_detail)
+ mob_detail = "You can see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. "
+ else
+ mob_detail += "You can also see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]."
+ return mob_detail
+
+
+/obj/item/device/camera/proc/captureimage(atom/target, mob/user, flag) //Proc for both regular and AI-based camera to take the image
+ var/x_c = target.x - 1
+ var/y_c = target.y + 1
+ var/z_c = target.z
+
+ var/icon/temp = icon('icons/effects/96x96.dmi',"")
+ temp.Blend("#000", ICON_OVERLAY)
+ var/mobs = ""
+ var/viewer = user
+ var/list/seen
+ if(!istype(user,/mob/living/silicon/ai)) //crappy check, but without it AI photos would be subject to line of sight from the AI Eye object. Made the best of it by moving the sec camera check inside
+ if(user.client) //To make shooting through security cameras possible
+ viewer = user.client.eye
+ seen = hear(world.view, viewer)
+ else
+ seen = hear(world.view, target)
+ for(var/i = 1; i <= 3; i++)
+ for(var/j = 1; j <= 3; j++)
+ var/turf/T = locate(x_c, y_c, z_c)
+ if(T in seen)
+ if(istype(user,/mob/living/silicon/ai))
+ if(0 == cameranet.checkTurfVis(T)) //Checks to see if this turf is visible to the AI's cameras
+ x_c++ //because continue would skip the x_c++ further down, and it is rather important to this proc to work right
+ continue
+ temp.Blend(camera_get_icon(T), ICON_OVERLAY, 32 * (j-1-1), 32 - 32 * (i-1))
+ mobs += camera_get_mobs(T)
+ x_c++
+ y_c--
+ x_c -= 3
+ if(!istype(usr,/mob/living/silicon/ai))
+ printpicture(user, temp, mobs, flag)
+ else
+ aipicture(user, temp, mobs, blueprints)
+
+
+
+/obj/item/device/camera/proc/printpicture(mob/user, icon/temp, mobs, flag) //Normal camera proc for creating photos
+ var/obj/item/weapon/photo/P = new/obj/item/weapon/photo()
+ user.put_in_hands(P)
+ var/icon/small_img = icon(temp)
+ var/icon/ic = icon('icons/obj/items.dmi',"photo")
+ small_img.Scale(8, 8)
+ ic.Blend(small_img,ICON_OVERLAY, 10, 13)
+ P.icon = ic
+ P.img = temp
+ P.desc = mobs
+ P.pixel_x = rand(-10, 10)
+ P.pixel_y = rand(-10, 10)
+
+ if(blueprints)
+ P.blueprints = 1
+ blueprints = 0
+
+
+/obj/item/device/camera/proc/aipicture(mob/user, icon/temp, mobs) //instead of printing a picture like a regular camera would, we do this instead for the AI
+
+ var/icon/small_img = icon(temp)
+ var/icon/ic = icon('icons/obj/items.dmi',"photo")
+ small_img.Scale(8, 8)
+ ic.Blend(small_img,ICON_OVERLAY, 10, 13)
+ var/icon = ic
+ var/img = temp
+ var/desc = mobs
+ var/pixel_x = rand(-10, 10)
+ var/pixel_y = rand(-10, 10)
+
+ var/injectblueprints = 1
+ if(blueprints)
+ injectblueprints = 1
+ blueprints = 0
+
+ injectaialbum(icon, img, desc, pixel_x, pixel_y, injectblueprints)
+
+
+/datum/picture
+ var/name = "image"
+ var/list/fields = list()
+
+
+/obj/item/device/camera/proc/injectaialbum(var/icon, var/img, var/desc, var/pixel_x, var/pixel_y, var/blueprintsinject) //stores image information to a list similar to that of the datacore
+ var/numberer = 1
+ for(var/datum/picture in src.aipictures)
+ numberer++
+ var/datum/picture/P = new()
+ P.fields["name"] = "Image [numberer]"
+ P.fields["icon"] = icon
+ P.fields["img"] = img
+ P.fields["desc"] = desc
+ P.fields["pixel_x"] = pixel_x
+ P.fields["pixel_y"] = pixel_y
+ P.fields["blueprints"] = blueprintsinject
+
+ aipictures += P
+ usr << "Image recorded" //feedback to the AI player that the picture was taken
+
+
+/obj/item/device/camera/ai_camera/proc/viewpictures() //AI proc for viewing pictures they have taken
+ var/list/nametemp = list()
+ var/find
+ var/datum/picture/selection
+ if(src.aipictures.len == 0)
+ usr << "No images saved"
+ return
+ for(var/datum/picture/t in src.aipictures)
+ nametemp += t.fields["name"]
+ find = input("Select image (numbered in order taken)") in nametemp
+ var/obj/item/weapon/photo/P = new/obj/item/weapon/photo()
+ for(var/datum/picture/q in src.aipictures)
+ if(q.fields["name"] == find)
+ selection = q
+ break // just in case some AI decides to take 10 thousand pictures in a round
+ P.icon = selection.fields["icon"]
+ P.img = selection.fields["img"]
+ P.desc = selection.fields["desc"]
+ P.pixel_x = selection.fields["pixel_x"]
+ P.pixel_y = selection.fields["pixel_y"]
+
+ P.show(usr)
+ usr << P.desc
+ del P //so 10 thousdand pictures items are not left in memory should an AI take them and then view them all.
+
+/obj/item/device/camera/afterattack(atom/target, mob/user, flag)
+ if(!on || !pictures_left || ismob(target.loc)) return
+ captureimage(target, user, flag)
+
+ playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, 1, -3)
+
+ pictures_left--
+ desc = "A polaroid camera. It has [pictures_left] photos left."
+ user << "[pictures_left] photos left."
+ icon_state = "camera_off"
+ on = 0
+ spawn(64)
+ icon_state = "camera"
+ on = 1
+
+/obj/item/device/camera/ai_camera/proc/toggle_camera_mode()
+ if(in_camera_mode)
+ camera_mode_off()
+ else
+ camera_mode_on()
+
+/obj/item/device/camera/ai_camera/proc/camera_mode_off()
+ src.in_camera_mode = 0
+ usr << "Camera Mode deactivated"
+
+/obj/item/device/camera/ai_camera/proc/camera_mode_on()
+ src.in_camera_mode = 1
usr << "Camera Mode activated"
\ No newline at end of file
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 49ad20adbaf..b5332093178 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -1,1117 +1,1121 @@
-#define APC_WIRE_IDSCAN 1
-#define APC_WIRE_MAIN_POWER1 2
-#define APC_WIRE_MAIN_POWER2 3
-#define APC_WIRE_AI_CONTROL 4
-
-#define APC_UPDATE_ICON_COOLDOWN 200 // 20 seconds
-
-// the Area Power Controller (APC), formerly Power Distribution Unit (PDU)
-// one per area, needs wire conection to power network
-
-// controls power to devices in that area
-// may be opened to change power cell
-// three different channels (lighting/equipment/environ) - may each be set to on, off, or auto
-
-
-//NOTE: STUFF STOLEN FROM AIRLOCK.DM thx
-
-
-/obj/machinery/power/apc
- name = "area power controller"
- desc = "A control terminal for the area electrical systems."
-
- icon_state = "apc0"
- anchored = 1
- use_power = 0
- req_access = list(access_engine_equip)
- var/area/area
- var/areastring = null
- var/obj/item/weapon/cell/cell
- var/start_charge = 90 // initial cell charge %
- var/cell_type = 2500 // 0=no cell, 1=regular, 2=high-cap (x5) <- old, now it's just 0=no cell, otherwise dictate cellcapacity by changing this value. 1 used to be 1000, 2 was 2500
- var/opened = 0 //0=closed, 1=opened, 2=cover removed
- var/shorted = 0
- var/lighting = 3
- var/equipment = 3
- var/environ = 3
- var/operating = 1
- var/charging = 0
- var/chargemode = 1
- var/chargecount = 0
- var/locked = 1
- var/coverlocked = 1
- var/aidisabled = 0
- var/tdir = null
- var/obj/machinery/power/terminal/terminal = null
- var/lastused_light = 0
- var/lastused_equip = 0
- var/lastused_environ = 0
- var/lastused_total = 0
- var/main_status = 0
- var/wiresexposed = 0
- powernet = 0 // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :(
- var/malfhack = 0 //New var for my changes to AI malf. --NeoFite
- var/mob/living/silicon/ai/malfai = null //See above --NeoFite
-// luminosity = 1
- var/has_electronics = 0 // 0 - none, 1 - plugged in, 2 - secured by screwdriver
- var/overload = 1 //used for the Blackout malf module
- var/beenhit = 0 // used for counting how many times it has been hit, used for Aliens at the moment
- var/mob/living/silicon/ai/occupant = null
- var/longtermpower = 10
- var/updating_icon = 0
- var/datum/wires/apc/wires = null
- //var/debug = 0
-
-/obj/machinery/power/apc/updateDialog()
- if (stat & (BROKEN|MAINT))
- return
- ..()
-
-/obj/machinery/power/apc/connect_to_network()
- //Override because the APC does not directly connect to the network; it goes through a terminal.
- //The terminal is what the power computer looks for anyway.
- if(!terminal)
- make_terminal()
- if(terminal)
- terminal.connect_to_network()
-
-/obj/machinery/power/apc/New(turf/loc, var/ndir, var/building=0)
- ..()
- wires = new(src)
- // offset 24 pixels in direction of dir
- // this allows the APC to be embedded in a wall, yet still inside an area
- if (building)
- dir = ndir
- src.tdir = dir // to fix Vars bug
- dir = SOUTH
-
- pixel_x = (src.tdir & 3)? 0 : (src.tdir == 4 ? 24 : -24)
- pixel_y = (src.tdir & 3)? (src.tdir ==1 ? 24 : -24) : 0
- if (building==0)
- init()
- else
- area = src.loc.loc:master
- opened = 1
- operating = 0
- name = "[area.name] APC"
- stat |= MAINT
- src.update_icon()
- spawn(5)
- src.update()
-
-
-
-/obj/machinery/power/apc/proc/make_terminal()
- // create a terminal object at the same position as original turf loc
- // wires will attach to this
- terminal = new/obj/machinery/power/terminal(src.loc)
- terminal.dir = tdir
- terminal.master = src
-
-/obj/machinery/power/apc/proc/init()
- has_electronics = 2 //installed and secured
- // is starting with a power cell installed, create it and set its charge level
- if(cell_type)
- src.cell = new/obj/item/weapon/cell(src)
- cell.maxcharge = cell_type // cell_type is maximum charge (old default was 1000 or 2500 (values one and two respectively)
- cell.charge = start_charge * cell.maxcharge / 100.0 // (convert percentage to actual value)
-
- var/area/A = src.loc.loc
-
- //if area isn't specified use current
- if(isarea(A) && src.areastring == null)
- src.area = A
- else
- src.area = get_area_name(areastring)
- update_icon()
-
- make_terminal()
-
- spawn(5)
- src.update()
-
-/obj/machinery/power/apc/examine()
- set src in oview(1)
-
- if(usr /*&& !usr.stat*/)
- ..()
- if(stat & BROKEN)
- usr << "Looks broken."
- return
- if(opened)
- if(has_electronics && terminal)
- usr << "The cover is [opened==2?"removed":"open"] and the power cell is [ cell ? "installed" : "missing"]."
- else if (!has_electronics && terminal)
- usr << "There are some wires but no any electronics."
- else if (has_electronics && !terminal)
- usr << "Electronics installed but not wired."
- else /* if (!has_electronics && !terminal) */
- usr << "There is no electronics nor connected wires."
-
- else
- if (stat & MAINT)
- usr << "The cover is closed. Something wrong with it: it doesn't work."
- else if (malfhack)
- usr << "The cover is broken. It may be hard to force it open."
- else
- usr << "The cover is closed."
-
-
-// update the APC icon to show the three base states
-// also add overlays for indicator lights
-/obj/machinery/power/apc/update_icon()
-
- overlays.Cut()
- if(opened)
- var/basestate = "apc[ cell ? "2" : "1" ]" // if opened, show cell if it's inserted
- if (opened==1)
- if (stat & (MAINT|BROKEN))
- icon_state = "apcmaint" //disassembled APC cannot hold cell
- else
- icon_state = basestate
- else if (opened == 2)
- if ((stat & BROKEN) || malfhack )
- icon_state = "[basestate]-b-nocover"
- else /* if (emagged)*/
- icon_state = "[basestate]-nocover"
- else if (stat & BROKEN)
- icon_state = "apc-b"
- else if(emagged || malfai)
- icon_state = "apcemag"
- else if(wiresexposed)
- icon_state = "apcewires"
- else
- icon_state = "apc0"
- // if closed, update overlays for channel status
- if(!(stat & (BROKEN|MAINT)))
- overlays.Add("apcox-[locked]","apco3-[charging]") // 0=blue 1=red // 0=red, 1=yellow/black 2=green
- if(operating)
- overlays.Add("apco0-[equipment]","apco1-[lighting]","apco2-[environ]") // 0=red, 1=green, 2=blue
-
-// Used in process so it doesn't update the icon too much
-/obj/machinery/power/apc/proc/queue_icon_update()
-
- if(!updating_icon)
- updating_icon = 1
- // Start the update
- spawn(APC_UPDATE_ICON_COOLDOWN)
- update_icon()
- updating_icon = 0
-
-//attack with an item - open/close cover, insert cell, or (un)lock interface
-
-/obj/machinery/power/apc/attackby(obj/item/W, mob/user)
-
- if (istype(user, /mob/living/silicon) && get_dist(src,user)>1)
- return src.attack_hand(user)
- if (istype(W, /obj/item/weapon/crowbar) && opened)
- if (has_electronics==1)
- if (terminal)
- user << "\red Disconnect wires first."
- return
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- user << "You are trying to remove the power control board..." //lpeters - fixed grammar issues
- if(do_after(user, 50))
- has_electronics = 0
- if ((stat & BROKEN) || malfhack)
- user.visible_message(\
- "\red [user.name] has broken the power control board inside [src.name]!",\
- "You broke the charred power control board and remove the remains.",
- "You hear a crack!")
- //ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0
- else
- user.visible_message(\
- "\red [user.name] has removed the power control board from [src.name]!",\
- "You remove the power control board.")
- new /obj/item/weapon/module/power_control(loc)
- else if (opened!=2) //cover isn't removed
- opened = 0
- update_icon()
- else if (istype(W, /obj/item/weapon/crowbar) && !((stat & BROKEN) || malfhack) )
- if(coverlocked && !(stat & MAINT))
- user << "\red The cover is locked and cannot be opened."
- return
- else
- opened = 1
- update_icon()
- else if (istype(W, /obj/item/weapon/cell) && opened) // trying to put a cell inside
- if(cell)
- user << "There is a power cell already installed."
- return
- else
- if (stat & MAINT)
- user << "\red There is no connector for your power cell."
- return
- user.drop_item()
- W.loc = src
- cell = W
- user.visible_message(\
- "\red [user.name] has inserted the power cell to [src.name]!",\
- "You insert the power cell.")
- chargecount = 0
- update_icon()
- else if (istype(W, /obj/item/weapon/screwdriver)) // haxing
- if(opened)
- if (cell)
- user << "\red Close the APC first." //Less hints more mystery!
- return
- else
- if (has_electronics==1 && terminal)
- has_electronics = 2
- stat &= ~MAINT
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "You screw the circuit electronics into place."
- else if (has_electronics==2)
- has_electronics = 1
- stat |= MAINT
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "You unfasten the electronics."
- else /* has_electronics==0 */
- user << "\red There is nothing to secure."
- return
- update_icon()
- else if(emagged)
- user << "The interface is broken."
- else
- wiresexposed = !wiresexposed
- user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]"
- update_icon()
-
- else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card
- if(emagged)
- user << "The interface is broken."
- else if(opened)
- user << "You must close the cover to swipe an ID card."
- else if(wiresexposed)
- user << "You must close the panel"
- else if(stat & (BROKEN|MAINT))
- user << "Nothing happens."
- else
- if(src.allowed(usr) && !isWireCut(APC_WIRE_IDSCAN))
- locked = !locked
- user << "You [ locked ? "lock" : "unlock"] the APC interface."
- update_icon()
- else
- user << "\red Access denied."
- else if (istype(W, /obj/item/weapon/card/emag) && !(emagged || malfhack)) // trying to unlock with an emag card
- if(opened)
- user << "You must close the cover to swipe an ID card."
- else if(wiresexposed)
- user << "You must close the panel first"
- else if(stat & (BROKEN|MAINT))
- user << "Nothing happens."
- else
- flick("apc-spark", src)
- if (do_after(user,6))
- if(prob(50))
- emagged = 1
- locked = 0
- user << "You emag the APC interface."
- update_icon()
- else
- user << "You fail to [ locked ? "unlock" : "lock"] the APC interface."
- else if (istype(W, /obj/item/weapon/cable_coil) && !terminal && opened && has_electronics!=2)
- if (src.loc:intact)
- user << "\red You must remove the floor plating in front of the APC first."
- return
- var/obj/item/weapon/cable_coil/C = W
- if(C.amount < 10)
- user << "\red You need more wires."
- return
- user << "You start adding cables to the APC frame..."
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- if(do_after(user, 20) && C.amount >= 10)
- var/turf/T = get_turf(src)
- var/obj/structure/cable/N = T.get_cable_node()
- if (prob(50) && electrocute_mob(usr, N, N))
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, src)
- s.start()
- return
- C.use(10)
- user.visible_message(\
- "\red [user.name] has added cables to the APC frame!",\
- "You add cables to the APC frame.")
- make_terminal()
- terminal.connect_to_network()
- else if (istype(W, /obj/item/weapon/wirecutters) && terminal && opened && has_electronics!=2)
- if (src.loc:intact)
- user << "\red You must remove the floor plating in front of the APC first."
- return
- user << "You begin to cut the cables..."
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- if(do_after(user, 50))
- if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal))
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, src)
- s.start()
- return
- new /obj/item/weapon/cable_coil(loc,10)
- user.visible_message(\
- "\red [user.name] cut the cables and dismantled the power terminal.",\
- "You cut the cables and dismantle the power terminal.")
- del(terminal)
- else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack))
- user << "You trying to insert the power control board into the frame..."
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- if(do_after(user, 10))
- has_electronics = 1
- user << "You place the power control board inside the frame."
- del(W)
- else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && ((stat & BROKEN) || malfhack))
- user << "\red You cannot put the board inside, the frame is damaged."
- return
- else if (istype(W, /obj/item/weapon/weldingtool) && opened && has_electronics==0 && !terminal)
- var/obj/item/weapon/weldingtool/WT = W
- if (WT.get_fuel() < 3)
- user << "\blue You need more welding fuel to complete this task."
- return
- user << "You start welding the APC frame..."
- playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
- if(do_after(user, 50))
- if(!src || !WT.remove_fuel(3, user)) return
- if (emagged || malfhack || (stat & BROKEN) || opened==2)
- new /obj/item/stack/sheet/metal(loc)
- user.visible_message(\
- "\red [src] has been cut apart by [user.name] with the weldingtool.",\
- "You disassembled the broken APC frame.",\
- "\red You hear welding.")
- else
- new /obj/item/apc_frame(loc)
- user.visible_message(\
- "\red [src] has been cut from the wall by [user.name] with the weldingtool.",\
- "You cut the APC frame from the wall.",\
- "\red You hear welding.")
- del(src)
- return
- else if (istype(W, /obj/item/apc_frame) && opened && emagged)
- emagged = 0
- if (opened==2)
- opened = 1
- user.visible_message(\
- "\red [user.name] has replaced the damaged APC frontal panel with a new one.",\
- "You replace the damaged APC frontal panel with a new one.")
- del(W)
- update_icon()
- else if (istype(W, /obj/item/apc_frame) && opened && ((stat & BROKEN) || malfhack))
- if (has_electronics)
- user << "You cannot repair this APC until you remove the electronics still inside."
- return
- user << "You begin to replace the damaged APC frame..."
- if(do_after(user, 50))
- user.visible_message(\
- "\red [user.name] has replaced the damaged APC frame with new one.",\
- "You replace the damaged APC frame with new one.")
- del(W)
- stat &= ~BROKEN
- malfai = null
- malfhack = 0
- if (opened==2)
- opened = 1
- update_icon()
- else
- if ( ((stat & BROKEN) || malfhack) \
- && !opened \
- && W.force >= 5 \
- && W.w_class >= 3.0 \
- && prob(20) )
- opened = 2
- user.visible_message("\red The APC cover was knocked down with the [W.name] by [user.name]!", \
- "\red You knock down the APC cover with your [W.name]!", \
- "You hear bang")
- update_icon()
- else
- if (istype(user, /mob/living/silicon))
- return src.attack_hand(user)
- if (!opened && wiresexposed && \
- (istype(W, /obj/item/device/multitool) || \
- istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/device/assembly/signaler)))
- return src.attack_hand(user)
- user.visible_message("\red The [src.name] has been hit with the [W.name] by [user.name]!", \
- "\red You hit the [src.name] with your [W.name]!", \
- "You hear bang")
-
-// attack with hand - remove cell (if cover open) or interact with the APC
-
-/obj/machinery/power/apc/attack_hand(mob/user)
-// if (!can_use(user)) This already gets called in interact() and in topic()
-// return
- if(!user)
- return
- src.add_fingerprint(user)
- if(usr == user && opened && (!issilicon(user)))
- if(cell)
- user.put_in_hands(cell)
- cell.add_fingerprint(user)
- cell.updateicon()
-
- src.cell = null
- user.visible_message("\red [user.name] removes the power cell from [src.name]!", "You remove the power cell.")
- //user << "You remove the power cell."
- charging = 0
- src.update_icon()
- return
- if(stat & (BROKEN|MAINT))
- return
- // do APC interaction
- src.interact(user)
-
-/obj/machinery/power/apc/attack_alien(mob/living/carbon/alien/humanoid/user)
- if(!user)
- return
- user.visible_message("\red [user.name] slashes at the [src.name]!", "\blue You slash at the [src.name]!")
- playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1)
-
- var/allcut = wires.IsAllCut()
-
- if(beenhit >= pick(3, 4) && wiresexposed != 1)
- wiresexposed = 1
- src.update_icon()
- src.visible_message("\red The [src.name]'s cover flies open, exposing the wires!")
-
- else if(wiresexposed == 1 && allcut == 0)
- wires.CutAll()
- src.update_icon()
- src.visible_message("\red The [src.name]'s wires are shredded!")
- else
- beenhit += 1
- return
-
-
-/obj/machinery/power/apc/interact(mob/user)
- if(!user)
- return
-
- if(wiresexposed /*&& (!istype(user, /mob/living/silicon))*/) //Commented out the typecheck to allow engiborgs to repair damaged apcs.
- wires.Interact(user)
-
- return ui_interact(user)
-
-
-/obj/machinery/power/apc/proc/get_malf_status(mob/user)
- if (ticker && ticker.mode && (user.mind in ticker.mode.malf_ai) && istype(user, /mob/living/silicon/ai))
- if (src.malfai == (user:parent ? user:parent : user))
- if (src.occupant == user)
- return 3 // 3 = User is shunted in this APC
- else if (istype(user.loc, /obj/machinery/power/apc))
- return 4 // 4 = User is shunted in another APC
- else
- return 2 // 2 = APC hacked by user, and user is in its core.
- else
- return 1 // 1 = APC not hacked.
- else
- return 0 // 0 = User is not a Malf AI
-
-
-/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
- if(!user)
- return
-
- var/list/data = list(
- "locked" = locked,
- "isOperating" = operating,
- "externalPower" = main_status,
- "powerCellStatus" = cell ? cell.percent() : null,
- "chargeMode" = chargemode,
- "chargingStatus" = charging,
- "totalLoad" = lastused_equip + lastused_light + lastused_environ,
- "coverLocked" = coverlocked,
- "siliconUser" = istype(user, /mob/living/silicon),
- "malfStatus" = get_malf_status(user),
-
- "powerChannels" = list(
- list(
- "title" = "Equipment",
- "powerLoad" = lastused_equip,
- "status" = equipment,
- "topicParams" = list(
- "auto" = list("eqp" = 3),
- "on" = list("eqp" = 2),
- "off" = list("eqp" = 1)
- )
- ),
- list(
- "title" = "Lighting",
- "powerLoad" = lastused_light,
- "status" = lighting,
- "topicParams" = list(
- "auto" = list("lgt" = 3),
- "on" = list("lgt" = 2),
- "off" = list("lgt" = 1)
- )
- ),
- list(
- "title" = "Environment",
- "powerLoad" = lastused_environ,
- "status" = environ,
- "topicParams" = list(
- "auto" = list("env" = 3),
- "on" = list("env" = 2),
- "off" = list("env" = 1)
- )
- )
- )
- )
-
- // update the ui if it exists, returns null if no ui is passed/found
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
- if (!ui)
- // the ui does not exist, so we'll create a new() one
- // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
- ui = new(user, src, ui_key, "apc.tmpl", "[area.name] - APC", 520, data["siliconUser"] ? 465 : 420)
- // when the ui is first opened this is the data it will use
- ui.set_initial_data(data)
- // open the new ui window
- ui.open()
- // auto update every Master Controller tick
- ui.set_auto_update(1)
-
-/obj/machinery/power/apc/proc/report()
- return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])"
-
-/obj/machinery/power/apc/proc/update()
- if(operating && !shorted)
- area.power_light = (lighting > 1)
- area.power_equip = (equipment > 1)
- area.power_environ = (environ > 1)
-// if (area.name == "AI Chamber")
-// spawn(10)
-// world << " [area.name] [area.power_equip]"
- else
- area.power_light = 0
- area.power_equip = 0
- area.power_environ = 0
-// if (area.name == "AI Chamber")
-// world << "[area.power_equip]"
- area.power_change()
-
-/obj/machinery/power/apc/proc/isWireCut(var/wireIndex)
- return wires.IsIndexCut(wireIndex)
-
-
-/obj/machinery/power/apc/proc/can_use(mob/user as mob, var/loud = 0) //used by attack_hand() and Topic()
- if (user.stat)
- user << "\red You must be conscious to use this [src]!"
- return 0
- if(!user.client)
- return 0
- if ( ! (istype(user, /mob/living/carbon/human) || \
- istype(user, /mob/living/silicon) || \
- istype(user, /mob/living/carbon/monkey) /*&& ticker && ticker.mode.name == "monkey"*/) )
- user << "\red You don't have the dexterity to use this [src]!"
- return 0
- if(user.restrained())
- user << "\red You must have free hands to use this [src]"
- return 0
- if(user.lying)
- user << "\red You must stand to use this [src]!"
- return 0
- if (istype(user, /mob/living/silicon))
- var/mob/living/silicon/ai/AI = user
- var/mob/living/silicon/robot/robot = user
- if ( \
- src.aidisabled || \
- malfhack && istype(malfai) && \
- ( \
- (istype(AI) && (malfai!=AI && malfai != AI.parent)) || \
- (istype(robot) && (robot in malfai.connected_robots)) \
- ) \
- )
- if(!loud)
- user << "\red \The [src] have AI control disabled!"
- return 0
- else
- if ((!in_range(src, user) || !istype(src.loc, /turf)))
- return 0
-
- var/mob/living/carbon/human/H = user
- if (istype(H))
- if(H.getBrainLoss() >= 60)
- for(var/mob/M in viewers(src, null))
- M << "\red [H] stares cluelessly at [src] and drools."
- return 0
- else if(prob(H.getBrainLoss()))
- user << "\red You momentarily forget how to use [src]."
- return 0
- return 1
-
-/obj/machinery/power/apc/Topic(href, href_list)
- if(..())
- return 0
-
- if(!can_use(usr, 1))
- return 0
-
- if (href_list["lock"])
- coverlocked = !coverlocked
-
- else if (href_list["breaker"])
- toggle_breaker()
-
- else if (href_list["cmode"])
- chargemode = !chargemode
- if(!chargemode)
- charging = 0
- update_icon()
-
- else if (href_list["eqp"])
- var/val = text2num(href_list["eqp"])
- equipment = setsubsystem(val)
- update_icon()
- update()
-
- else if (href_list["lgt"])
- var/val = text2num(href_list["lgt"])
- lighting = setsubsystem(val)
- update_icon()
- update()
-
- else if (href_list["env"])
- var/val = text2num(href_list["env"])
- environ = setsubsystem(val)
- update_icon()
- update()
-
- else if (href_list["overload"])
- if(istype(usr, /mob/living/silicon))
- src.overload_lighting()
-
- else if (href_list["malfhack"])
- var/mob/living/silicon/ai/malfai = usr
- if(get_malf_status(malfai)==1)
- if (malfai.malfhacking)
- malfai << "You are already hacking an APC."
- return 1
- malfai << "Beginning override of APC systems. This takes some time, and you cannot perform other actions during the process."
- malfai.malfhack = src
- malfai.malfhacking = 1
- sleep(600)
- if(src)
- if (!src.aidisabled)
- malfai.malfhack = null
- malfai.malfhacking = 0
- locked = 1
- if (ticker.mode.config_tag == "malfunction")
- if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
- ticker.mode:apcs++
- if(usr:parent)
- src.malfai = usr:parent
- else
- src.malfai = usr
- malfai << "Hack complete. The APC is now under your exclusive control."
- update_icon()
-
- else if (href_list["occupyapc"])
- if(get_malf_status(usr))
- malfoccupy(usr)
-
- else if (href_list["deoccupyapc"])
- if(get_malf_status(usr))
- malfvacate()
-
- else if (href_list["toggleaccess"])
- if(istype(usr, /mob/living/silicon))
- if(emagged || (stat & (BROKEN|MAINT)))
- usr << "The APC does not respond to the command."
- else
- locked = !locked
- update_icon()
-
- return 1
-
-/obj/machinery/power/apc/proc/toggle_breaker()
- operating = !operating
-
- if(malfai)
- if (ticker.mode.config_tag == "malfunction")
- if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
- operating ? ticker.mode:apcs++ : ticker.mode:apcs--
-
- src.update()
- update_icon()
-
-/obj/machinery/power/apc/proc/malfoccupy(var/mob/living/silicon/ai/malf)
- if(!istype(malf))
- return
- if(istype(malf.loc, /obj/machinery/power/apc)) // Already in an APC
- malf << "You must evacuate your current apc first."
- return
- if(!malf.can_shunt)
- malf << "You cannot shunt."
- return
- if(src.z != 1)
- return
- src.occupant = new /mob/living/silicon/ai(src,malf.laws,null,1)
- src.occupant.adjustOxyLoss(malf.getOxyLoss())
- if(!findtext(src.occupant.name,"APC Copy"))
- src.occupant.name = "[malf.name] APC Copy"
- if(malf.parent)
- src.occupant.parent = malf.parent
- else
- src.occupant.parent = malf
- malf.mind.transfer_to(src.occupant)
- src.occupant.eyeobj.name = "[src.occupant.name] (AI Eye)"
- if(malf.parent)
- del(malf)
- src.occupant.verbs += /mob/living/silicon/ai/proc/corereturn
- src.occupant.verbs += /datum/game_mode/malfunction/proc/takeover
- src.occupant.cancel_camera()
- if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA)
- for(var/obj/item/weapon/pinpointer/point in world)
- point.the_disk = src //the pinpointer will detect the shunted AI
-
-
-/obj/machinery/power/apc/proc/malfvacate(var/forced)
- if(!src.occupant)
- return
- if(src.occupant.parent && src.occupant.parent.stat != 2)
- src.occupant.mind.transfer_to(src.occupant.parent)
- src.occupant.parent.adjustOxyLoss(src.occupant.getOxyLoss())
- src.occupant.parent.cancel_camera()
- del(src.occupant)
- if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA)
- for(var/obj/item/weapon/pinpointer/point in world)
- for(var/datum/mind/AI_mind in ticker.mode.malf_ai)
- var/mob/living/silicon/ai/A = AI_mind.current // the current mob the mind owns
- if(A.stat != DEAD)
- point.the_disk = A //The pinpointer tracks the AI back into its core.
-
- else
- src.occupant << "\red Primary core damaged, unable to return core processes."
- if(forced)
- src.occupant.loc = src.loc
- src.occupant.death()
- src.occupant.gib()
- for(var/obj/item/weapon/pinpointer/point in world)
- point.the_disk = null //the pinpointer will go back to pointing at the nuke disc.
-
-
-/obj/machinery/power/apc/proc/ion_act()
- //intended to be exactly the same as an AI malf attack
- if(!src.malfhack && src.z == 1)
- if(prob(3))
- src.locked = 1
- if (src.cell.charge > 0)
-// world << "\red blew APC in [src.loc.loc]"
- src.cell.charge = 0
- cell.corrupt()
- src.malfhack = 1
- update_icon()
- var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
- smoke.set_up(3, 0, src.loc)
- smoke.attach(src)
- smoke.start()
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(3, 1, src)
- s.start()
- for(var/mob/M in viewers(src))
- M.show_message("\red The [src.name] suddenly lets out a blast of smoke and some sparks!", 3, "\red You hear sizzling electronics.", 2)
-
-
-/obj/machinery/power/apc/surplus()
- if(terminal)
- return terminal.surplus()
- else
- return 0
-
-/obj/machinery/power/apc/add_load(var/amount)
- if(terminal && terminal.powernet)
- terminal.powernet.newload += amount
-
-/obj/machinery/power/apc/avail()
- if(terminal)
- return terminal.avail()
- else
- return 0
-
-/obj/machinery/power/apc/process()
-
- if(stat & (BROKEN|MAINT))
- return
- if(!area.requires_power)
- return
-
-
- /*
- if (equipment > 1) // off=0, off auto=1, on=2, on auto=3
- use_power(src.equip_consumption, EQUIP)
- if (lighting > 1) // off=0, off auto=1, on=2, on auto=3
- use_power(src.light_consumption, LIGHT)
- if (environ > 1) // off=0, off auto=1, on=2, on auto=3
- use_power(src.environ_consumption, ENVIRON)
-
- area.calc_lighting() */
-
- lastused_light = area.usage(LIGHT)
- lastused_equip = area.usage(EQUIP)
- lastused_environ = area.usage(ENVIRON)
- area.clear_usage()
-
- lastused_total = lastused_light + lastused_equip + lastused_environ
-
- //store states to update icon if any change
- var/last_lt = lighting
- var/last_eq = equipment
- var/last_en = environ
- var/last_ch = charging
-
- var/excess = surplus()
-
- if(!src.avail())
- main_status = 0
- else if(excess < 0)
- main_status = 1
- else
- main_status = 2
-
- var/perapc = 0
- if(terminal && terminal.powernet)
- perapc = terminal.powernet.perapc
-
- //if(debug)
- // world.log << "Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light] - Longterm: [longtermpower]"
-
- if(cell && !shorted)
-
-
- // draw power from cell as before
- var/cellused = min(cell.charge, CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell
- cell.use(cellused)
-
- if(excess > 0 || perapc > lastused_total) // if power excess, or enough anyway, recharge the cell
- // by the same amount just used
- cell.give(cellused)
- add_load(cellused/CELLRATE) // add the load used to recharge the cell
-
-
- else // no excess, and not enough per-apc
-
- if( (cell.charge/CELLRATE+perapc) >= lastused_total) // can we draw enough from cell+grid to cover last usage?
-
- cell.charge = min(cell.maxcharge, cell.charge + CELLRATE * perapc) //recharge with what we can
- add_load(perapc) // so draw what we can from the grid
- charging = 0
-
- else // not enough power available to run the last tick!
- charging = 0
- chargecount = 0
- // This turns everything off in the case that there is still a charge left on the battery, just not enough to run the room.
- equipment = autoset(equipment, 0)
- lighting = autoset(lighting, 0)
- environ = autoset(environ, 0)
-
-
- // set channels depending on how much charge we have left
-
- // Allow the APC to operate as normal if the cell can charge
- if(charging && longtermpower < 10)
- longtermpower += 1
- else if(longtermpower > -10)
- longtermpower -= 2
-
- if(cell.charge <= 0) // zero charge, turn all off
- equipment = autoset(equipment, 0)
- lighting = autoset(lighting, 0)
- environ = autoset(environ, 0)
- area.poweralert(0, src)
- else if(cell.percent() < 15 && longtermpower < 0) // <15%, turn off lighting & equipment
- equipment = autoset(equipment, 2)
- lighting = autoset(lighting, 2)
- environ = autoset(environ, 1)
- area.poweralert(0, src)
- else if(cell.percent() < 30 && longtermpower < 0) // <30%, turn off equipment
- equipment = autoset(equipment, 2)
- lighting = autoset(lighting, 1)
- environ = autoset(environ, 1)
- area.poweralert(0, src)
- else // otherwise all can be on
- equipment = autoset(equipment, 1)
- lighting = autoset(lighting, 1)
- environ = autoset(environ, 1)
- area.poweralert(1, src)
- if(cell.percent() > 75)
- area.poweralert(1, src)
-
- // now trickle-charge the cell
-
- if(chargemode && charging == 1 && operating)
- if(excess > 0) // check to make sure we have enough to charge
- // Max charge is perapc share, capped to cell capacity, or % per second constant (Whichever is smallest)
-/* var/ch = min(perapc, (cell.maxcharge - cell.charge), (cell.maxcharge*CHARGELEVEL))
- add_load(ch) // Removes the power we're taking from the grid
- cell.give(ch) // actually recharge the cell
-*/
- var/ch = min(perapc*CELLRATE, (cell.maxcharge - cell.charge), (cell.maxcharge*CHARGELEVEL))
- add_load(ch/CELLRATE) // Removes the power we're taking from the grid
- cell.give(ch) // actually recharge the cell
-
- else
- charging = 0 // stop charging
- chargecount = 0
-
- // show cell as fully charged if so
-
- if(cell.charge >= cell.maxcharge)
- charging = 2
-
- if(chargemode)
- if(!charging)
- if(excess > cell.maxcharge*CHARGELEVEL)
- chargecount++
- else
- chargecount = 0
-
- if(chargecount == 10)
-
- chargecount = 0
- charging = 1
-
- else // chargemode off
- charging = 0
- chargecount = 0
-
- else // no cell, switch everything off
-
- charging = 0
- chargecount = 0
- equipment = autoset(equipment, 0)
- lighting = autoset(lighting, 0)
- environ = autoset(environ, 0)
- area.poweralert(0, src)
-
- // update icon & area power if anything changed
-
- if(last_lt != lighting || last_eq != equipment || last_en != environ)
- queue_icon_update()
- update()
- else if (last_ch != charging)
- queue_icon_update()
-
-// val 0=off, 1=off(auto) 2=on 3=on(auto)
-// on 0=off, 1=on, 2=autooff
-
-obj/machinery/power/apc/proc/autoset(var/val, var/on)
- if(on==0)
- if(val==2) // if on, return off
- return 0
- else if(val==3) // if auto-on, return auto-off
- return 1
-
- else if(on==1)
- if(val==1) // if auto-off, return auto-on
- return 3
-
- else if(on==2)
- if(val==3) // if auto-on, return auto-off
- return 1
-
- return val
-
-// damage and destruction acts
-
-/obj/machinery/power/apc/meteorhit(var/obj/O as obj)
-
- set_broken()
- return
-
-/obj/machinery/power/apc/emp_act(severity)
- if(cell)
- cell.emp_act(severity)
- if(occupant)
- occupant.emp_act(severity)
- lighting = 0
- equipment = 0
- environ = 0
- spawn(600)
- equipment = 3
- environ = 3
- ..()
-
-/obj/machinery/power/apc/ex_act(severity)
-
- switch(severity)
- if(1.0)
- //set_broken() //now Del() do what we need
- if (cell)
- cell.ex_act(1.0) // more lags woohoo
- del(src)
- return
- if(2.0)
- if (prob(50))
- set_broken()
- if (cell && prob(50))
- cell.ex_act(2.0)
- if(3.0)
- if (prob(25))
- set_broken()
- if (cell && prob(25))
- cell.ex_act(3.0)
- return
-
-/obj/machinery/power/apc/blob_act()
- if (prob(75))
- set_broken()
- if (cell && prob(5))
- cell.blob_act()
-
-/obj/machinery/power/apc/proc/set_broken()
- if(malfai && operating)
- if (ticker.mode.config_tag == "malfunction")
- if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
- ticker.mode:apcs--
- stat |= BROKEN
- operating = 0
- if(occupant)
- malfvacate(1)
- update_icon()
- update()
-
-// overload all the lights in this APC area
-
-/obj/machinery/power/apc/proc/overload_lighting()
- if(/* !get_connection() || */ !operating || shorted)
- return
- if( cell && cell.charge>=20)
- cell.use(20);
- spawn(0)
- for(var/area/A in area.related)
- for(var/obj/machinery/light/L in A)
- L.on = 1
- L.broken()
- sleep(1)
-
-/obj/machinery/power/apc/Del()
- if(malfai && operating)
- if (ticker.mode.config_tag == "malfunction")
- if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
- ticker.mode:apcs--
- area.power_light = 0
- area.power_equip = 0
- area.power_environ = 0
- area.power_change()
- if(occupant)
- malfvacate(1)
- ..()
-
-/obj/machinery/power/apc/proc/shock(mob/user, prb)
- if(!prob(prb))
- return 0
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, src)
- s.start()
- if(isalien(user))
- return 0
- if (electrocute_mob(user, src, src))
- return 1
- else
- return 0
-
-/obj/machinery/power/apc/proc/setsubsystem(val)
- if(cell && cell.charge > 0)
- return (val==1) ? 0 : val
- else if(val == 3)
- return 1
- else
- return 0
-
+#define APC_WIRE_IDSCAN 1
+#define APC_WIRE_MAIN_POWER1 2
+#define APC_WIRE_MAIN_POWER2 3
+#define APC_WIRE_AI_CONTROL 4
+
+#define APC_UPDATE_ICON_COOLDOWN 200 // 20 seconds
+
+// the Area Power Controller (APC), formerly Power Distribution Unit (PDU)
+// one per area, needs wire conection to power network
+
+// controls power to devices in that area
+// may be opened to change power cell
+// three different channels (lighting/equipment/environ) - may each be set to on, off, or auto
+
+
+//NOTE: STUFF STOLEN FROM AIRLOCK.DM thx
+
+
+/obj/machinery/power/apc
+ name = "area power controller"
+ desc = "A control terminal for the area electrical systems."
+
+ icon_state = "apc0"
+ anchored = 1
+ use_power = 0
+ req_access = list(access_engine_equip)
+ var/area/area
+ var/areastring = null
+ var/obj/item/weapon/cell/cell
+ var/start_charge = 90 // initial cell charge %
+ var/cell_type = 2500 // 0=no cell, 1=regular, 2=high-cap (x5) <- old, now it's just 0=no cell, otherwise dictate cellcapacity by changing this value. 1 used to be 1000, 2 was 2500
+ var/opened = 0 //0=closed, 1=opened, 2=cover removed
+ var/shorted = 0
+ var/lighting = 3
+ var/equipment = 3
+ var/environ = 3
+ var/operating = 1
+ var/charging = 0
+ var/chargemode = 1
+ var/chargecount = 0
+ var/locked = 1
+ var/coverlocked = 1
+ var/aidisabled = 0
+ var/tdir = null
+ var/obj/machinery/power/terminal/terminal = null
+ var/lastused_light = 0
+ var/lastused_equip = 0
+ var/lastused_environ = 0
+ var/lastused_total = 0
+ var/main_status = 0
+ var/wiresexposed = 0
+ powernet = 0 // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :(
+ var/malfhack = 0 //New var for my changes to AI malf. --NeoFite
+ var/mob/living/silicon/ai/malfai = null //See above --NeoFite
+// luminosity = 1
+ var/has_electronics = 0 // 0 - none, 1 - plugged in, 2 - secured by screwdriver
+ var/overload = 1 //used for the Blackout malf module
+ var/beenhit = 0 // used for counting how many times it has been hit, used for Aliens at the moment
+ var/mob/living/silicon/ai/occupier = null
+ var/longtermpower = 10
+ var/updating_icon = 0
+ var/datum/wires/apc/wires = null
+ //var/debug = 0
+ var/auto_name = 0
+
+/obj/machinery/power/apc/updateDialog()
+ if (stat & (BROKEN|MAINT))
+ return
+ ..()
+
+/obj/machinery/power/apc/connect_to_network()
+ //Override because the APC does not directly connect to the network; it goes through a terminal.
+ //The terminal is what the power computer looks for anyway.
+ if(!terminal)
+ make_terminal()
+ if(terminal)
+ terminal.connect_to_network()
+
+/obj/machinery/power/apc/New(turf/loc, var/ndir, var/building=0)
+ ..()
+ wires = new(src)
+ // offset 24 pixels in direction of dir
+ // this allows the APC to be embedded in a wall, yet still inside an area
+ if (building)
+ dir = ndir
+ src.tdir = dir // to fix Vars bug
+ dir = SOUTH
+
+ if(auto_name)
+ name = "[get_area(src)] APC"
+
+ pixel_x = (src.tdir & 3)? 0 : (src.tdir == 4 ? 24 : -24)
+ pixel_y = (src.tdir & 3)? (src.tdir ==1 ? 24 : -24) : 0
+ if (building==0)
+ init()
+ else
+ area = src.loc.loc:master
+ opened = 1
+ operating = 0
+ name = "[area.name] APC"
+ stat |= MAINT
+ src.update_icon()
+ spawn(5)
+ src.update()
+
+
+
+/obj/machinery/power/apc/proc/make_terminal()
+ // create a terminal object at the same position as original turf loc
+ // wires will attach to this
+ terminal = new/obj/machinery/power/terminal(src.loc)
+ terminal.dir = tdir
+ terminal.master = src
+
+/obj/machinery/power/apc/proc/init()
+ has_electronics = 2 //installed and secured
+ // is starting with a power cell installed, create it and set its charge level
+ if(cell_type)
+ src.cell = new/obj/item/weapon/cell(src)
+ cell.maxcharge = cell_type // cell_type is maximum charge (old default was 1000 or 2500 (values one and two respectively)
+ cell.charge = start_charge * cell.maxcharge / 100.0 // (convert percentage to actual value)
+
+ var/area/A = src.loc.loc
+
+ //if area isn't specified use current
+ if(isarea(A) && src.areastring == null)
+ src.area = A
+ else
+ src.area = get_area_name(areastring)
+ update_icon()
+
+ make_terminal()
+
+ spawn(5)
+ src.update()
+
+/obj/machinery/power/apc/examine()
+ set src in oview(1)
+
+ if(usr /*&& !usr.stat*/)
+ ..()
+ if(stat & BROKEN)
+ usr << "Looks broken."
+ return
+ if(opened)
+ if(has_electronics && terminal)
+ usr << "The cover is [opened==2?"removed":"open"] and the power cell is [ cell ? "installed" : "missing"]."
+ else if (!has_electronics && terminal)
+ usr << "There are some wires but no any electronics."
+ else if (has_electronics && !terminal)
+ usr << "Electronics installed but not wired."
+ else /* if (!has_electronics && !terminal) */
+ usr << "There is no electronics nor connected wires."
+
+ else
+ if (stat & MAINT)
+ usr << "The cover is closed. Something wrong with it: it doesn't work."
+ else if (malfhack)
+ usr << "The cover is broken. It may be hard to force it open."
+ else
+ usr << "The cover is closed."
+
+
+// update the APC icon to show the three base states
+// also add overlays for indicator lights
+/obj/machinery/power/apc/update_icon()
+
+ overlays.Cut()
+ if(opened)
+ var/basestate = "apc[ cell ? "2" : "1" ]" // if opened, show cell if it's inserted
+ if (opened==1)
+ if (stat & (MAINT|BROKEN))
+ icon_state = "apcmaint" //disassembled APC cannot hold cell
+ else
+ icon_state = basestate
+ else if (opened == 2)
+ if ((stat & BROKEN) || malfhack )
+ icon_state = "[basestate]-b-nocover"
+ else /* if (emagged)*/
+ icon_state = "[basestate]-nocover"
+ else if (stat & BROKEN)
+ icon_state = "apc-b"
+ else if(emagged || malfai)
+ icon_state = "apcemag"
+ else if(wiresexposed)
+ icon_state = "apcewires"
+ else
+ icon_state = "apc0"
+ // if closed, update overlays for channel status
+ if(!(stat & (BROKEN|MAINT)))
+ overlays.Add("apcox-[locked]","apco3-[charging]") // 0=blue 1=red // 0=red, 1=yellow/black 2=green
+ if(operating)
+ overlays.Add("apco0-[equipment]","apco1-[lighting]","apco2-[environ]") // 0=red, 1=green, 2=blue
+
+// Used in process so it doesn't update the icon too much
+/obj/machinery/power/apc/proc/queue_icon_update()
+
+ if(!updating_icon)
+ updating_icon = 1
+ // Start the update
+ spawn(APC_UPDATE_ICON_COOLDOWN)
+ update_icon()
+ updating_icon = 0
+
+//attack with an item - open/close cover, insert cell, or (un)lock interface
+
+/obj/machinery/power/apc/attackby(obj/item/W, mob/user)
+
+ if (istype(user, /mob/living/silicon) && get_dist(src,user)>1)
+ return src.attack_hand(user)
+ if (istype(W, /obj/item/weapon/crowbar) && opened)
+ if (has_electronics==1)
+ if (terminal)
+ user << "\red Disconnect wires first."
+ return
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ user << "You are trying to remove the power control board..." //lpeters - fixed grammar issues
+ if(do_after(user, 50))
+ has_electronics = 0
+ if ((stat & BROKEN) || malfhack)
+ user.visible_message(\
+ "\red [user.name] has broken the power control board inside [src.name]!",\
+ "You broke the charred power control board and remove the remains.",
+ "You hear a crack!")
+ //ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0
+ else
+ user.visible_message(\
+ "\red [user.name] has removed the power control board from [src.name]!",\
+ "You remove the power control board.")
+ new /obj/item/weapon/module/power_control(loc)
+ else if (opened!=2) //cover isn't removed
+ opened = 0
+ update_icon()
+ else if (istype(W, /obj/item/weapon/crowbar) && !((stat & BROKEN) || malfhack) )
+ if(coverlocked && !(stat & MAINT))
+ user << "\red The cover is locked and cannot be opened."
+ return
+ else
+ opened = 1
+ update_icon()
+ else if (istype(W, /obj/item/weapon/cell) && opened) // trying to put a cell inside
+ if(cell)
+ user << "There is a power cell already installed."
+ return
+ else
+ if (stat & MAINT)
+ user << "\red There is no connector for your power cell."
+ return
+ user.drop_item()
+ W.loc = src
+ cell = W
+ user.visible_message(\
+ "\red [user.name] has inserted the power cell to [src.name]!",\
+ "You insert the power cell.")
+ chargecount = 0
+ update_icon()
+ else if (istype(W, /obj/item/weapon/screwdriver)) // haxing
+ if(opened)
+ if (cell)
+ user << "\red Close the APC first." //Less hints more mystery!
+ return
+ else
+ if (has_electronics==1 && terminal)
+ has_electronics = 2
+ stat &= ~MAINT
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You screw the circuit electronics into place."
+ else if (has_electronics==2)
+ has_electronics = 1
+ stat |= MAINT
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You unfasten the electronics."
+ else /* has_electronics==0 */
+ user << "\red There is nothing to secure."
+ return
+ update_icon()
+ else if(emagged)
+ user << "The interface is broken."
+ else
+ wiresexposed = !wiresexposed
+ user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]"
+ update_icon()
+
+ else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card
+ if(emagged)
+ user << "The interface is broken."
+ else if(opened)
+ user << "You must close the cover to swipe an ID card."
+ else if(wiresexposed)
+ user << "You must close the panel"
+ else if(stat & (BROKEN|MAINT))
+ user << "Nothing happens."
+ else
+ if(src.allowed(usr) && !isWireCut(APC_WIRE_IDSCAN))
+ locked = !locked
+ user << "You [ locked ? "lock" : "unlock"] the APC interface."
+ update_icon()
+ else
+ user << "\red Access denied."
+ else if (istype(W, /obj/item/weapon/card/emag) && !(emagged || malfhack)) // trying to unlock with an emag card
+ if(opened)
+ user << "You must close the cover to swipe an ID card."
+ else if(wiresexposed)
+ user << "You must close the panel first"
+ else if(stat & (BROKEN|MAINT))
+ user << "Nothing happens."
+ else
+ flick("apc-spark", src)
+ if (do_after(user,6))
+ if(prob(50))
+ emagged = 1
+ locked = 0
+ user << "You emag the APC interface."
+ update_icon()
+ else
+ user << "You fail to [ locked ? "unlock" : "lock"] the APC interface."
+ else if (istype(W, /obj/item/stack/cable_coil) && !terminal && opened && has_electronics!=2)
+ if (src.loc:intact)
+ user << "\red You must remove the floor plating in front of the APC first."
+ return
+ var/obj/item/stack/cable_coil/C = W
+ if(C.amount < 10)
+ user << "\red You need more wires."
+ return
+ user << "You start adding cables to the APC frame..."
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ if(do_after(user, 20) && C.amount >= 10)
+ var/turf/T = get_turf(src)
+ var/obj/structure/cable/N = T.get_cable_node()
+ if (prob(50) && electrocute_mob(usr, N, N))
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+ return
+ C.use(10)
+ user.visible_message(\
+ "\red [user.name] has added cables to the APC frame!",\
+ "You add cables to the APC frame.")
+ make_terminal()
+ terminal.connect_to_network()
+ else if (istype(W, /obj/item/weapon/wirecutters) && terminal && opened && has_electronics!=2)
+ if (src.loc:intact)
+ user << "\red You must remove the floor plating in front of the APC first."
+ return
+ user << "You begin to cut the cables..."
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ if(do_after(user, 50))
+ if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal))
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+ return
+ new /obj/item/stack/cable_coil(loc,10)
+ user.visible_message(\
+ "\red [user.name] cut the cables and dismantled the power terminal.",\
+ "You cut the cables and dismantle the power terminal.")
+ del(terminal)
+ else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack))
+ user << "You trying to insert the power control board into the frame..."
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ if(do_after(user, 10))
+ has_electronics = 1
+ user << "You place the power control board inside the frame."
+ del(W)
+ else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && ((stat & BROKEN) || malfhack))
+ user << "\red You cannot put the board inside, the frame is damaged."
+ return
+ else if (istype(W, /obj/item/weapon/weldingtool) && opened && has_electronics==0 && !terminal)
+ var/obj/item/weapon/weldingtool/WT = W
+ if (WT.get_fuel() < 3)
+ user << "\blue You need more welding fuel to complete this task."
+ return
+ user << "You start welding the APC frame..."
+ playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
+ if(do_after(user, 50))
+ if(!src || !WT.remove_fuel(3, user)) return
+ if (emagged || malfhack || (stat & BROKEN) || opened==2)
+ new /obj/item/stack/sheet/metal(loc)
+ user.visible_message(\
+ "\red [src] has been cut apart by [user.name] with the weldingtool.",\
+ "You disassembled the broken APC frame.",\
+ "\red You hear welding.")
+ else
+ new /obj/item/apc_frame(loc)
+ user.visible_message(\
+ "\red [src] has been cut from the wall by [user.name] with the weldingtool.",\
+ "You cut the APC frame from the wall.",\
+ "\red You hear welding.")
+ del(src)
+ return
+ else if (istype(W, /obj/item/apc_frame) && opened && emagged)
+ emagged = 0
+ if (opened==2)
+ opened = 1
+ user.visible_message(\
+ "\red [user.name] has replaced the damaged APC frontal panel with a new one.",\
+ "You replace the damaged APC frontal panel with a new one.")
+ del(W)
+ update_icon()
+ else if (istype(W, /obj/item/apc_frame) && opened && ((stat & BROKEN) || malfhack))
+ if (has_electronics)
+ user << "You cannot repair this APC until you remove the electronics still inside."
+ return
+ user << "You begin to replace the damaged APC frame..."
+ if(do_after(user, 50))
+ user.visible_message(\
+ "\red [user.name] has replaced the damaged APC frame with new one.",\
+ "You replace the damaged APC frame with new one.")
+ del(W)
+ stat &= ~BROKEN
+ malfai = null
+ malfhack = 0
+ if (opened==2)
+ opened = 1
+ update_icon()
+ else
+ if ( ((stat & BROKEN) || malfhack) \
+ && !opened \
+ && W.force >= 5 \
+ && W.w_class >= 3.0 \
+ && prob(20) )
+ opened = 2
+ user.visible_message("\red The APC cover was knocked down with the [W.name] by [user.name]!", \
+ "\red You knock down the APC cover with your [W.name]!", \
+ "You hear bang")
+ update_icon()
+ else
+ if (istype(user, /mob/living/silicon))
+ return src.attack_hand(user)
+ if (!opened && wiresexposed && \
+ (istype(W, /obj/item/device/multitool) || \
+ istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/device/assembly/signaler)))
+ return src.attack_hand(user)
+ user.visible_message("\red The [src.name] has been hit with the [W.name] by [user.name]!", \
+ "\red You hit the [src.name] with your [W.name]!", \
+ "You hear bang")
+
+// attack with hand - remove cell (if cover open) or interact with the APC
+
+/obj/machinery/power/apc/attack_hand(mob/user)
+// if (!can_use(user)) This already gets called in interact() and in topic()
+// return
+ if(!user)
+ return
+ src.add_fingerprint(user)
+ if(usr == user && opened && (!issilicon(user)))
+ if(cell)
+ user.put_in_hands(cell)
+ cell.add_fingerprint(user)
+ cell.updateicon()
+
+ src.cell = null
+ user.visible_message("\red [user.name] removes the power cell from [src.name]!", "You remove the power cell.")
+ //user << "You remove the power cell."
+ charging = 0
+ src.update_icon()
+ return
+ if(stat & (BROKEN|MAINT))
+ return
+ // do APC interaction
+ src.interact(user)
+
+/obj/machinery/power/apc/attack_alien(mob/living/carbon/alien/humanoid/user)
+ if(!user)
+ return
+ user.visible_message("\red [user.name] slashes at the [src.name]!", "\blue You slash at the [src.name]!")
+ playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1)
+
+ var/allcut = wires.IsAllCut()
+
+ if(beenhit >= pick(3, 4) && wiresexposed != 1)
+ wiresexposed = 1
+ src.update_icon()
+ src.visible_message("\red The [src.name]'s cover flies open, exposing the wires!")
+
+ else if(wiresexposed == 1 && allcut == 0)
+ wires.CutAll()
+ src.update_icon()
+ src.visible_message("\red The [src.name]'s wires are shredded!")
+ else
+ beenhit += 1
+ return
+
+
+/obj/machinery/power/apc/interact(mob/user)
+ if(!user)
+ return
+
+ if(wiresexposed /*&& (!istype(user, /mob/living/silicon))*/) //Commented out the typecheck to allow engiborgs to repair damaged apcs.
+ wires.Interact(user)
+
+ return ui_interact(user)
+
+
+/obj/machinery/power/apc/proc/get_malf_status(mob/user)
+ if (ticker && ticker.mode && (user.mind in ticker.mode.malf_ai) && istype(user, /mob/living/silicon/ai))
+ if (src.malfai == (user:parent ? user:parent : user))
+ if (src.occupier == user)
+ return 3 // 3 = User is shunted in this APC
+ else if (istype(user.loc, /obj/machinery/power/apc))
+ return 4 // 4 = User is shunted in another APC
+ else
+ return 2 // 2 = APC hacked by user, and user is in its core.
+ else
+ return 1 // 1 = APC not hacked.
+ else
+ return 0 // 0 = User is not a Malf AI
+
+
+/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
+ if(!user)
+ return
+
+ var/list/data = list(
+ "locked" = locked,
+ "isOperating" = operating,
+ "externalPower" = main_status,
+ "powerCellStatus" = cell ? cell.percent() : null,
+ "chargeMode" = chargemode,
+ "chargingStatus" = charging,
+ "totalLoad" = lastused_equip + lastused_light + lastused_environ,
+ "coverLocked" = coverlocked,
+ "siliconUser" = istype(user, /mob/living/silicon),
+ "malfStatus" = get_malf_status(user),
+
+ "powerChannels" = list(
+ list(
+ "title" = "Equipment",
+ "powerLoad" = lastused_equip,
+ "status" = equipment,
+ "topicParams" = list(
+ "auto" = list("eqp" = 3),
+ "on" = list("eqp" = 2),
+ "off" = list("eqp" = 1)
+ )
+ ),
+ list(
+ "title" = "Lighting",
+ "powerLoad" = lastused_light,
+ "status" = lighting,
+ "topicParams" = list(
+ "auto" = list("lgt" = 3),
+ "on" = list("lgt" = 2),
+ "off" = list("lgt" = 1)
+ )
+ ),
+ list(
+ "title" = "Environment",
+ "powerLoad" = lastused_environ,
+ "status" = environ,
+ "topicParams" = list(
+ "auto" = list("env" = 3),
+ "on" = list("env" = 2),
+ "off" = list("env" = 1)
+ )
+ )
+ )
+ )
+
+ // update the ui if it exists, returns null if no ui is passed/found
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
+ if (!ui)
+ // the ui does not exist, so we'll create a new() one
+ // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
+ ui = new(user, src, ui_key, "apc.tmpl", "[area.name] - APC", 520, data["siliconUser"] ? 465 : 420)
+ // when the ui is first opened this is the data it will use
+ ui.set_initial_data(data)
+ // open the new ui window
+ ui.open()
+ // auto update every Master Controller tick
+ ui.set_auto_update(1)
+
+/obj/machinery/power/apc/proc/report()
+ return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])"
+
+/obj/machinery/power/apc/proc/update()
+ if(operating && !shorted)
+ area.power_light = (lighting > 1)
+ area.power_equip = (equipment > 1)
+ area.power_environ = (environ > 1)
+// if (area.name == "AI Chamber")
+// spawn(10)
+// world << " [area.name] [area.power_equip]"
+ else
+ area.power_light = 0
+ area.power_equip = 0
+ area.power_environ = 0
+// if (area.name == "AI Chamber")
+// world << "[area.power_equip]"
+ area.power_change()
+
+/obj/machinery/power/apc/proc/isWireCut(var/wireIndex)
+ return wires.IsIndexCut(wireIndex)
+
+
+/obj/machinery/power/apc/proc/can_use(mob/user as mob, var/loud = 0) //used by attack_hand() and Topic()
+ if (user.stat)
+ user << "\red You must be conscious to use this [src]!"
+ return 0
+ if(!user.client)
+ return 0
+ if ( ! (istype(user, /mob/living/carbon/human) || \
+ istype(user, /mob/living/silicon) || \
+ istype(user, /mob/living/carbon/monkey) /*&& ticker && ticker.mode.name == "monkey"*/) )
+ user << "\red You don't have the dexterity to use this [src]!"
+ return 0
+ if(user.restrained())
+ user << "\red You must have free hands to use this [src]"
+ return 0
+ if(user.lying)
+ user << "\red You must stand to use this [src]!"
+ return 0
+ if (istype(user, /mob/living/silicon))
+ var/mob/living/silicon/ai/AI = user
+ var/mob/living/silicon/robot/robot = user
+ if ( \
+ src.aidisabled || \
+ malfhack && istype(malfai) && \
+ ( \
+ (istype(AI) && (malfai!=AI && malfai != AI.parent)) || \
+ (istype(robot) && (robot in malfai.connected_robots)) \
+ ) \
+ )
+ if(!loud)
+ user << "\red \The [src] have AI control disabled!"
+ return 0
+ else
+ if ((!in_range(src, user) || !istype(src.loc, /turf)))
+ return 0
+
+ var/mob/living/carbon/human/H = user
+ if (istype(H))
+ if(H.getBrainLoss() >= 60)
+ for(var/mob/M in viewers(src, null))
+ M << "\red [H] stares cluelessly at [src] and drools."
+ return 0
+ else if(prob(H.getBrainLoss()))
+ user << "\red You momentarily forget how to use [src]."
+ return 0
+ return 1
+
+/obj/machinery/power/apc/Topic(href, href_list)
+ if(..())
+ return 0
+
+ if(!can_use(usr, 1))
+ return 0
+
+ if (href_list["lock"])
+ coverlocked = !coverlocked
+
+ else if (href_list["breaker"])
+ toggle_breaker()
+
+ else if (href_list["cmode"])
+ chargemode = !chargemode
+ if(!chargemode)
+ charging = 0
+ update_icon()
+
+ else if (href_list["eqp"])
+ var/val = text2num(href_list["eqp"])
+ equipment = setsubsystem(val)
+ update_icon()
+ update()
+
+ else if (href_list["lgt"])
+ var/val = text2num(href_list["lgt"])
+ lighting = setsubsystem(val)
+ update_icon()
+ update()
+
+ else if (href_list["env"])
+ var/val = text2num(href_list["env"])
+ environ = setsubsystem(val)
+ update_icon()
+ update()
+
+ else if (href_list["overload"])
+ if(istype(usr, /mob/living/silicon))
+ src.overload_lighting()
+
+ else if (href_list["malfhack"])
+ var/mob/living/silicon/ai/malfai = usr
+ if(get_malf_status(malfai)==1)
+ if (malfai.malfhacking)
+ malfai << "You are already hacking an APC."
+ return 1
+ malfai << "Beginning override of APC systems. This takes some time, and you cannot perform other actions during the process."
+ malfai.malfhack = src
+ malfai.malfhacking = 1
+ sleep(600)
+ if(src)
+ if (!src.aidisabled)
+ malfai.malfhack = null
+ malfai.malfhacking = 0
+ locked = 1
+ if (ticker.mode.config_tag == "malfunction")
+ if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
+ ticker.mode:apcs++
+ if(usr:parent)
+ src.malfai = usr:parent
+ else
+ src.malfai = usr
+ malfai << "Hack complete. The APC is now under your exclusive control."
+ update_icon()
+
+ else if (href_list["occupyapc"])
+ if(get_malf_status(usr))
+ malfoccupy(usr)
+
+ else if (href_list["deoccupyapc"])
+ if(get_malf_status(usr))
+ malfvacate()
+
+ else if (href_list["toggleaccess"])
+ if(istype(usr, /mob/living/silicon))
+ if(emagged || (stat & (BROKEN|MAINT)))
+ usr << "The APC does not respond to the command."
+ else
+ locked = !locked
+ update_icon()
+
+ return 1
+
+/obj/machinery/power/apc/proc/toggle_breaker()
+ operating = !operating
+
+ if(malfai)
+ if (ticker.mode.config_tag == "malfunction")
+ if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
+ operating ? ticker.mode:apcs++ : ticker.mode:apcs--
+
+ src.update()
+ update_icon()
+
+/obj/machinery/power/apc/proc/malfoccupy(var/mob/living/silicon/ai/malf)
+ if(!istype(malf))
+ return
+ if(istype(malf.loc, /obj/machinery/power/apc)) // Already in an APC
+ malf << "You must evacuate your current apc first."
+ return
+ if(!malf.can_shunt)
+ malf << "You cannot shunt."
+ return
+ if(src.z != 1)
+ return
+ src.occupier = new /mob/living/silicon/ai(src,malf.laws,null,1)
+ src.occupier.adjustOxyLoss(malf.getOxyLoss())
+ if(!findtext(src.occupier.name,"APC Copy"))
+ src.occupier.name = "[malf.name] APC Copy"
+ if(malf.parent)
+ src.occupier.parent = malf.parent
+ else
+ src.occupier.parent = malf
+ malf.mind.transfer_to(src.occupier)
+ src.occupier.eyeobj.name = "[src.occupier.name] (AI Eye)"
+ if(malf.parent)
+ del(malf)
+ src.occupier.verbs += /mob/living/silicon/ai/proc/corereturn
+ src.occupier.verbs += /datum/game_mode/malfunction/proc/takeover
+ src.occupier.cancel_camera()
+ if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA)
+ for(var/obj/item/weapon/pinpointer/point in world)
+ point.the_disk = src //the pinpointer will detect the shunted AI
+
+
+/obj/machinery/power/apc/proc/malfvacate(var/forced)
+ if(!src.occupier)
+ return
+ if(src.occupier.parent && src.occupier.parent.stat != 2)
+ src.occupier.mind.transfer_to(src.occupier.parent)
+ src.occupier.parent.adjustOxyLoss(src.occupier.getOxyLoss())
+ src.occupier.parent.cancel_camera()
+ del(src.occupier)
+ if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA)
+ for(var/obj/item/weapon/pinpointer/point in world)
+ for(var/datum/mind/AI_mind in ticker.mode.malf_ai)
+ var/mob/living/silicon/ai/A = AI_mind.current // the current mob the mind owns
+ if(A.stat != DEAD)
+ point.the_disk = A //The pinpointer tracks the AI back into its core.
+
+ else
+ src.occupier << "\red Primary core damaged, unable to return core processes."
+ if(forced)
+ src.occupier.loc = src.loc
+ src.occupier.death()
+ src.occupier.gib()
+ for(var/obj/item/weapon/pinpointer/point in world)
+ point.the_disk = null //the pinpointer will go back to pointing at the nuke disc.
+
+
+/obj/machinery/power/apc/proc/ion_act()
+ //intended to be exactly the same as an AI malf attack
+ if(!src.malfhack && src.z == 1)
+ if(prob(3))
+ src.locked = 1
+ if (src.cell.charge > 0)
+// world << "\red blew APC in [src.loc.loc]"
+ src.cell.charge = 0
+ cell.corrupt()
+ src.malfhack = 1
+ update_icon()
+ var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
+ smoke.set_up(3, 0, src.loc)
+ smoke.attach(src)
+ smoke.start()
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(3, 1, src)
+ s.start()
+ for(var/mob/M in viewers(src))
+ M.show_message("\red The [src.name] suddenly lets out a blast of smoke and some sparks!", 3, "\red You hear sizzling electronics.", 2)
+
+
+/obj/machinery/power/apc/surplus()
+ if(terminal)
+ return terminal.surplus()
+ else
+ return 0
+
+/obj/machinery/power/apc/add_load(var/amount)
+ if(terminal && terminal.powernet)
+ terminal.powernet.newload += amount
+
+/obj/machinery/power/apc/avail()
+ if(terminal)
+ return terminal.avail()
+ else
+ return 0
+
+/obj/machinery/power/apc/process()
+
+ if(stat & (BROKEN|MAINT))
+ return
+ if(!area.requires_power)
+ return
+
+
+ /*
+ if (equipment > 1) // off=0, off auto=1, on=2, on auto=3
+ use_power(src.equip_consumption, EQUIP)
+ if (lighting > 1) // off=0, off auto=1, on=2, on auto=3
+ use_power(src.light_consumption, LIGHT)
+ if (environ > 1) // off=0, off auto=1, on=2, on auto=3
+ use_power(src.environ_consumption, ENVIRON)
+
+ area.calc_lighting() */
+
+ lastused_light = area.usage(LIGHT)
+ lastused_equip = area.usage(EQUIP)
+ lastused_environ = area.usage(ENVIRON)
+ area.clear_usage()
+
+ lastused_total = lastused_light + lastused_equip + lastused_environ
+
+ //store states to update icon if any change
+ var/last_lt = lighting
+ var/last_eq = equipment
+ var/last_en = environ
+ var/last_ch = charging
+
+ var/excess = surplus()
+
+ if(!src.avail())
+ main_status = 0
+ else if(excess < 0)
+ main_status = 1
+ else
+ main_status = 2
+
+ var/perapc = 0
+ if(terminal && terminal.powernet)
+ perapc = terminal.powernet.perapc
+
+ //if(debug)
+ // world.log << "Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light] - Longterm: [longtermpower]"
+
+ if(cell && !shorted)
+
+
+ // draw power from cell as before
+ var/cellused = min(cell.charge, CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell
+ cell.use(cellused)
+
+ if(excess > 0 || perapc > lastused_total) // if power excess, or enough anyway, recharge the cell
+ // by the same amount just used
+ cell.give(cellused)
+ add_load(cellused/CELLRATE) // add the load used to recharge the cell
+
+
+ else // no excess, and not enough per-apc
+
+ if( (cell.charge/CELLRATE+perapc) >= lastused_total) // can we draw enough from cell+grid to cover last usage?
+
+ cell.charge = min(cell.maxcharge, cell.charge + CELLRATE * perapc) //recharge with what we can
+ add_load(perapc) // so draw what we can from the grid
+ charging = 0
+
+ else // not enough power available to run the last tick!
+ charging = 0
+ chargecount = 0
+ // This turns everything off in the case that there is still a charge left on the battery, just not enough to run the room.
+ equipment = autoset(equipment, 0)
+ lighting = autoset(lighting, 0)
+ environ = autoset(environ, 0)
+
+
+ // set channels depending on how much charge we have left
+
+ // Allow the APC to operate as normal if the cell can charge
+ if(charging && longtermpower < 10)
+ longtermpower += 1
+ else if(longtermpower > -10)
+ longtermpower -= 2
+
+ if(cell.charge <= 0) // zero charge, turn all off
+ equipment = autoset(equipment, 0)
+ lighting = autoset(lighting, 0)
+ environ = autoset(environ, 0)
+ area.poweralert(0, src)
+ else if(cell.percent() < 15 && longtermpower < 0) // <15%, turn off lighting & equipment
+ equipment = autoset(equipment, 2)
+ lighting = autoset(lighting, 2)
+ environ = autoset(environ, 1)
+ area.poweralert(0, src)
+ else if(cell.percent() < 30 && longtermpower < 0) // <30%, turn off equipment
+ equipment = autoset(equipment, 2)
+ lighting = autoset(lighting, 1)
+ environ = autoset(environ, 1)
+ area.poweralert(0, src)
+ else // otherwise all can be on
+ equipment = autoset(equipment, 1)
+ lighting = autoset(lighting, 1)
+ environ = autoset(environ, 1)
+ area.poweralert(1, src)
+ if(cell.percent() > 75)
+ area.poweralert(1, src)
+
+ // now trickle-charge the cell
+
+ if(chargemode && charging == 1 && operating)
+ if(excess > 0) // check to make sure we have enough to charge
+ // Max charge is perapc share, capped to cell capacity, or % per second constant (Whichever is smallest)
+/* var/ch = min(perapc, (cell.maxcharge - cell.charge), (cell.maxcharge*CHARGELEVEL))
+ add_load(ch) // Removes the power we're taking from the grid
+ cell.give(ch) // actually recharge the cell
+*/
+ var/ch = min(perapc*CELLRATE, (cell.maxcharge - cell.charge), (cell.maxcharge*CHARGELEVEL))
+ add_load(ch/CELLRATE) // Removes the power we're taking from the grid
+ cell.give(ch) // actually recharge the cell
+
+ else
+ charging = 0 // stop charging
+ chargecount = 0
+
+ // show cell as fully charged if so
+
+ if(cell.charge >= cell.maxcharge)
+ charging = 2
+
+ if(chargemode)
+ if(!charging)
+ if(excess > cell.maxcharge*CHARGELEVEL)
+ chargecount++
+ else
+ chargecount = 0
+
+ if(chargecount == 10)
+
+ chargecount = 0
+ charging = 1
+
+ else // chargemode off
+ charging = 0
+ chargecount = 0
+
+ else // no cell, switch everything off
+
+ charging = 0
+ chargecount = 0
+ equipment = autoset(equipment, 0)
+ lighting = autoset(lighting, 0)
+ environ = autoset(environ, 0)
+ area.poweralert(0, src)
+
+ // update icon & area power if anything changed
+
+ if(last_lt != lighting || last_eq != equipment || last_en != environ)
+ queue_icon_update()
+ update()
+ else if (last_ch != charging)
+ queue_icon_update()
+
+// val 0=off, 1=off(auto) 2=on 3=on(auto)
+// on 0=off, 1=on, 2=autooff
+
+obj/machinery/power/apc/proc/autoset(var/val, var/on)
+ if(on==0)
+ if(val==2) // if on, return off
+ return 0
+ else if(val==3) // if auto-on, return auto-off
+ return 1
+
+ else if(on==1)
+ if(val==1) // if auto-off, return auto-on
+ return 3
+
+ else if(on==2)
+ if(val==3) // if auto-on, return auto-off
+ return 1
+
+ return val
+
+// damage and destruction acts
+
+/obj/machinery/power/apc/meteorhit(var/obj/O as obj)
+
+ set_broken()
+ return
+
+/obj/machinery/power/apc/emp_act(severity)
+ if(cell)
+ cell.emp_act(severity)
+ if(occupier)
+ occupier.emp_act(severity)
+ lighting = 0
+ equipment = 0
+ environ = 0
+ spawn(600)
+ equipment = 3
+ environ = 3
+ ..()
+
+/obj/machinery/power/apc/ex_act(severity)
+
+ switch(severity)
+ if(1.0)
+ //set_broken() //now Del() do what we need
+ if (cell)
+ cell.ex_act(1.0) // more lags woohoo
+ del(src)
+ return
+ if(2.0)
+ if (prob(50))
+ set_broken()
+ if (cell && prob(50))
+ cell.ex_act(2.0)
+ if(3.0)
+ if (prob(25))
+ set_broken()
+ if (cell && prob(25))
+ cell.ex_act(3.0)
+ return
+
+/obj/machinery/power/apc/blob_act()
+ if (prob(75))
+ set_broken()
+ if (cell && prob(5))
+ cell.blob_act()
+
+/obj/machinery/power/apc/proc/set_broken()
+ if(malfai && operating)
+ if (ticker.mode.config_tag == "malfunction")
+ if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
+ ticker.mode:apcs--
+ stat |= BROKEN
+ operating = 0
+ if(occupier)
+ malfvacate(1)
+ update_icon()
+ update()
+
+// overload all the lights in this APC area
+
+/obj/machinery/power/apc/proc/overload_lighting()
+ if(/* !get_connection() || */ !operating || shorted)
+ return
+ if( cell && cell.charge>=20)
+ cell.use(20);
+ spawn(0)
+ for(var/area/A in area.related)
+ for(var/obj/machinery/light/L in A)
+ L.on = 1
+ L.broken()
+ sleep(1)
+
+/obj/machinery/power/apc/Del()
+ if(malfai && operating)
+ if (ticker.mode.config_tag == "malfunction")
+ if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
+ ticker.mode:apcs--
+ area.power_light = 0
+ area.power_equip = 0
+ area.power_environ = 0
+ area.power_change()
+ if(occupier)
+ malfvacate(1)
+ ..()
+
+/obj/machinery/power/apc/proc/shock(mob/user, prb)
+ if(!prob(prb))
+ return 0
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+ if(isalien(user))
+ return 0
+ if (electrocute_mob(user, src, src))
+ return 1
+ else
+ return 0
+
+/obj/machinery/power/apc/proc/setsubsystem(val)
+ if(cell && cell.charge > 0)
+ return (val==1) ? 0 : val
+ else if(val == 3)
+ return 1
+ else
+ return 0
+
#undef APC_UPDATE_ICON_COOLDOWN
\ No newline at end of file
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 7aedac1d3be..e3c5ff707e5 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -1,622 +1,640 @@
-// attach a wire to a power machine - leads from the turf you are standing on
-
-/obj/machinery/power/attackby(obj/item/weapon/W, mob/user)
-
- if(istype(W, /obj/item/weapon/cable_coil))
-
- var/obj/item/weapon/cable_coil/coil = W
-
- var/turf/T = user.loc
-
- if(T.intact || !istype(T, /turf/simulated/floor))
- return
-
- if(get_dist(src, user) > 1)
- return
-
- if(!directwired) // only for attaching to directwired machines
- return
-
- coil.turf_place(T, user)
- return
- else
- ..()
- return
-
-/obj/structure/cable
- level = 1
- anchored =1
- var/datum/powernet/powernet
- name = "power cable"
- desc = "A flexible superconducting cable for heavy-duty power transfer"
- icon = 'icons/obj/power_cond/power_cond_red.dmi'
- icon_state = "0-1"
- var/d1 = 0
- var/d2 = 1
- layer = 2.44 //Just below unary stuff, which is at 2.45 and above pipes, which are at 2.4
- var/cable_color = "red"
- var/obj/structure/powerswitch/power_switch
-
-/obj/structure/cable/yellow
- cable_color = "yellow"
- icon = 'icons/obj/power_cond/power_cond_yellow.dmi'
-
-/obj/structure/cable/green
- cable_color = "green"
- icon = 'icons/obj/power_cond/power_cond_green.dmi'
-
-/obj/structure/cable/blue
- cable_color = "blue"
- icon = 'icons/obj/power_cond/power_cond_blue.dmi'
-
-/obj/structure/cable/pink
- cable_color = "pink"
- icon = 'icons/obj/power_cond/power_cond_pink.dmi'
-
-/obj/structure/cable/orange
- cable_color = "orange"
- icon = 'icons/obj/power_cond/power_cond_orange.dmi'
-
-/obj/structure/cable/cyan
- cable_color = "cyan"
- icon = 'icons/obj/power_cond/power_cond_cyan.dmi'
-
-/obj/structure/cable/white
- cable_color = "white"
- icon = 'icons/obj/power_cond/power_cond_white.dmi'
-
-// the power cable object
-
-/obj/structure/cable/New()
- ..()
-
-
- // 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 ) )
-
- var/turf/T = src.loc // hide if turf is not intact
-
- if(level==1) hide(T.intact)
- cable_list += src
-
-
-/obj/structure/cable/Del() // called when a cable is deleted
- if(!defer_powernet_rebuild) // set if network will be rebuilt manually
- if(powernet)
- powernet.cut_cable(src) // update the powernets
- cable_list -= src
- ..() // then go ahead and delete the cable
-
-/obj/structure/cable/hide(var/i)
-
- if(level == 1 && istype(loc, /turf))
- invisibility = i ? 101 : 0
- updateicon()
-
-/obj/structure/cable/proc/updateicon()
- if(invisibility)
- icon_state = "[d1]-[d2]-f"
- else
- icon_state = "[d1]-[d2]"
-
-
-// returns the powernet this cable belongs to
-/obj/structure/cable/proc/get_powernet() //TODO: remove this as it is obsolete
- return powernet
-
-/obj/structure/cable/attack_tk(mob/user)
- return
-
-/obj/structure/cable/attackby(obj/item/W, mob/user)
-
- var/turf/T = src.loc
- if(T.intact)
- return
-
- if(istype(W, /obj/item/weapon/wirecutters))
-
-// if(power_switch)
-// user << "\red This piece of cable is tied to a power switch. Flip the switch to remove it."
-// return
-
- if (shock(user, 50))
- return
-
- if(src.d1) // 0-X cables are 1 unit, X-X cables are 2 units long
- new/obj/item/weapon/cable_coil(T, 2, cable_color)
- else
- new/obj/item/weapon/cable_coil(T, 1, cable_color)
-
- for(var/mob/O in viewers(src, null))
- O.show_message("\red [user] cuts the cable.", 1)
-
- investigate_log("was cut by [key_name(usr, usr.client)] in [user.loc.loc]","wires")
-
- del(src)
- return
-
-
- else if(istype(W, /obj/item/weapon/cable_coil))
- var/obj/item/weapon/cable_coil/coil = W
- coil.cable_join(src, user)
-
- else if(istype(W, /obj/item/device/multitool))
-
- var/datum/powernet/PN = get_powernet() // find the powernet
-
- if(PN && (PN.avail > 0)) // is it powered?
- user << "\red [PN.avail]W in power network."
-
- else
- user << "\red The cable is not powered."
-
- shock(user, 5, 0.2)
-
- else
- if (W.flags & CONDUCT)
- shock(user, 50, 0.7)
-
- src.add_fingerprint(user)
-
-// shock the user with probability prb
-
-/obj/structure/cable/proc/shock(mob/user, prb, var/siemens_coeff = 1.0)
- if(!prob(prb))
- return 0
- if (electrocute_mob(user, powernet, src, siemens_coeff))
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, src)
- s.start()
- return 1
- else
- return 0
-
-/obj/structure/cable/ex_act(severity)
- switch(severity)
- if(1.0)
- del(src)
- if(2.0)
- if (prob(50))
- new/obj/item/weapon/cable_coil(src.loc, src.d1 ? 2 : 1, cable_color)
- del(src)
-
- if(3.0)
- if (prob(25))
- new/obj/item/weapon/cable_coil(src.loc, src.d1 ? 2 : 1, cable_color)
- del(src)
- return
-
-// the cable coil object, used for laying cable
-
-#define MAXCOIL 30
-/obj/item/weapon/cable_coil
- name = "cable coil"
- icon = 'icons/obj/power.dmi'
- icon_state = "coil_red"
- item_state = "coil_red"
- var/amount = MAXCOIL
- item_color = "red"
- desc = "A coil of power cable."
- throwforce = 10
- w_class = 2.0
- throw_speed = 2
- throw_range = 5
- m_amt = 50
- g_amt = 20
- flags = CONDUCT
- slot_flags = SLOT_BELT
- attack_verb = list("whipped", "lashed", "disciplined", "flogged")
-
- suicide_act(mob/user)
- if(locate(/obj/structure/stool) in user.loc)
- viewers(user) << "[user] is making a noose with the [src.name]! It looks like \he's trying to commit suicide."
- else
- viewers(user) << "[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide."
- return(OXYLOSS)
-
-
-/obj/item/weapon/cable_coil/attack(mob/living/carbon/human/H, mob/user)
- var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting))
- if(istype(H))
- if(affecting.status == ORGAN_ROBOTIC)
- src.item_heal_robotic(H, user, 0, 30)
- src.use(1)
- return
- else
- return ..()
- else
- return ..()
-
-
-/obj/item/weapon/cable_coil/New(loc, length = MAXCOIL, var/param_color = null)
- ..()
- src.amount = length
- if (param_color)
- item_color = param_color
- pixel_x = rand(-2,2)
- pixel_y = rand(-2,2)
- update_icon()
-
-/obj/item/weapon/cable_coil/update_icon()
- if (!item_color)
- item_color = pick("red", "yellow", "blue", "green")
- if(amount == 1)
- icon_state = "coil_[item_color]1"
- name = "cable piece"
- else if(amount == 2)
- icon_state = "coil_[item_color]2"
- name = "cable piece"
- else
- icon_state = "coil_[item_color]"
- name = "cable coil"
-
-/obj/item/weapon/cable_coil/examine()
- set src in view(1)
-
- if(amount == 1)
- usr << "A short piece of power cable."
- else if(amount == 2)
- usr << "A piece of power cable."
- else
- usr << "A coil of power cable. There are [amount] lengths of cable in the coil."
-
-/obj/item/weapon/cable_coil/verb/make_restraint()
- set name = "Make Cable Restraints"
- set category = "Object"
- var/mob/M = usr
-
- if(ishuman(M) && !M.restrained() && !M.stat && !M.paralysis && ! M.stunned)
- if(!istype(usr.loc,/turf)) return
- if(src.amount <= 14)
- usr << "\red You need at least 15 lengths to make restraints!"
- return
- var/obj/item/weapon/handcuffs/cable/B = new /obj/item/weapon/handcuffs/cable(usr.loc)
- B.icon_state = "cuff_[item_color]"
- usr << "\blue You wind some cable together to make some restraints."
- src.use(15)
- else
- usr << "\blue You cannot do that."
- ..()
-
-/obj/item/weapon/cable_coil/attackby(obj/item/weapon/W, mob/user)
- ..()
- if( istype(W, /obj/item/weapon/wirecutters) && src.amount > 1)
- src.amount--
- new/obj/item/weapon/cable_coil(user.loc, 1,item_color)
- user << "You cut a piece off the cable coil."
- src.update_icon()
- return
-
- else if( istype(W, /obj/item/weapon/cable_coil) )
- var/obj/item/weapon/cable_coil/C = W
- if(C.amount >= MAXCOIL)
- user << "The coil is too long, you cannot add any more cable to it."
- return
-
- if( (C.amount + src.amount <= MAXCOIL) )
- user << "You join the cable coils together."
- C.give(src.amount) // give it cable
- src.use(src.amount) // make sure this one cleans up right
- return
-
- else
- var/amt = MAXCOIL - C.amount
- user << "You transfer [amt] length\s of cable from one coil to the other."
- C.give(amt)
- src.use(amt)
- return
-
-/obj/item/weapon/cable_coil/proc/use(var/used)
- if(src.amount < used)
- return 0
- else if (src.amount == used)
- .=1 //Because del(src) stops the proc, set the default return value to 1
- if(ismob(loc)) //handle mob icon update
- var/mob/M = loc
- M.u_equip(src)
- del(src)
- else
- amount -= used
- update_icon()
- return 1
-
-/obj/item/weapon/cable_coil/proc/give(var/extra)
- if(amount + extra > MAXCOIL)
- amount = MAXCOIL
- else
- amount += extra
- update_icon()
-
-// called when cable_coil is clicked on a turf/simulated/floor
-
-/obj/item/weapon/cable_coil/proc/turf_place(turf/simulated/floor/F, mob/user)
-
- if(!isturf(user.loc))
- return
-
- if(get_dist(F,user) > 1)
- user << "You can't lay cable at a place that far away."
- return
-
- if(F.intact) // if floor is intact, complain
- user << "You can't lay cable there unless the floor tiles are removed."
- return
-
- else
- var/dirn
-
- if(user.loc == F)
- dirn = user.dir // if laying on the tile we're on, lay in the direction we're facing
- else
- dirn = get_dir(F, user)
-
- for(var/obj/structure/cable/LC in F)
- if((LC.d1 == dirn && LC.d2 == 0 ) || ( LC.d2 == dirn && LC.d1 == 0))
- user << "There's already a cable at that position."
- return
-
- var/obj/structure/cable/C = new(F)
-
- C.cableColor(item_color)
-
- C.d1 = 0
- C.d2 = dirn
- C.add_fingerprint(user)
- C.updateicon()
-
- C.powernet = new()
- powernets += C.powernet
- C.powernet.cables += C
-
- C.mergeConnectedNetworks(C.d2)
- C.mergeConnectedNetworksOnTurf()
-
-
- use(1)
- if (C.shock(user, 50))
- if (prob(50)) //fail
- new/obj/item/weapon/cable_coil(C.loc, 1, C.cable_color)
- del(C)
- //src.laying = 1
- //last = C
-
-
-// called when cable_coil is click on an installed obj/cable
-
-/obj/item/weapon/cable_coil/proc/cable_join(obj/structure/cable/C, mob/user)
-
- var/turf/U = user.loc
- if(!isturf(U))
- return
-
- var/turf/T = C.loc
-
- if(!isturf(T) || T.intact) // sanity checks, also stop use interacting with T-scanner revealed cable
- return
-
- if(get_dist(C, user) > 1) // make sure it's close enough
- user << "You can't lay cable at a place that far away."
- return
-
-
- if(U == T) // do nothing if we clicked a cable we're standing on
- return // may change later if can think of something logical to do
-
- var/dirn = get_dir(C, user)
-
- if(C.d1 == dirn || C.d2 == dirn) // one end of the clicked cable is pointing towards us
- if(U.intact) // can't place a cable if the floor is complete
- user << "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/cable/LC in U) // check to make sure there's not a cable there already
- if(LC.d1 == fdirn || LC.d2 == fdirn)
- user << "There's already a cable at that position."
- return
-
- var/obj/structure/cable/NC = new(U)
- NC.cableColor(item_color)
-
- NC.d1 = 0
- NC.d2 = fdirn
- NC.add_fingerprint()
- NC.updateicon()
-
- if(C.powernet)
- NC.powernet = C.powernet
- NC.powernet.cables += NC
- NC.mergeConnectedNetworks(NC.d2)
- NC.mergeConnectedNetworksOnTurf()
- use(1)
- if (NC.shock(user, 50))
- if (prob(50)) //fail
- new/obj/item/weapon/cable_coil(NC.loc, 1, NC.cable_color)
- del(NC)
-
- return
- else if(C.d1 == 0) // exisiting cable doesn't point at our position, so see if it's a stub
- // 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/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
- user << "There's already a cable at that position."
- return
-
-
- C.cableColor(item_color)
-
- C.d1 = nd1
- C.d2 = nd2
-
- C.add_fingerprint()
- C.updateicon()
-
-
- C.mergeConnectedNetworks(C.d1)
- C.mergeConnectedNetworks(C.d2)
- C.mergeConnectedNetworksOnTurf()
-
- use(1)
- if (C.shock(user, 50))
- if (prob(50)) //fail
- new/obj/item/weapon/cable_coil(C.loc, 2, C.cable_color)
- del(C)
- return
-
- C.denode()// this call may have disconnected some cables that terminated on the centre of the turf, if so split the powernets.
- return
-
-/obj/structure/cable/proc/mergeConnectedNetworks(var/direction)
- var/turf/TB
- if(!(d1 == direction || d2 == direction))
- return
- TB = get_step(src, direction)
-
- for(var/obj/structure/cable/TC in TB)
-
- if(!TC)
- continue
-
- if(src == TC)
- continue
-
- var/fdir = (!direction)? 0 : turn(direction, 180)
-
- if(TC.d1 == fdir || TC.d2 == fdir)
-
- if(!TC.powernet)
- TC.powernet = new()
- powernets += TC.powernet
- TC.powernet.cables += TC
-
- if(powernet)
- merge_powernets(powernet,TC.powernet)
- else
- powernet = TC.powernet
- powernet.cables += src
-
-
-
-
-/obj/structure/cable/proc/mergeConnectedNetworksOnTurf()
- if(!powernet)
- powernet = new()
- powernets += powernet
- powernet.cables += src
-
- for(var/AM in loc)
- if(istype(AM,/obj/structure/cable))
- var/obj/structure/cable/C = AM
- if(C.d1 == 0 && d1==0) //only connected if they are both "nodes"
- if(C.powernet == powernet) continue
- if(C.powernet)
- merge_powernets(powernet, C.powernet)
- else
- C.powernet = powernet
- powernet.cables += C
-
- else if(istype(AM,/obj/machinery/power/apc))
- var/obj/machinery/power/apc/N = AM
- if(!N.terminal) continue
- if(N.terminal.powernet)
- merge_powernets(powernet, N.terminal.powernet)
- else
- N.terminal.powernet = powernet
- powernet.nodes[N.terminal] = N.terminal
-
- else if(istype(AM,/obj/machinery/power))
- var/obj/machinery/power/M = AM
- if(M.powernet == powernet) continue
- if(M.powernet)
- merge_powernets(powernet, M.powernet)
- else
- M.powernet = powernet
- powernet.nodes[M] = M
-
-
-obj/structure/cable/proc/cableColor(var/colorC)
- var/color_n = "red"
- if(colorC)
- color_n = colorC
- cable_color = color_n
- switch(colorC)
- if("red")
- icon = 'icons/obj/power_cond/power_cond_red.dmi'
- if("yellow")
- icon = 'icons/obj/power_cond/power_cond_yellow.dmi'
- if("green")
- icon = 'icons/obj/power_cond/power_cond_green.dmi'
- if("blue")
- icon = 'icons/obj/power_cond/power_cond_blue.dmi'
- if("pink")
- icon = 'icons/obj/power_cond/power_cond_pink.dmi'
- if("orange")
- icon = 'icons/obj/power_cond/power_cond_orange.dmi'
- if("cyan")
- icon = 'icons/obj/power_cond/power_cond_cyan.dmi'
- if("white")
- icon = 'icons/obj/power_cond/power_cond_white.dmi'
-
-/obj/item/weapon/cable_coil/cut
- item_state = "coil_red2"
-
-/obj/item/weapon/cable_coil/cut/New(loc)
- ..()
- src.amount = rand(1,2)
- pixel_x = rand(-2,2)
- pixel_y = rand(-2,2)
- update_icon()
-
-/obj/item/weapon/cable_coil/yellow
- item_color = "yellow"
- icon_state = "coil_yellow"
-
-/obj/item/weapon/cable_coil/blue
- item_color = "blue"
- icon_state = "coil_blue"
- item_state = "coil_blue"
-
-/obj/item/weapon/cable_coil/green
- item_color = "green"
- icon_state = "coil_green"
-
-/obj/item/weapon/cable_coil/pink
- item_color = "pink"
- icon_state = "coil_pink"
-
-/obj/item/weapon/cable_coil/orange
- item_color = "orange"
- icon_state = "coil_orange"
-
-/obj/item/weapon/cable_coil/cyan
- item_color = "cyan"
- icon_state = "coil_cyan"
-
-/obj/item/weapon/cable_coil/white
- item_color = "white"
- icon_state = "coil_white"
-
-/obj/item/weapon/cable_coil/random/New()
- item_color = pick("red","yellow","green","blue","pink")
- icon_state = "coil_[item_color]"
- ..()
+// attach a wire to a power machine - leads from the turf you are standing on
+
+/obj/machinery/power/attackby(obj/item/weapon/W, mob/user)
+
+ if(istype(W, /obj/item/stack/cable_coil))
+
+ var/obj/item/stack/cable_coil/coil = W
+
+ var/turf/T = user.loc
+
+ if(T.intact || !istype(T, /turf/simulated/floor))
+ return
+
+ if(get_dist(src, user) > 1)
+ return
+
+ if(!directwired) // only for attaching to directwired machines
+ return
+
+ coil.turf_place(T, user)
+ return
+ else
+ ..()
+ return
+
+/obj/structure/cable
+ level = 1
+ anchored =1
+ var/datum/powernet/powernet
+ name = "power cable"
+ desc = "A flexible superconducting cable for heavy-duty power transfer"
+ icon = 'icons/obj/power_cond/power_cond_red.dmi'
+ icon_state = "0-1"
+ var/d1 = 0
+ var/d2 = 1
+ layer = 2.44 //Just below unary stuff, which is at 2.45 and above pipes, which are at 2.4
+ var/cable_color = "red"
+ var/obj/structure/powerswitch/power_switch
+
+/obj/structure/cable/yellow
+ cable_color = "yellow"
+ icon = 'icons/obj/power_cond/power_cond_yellow.dmi'
+
+/obj/structure/cable/green
+ cable_color = "green"
+ icon = 'icons/obj/power_cond/power_cond_green.dmi'
+
+/obj/structure/cable/blue
+ cable_color = "blue"
+ icon = 'icons/obj/power_cond/power_cond_blue.dmi'
+
+/obj/structure/cable/pink
+ cable_color = "pink"
+ icon = 'icons/obj/power_cond/power_cond_pink.dmi'
+
+/obj/structure/cable/orange
+ cable_color = "orange"
+ icon = 'icons/obj/power_cond/power_cond_orange.dmi'
+
+/obj/structure/cable/cyan
+ cable_color = "cyan"
+ icon = 'icons/obj/power_cond/power_cond_cyan.dmi'
+
+/obj/structure/cable/white
+ cable_color = "white"
+ icon = 'icons/obj/power_cond/power_cond_white.dmi'
+
+// the power cable object
+
+/obj/structure/cable/New()
+ ..()
+
+
+ // 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 ) )
+
+ var/turf/T = src.loc // hide if turf is not intact
+
+ if(level==1) hide(T.intact)
+ cable_list += src
+
+
+/obj/structure/cable/Del() // called when a cable is deleted
+ if(!defer_powernet_rebuild) // set if network will be rebuilt manually
+ if(powernet)
+ powernet.cut_cable(src) // update the powernets
+ cable_list -= src
+ ..() // then go ahead and delete the cable
+
+/obj/structure/cable/hide(var/i)
+
+ if(level == 1 && istype(loc, /turf))
+ invisibility = i ? 101 : 0
+ updateicon()
+
+/obj/structure/cable/proc/updateicon()
+ if(invisibility)
+ icon_state = "[d1]-[d2]-f"
+ else
+ icon_state = "[d1]-[d2]"
+
+
+// returns the powernet this cable belongs to
+/obj/structure/cable/proc/get_powernet() //TODO: remove this as it is obsolete
+ return powernet
+
+/obj/structure/cable/attack_tk(mob/user)
+ return
+
+/obj/structure/cable/attackby(obj/item/W, mob/user)
+
+ var/turf/T = src.loc
+ if(T.intact)
+ return
+
+ if(istype(W, /obj/item/weapon/wirecutters))
+
+// if(power_switch)
+// user << "\red This piece of cable is tied to a power switch. Flip the switch to remove it."
+// return
+
+ if (shock(user, 50))
+ return
+
+ if(src.d1) // 0-X cables are 1 unit, X-X cables are 2 units long
+ new/obj/item/stack/cable_coil(T, 2, cable_color)
+ else
+ new/obj/item/stack/cable_coil(T, 1, cable_color)
+
+ for(var/mob/O in viewers(src, null))
+ O.show_message("\red [user] cuts the cable.", 1)
+
+ investigate_log("was cut by [key_name(usr, usr.client)] in [user.loc.loc]","wires")
+
+ del(src)
+ return
+
+
+ else if(istype(W, /obj/item/stack/cable_coil))
+ var/obj/item/stack/cable_coil/coil = W
+ coil.cable_join(src, user)
+
+ else if(istype(W, /obj/item/device/multitool))
+
+ var/datum/powernet/PN = get_powernet() // find the powernet
+
+ if(PN && (PN.avail > 0)) // is it powered?
+ user << "\red [PN.avail]W in power network."
+
+ else
+ user << "\red The cable is not powered."
+
+ shock(user, 5, 0.2)
+
+ else
+ if (W.flags & CONDUCT)
+ shock(user, 50, 0.7)
+
+ src.add_fingerprint(user)
+
+// shock the user with probability prb
+
+/obj/structure/cable/proc/shock(mob/user, prb, var/siemens_coeff = 1.0)
+ if(!prob(prb))
+ return 0
+ if (electrocute_mob(user, powernet, src, siemens_coeff))
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+ return 1
+ else
+ return 0
+
+/obj/structure/cable/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ del(src)
+ if(2.0)
+ if (prob(50))
+ new/obj/item/stack/cable_coil(src.loc, src.d1 ? 2 : 1, cable_color)
+ del(src)
+
+ if(3.0)
+ if (prob(25))
+ new/obj/item/stack/cable_coil(src.loc, src.d1 ? 2 : 1, cable_color)
+ del(src)
+ return
+
+// the cable coil object, used for laying cable
+
+#define MAXCOIL 30
+/obj/item/stack/cable_coil
+ name = "cable coil"
+ icon = 'icons/obj/power.dmi'
+ icon_state = "coil_red"
+ item_state = "coil_red"
+ amount = MAXCOIL
+ item_color = "red"
+ desc = "A coil of power cable."
+ throwforce = 10
+ w_class = 2.0
+ throw_speed = 2
+ throw_range = 5
+ m_amt = 50
+ g_amt = 20
+ flags = CONDUCT
+ slot_flags = SLOT_BELT
+ attack_verb = list("whipped", "lashed", "disciplined", "flogged")
+
+ suicide_act(mob/user)
+ if(locate(/obj/structure/stool) in user.loc)
+ viewers(user) << "[user] is making a noose with the [src.name]! It looks like \he's trying to commit suicide."
+ else
+ viewers(user) << "[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide."
+ return(OXYLOSS)
+
+/obj/item/stack/cable_coil/attack(mob/living/carbon/human/H, mob/user)
+ if(!istype(H))
+ return ..()
+
+ var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting))
+ if(affecting.status == ORGAN_ROBOTIC)
+ src.item_heal_robotic(H, user, 0, 30)
+ src.use(1)
+ return
+ else
+ return ..()
+
+/obj/item/stack/cable_coil/New(loc, amount = MAXCOIL, var/param_color = null)
+ ..()
+ src.amount = amount
+ if (param_color)
+ item_color = param_color
+ pixel_x = rand(-2,2)
+ pixel_y = rand(-2,2)
+ update_icon()
+
+/obj/item/stack/cable_coil/update_icon()
+ if (!item_color)
+ item_color = pick("red", "yellow", "blue", "green")
+ if(amount == 1)
+ icon_state = "coil_[item_color]1"
+ name = "cable piece"
+ else if(amount == 2)
+ icon_state = "coil_[item_color]2"
+ name = "cable piece"
+ else
+ icon_state = "coil_[item_color]"
+ name = "cable coil"
+
+/obj/item/stack/cable_coil/examine()
+ set src in view(1)
+
+ if(amount == 1)
+ usr << "A short piece of power cable."
+ else if(amount == 2)
+ usr << "A piece of power cable."
+ else
+ usr << "A coil of power cable. There are [amount] lengths of cable in the coil."
+
+/obj/item/stack/cable_coil/verb/make_restraint()
+ set name = "Make Cable Restraints"
+ set category = "Object"
+ var/mob/M = usr
+
+ if(ishuman(M) && !M.restrained() && !M.stat && !M.paralysis && ! M.stunned)
+ if(!istype(usr.loc,/turf)) return
+ if(src.amount <= 14)
+ usr << "\red You need at least 15 lengths to make restraints!"
+ return
+ var/obj/item/weapon/handcuffs/cable/B = new /obj/item/weapon/handcuffs/cable(usr.loc)
+ B.icon_state = "cuff_[item_color]"
+ usr << "\blue You wind some cable together to make some restraints."
+ src.use(15)
+ else
+ usr << "\blue You cannot do that."
+ ..()
+
+/obj/item/stack/cable_coil/attackby(obj/item/weapon/W, mob/user)
+ ..()
+ if( istype(W, /obj/item/weapon/wirecutters) && src.amount > 1)
+ src.amount--
+ new/obj/item/stack/cable_coil(user.loc, 1,item_color)
+ user << "You cut a piece off the cable coil."
+ src.update_icon()
+ return
+
+ else if( istype(W, /obj/item/stack/cable_coil) )
+ var/obj/item/stack/cable_coil/C = W
+ if(C.amount >= MAXCOIL)
+ user << "The coil is too long, you cannot add any more cable to it."
+ return
+
+ if( (C.amount + src.amount <= MAXCOIL) )
+ user << "You join the cable coils together."
+ C.give(src.amount) // give it cable
+ src.use(src.amount) // make sure this one cleans up right
+ return
+
+ else
+ var/amt = MAXCOIL - C.amount
+ user << "You transfer [amt] length\s of cable from one coil to the other."
+ C.give(amt)
+ src.use(amt)
+ return
+
+/obj/item/stack/cable_coil/use(var/used)
+ if(src.amount < used)
+ return 0
+ else if (src.amount == used)
+ .=1 //Because del(src) stops the proc, set the default return value to 1
+ if(ismob(loc)) //handle mob icon update
+ var/mob/M = loc
+ M.u_equip(src)
+ del(src)
+ else
+ amount -= used
+ update_icon()
+ return 1
+
+/obj/item/stack/cable_coil/proc/give(var/extra)
+ if(amount + extra > MAXCOIL)
+ amount = MAXCOIL
+ else
+ amount += extra
+ update_icon()
+
+// called when cable_coil is clicked on a turf/simulated/floor
+
+/obj/item/stack/cable_coil/proc/turf_place(turf/simulated/floor/F, mob/user)
+
+ if(!isturf(user.loc))
+ return
+
+ if(get_dist(F,user) > 1)
+ user << "You can't lay cable at a place that far away."
+ return
+
+ if(F.intact) // if floor is intact, complain
+ user << "You can't lay cable there unless the floor tiles are removed."
+ return
+
+ else
+ var/dirn
+
+ if(user.loc == F)
+ dirn = user.dir // if laying on the tile we're on, lay in the direction we're facing
+ else
+ dirn = get_dir(F, user)
+
+ for(var/obj/structure/cable/LC in F)
+ if((LC.d1 == dirn && LC.d2 == 0 ) || ( LC.d2 == dirn && LC.d1 == 0))
+ user << "There's already a cable at that position."
+ return
+
+ var/obj/structure/cable/C = new(F)
+
+ C.cableColor(item_color)
+
+ C.d1 = 0
+ C.d2 = dirn
+ C.add_fingerprint(user)
+ C.updateicon()
+
+ C.powernet = new()
+ powernets += C.powernet
+ C.powernet.cables += C
+
+ C.mergeConnectedNetworks(C.d2)
+ C.mergeConnectedNetworksOnTurf()
+
+
+ use(1)
+ if (C.shock(user, 50))
+ if (prob(50)) //fail
+ new/obj/item/stack/cable_coil(C.loc, 1, C.cable_color)
+ del(C)
+ //src.laying = 1
+ //last = C
+
+
+// called when cable_coil is click on an installed obj/cable
+
+/obj/item/stack/cable_coil/proc/cable_join(obj/structure/cable/C, mob/user)
+
+ var/turf/U = user.loc
+ if(!isturf(U))
+ return
+
+ var/turf/T = C.loc
+
+ if(!isturf(T) || T.intact) // sanity checks, also stop use interacting with T-scanner revealed cable
+ return
+
+ if(get_dist(C, user) > 1) // make sure it's close enough
+ user << "You can't lay cable at a place that far away."
+ return
+
+
+ if(U == T) // do nothing if we clicked a cable we're standing on
+ return // may change later if can think of something logical to do
+
+ var/dirn = get_dir(C, user)
+
+ if(C.d1 == dirn || C.d2 == dirn) // one end of the clicked cable is pointing towards us
+ if(U.intact) // can't place a cable if the floor is complete
+ user << "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/cable/LC in U) // check to make sure there's not a cable there already
+ if(LC.d1 == fdirn || LC.d2 == fdirn)
+ user << "There's already a cable at that position."
+ return
+
+ var/obj/structure/cable/NC = new(U)
+ NC.cableColor(item_color)
+
+ NC.d1 = 0
+ NC.d2 = fdirn
+ NC.add_fingerprint()
+ NC.updateicon()
+
+ if(C.powernet)
+ NC.powernet = C.powernet
+ NC.powernet.cables += NC
+ NC.mergeConnectedNetworks(NC.d2)
+ NC.mergeConnectedNetworksOnTurf()
+ use(1)
+ if (NC.shock(user, 50))
+ if (prob(50)) //fail
+ new/obj/item/stack/cable_coil(NC.loc, 1, NC.cable_color)
+ del(NC)
+
+ return
+ else if(C.d1 == 0) // exisiting cable doesn't point at our position, so see if it's a stub
+ // 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/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
+ user << "There's already a cable at that position."
+ return
+
+
+ C.cableColor(item_color)
+
+ C.d1 = nd1
+ C.d2 = nd2
+
+ C.add_fingerprint()
+ C.updateicon()
+
+
+ C.mergeConnectedNetworks(C.d1)
+ C.mergeConnectedNetworks(C.d2)
+ C.mergeConnectedNetworksOnTurf()
+
+ use(1)
+ if (C.shock(user, 50))
+ if (prob(50)) //fail
+ new/obj/item/stack/cable_coil(C.loc, 2, C.cable_color)
+ del(C)
+ return
+
+ C.denode()// this call may have disconnected some cables that terminated on the centre of the turf, if so split the powernets.
+ return
+
+/obj/structure/cable/proc/mergeConnectedNetworks(var/direction)
+ var/turf/TB
+ if(!(d1 == direction || d2 == direction))
+ return
+ TB = get_step(src, direction)
+
+ for(var/obj/structure/cable/TC in TB)
+
+ if(!TC)
+ continue
+
+ if(src == TC)
+ continue
+
+ var/fdir = (!direction)? 0 : turn(direction, 180)
+
+ if(TC.d1 == fdir || TC.d2 == fdir)
+
+ if(!TC.powernet)
+ TC.powernet = new()
+ powernets += TC.powernet
+ TC.powernet.cables += TC
+
+ if(powernet)
+ merge_powernets(powernet,TC.powernet)
+ else
+ powernet = TC.powernet
+ powernet.cables += src
+
+
+
+
+/obj/structure/cable/proc/mergeConnectedNetworksOnTurf()
+ if(!powernet)
+ powernet = new()
+ powernets += powernet
+ powernet.cables += src
+
+ for(var/AM in loc)
+ if(istype(AM,/obj/structure/cable))
+ var/obj/structure/cable/C = AM
+ if(C.d1 == 0 && d1==0) //only connected if they are both "nodes"
+ if(C.powernet == powernet) continue
+ if(C.powernet)
+ merge_powernets(powernet, C.powernet)
+ else
+ C.powernet = powernet
+ powernet.cables += C
+
+ else if(istype(AM,/obj/machinery/power/apc))
+ var/obj/machinery/power/apc/N = AM
+ if(!N.terminal) continue
+ if(N.terminal.powernet)
+ merge_powernets(powernet, N.terminal.powernet)
+ else
+ N.terminal.powernet = powernet
+ powernet.nodes[N.terminal] = N.terminal
+
+ else if(istype(AM,/obj/machinery/power))
+ var/obj/machinery/power/M = AM
+ if(M.powernet == powernet) continue
+ if(M.powernet)
+ merge_powernets(powernet, M.powernet)
+ else
+ M.powernet = powernet
+ powernet.nodes[M] = M
+
+
+obj/structure/cable/proc/cableColor(var/colorC)
+ var/color_n = "red"
+ if(colorC)
+ color_n = colorC
+ cable_color = color_n
+ switch(colorC)
+ if("red")
+ icon = 'icons/obj/power_cond/power_cond_red.dmi'
+ if("yellow")
+ icon = 'icons/obj/power_cond/power_cond_yellow.dmi'
+ if("green")
+ icon = 'icons/obj/power_cond/power_cond_green.dmi'
+ if("blue")
+ icon = 'icons/obj/power_cond/power_cond_blue.dmi'
+ if("pink")
+ icon = 'icons/obj/power_cond/power_cond_pink.dmi'
+ if("orange")
+ icon = 'icons/obj/power_cond/power_cond_orange.dmi'
+ if("cyan")
+ icon = 'icons/obj/power_cond/power_cond_cyan.dmi'
+ if("white")
+ icon = 'icons/obj/power_cond/power_cond_white.dmi'
+
+obj/structure/cable/proc/add_avail(var/amount)
+ if(powernet)
+ powernet.newavail += amount
+
+obj/structure/cable/proc/add_load(var/amount)
+ if(powernet)
+ powernet.newload += amount
+
+obj/structure/cable/proc/surplus()
+ if(powernet)
+ return powernet.avail-powernet.load
+ else
+ return 0
+
+obj/structure/cable/proc/avail()
+ if(powernet)
+ return powernet.avail
+ else
+ return 0
+
+/obj/item/stack/cable_coil/cut
+ item_state = "coil_red2"
+
+/obj/item/stack/cable_coil/cut/New(loc)
+ ..()
+ src.amount = rand(1,2)
+ pixel_x = rand(-2,2)
+ pixel_y = rand(-2,2)
+ update_icon()
+
+/obj/item/stack/cable_coil/yellow
+ item_color = "yellow"
+ icon_state = "coil_yellow"
+
+/obj/item/stack/cable_coil/blue
+ item_color = "blue"
+ icon_state = "coil_blue"
+ item_state = "coil_blue"
+
+/obj/item/stack/cable_coil/green
+ item_color = "green"
+ icon_state = "coil_green"
+
+/obj/item/stack/cable_coil/pink
+ item_color = "pink"
+ icon_state = "coil_pink"
+
+/obj/item/stack/cable_coil/orange
+ item_color = "orange"
+ icon_state = "coil_orange"
+
+/obj/item/stack/cable_coil/cyan
+ item_color = "cyan"
+ icon_state = "coil_cyan"
+
+/obj/item/stack/cable_coil/white
+ item_color = "white"
+ icon_state = "coil_white"
+
+/obj/item/stack/cable_coil/random/New()
+ item_color = pick("red","yellow","green","blue","pink")
+ icon_state = "coil_[item_color]"
+ ..()
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index be631c5d37a..2d252417e5a 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -63,7 +63,7 @@
if(ishuman(user))
var/mob/living/carbon/human/H = user
var/obj/item/clothing/gloves/space_ninja/SNG = H.gloves
- if(!istype(SNG) || !SNG.candrain || !SNG.draining) return
+ if(!istype(SNG) || !SNG.candrain || SNG.draining) return
SNG.drain("CELL",src,H.wear_suit)
return
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm
index d3e9ff828e3..6b73a53aa86 100644
--- a/code/modules/power/generator.dm
+++ b/code/modules/power/generator.dm
@@ -6,6 +6,7 @@
gen_amount = g
*/
+
/obj/machinery/power/generator
name = "thermoelectric generator"
desc = "It's a high efficiency thermoelectric generator."
@@ -19,28 +20,32 @@
var/lastgen = 0
var/lastgenlev = -1
+ var/lastcirc = "00"
-/obj/machinery/power/generator/New()
- ..()
+/obj/machinery/power/generator/initialize()
- spawn(5)
- circ1 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,WEST)
- circ2 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,EAST)
+ circ1 = null
+ circ2 = null
- if(circ1)
- circ1.side = 1
- circ1.update_icon()
- if(circ2)
- circ2.side = 2
- circ2.update_icon()
+ circ1 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,WEST)
+ circ2 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,EAST)
+ connect_to_network()
- if(!circ1 || !circ2)
- stat |= BROKEN
+ if(circ1)
+ circ1.side = 1
+ circ1.update_icon()
+ if(circ2)
+ circ2.side = 2
+ circ2.update_icon()
- updateicon()
+ if(!circ1 || !circ2)
+ stat |= BROKEN
-/obj/machinery/power/generator/proc/updateicon()
+ update_icon()
+
+
+/obj/machinery/power/generator/update_icon()
if(stat & (NOPOWER|BROKEN))
overlays.Cut()
@@ -50,103 +55,116 @@
if(lastgenlev != 0)
overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]")
+ overlays += image('icons/obj/power.dmi', "teg-oc[lastcirc]")
+
+
#define GENRATE 800 // generator output coefficient from Q
/obj/machinery/power/generator/process()
- //world << "Generator process ran"
-
if(!circ1 || !circ2)
return
- //world << "circ1 and circ2 pass"
-
- var/datum/gas_mixture/cold_air = circ1.return_transfer_air()
- var/datum/gas_mixture/hot_air = circ2.return_transfer_air()
-
lastgen = 0
- //world << "hot_air = [hot_air]; cold_air = [cold_air];"
+ if(powernet)
+ //world << "circ1 and circ2 pass"
- if(cold_air && hot_air)
+ var/datum/gas_mixture/cold_air = circ1.return_transfer_air()
+ var/datum/gas_mixture/hot_air = circ2.return_transfer_air()
- //world << "hot_air = [hot_air] temperature = [hot_air.temperature]; cold_air = [cold_air] temperature = [hot_air.temperature];"
+ //world << "hot_air = [hot_air]; cold_air = [cold_air];"
- //world << "coldair and hotair pass"
- var/cold_air_heat_capacity = cold_air.heat_capacity()
- var/hot_air_heat_capacity = hot_air.heat_capacity()
+ if(cold_air && hot_air)
- var/delta_temperature = hot_air.temperature - cold_air.temperature
+ //world << "hot_air = [hot_air] temperature = [hot_air.temperature]; cold_air = [cold_air] temperature = [hot_air.temperature];"
- //world << "delta_temperature = [delta_temperature]; cold_air_heat_capacity = [cold_air_heat_capacity]; hot_air_heat_capacity = [hot_air_heat_capacity]"
+ //world << "coldair and hotair pass"
+ var/cold_air_heat_capacity = cold_air.heat_capacity()
+ var/hot_air_heat_capacity = hot_air.heat_capacity()
- if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0)
- var/efficiency = 0.65
+ var/delta_temperature = hot_air.temperature - cold_air.temperature
- var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity)
+ //world << "delta_temperature = [delta_temperature]; cold_air_heat_capacity = [cold_air_heat_capacity]; hot_air_heat_capacity = [hot_air_heat_capacity]"
- var/heat = energy_transfer*(1-efficiency)
- lastgen = energy_transfer*efficiency
+ if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0)
+ var/efficiency = 0.65
- //world << "lastgen = [lastgen]; heat = [heat]; delta_temperature = [delta_temperature]; hot_air_heat_capacity = [hot_air_heat_capacity]; cold_air_heat_capacity = [cold_air_heat_capacity];"
+ var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity)
- hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity
- cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity
+ var/heat = energy_transfer*(1-efficiency)
+ lastgen = energy_transfer*efficiency
- world << "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]"
+ //world << "lastgen = [lastgen]; heat = [heat]; delta_temperature = [delta_temperature]; hot_air_heat_capacity = [hot_air_heat_capacity]; cold_air_heat_capacity = [cold_air_heat_capacity];"
- add_avail(lastgen)
- // update icon overlays only if displayed level has changed
+ hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity
+ cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity
- if(hot_air)
- circ2.air2.merge(hot_air)
+ //world << "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]"
- if(cold_air)
- circ1.air2.merge(cold_air)
+ add_avail(lastgen)
+ // update icon overlays only if displayed level has changed
+
+ if(hot_air)
+ circ2.air1.merge(hot_air)
+
+ if(cold_air)
+ circ1.air1.merge(cold_air)
var/genlev = max(0, min( round(11*lastgen / 100000), 11))
- if(genlev != lastgenlev)
+ var/circ = "[circ1 && circ1.last_pressure_delta > 0 ? "1" : "0"][circ2 && circ2.last_pressure_delta > 0 ? "1" : "0"]"
+ if((genlev != lastgenlev) || (circ != lastcirc))
lastgenlev = genlev
- updateicon()
+ lastcirc = circ
+ update_icon()
src.updateDialog()
-/obj/machinery/power/generator/attack_ai(mob/user)
- if(stat & (BROKEN|NOPOWER)) return
- interact(user)
-
-
/obj/machinery/power/generator/attack_hand(mob/user)
- add_fingerprint(user)
- if(stat & (BROKEN|NOPOWER)) return
- interact(user)
-
-
-/obj/machinery/power/generator/interact(mob/user)
- if ( (get_dist(src, user) > 1 ) && (!istype(user, /mob/living/silicon/ai)))
- user.unset_machine()
+ if(..())
user << browse(null, "window=teg")
return
+ interact(user)
+
+/obj/machinery/power/generator/proc/get_menu(var/include_link = 1)
+ var/t = ""
+ if(!powernet)
+ t += "Unable to connect to the power network!"
+ else if(circ1 && circ2)
+
+ t += ""
+
+ t += "Output: [round(lastgen)] W"
+
+ t += "
"
+
+ t += "Cold loop
"
+ t += "Temperature Inlet: [round(circ1.air2.temperature, 0.1)] K / Outlet: [round(circ1.air1.temperature, 0.1)] K
"
+ t += "Pressure Inlet: [round(circ1.air2.return_pressure(), 0.1)] kPa / Outlet: [round(circ1.air1.return_pressure(), 0.1)] kPa
"
+
+ t += "Hot loop
"
+ t += "Temperature Inlet: [round(circ2.air2.temperature, 0.1)] K / Outlet: [round(circ2.air1.temperature, 0.1)] K
"
+ t += "Pressure Inlet: [round(circ2.air2.return_pressure(), 0.1)] kPa / Outlet: [round(circ2.air1.return_pressure(), 0.1)] kPa
"
+
+ t += ""
+ else
+ t += "Unable to locate all parts!"
+ if(include_link)
+ t += "
Close"
+
+ return t
+
+/obj/machinery/power/generator/interact(mob/user)
user.set_machine(src)
- var/t = "Thermo-Electric Generator
"
+ //user << browse(t, "window=teg;size=460x300")
+ //onclose(user, "teg")
- t += "Output : [round(lastgen)] W
"
-
- t += "Cold loop
"
- t += "Temperature Inlet: [round(circ1.air1.temperature, 0.1)] K Outlet: [round(circ1.air2.temperature, 0.1)] K
"
- t += "Pressure Inlet: [round(circ1.air1.return_pressure(), 0.1)] kPa Outlet: [round(circ1.air2.return_pressure(), 0.1)] kPa
"
-
- t += "Hot loop
"
- t += "Temperature Inlet: [round(circ2.air1.temperature, 0.1)] K Outlet: [round(circ2.air2.temperature, 0.1)] K
"
- t += "Pressure Inlet: [round(circ2.air1.return_pressure(), 0.1)] kPa Outlet: [round(circ2.air2.return_pressure(), 0.1)] kPa
"
-
- t += "
Close"
-
- t += "
"
- user << browse(t, "window=teg;size=460x300")
- onclose(user, "teg")
+ var/datum/browser/popup = new(user, "teg", "Thermo-Electric Generator", 460, 300)
+ popup.set_content(get_menu())
+ popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
+ popup.open()
return 1
@@ -162,5 +180,4 @@
/obj/machinery/power/generator/power_change()
..()
- updateicon()
-
+ update_icon()
diff --git a/code/modules/power/generator_type2.dm b/code/modules/power/generator_type2.dm
deleted file mode 100644
index 3c88b3eeecb..00000000000
--- a/code/modules/power/generator_type2.dm
+++ /dev/null
@@ -1,144 +0,0 @@
-/obj/machinery/power/generator_type2
- name = "thermoelectric generator"
- desc = "It's a high efficiency thermoelectric generator."
- icon_state = "teg"
- anchored = 1
- density = 1
- use_power = 0
-
- var/obj/machinery/atmospherics/unary/generator_input/input1
- var/obj/machinery/atmospherics/unary/generator_input/input2
-
- var/lastgen = 0
- var/lastgenlev = -1
-
-
-/obj/machinery/power/generator_type2/New()
- ..()
- spawn(5)
- input1 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,WEST)
- input2 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,EAST)
- if(!input1 || !input2)
- stat |= BROKEN
- updateicon()
-
-
-/obj/machinery/power/generator_type2/proc/updateicon()
-
- if(stat & (NOPOWER|BROKEN))
- overlays.Cut()
- else
- overlays.Cut()
-
- if(lastgenlev != 0)
- overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]")
-
-#define GENRATE 800 // generator output coefficient from Q
-
-
-/obj/machinery/power/generator_type2/process()
- if(!input1 || !input2)
- return
-
- var/datum/gas_mixture/air1 = input1.return_exchange_air()
- var/datum/gas_mixture/air2 = input2.return_exchange_air()
-
-
- lastgen = 0
-
- if(air1 && air2)
- var/datum/gas_mixture/hot_air = air1
- var/datum/gas_mixture/cold_air = air2
- if(hot_air.temperature < cold_air.temperature)
- hot_air = air2
- cold_air = air1
-
- var/hot_air_heat_capacity = hot_air.heat_capacity()
- var/cold_air_heat_capacity = cold_air.heat_capacity()
-
- var/delta_temperature = hot_air.temperature - cold_air.temperature
-
- if(delta_temperature > 1 && cold_air_heat_capacity > 0.01 && hot_air_heat_capacity > 0.01)
- var/efficiency = (1 - cold_air.temperature/hot_air.temperature)*0.65 //65% of Carnot efficiency
-
- var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity)
-
- var/heat = energy_transfer*(1-efficiency)
- lastgen = energy_transfer*efficiency
-
- hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity
- cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity
-
- world << "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]"
-
- if(input1.network)
- input1.network.update = 1
-
- if(input2.network)
- input2.network.update = 1
-
- add_avail(lastgen)
- // update icon overlays only if displayed level has changed
-
- var/genlev = max(0, min( round(11*lastgen / 100000), 11))
- if(genlev != lastgenlev)
- lastgenlev = genlev
- updateicon()
-
- src.updateDialog()
-
-
-/obj/machinery/power/generator_type2/attack_ai(mob/user)
- if(stat & (BROKEN|NOPOWER)) return
- interact(user)
-
-
-/obj/machinery/power/generator_type2/attack_hand(mob/user)
- add_fingerprint(user)
- if(stat & (BROKEN|NOPOWER)) return
- interact(user)
-
-
-/obj/machinery/power/generator_type2/interact(mob/user)
- if ( (get_dist(src, user) > 1 ) && (!istype(user, /mob/living/silicon/ai)))
- user.unset_machine()
- user << browse(null, "window=teg")
- return
-
- user.set_machine(src)
-
- var/t = "Thermo-Electric Generator
"
-
- t += "Output : [round(lastgen)] W
"
-
- t += "Cold loop
"
- t += "Temperature: [round(input1.air_contents.temperature, 0.1)] K
"
- t += "Pressure: [round(input1.air_contents.return_pressure(), 0.1)] kPa
"
-
- t += "Hot loop
"
- t += "Temperature: [round(input2.air_contents.temperature, 0.1)] K
"
- t += "Pressure: [round(input2.air_contents.return_pressure(), 0.1)] kPa
"
-
- t += "
Close"
-
- t += "
"
- user << browse(t, "window=teg;size=460x300")
- onclose(user, "teg")
- return 1
-
-
-/obj/machinery/power/generator_type2/Topic(href, href_list)
- if(..())
- return
-
- if( href_list["close"] )
- usr << browse(null, "window=teg")
- usr.unset_machine()
- return 0
-
- return 1
-
-
-/obj/machinery/power/generator_type2/power_change()
- ..()
- updateicon()
\ No newline at end of file
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 1e583669394..4d0fee71a46 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -1,743 +1,743 @@
-// The lighting system
-//
-// consists of light fixtures (/obj/machinery/light) and light tube/bulb items (/obj/item/weapon/light)
-
-
-// status values shared between lighting fixtures and items
-#define LIGHT_OK 0
-#define LIGHT_EMPTY 1
-#define LIGHT_BROKEN 2
-#define LIGHT_BURNED 3
-
-
-
-/obj/item/light_fixture_frame
- name = "light fixture frame"
- desc = "Used for building lights."
- icon = 'icons/obj/lighting.dmi'
- icon_state = "tube-construct-item"
- flags = CONDUCT
- var/fixture_type = "tube"
- var/obj/machinery/light/newlight = null
- var/sheets_refunded = 2
-
-/obj/item/light_fixture_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/metal( get_turf(src.loc), sheets_refunded )
- del(src)
- return
- ..()
-
-/obj/item/light_fixture_frame/proc/try_build(turf/on_wall)
- if (get_dist(on_wall,usr)>1)
- return
- var/ndir = get_dir(usr,on_wall)
- if (!(ndir in cardinal))
- return
- var/turf/loc = get_turf(usr)
- if (!istype(loc, /turf/simulated/floor))
- usr << "\red [src.name] cannot be placed on this spot."
- return
- usr << "Attaching [src] to the wall."
- playsound(src.loc, 'sound/machines/click.ogg', 75, 1)
- var/constrdir = usr.dir
- var/constrloc = usr.loc
- if (!do_after(usr, 30))
- return
- switch(fixture_type)
- if("bulb")
- newlight = new /obj/machinery/light_construct/small(constrloc)
- if("tube")
- newlight = new /obj/machinery/light_construct(constrloc)
- newlight.dir = constrdir
- newlight.fingerprints = src.fingerprints
- newlight.fingerprintshidden = src.fingerprintshidden
- newlight.fingerprintslast = src.fingerprintslast
-
- usr.visible_message("[usr.name] attaches [src] to the wall.", \
- "You attach [src] to the wall.")
- del(src)
-
-/obj/item/light_fixture_frame/small
- name = "small light fixture frame"
- desc = "Used for building small lights."
- icon = 'icons/obj/lighting.dmi'
- icon_state = "bulb-construct-item"
- flags = CONDUCT
- fixture_type = "bulb"
- sheets_refunded = 1
-
-/obj/machinery/light_construct
- name = "light fixture frame"
- desc = "A light fixture under construction."
- icon = 'icons/obj/lighting.dmi'
- icon_state = "tube-construct-stage1"
- anchored = 1
- layer = 5
- var/stage = 1
- var/fixture_type = "tube"
- var/sheets_refunded = 2
- var/obj/machinery/light/newlight = null
-
-/obj/machinery/light_construct/New()
- ..()
- if (fixture_type == "bulb")
- icon_state = "bulb-construct-stage1"
-
-/obj/machinery/light_construct/examine()
- set src in view()
- ..()
- if (!(usr in view(2))) return
- switch(src.stage)
- if(1)
- usr << "It's an empty frame."
- return
- if(2)
- usr << "It's wired."
- return
- if(3)
- usr << "The casing is closed."
- return
-
-/obj/machinery/light_construct/attackby(obj/item/weapon/W as obj, mob/user as mob)
- src.add_fingerprint(user)
- if (istype(W, /obj/item/weapon/wrench))
- if (src.stage == 1)
- playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
- usr << "You begin deconstructing [src]."
- if (!do_after(usr, 30))
- return
- new /obj/item/stack/sheet/metal( get_turf(src.loc), sheets_refunded )
- user.visible_message("[user.name] deconstructs [src].", \
- "You deconstruct [src].", "You hear a noise.")
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1)
- del(src)
- if (src.stage == 2)
- usr << "You have to remove the wires first."
- return
-
- if (src.stage == 3)
- usr << "You have to unscrew the case first."
- return
-
- if(istype(W, /obj/item/weapon/wirecutters))
- if (src.stage != 2) return
- src.stage = 1
- switch(fixture_type)
- if ("tube")
- src.icon_state = "tube-construct-stage1"
- if("bulb")
- src.icon_state = "bulb-construct-stage1"
- new /obj/item/weapon/cable_coil(get_turf(src.loc), 1, "red")
- user.visible_message("[user.name] removes the wiring from [src].", \
- "You remove the wiring from [src].", "You hear a noise.")
- playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
- return
-
- if(istype(W, /obj/item/weapon/cable_coil))
- if (src.stage != 1) return
- var/obj/item/weapon/cable_coil/coil = W
- coil.use(1)
- switch(fixture_type)
- if ("tube")
- src.icon_state = "tube-construct-stage2"
- if("bulb")
- src.icon_state = "bulb-construct-stage2"
- src.stage = 2
- user.visible_message("[user.name] adds wires to [src].", \
- "You add wires to [src].")
- return
-
- if(istype(W, /obj/item/weapon/screwdriver))
- if (src.stage == 2)
- switch(fixture_type)
- if ("tube")
- src.icon_state = "tube-empty"
- if("bulb")
- src.icon_state = "bulb-empty"
- src.stage = 3
- user.visible_message("[user.name] closes [src]'s casing.", \
- "You close [src]'s casing.", "You hear a noise.")
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 75, 1)
-
- switch(fixture_type)
-
- if("tube")
- newlight = new /obj/machinery/light/built(src.loc)
- if ("bulb")
- newlight = new /obj/machinery/light/small/built(src.loc)
-
- newlight.dir = src.dir
- src.transfer_fingerprints_to(newlight)
- del(src)
- return
- ..()
-
-/obj/machinery/light_construct/small
- name = "small light fixture frame"
- desc = "A small light fixture under construction."
- icon = 'icons/obj/lighting.dmi'
- icon_state = "bulb-construct-stage1"
- anchored = 1
- layer = 5
- stage = 1
- fixture_type = "bulb"
- sheets_refunded = 1
-
-// the standard tube light fixture
-/obj/machinery/light
- name = "light fixture"
- icon = 'icons/obj/lighting.dmi'
- var/base_state = "tube" // base description and icon_state
- icon_state = "tube1"
- desc = "A lighting fixture."
- anchored = 1
- layer = 5 // They were appearing under mobs which is a little weird - Ostaf
- use_power = 2
- idle_power_usage = 2
- active_power_usage = 20
- power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list
- var/on = 0 // 1 if on, 0 if off
- var/on_gs = 0
- var/brightness = 8 // luminosity when on, also used in power calculation
- var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN
- var/flickering = 0
- var/light_type = /obj/item/weapon/light/tube // the type of light item
- var/fitting = "tube"
- var/switchcount = 0 // count of number of times switched on/off
- // this is used to calc the probability the light burns out
-
- var/rigged = 0 // true if rigged to explode
-
-// the smaller bulb light fixture
-
-/obj/machinery/light/small
- icon_state = "bulb1"
- base_state = "bulb"
- fitting = "bulb"
- brightness = 4
- desc = "A small lighting fixture."
- light_type = /obj/item/weapon/light/bulb
-
-
-/obj/machinery/light/Move()
- if(status != LIGHT_BROKEN) broken(1)
- return ..()
-
-/obj/machinery/light/built/New()
- status = LIGHT_EMPTY
- update(0)
- ..()
-
-/obj/machinery/light/small/built/New()
- status = LIGHT_EMPTY
- update(0)
- ..()
-
-
-// create a new lighting fixture
-/obj/machinery/light/New()
- ..()
- spawn(2)
- switch(fitting)
- if("tube")
- brightness = 8
- if(prob(2))
- broken(1)
- if("bulb")
- brightness = 4
- if(prob(5))
- broken(1)
- spawn(1)
- update(0)
-
-/obj/machinery/light/Del()
- var/area/A = get_area(src)
- if(A)
- on = 0
-// A.update_lights()
- ..()
-
-/obj/machinery/light/update_icon()
-
- switch(status) // set icon_states
- if(LIGHT_OK)
- icon_state = "[base_state][on]"
- if(LIGHT_EMPTY)
- icon_state = "[base_state]-empty"
- on = 0
- if(LIGHT_BURNED)
- icon_state = "[base_state]-burned"
- on = 0
- if(LIGHT_BROKEN)
- icon_state = "[base_state]-broken"
- on = 0
- return
-
-// update the icon_state and luminosity of the light depending on its state
-/obj/machinery/light/proc/update(var/trigger = 1)
-
- update_icon()
- if(on)
- if(luminosity != brightness)
- switchcount++
- if(rigged)
- if(status == LIGHT_OK && trigger)
- explode()
- else if( prob( min(60, switchcount*switchcount*0.01) ) )
- if(status == LIGHT_OK && trigger)
- status = LIGHT_BURNED
- icon_state = "[base_state]-burned"
- on = 0
- SetLuminosity(0)
- else
- use_power = 2
- SetLuminosity(brightness)
- else
- use_power = 1
- SetLuminosity(0)
-
- active_power_usage = (luminosity * 10)
- if(on != on_gs)
- on_gs = on
-
-
-// attempt to set the light's on/off status
-// will not switch on if broken/burned/empty
-/obj/machinery/light/proc/seton(var/s)
- on = (s && status == LIGHT_OK)
- update()
-
-// examine verb
-/obj/machinery/light/examine()
- set src in oview(1)
- ..()
- if(usr && !usr.stat)
- switch(status)
- if(LIGHT_OK)
- usr << "It is turned [on? "on" : "off"]."
- if(LIGHT_EMPTY)
- usr << "The [fitting] has been removed."
- if(LIGHT_BURNED)
- usr << "The [fitting] is burnt out."
- if(LIGHT_BROKEN)
- usr << "The [fitting] has been smashed."
-
-
-
-// attack with item - insert light (if right type), otherwise try to break the light
-
-/obj/machinery/light/attackby(obj/item/W, mob/user)
-
- //Light replacer code
- if(istype(W, /obj/item/device/lightreplacer))
- var/obj/item/device/lightreplacer/LR = W
- if(isliving(user))
- var/mob/living/U = user
- LR.ReplaceLight(src, U)
- return
-
- // attempt to insert light
- if(istype(W, /obj/item/weapon/light))
- if(status != LIGHT_EMPTY)
- user << "There is a [fitting] already inserted."
- return
- else
- src.add_fingerprint(user)
- var/obj/item/weapon/light/L = W
- if(istype(L, light_type))
- status = L.status
- user << "You insert the [L.name]."
- switchcount = L.switchcount
- rigged = L.rigged
- brightness = L.brightness
- on = has_power()
- update()
-
- user.drop_item() //drop the item to update overlays and such
- del(L)
-
- if(on && rigged)
- explode()
- else
- user << "This type of light requires a [fitting]."
- return
-
- // attempt to break the light
- //If xenos decide they want to smash a light bulb with a toolbox, who am I to stop them? /N
-
- else if(status != LIGHT_BROKEN && status != LIGHT_EMPTY)
-
-
- if(prob(1+W.force * 5))
-
- user << "You hit the light, and it smashes!"
- for(var/mob/M in viewers(src))
- if(M == user)
- continue
- M.show_message("[user.name] smashed the light!", 3, "You hear a tinkle of breaking glass", 2)
- if(on && (W.flags & CONDUCT))
- //if(!user.mutations & COLD_RESISTANCE)
- if (prob(12))
- electrocute_mob(user, get_area(src), src, 0.3)
- broken()
-
- else
- user << "You hit the light!"
-
- // attempt to stick weapon into light socket
- else if(status == LIGHT_EMPTY)
- if(istype(W, /obj/item/weapon/screwdriver)) //If it's a screwdriver open it.
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 75, 1)
- user.visible_message("[user.name] opens [src]'s casing.", \
- "You open [src]'s casing.", "You hear a noise.")
- var/obj/machinery/light_construct/newlight = null
- switch(fitting)
- if("tube")
- newlight = new /obj/machinery/light_construct(src.loc)
- newlight.icon_state = "tube-construct-stage2"
-
- if("bulb")
- newlight = new /obj/machinery/light_construct/small(src.loc)
- newlight.icon_state = "bulb-construct-stage2"
- newlight.dir = src.dir
- newlight.stage = 2
- newlight.fingerprints = src.fingerprints
- newlight.fingerprintshidden = src.fingerprintshidden
- newlight.fingerprintslast = src.fingerprintslast
- del(src)
- return
-
- user << "You stick \the [W] into the light socket!"
- if(has_power() && (W.flags & CONDUCT))
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(3, 1, src)
- s.start()
- //if(!user.mutations & COLD_RESISTANCE)
- if (prob(75))
- electrocute_mob(user, get_area(src), src, rand(0.7,1.0))
-
-
-// returns whether this light has power
-// true if area has power and lightswitch is on
-/obj/machinery/light/proc/has_power()
- var/area/A = src.loc.loc
- return A.master.lightswitch && A.master.power_light
-
-/obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
- if(flickering) return
- flickering = 1
- spawn(0)
- if(on && status == LIGHT_OK)
- for(var/i = 0; i < amount; i++)
- if(status != LIGHT_OK) break
- on = !on
- update(0)
- sleep(rand(5, 15))
- on = (status == LIGHT_OK)
- update(0)
- flickering = 0
-
-// ai attack - make lights flicker, because why not
-
-/obj/machinery/light/attack_ai(mob/user)
- src.flicker(1)
- return
-
-// Aliens smash the bulb but do not get electrocuted./N
-/obj/machinery/light/attack_alien(mob/living/carbon/alien/humanoid/user)//So larva don't go breaking light bulbs.
- if(status == LIGHT_EMPTY||status == LIGHT_BROKEN)
- user << "\green That object is useless to you."
- return
- else if (status == LIGHT_OK||status == LIGHT_BURNED)
- for(var/mob/M in viewers(src))
- M.show_message("\red [user.name] smashed the light!", 3, "You hear a tinkle of breaking glass", 2)
- broken()
- return
-
-/obj/machinery/light/attack_animal(mob/living/simple_animal/M)
- if(M.melee_damage_upper == 0) return
- if(status == LIGHT_EMPTY||status == LIGHT_BROKEN)
- M << "\red That object is useless to you."
- return
- else if (status == LIGHT_OK||status == LIGHT_BURNED)
- for(var/mob/O in viewers(src))
- O.show_message("\red [M.name] smashed the light!", 3, "You hear a tinkle of breaking glass", 2)
- broken()
- return
-// attack with hand - remove tube/bulb
-// if hands aren't protected and the light is on, burn the player
-
-/obj/machinery/light/attack_hand(mob/user)
-
- add_fingerprint(user)
-
- if(status == LIGHT_EMPTY)
- user << "There is no [fitting] in this light."
- return
-
- // make it burn hands if not wearing fire-insulated gloves
- if(on)
- var/prot = 0
- var/mob/living/carbon/human/H = user
-
- if(istype(H))
-
- if(H.gloves)
- var/obj/item/clothing/gloves/G = H.gloves
- if(G.max_heat_protection_temperature)
- prot = (G.max_heat_protection_temperature > 360)
- else
- prot = 1
-
- if(prot > 0 || (COLD_RESISTANCE in user.mutations))
- user << "You remove the light [fitting]"
- else if(TK in user.mutations)
- user << "You telekinetically remove the light [fitting]."
- else
- user << "You try to remove the light [fitting], but you burn your hand on it!"
-
- var/obj/item/organ/limb/affecting = H.get_organ("[user.hand ? "l" : "r" ]_arm")
- if(affecting.take_damage( 0, 5 )) // 5 burn damage
- H.update_damage_overlays(0)
- H.updatehealth()
- return // if burned, don't remove the light
- else
- user << "You remove the light [fitting]."
- // create a light tube/bulb item and put it in the user's hand
- var/obj/item/weapon/light/L = new light_type()
- L.status = status
- L.rigged = rigged
- L.brightness = brightness
-
- // light item inherits the switchcount, then zero it
- L.switchcount = switchcount
- switchcount = 0
-
- L.update()
- L.add_fingerprint(user)
- L.loc = loc
-
- user.put_in_active_hand(L) //puts it in our active hand
-
- status = LIGHT_EMPTY
- update()
-
-/obj/machinery/light/attack_tk(mob/user)
- if(status == LIGHT_EMPTY)
- user << "There is no [fitting] in this light."
- return
-
- user << "You telekinetically remove the light [fitting]."
- // create a light tube/bulb item and put it in the user's hand
- var/obj/item/weapon/light/L = new light_type()
- L.status = status
- L.rigged = rigged
- L.brightness = brightness
-
- // light item inherits the switchcount, then zero it
- L.switchcount = switchcount
- switchcount = 0
-
- L.update()
- L.add_fingerprint(user)
- L.loc = loc
-
- status = LIGHT_EMPTY
- update()
-
-// break the light and make sparks if was on
-
-/obj/machinery/light/proc/broken(var/skip_sound_and_sparks = 0)
- if(status == LIGHT_EMPTY)
- return
-
- if(!skip_sound_and_sparks)
- if(status == LIGHT_OK || status == LIGHT_BURNED)
- playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
- if(on)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(3, 1, src)
- s.start()
- status = LIGHT_BROKEN
- update()
-
-/obj/machinery/light/proc/fix()
- if(status == LIGHT_OK)
- return
- status = LIGHT_OK
- brightness = initial(brightness)
- on = 1
- update()
-
-// explosion effect
-// destroy the whole light fixture or just shatter it
-
-/obj/machinery/light/ex_act(severity)
- switch(severity)
- if(1.0)
- del(src)
- return
- if(2.0)
- if (prob(75))
- broken()
- if(3.0)
- if (prob(50))
- broken()
- return
-
-//blob effect
-
-/obj/machinery/light/blob_act()
- if(prob(75))
- broken()
-
-
-// timed process
-// use power
-
-#define LIGHTING_POWER_FACTOR 20 //20W per unit luminosity
-
-/obj/machinery/light/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY
- if(on)
- use_power(luminosity * LIGHTING_POWER_FACTOR, LIGHT)
-
-// called when area power state changes
-/obj/machinery/light/power_change()
- spawn(10)
- var/area/A = src.loc.loc
- A = A.master
- seton(A.lightswitch && A.power_light)
-
-// called when on fire
-
-/obj/machinery/light/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- if(prob(max(0, exposed_temperature - 673))) //0% at <400C, 100% at >500C
- broken()
-
-// explode the light
-
-/obj/machinery/light/proc/explode()
- var/turf/T = get_turf(src.loc)
- spawn(0)
- broken() // break it first to give a warning
- sleep(2)
- explosion(T, 0, 0, 2, 2)
- sleep(1)
- del(src)
-
-// the light item
-// can be tube or bulb subtypes
-// will fit into empty /obj/machinery/light of the corresponding type
-
-/obj/item/weapon/light
- icon = 'icons/obj/lighting.dmi'
- force = 2
- throwforce = 5
- w_class = 1
- var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN
- var/base_state
- var/switchcount = 0 // number of times switched
- m_amt = 60
- var/rigged = 0 // true if rigged to explode
- var/brightness = 2 //how much light it gives off
-
-/obj/item/weapon/light/tube
- name = "light tube"
- desc = "A replacement light tube."
- icon_state = "ltube"
- base_state = "ltube"
- item_state = "c_tube"
- g_amt = 100
- brightness = 8
-
-/obj/item/weapon/light/tube/large
- w_class = 2
- name = "large light tube"
- brightness = 15
-
-/obj/item/weapon/light/bulb
- name = "light bulb"
- desc = "A replacement light bulb."
- icon_state = "lbulb"
- base_state = "lbulb"
- item_state = "contvapour"
- g_amt = 100
- brightness = 5
-
-/obj/item/weapon/light/throw_impact(atom/hit_atom)
- ..()
- shatter()
-
-/obj/item/weapon/light/bulb/fire
- name = "fire bulb"
- desc = "A replacement fire bulb."
- icon_state = "fbulb"
- base_state = "fbulb"
- item_state = "egg4"
- g_amt = 100
- brightness = 5
-
-// update the icon state and description of the light
-
-/obj/item/weapon/light/proc/update()
- switch(status)
- if(LIGHT_OK)
- icon_state = base_state
- desc = "A replacement [name]."
- if(LIGHT_BURNED)
- icon_state = "[base_state]-burned"
- desc = "A burnt-out [name]."
- if(LIGHT_BROKEN)
- icon_state = "[base_state]-broken"
- desc = "A broken [name]."
-
-
-/obj/item/weapon/light/New()
- ..()
- switch(name)
- if("light tube")
- brightness = rand(6,9)
- if("light bulb")
- brightness = rand(4,6)
- update()
-
-
-// attack bulb/tube with object
-// if a syringe, can inject plasma to make it explode
-/obj/item/weapon/light/attackby(var/obj/item/I, var/mob/user)
- ..()
- if(istype(I, /obj/item/weapon/reagent_containers/syringe))
- var/obj/item/weapon/reagent_containers/syringe/S = I
-
- user << "You inject the solution into the [src]."
-
- if(S.reagents.has_reagent("plasma", 5))
-
- rigged = 1
-
- S.reagents.clear_reagents()
- else
- ..()
- return
-
-// called after an attack with a light item
-// shatter light, unless it was an attempt to put it in a light socket
-// now only shatter if the intent was harm
-
-/obj/item/weapon/light/afterattack(atom/target, mob/user,proximity)
- if(!proximity) return
- if(istype(target, /obj/machinery/light))
- return
- if(user.a_intent != "harm")
- return
-
- shatter()
-
-/obj/item/weapon/light/proc/shatter()
- if(status == LIGHT_OK || status == LIGHT_BURNED)
- src.visible_message("\red [name] shatters.","\red You hear a small glass object shatter.")
- status = LIGHT_BROKEN
- force = 5
- playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
- update()
+// The lighting system
+//
+// consists of light fixtures (/obj/machinery/light) and light tube/bulb items (/obj/item/weapon/light)
+
+
+// status values shared between lighting fixtures and items
+#define LIGHT_OK 0
+#define LIGHT_EMPTY 1
+#define LIGHT_BROKEN 2
+#define LIGHT_BURNED 3
+
+
+
+/obj/item/light_fixture_frame
+ name = "light fixture frame"
+ desc = "Used for building lights."
+ icon = 'icons/obj/lighting.dmi'
+ icon_state = "tube-construct-item"
+ flags = CONDUCT
+ var/fixture_type = "tube"
+ var/obj/machinery/light/newlight = null
+ var/sheets_refunded = 2
+
+/obj/item/light_fixture_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if (istype(W, /obj/item/weapon/wrench))
+ new /obj/item/stack/sheet/metal( get_turf(src.loc), sheets_refunded )
+ del(src)
+ return
+ ..()
+
+/obj/item/light_fixture_frame/proc/try_build(turf/on_wall)
+ if (get_dist(on_wall,usr)>1)
+ return
+ var/ndir = get_dir(usr,on_wall)
+ if (!(ndir in cardinal))
+ return
+ var/turf/loc = get_turf(usr)
+ if (!istype(loc, /turf/simulated/floor))
+ usr << "\red [src.name] cannot be placed on this spot."
+ return
+ usr << "Attaching [src] to the wall."
+ playsound(src.loc, 'sound/machines/click.ogg', 75, 1)
+ var/constrdir = usr.dir
+ var/constrloc = usr.loc
+ if (!do_after(usr, 30))
+ return
+ switch(fixture_type)
+ if("bulb")
+ newlight = new /obj/machinery/light_construct/small(constrloc)
+ if("tube")
+ newlight = new /obj/machinery/light_construct(constrloc)
+ newlight.dir = constrdir
+ newlight.fingerprints = src.fingerprints
+ newlight.fingerprintshidden = src.fingerprintshidden
+ newlight.fingerprintslast = src.fingerprintslast
+
+ usr.visible_message("[usr.name] attaches [src] to the wall.", \
+ "You attach [src] to the wall.")
+ del(src)
+
+/obj/item/light_fixture_frame/small
+ name = "small light fixture frame"
+ desc = "Used for building small lights."
+ icon = 'icons/obj/lighting.dmi'
+ icon_state = "bulb-construct-item"
+ flags = CONDUCT
+ fixture_type = "bulb"
+ sheets_refunded = 1
+
+/obj/machinery/light_construct
+ name = "light fixture frame"
+ desc = "A light fixture under construction."
+ icon = 'icons/obj/lighting.dmi'
+ icon_state = "tube-construct-stage1"
+ anchored = 1
+ layer = 5
+ var/stage = 1
+ var/fixture_type = "tube"
+ var/sheets_refunded = 2
+ var/obj/machinery/light/newlight = null
+
+/obj/machinery/light_construct/New()
+ ..()
+ if (fixture_type == "bulb")
+ icon_state = "bulb-construct-stage1"
+
+/obj/machinery/light_construct/examine()
+ set src in view()
+ ..()
+ if (!(usr in view(2))) return
+ switch(src.stage)
+ if(1)
+ usr << "It's an empty frame."
+ return
+ if(2)
+ usr << "It's wired."
+ return
+ if(3)
+ usr << "The casing is closed."
+ return
+
+/obj/machinery/light_construct/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ src.add_fingerprint(user)
+ if (istype(W, /obj/item/weapon/wrench))
+ if (src.stage == 1)
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
+ usr << "You begin deconstructing [src]."
+ if (!do_after(usr, 30))
+ return
+ new /obj/item/stack/sheet/metal( get_turf(src.loc), sheets_refunded )
+ user.visible_message("[user.name] deconstructs [src].", \
+ "You deconstruct [src].", "You hear a noise.")
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1)
+ del(src)
+ if (src.stage == 2)
+ usr << "You have to remove the wires first."
+ return
+
+ if (src.stage == 3)
+ usr << "You have to unscrew the case first."
+ return
+
+ if(istype(W, /obj/item/weapon/wirecutters))
+ if (src.stage != 2) return
+ src.stage = 1
+ switch(fixture_type)
+ if ("tube")
+ src.icon_state = "tube-construct-stage1"
+ if("bulb")
+ src.icon_state = "bulb-construct-stage1"
+ new /obj/item/stack/cable_coil(get_turf(src.loc), 1, "red")
+ user.visible_message("[user.name] removes the wiring from [src].", \
+ "You remove the wiring from [src].", "You hear a noise.")
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
+ return
+
+ if(istype(W, /obj/item/stack/cable_coil))
+ if (src.stage != 1) return
+ var/obj/item/stack/cable_coil/coil = W
+ coil.use(1)
+ switch(fixture_type)
+ if ("tube")
+ src.icon_state = "tube-construct-stage2"
+ if("bulb")
+ src.icon_state = "bulb-construct-stage2"
+ src.stage = 2
+ user.visible_message("[user.name] adds wires to [src].", \
+ "You add wires to [src].")
+ return
+
+ if(istype(W, /obj/item/weapon/screwdriver))
+ if (src.stage == 2)
+ switch(fixture_type)
+ if ("tube")
+ src.icon_state = "tube-empty"
+ if("bulb")
+ src.icon_state = "bulb-empty"
+ src.stage = 3
+ user.visible_message("[user.name] closes [src]'s casing.", \
+ "You close [src]'s casing.", "You hear a noise.")
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 75, 1)
+
+ switch(fixture_type)
+
+ if("tube")
+ newlight = new /obj/machinery/light/built(src.loc)
+ if ("bulb")
+ newlight = new /obj/machinery/light/small/built(src.loc)
+
+ newlight.dir = src.dir
+ src.transfer_fingerprints_to(newlight)
+ del(src)
+ return
+ ..()
+
+/obj/machinery/light_construct/small
+ name = "small light fixture frame"
+ desc = "A small light fixture under construction."
+ icon = 'icons/obj/lighting.dmi'
+ icon_state = "bulb-construct-stage1"
+ anchored = 1
+ layer = 5
+ stage = 1
+ fixture_type = "bulb"
+ sheets_refunded = 1
+
+// the standard tube light fixture
+/obj/machinery/light
+ name = "light fixture"
+ icon = 'icons/obj/lighting.dmi'
+ var/base_state = "tube" // base description and icon_state
+ icon_state = "tube1"
+ desc = "A lighting fixture."
+ anchored = 1
+ layer = 5 // They were appearing under mobs which is a little weird - Ostaf
+ use_power = 2
+ idle_power_usage = 2
+ active_power_usage = 20
+ power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list
+ var/on = 0 // 1 if on, 0 if off
+ var/on_gs = 0
+ var/brightness = 8 // luminosity when on, also used in power calculation
+ var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN
+ var/flickering = 0
+ var/light_type = /obj/item/weapon/light/tube // the type of light item
+ var/fitting = "tube"
+ var/switchcount = 0 // count of number of times switched on/off
+ // this is used to calc the probability the light burns out
+
+ var/rigged = 0 // true if rigged to explode
+
+// the smaller bulb light fixture
+
+/obj/machinery/light/small
+ icon_state = "bulb1"
+ base_state = "bulb"
+ fitting = "bulb"
+ brightness = 4
+ desc = "A small lighting fixture."
+ light_type = /obj/item/weapon/light/bulb
+
+
+/obj/machinery/light/Move()
+ if(status != LIGHT_BROKEN) broken(1)
+ return ..()
+
+/obj/machinery/light/built/New()
+ status = LIGHT_EMPTY
+ update(0)
+ ..()
+
+/obj/machinery/light/small/built/New()
+ status = LIGHT_EMPTY
+ update(0)
+ ..()
+
+
+// create a new lighting fixture
+/obj/machinery/light/New()
+ ..()
+ spawn(2)
+ switch(fitting)
+ if("tube")
+ brightness = 8
+ if(prob(2))
+ broken(1)
+ if("bulb")
+ brightness = 4
+ if(prob(5))
+ broken(1)
+ spawn(1)
+ update(0)
+
+/obj/machinery/light/Del()
+ var/area/A = get_area(src)
+ if(A)
+ on = 0
+// A.update_lights()
+ ..()
+
+/obj/machinery/light/update_icon()
+
+ switch(status) // set icon_states
+ if(LIGHT_OK)
+ icon_state = "[base_state][on]"
+ if(LIGHT_EMPTY)
+ icon_state = "[base_state]-empty"
+ on = 0
+ if(LIGHT_BURNED)
+ icon_state = "[base_state]-burned"
+ on = 0
+ if(LIGHT_BROKEN)
+ icon_state = "[base_state]-broken"
+ on = 0
+ return
+
+// update the icon_state and luminosity of the light depending on its state
+/obj/machinery/light/proc/update(var/trigger = 1)
+
+ update_icon()
+ if(on)
+ if(luminosity != brightness)
+ switchcount++
+ if(rigged)
+ if(status == LIGHT_OK && trigger)
+ explode()
+ else if( prob( min(60, switchcount*switchcount*0.01) ) )
+ if(status == LIGHT_OK && trigger)
+ status = LIGHT_BURNED
+ icon_state = "[base_state]-burned"
+ on = 0
+ SetLuminosity(0)
+ else
+ use_power = 2
+ SetLuminosity(brightness)
+ else
+ use_power = 1
+ SetLuminosity(0)
+
+ active_power_usage = (luminosity * 10)
+ if(on != on_gs)
+ on_gs = on
+
+
+// attempt to set the light's on/off status
+// will not switch on if broken/burned/empty
+/obj/machinery/light/proc/seton(var/s)
+ on = (s && status == LIGHT_OK)
+ update()
+
+// examine verb
+/obj/machinery/light/examine()
+ set src in oview(1)
+ ..()
+ if(usr && !usr.stat)
+ switch(status)
+ if(LIGHT_OK)
+ usr << "It is turned [on? "on" : "off"]."
+ if(LIGHT_EMPTY)
+ usr << "The [fitting] has been removed."
+ if(LIGHT_BURNED)
+ usr << "The [fitting] is burnt out."
+ if(LIGHT_BROKEN)
+ usr << "The [fitting] has been smashed."
+
+
+
+// attack with item - insert light (if right type), otherwise try to break the light
+
+/obj/machinery/light/attackby(obj/item/W, mob/user)
+
+ //Light replacer code
+ if(istype(W, /obj/item/device/lightreplacer))
+ var/obj/item/device/lightreplacer/LR = W
+ if(isliving(user))
+ var/mob/living/U = user
+ LR.ReplaceLight(src, U)
+ return
+
+ // attempt to insert light
+ if(istype(W, /obj/item/weapon/light))
+ if(status != LIGHT_EMPTY)
+ user << "There is a [fitting] already inserted."
+ return
+ else
+ src.add_fingerprint(user)
+ var/obj/item/weapon/light/L = W
+ if(istype(L, light_type))
+ status = L.status
+ user << "You insert the [L.name]."
+ switchcount = L.switchcount
+ rigged = L.rigged
+ brightness = L.brightness
+ on = has_power()
+ update()
+
+ user.drop_item() //drop the item to update overlays and such
+ del(L)
+
+ if(on && rigged)
+ explode()
+ else
+ user << "This type of light requires a [fitting]."
+ return
+
+ // attempt to break the light
+ //If xenos decide they want to smash a light bulb with a toolbox, who am I to stop them? /N
+
+ else if(status != LIGHT_BROKEN && status != LIGHT_EMPTY)
+
+
+ if(prob(1+W.force * 5))
+
+ user << "You hit the light, and it smashes!"
+ for(var/mob/M in viewers(src))
+ if(M == user)
+ continue
+ M.show_message("[user.name] smashed the light!", 3, "You hear a tinkle of breaking glass", 2)
+ if(on && (W.flags & CONDUCT))
+ //if(!user.mutations & COLD_RESISTANCE)
+ if (prob(12))
+ electrocute_mob(user, get_area(src), src, 0.3)
+ broken()
+
+ else
+ user << "You hit the light!"
+
+ // attempt to stick weapon into light socket
+ else if(status == LIGHT_EMPTY)
+ if(istype(W, /obj/item/weapon/screwdriver)) //If it's a screwdriver open it.
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 75, 1)
+ user.visible_message("[user.name] opens [src]'s casing.", \
+ "You open [src]'s casing.", "You hear a noise.")
+ var/obj/machinery/light_construct/newlight = null
+ switch(fitting)
+ if("tube")
+ newlight = new /obj/machinery/light_construct(src.loc)
+ newlight.icon_state = "tube-construct-stage2"
+
+ if("bulb")
+ newlight = new /obj/machinery/light_construct/small(src.loc)
+ newlight.icon_state = "bulb-construct-stage2"
+ newlight.dir = src.dir
+ newlight.stage = 2
+ newlight.fingerprints = src.fingerprints
+ newlight.fingerprintshidden = src.fingerprintshidden
+ newlight.fingerprintslast = src.fingerprintslast
+ del(src)
+ return
+
+ user << "You stick \the [W] into the light socket!"
+ if(has_power() && (W.flags & CONDUCT))
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(3, 1, src)
+ s.start()
+ //if(!user.mutations & COLD_RESISTANCE)
+ if (prob(75))
+ electrocute_mob(user, get_area(src), src, rand(0.7,1.0))
+
+
+// returns whether this light has power
+// true if area has power and lightswitch is on
+/obj/machinery/light/proc/has_power()
+ var/area/A = src.loc.loc
+ return A.master.lightswitch && A.master.power_light
+
+/obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
+ if(flickering) return
+ flickering = 1
+ spawn(0)
+ if(on && status == LIGHT_OK)
+ for(var/i = 0; i < amount; i++)
+ if(status != LIGHT_OK) break
+ on = !on
+ update(0)
+ sleep(rand(5, 15))
+ on = (status == LIGHT_OK)
+ update(0)
+ flickering = 0
+
+// ai attack - make lights flicker, because why not
+
+/obj/machinery/light/attack_ai(mob/user)
+ src.flicker(1)
+ return
+
+// Aliens smash the bulb but do not get electrocuted./N
+/obj/machinery/light/attack_alien(mob/living/carbon/alien/humanoid/user)//So larva don't go breaking light bulbs.
+ if(status == LIGHT_EMPTY||status == LIGHT_BROKEN)
+ user << "\green That object is useless to you."
+ return
+ else if (status == LIGHT_OK||status == LIGHT_BURNED)
+ for(var/mob/M in viewers(src))
+ M.show_message("\red [user.name] smashed the light!", 3, "You hear a tinkle of breaking glass", 2)
+ broken()
+ return
+
+/obj/machinery/light/attack_animal(mob/living/simple_animal/M)
+ if(M.melee_damage_upper == 0) return
+ if(status == LIGHT_EMPTY||status == LIGHT_BROKEN)
+ M << "\red That object is useless to you."
+ return
+ else if (status == LIGHT_OK||status == LIGHT_BURNED)
+ for(var/mob/O in viewers(src))
+ O.show_message("\red [M.name] smashed the light!", 3, "You hear a tinkle of breaking glass", 2)
+ broken()
+ return
+// attack with hand - remove tube/bulb
+// if hands aren't protected and the light is on, burn the player
+
+/obj/machinery/light/attack_hand(mob/user)
+
+ add_fingerprint(user)
+
+ if(status == LIGHT_EMPTY)
+ user << "There is no [fitting] in this light."
+ return
+
+ // make it burn hands if not wearing fire-insulated gloves
+ if(on)
+ var/prot = 0
+ var/mob/living/carbon/human/H = user
+
+ if(istype(H))
+
+ if(H.gloves)
+ var/obj/item/clothing/gloves/G = H.gloves
+ if(G.max_heat_protection_temperature)
+ prot = (G.max_heat_protection_temperature > 360)
+ else
+ prot = 1
+
+ if(prot > 0 || (COLD_RESISTANCE in user.mutations))
+ user << "You remove the light [fitting]"
+ else if(TK in user.mutations)
+ user << "You telekinetically remove the light [fitting]."
+ else
+ user << "You try to remove the light [fitting], but you burn your hand on it!"
+
+ var/obj/item/organ/limb/affecting = H.get_organ("[user.hand ? "l" : "r" ]_arm")
+ if(affecting.take_damage( 0, 5 )) // 5 burn damage
+ H.update_damage_overlays(0)
+ H.updatehealth()
+ return // if burned, don't remove the light
+ else
+ user << "You remove the light [fitting]."
+ // create a light tube/bulb item and put it in the user's hand
+ var/obj/item/weapon/light/L = new light_type()
+ L.status = status
+ L.rigged = rigged
+ L.brightness = brightness
+
+ // light item inherits the switchcount, then zero it
+ L.switchcount = switchcount
+ switchcount = 0
+
+ L.update()
+ L.add_fingerprint(user)
+ L.loc = loc
+
+ user.put_in_active_hand(L) //puts it in our active hand
+
+ status = LIGHT_EMPTY
+ update()
+
+/obj/machinery/light/attack_tk(mob/user)
+ if(status == LIGHT_EMPTY)
+ user << "There is no [fitting] in this light."
+ return
+
+ user << "You telekinetically remove the light [fitting]."
+ // create a light tube/bulb item and put it in the user's hand
+ var/obj/item/weapon/light/L = new light_type()
+ L.status = status
+ L.rigged = rigged
+ L.brightness = brightness
+
+ // light item inherits the switchcount, then zero it
+ L.switchcount = switchcount
+ switchcount = 0
+
+ L.update()
+ L.add_fingerprint(user)
+ L.loc = loc
+
+ status = LIGHT_EMPTY
+ update()
+
+// break the light and make sparks if was on
+
+/obj/machinery/light/proc/broken(var/skip_sound_and_sparks = 0)
+ if(status == LIGHT_EMPTY)
+ return
+
+ if(!skip_sound_and_sparks)
+ if(status == LIGHT_OK || status == LIGHT_BURNED)
+ playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
+ if(on)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(3, 1, src)
+ s.start()
+ status = LIGHT_BROKEN
+ update()
+
+/obj/machinery/light/proc/fix()
+ if(status == LIGHT_OK)
+ return
+ status = LIGHT_OK
+ brightness = initial(brightness)
+ on = 1
+ update()
+
+// explosion effect
+// destroy the whole light fixture or just shatter it
+
+/obj/machinery/light/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ del(src)
+ return
+ if(2.0)
+ if (prob(75))
+ broken()
+ if(3.0)
+ if (prob(50))
+ broken()
+ return
+
+//blob effect
+
+/obj/machinery/light/blob_act()
+ if(prob(75))
+ broken()
+
+
+// timed process
+// use power
+
+#define LIGHTING_POWER_FACTOR 20 //20W per unit luminosity
+
+/obj/machinery/light/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY
+ if(on)
+ use_power(luminosity * LIGHTING_POWER_FACTOR, LIGHT)
+
+// called when area power state changes
+/obj/machinery/light/power_change()
+ spawn(10)
+ var/area/A = src.loc.loc
+ A = A.master
+ seton(A.lightswitch && A.power_light)
+
+// called when on fire
+
+/obj/machinery/light/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ if(prob(max(0, exposed_temperature - 673))) //0% at <400C, 100% at >500C
+ broken()
+
+// explode the light
+
+/obj/machinery/light/proc/explode()
+ var/turf/T = get_turf(src.loc)
+ spawn(0)
+ broken() // break it first to give a warning
+ sleep(2)
+ explosion(T, 0, 0, 2, 2)
+ sleep(1)
+ del(src)
+
+// the light item
+// can be tube or bulb subtypes
+// will fit into empty /obj/machinery/light of the corresponding type
+
+/obj/item/weapon/light
+ icon = 'icons/obj/lighting.dmi'
+ force = 2
+ throwforce = 5
+ w_class = 1
+ var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN
+ var/base_state
+ var/switchcount = 0 // number of times switched
+ m_amt = 60
+ var/rigged = 0 // true if rigged to explode
+ var/brightness = 2 //how much light it gives off
+
+/obj/item/weapon/light/tube
+ name = "light tube"
+ desc = "A replacement light tube."
+ icon_state = "ltube"
+ base_state = "ltube"
+ item_state = "c_tube"
+ g_amt = 100
+ brightness = 8
+
+/obj/item/weapon/light/tube/large
+ w_class = 2
+ name = "large light tube"
+ brightness = 15
+
+/obj/item/weapon/light/bulb
+ name = "light bulb"
+ desc = "A replacement light bulb."
+ icon_state = "lbulb"
+ base_state = "lbulb"
+ item_state = "contvapour"
+ g_amt = 100
+ brightness = 5
+
+/obj/item/weapon/light/throw_impact(atom/hit_atom)
+ ..()
+ shatter()
+
+/obj/item/weapon/light/bulb/fire
+ name = "fire bulb"
+ desc = "A replacement fire bulb."
+ icon_state = "fbulb"
+ base_state = "fbulb"
+ item_state = "egg4"
+ g_amt = 100
+ brightness = 5
+
+// update the icon state and description of the light
+
+/obj/item/weapon/light/proc/update()
+ switch(status)
+ if(LIGHT_OK)
+ icon_state = base_state
+ desc = "A replacement [name]."
+ if(LIGHT_BURNED)
+ icon_state = "[base_state]-burned"
+ desc = "A burnt-out [name]."
+ if(LIGHT_BROKEN)
+ icon_state = "[base_state]-broken"
+ desc = "A broken [name]."
+
+
+/obj/item/weapon/light/New()
+ ..()
+ switch(name)
+ if("light tube")
+ brightness = rand(6,9)
+ if("light bulb")
+ brightness = rand(4,6)
+ update()
+
+
+// attack bulb/tube with object
+// if a syringe, can inject plasma to make it explode
+/obj/item/weapon/light/attackby(var/obj/item/I, var/mob/user)
+ ..()
+ if(istype(I, /obj/item/weapon/reagent_containers/syringe))
+ var/obj/item/weapon/reagent_containers/syringe/S = I
+
+ user << "You inject the solution into the [src]."
+
+ if(S.reagents.has_reagent("plasma", 5))
+
+ rigged = 1
+
+ S.reagents.clear_reagents()
+ else
+ ..()
+ return
+
+// called after an attack with a light item
+// shatter light, unless it was an attempt to put it in a light socket
+// now only shatter if the intent was harm
+
+/obj/item/weapon/light/afterattack(atom/target, mob/user,proximity)
+ if(!proximity) return
+ if(istype(target, /obj/machinery/light))
+ return
+ if(user.a_intent != "harm")
+ return
+
+ shatter()
+
+/obj/item/weapon/light/proc/shatter()
+ if(status == LIGHT_OK || status == LIGHT_BURNED)
+ src.visible_message("\red [name] shatters.","\red You hear a small glass object shatter.")
+ status = LIGHT_BROKEN
+ force = 5
+ playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
+ update()
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index edbbf4fd5f4..9ef4629d0b2 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -1,334 +1,334 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
-
-/* new portable generator - work in progress
-
-/obj/machinery/power/port_gen
- name = "portable generator"
- desc = "A portable generator used for emergency backup power."
- icon = 'generator.dmi'
- icon_state = "off"
- density = 1
- anchored = 0
- directwired = 0
- var/t_status = 0
- var/t_per = 5000
- var/filter = 1
- var/tank = null
- var/turf/inturf
- var/starter = 0
- var/rpm = 0
- var/rpmtarget = 0
- var/capacity = 1e6
- var/turf/outturf
- var/lastgen
-
-
-/obj/machinery/power/port_gen/process()
-ideally we're looking to generate 5000
-
-/obj/machinery/power/port_gen/attackby(obj/item/weapon/W, mob/user)
-tank [un]loading stuff
-
-/obj/machinery/power/port_gen/attack_hand(mob/user)
-turn on/off
-
-/obj/machinery/power/port_gen/examine()
-display round(lastgen) and plasmatank amount
-
-*/
-
-//Previous code been here forever, adding new framework for portable generators
-
-
-//Baseline portable generator. Has all the default handling. Not intended to be used on it's own (since it generates unlimited power).
-/obj/machinery/power/port_gen
- name = "portable generator"
- desc = "A portable generator for emergency backup power"
- icon = 'icons/obj/power.dmi'
- icon_state = "portgen0"
- density = 1
- anchored = 0
- directwired = 0
- use_power = 0
-
- var/active = 0
- var/power_gen = 5000
- var/recent_fault = 0
- var/power_output = 1
- var/consumption = 0
-
-/obj/machinery/power/port_gen/proc/HasFuel() //Placeholder for fuel check.
- return 1
-
-/obj/machinery/power/port_gen/proc/UseFuel() //Placeholder for fuel use.
- return
-
-/obj/machinery/power/port_gen/proc/DropFuel()
- return
-
-/obj/machinery/power/port_gen/proc/handleInactive()
- return
-
-/obj/machinery/power/port_gen/process()
- if(active && HasFuel() && !crit_fail && anchored && powernet)
- add_avail(power_gen * power_output)
- UseFuel()
- src.updateDialog()
-
- else
- active = 0
- icon_state = initial(icon_state)
- handleInactive()
-
-/obj/machinery/power/port_gen/attack_hand(mob/user as mob)
- if(..())
- return
- if(!anchored)
- return
-
-/obj/machinery/power/port_gen/examine()
- set src in oview(1)
- ..()
- if(active)
- usr << "It is running."
- else
- usr << "It isn't running."
-
-/obj/machinery/power/port_gen/pacman
- name = "\improper P.A.C.M.A.N.-type portable generator"
- var/sheets = 0
- var/max_sheets = 100
- var/sheet_name = ""
- var/sheet_path = /obj/item/stack/sheet/mineral/plasma
- var/board_path = "/obj/item/weapon/circuitboard/pacman"
- var/sheet_left = 0 // How much is left of the sheet
- var/time_per_sheet = 40
- var/heat = 0
-
-/obj/machinery/power/port_gen/pacman/initialize()
- ..()
- if(anchored)
- connect_to_network()
-
-/obj/machinery/power/port_gen/pacman/New()
- ..()
- component_parts = list()
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
- component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
- component_parts += new /obj/item/weapon/cable_coil(src, 1)
- component_parts += new /obj/item/weapon/cable_coil(src, 1)
- component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
- component_parts += new board_path(src)
- var/obj/sheet = new sheet_path(null)
- sheet_name = sheet.name
- RefreshParts()
-
-/obj/machinery/power/port_gen/pacman/Del()
- DropFuel()
- ..()
-
-/obj/machinery/power/port_gen/pacman/RefreshParts()
- var/temp_rating = 0
- var/temp_reliability = 0
- var/consumption_coeff = 0
- for(var/obj/item/weapon/stock_parts/SP in component_parts)
- if(istype(SP, /obj/item/weapon/stock_parts/matter_bin))
- max_sheets = SP.rating * SP.rating * 50
- else if(istype(SP, /obj/item/weapon/stock_parts/capacitor))
- temp_rating += SP.rating
- else
- consumption_coeff += SP.rating
- for(var/obj/item/weapon/CP in component_parts)
- temp_reliability += CP.reliability
- reliability = min(round(temp_reliability / 4), 100)
- power_gen = round(initial(power_gen) * temp_rating * 2)
- consumption = consumption_coeff
-
-/obj/machinery/power/port_gen/pacman/examine()
- ..()
- usr << "\blue The generator has [sheets] units of [sheet_name] fuel left, producing [power_gen] per cycle."
- if(crit_fail) usr << "\red The generator seems to have broken down."
-
-/obj/machinery/power/port_gen/pacman/HasFuel()
- if(sheets >= 1 / (time_per_sheet / power_output) - sheet_left)
- return 1
- return 0
-
-/obj/machinery/power/port_gen/pacman/DropFuel()
- if(sheets)
- var/fail_safe = 0
- while(sheets > 0 && fail_safe < 100)
- fail_safe += 1
- var/obj/item/stack/sheet/S = new sheet_path(loc)
- var/amount = min(sheets, S.max_amount)
- S.amount = amount
- sheets -= amount
-
-/obj/machinery/power/port_gen/pacman/UseFuel()
- var/needed_sheets = 1 / (time_per_sheet * consumption / power_output)
- var/temp = min(needed_sheets, sheet_left)
- needed_sheets -= temp
- sheet_left -= temp
- sheets -= round(needed_sheets)
- needed_sheets -= round(needed_sheets)
- if (sheet_left <= 0 && sheets > 0)
- sheet_left = 1 - needed_sheets
- sheets--
-
- var/lower_limit = 56 + power_output * 10
- var/upper_limit = 76 + power_output * 10
- var/bias = 0
- if (power_output > 4)
- upper_limit = 400
- bias = power_output - consumption * (4 - consumption)
- if (heat < lower_limit)
- heat += 4 - consumption
- else
- heat += rand(-7 + bias, 7 + bias)
- if (heat < lower_limit)
- heat = lower_limit
- if (heat > upper_limit)
- heat = upper_limit
-
- if (heat > 300)
- overheat()
- del(src)
- return
-
-/obj/machinery/power/port_gen/pacman/handleInactive()
-
- if (heat > 0)
- heat = max(heat - 2, 0)
- src.updateDialog()
-
-/obj/machinery/power/port_gen/pacman/proc/overheat()
- explosion(src.loc, 2, 5, 2, -1)
-
-/obj/machinery/power/port_gen/pacman/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(istype(O, sheet_path))
- var/obj/item/stack/addstack = O
- var/amount = min((max_sheets - sheets), addstack.amount)
- if(amount < 1)
- user << "\blue The [src.name] is full!"
- return
- user << "\blue You add [amount] sheets to the [src.name]."
- sheets += amount
- addstack.use(amount)
- updateUsrDialog()
- return
- else if (istype(O, /obj/item/weapon/card/emag))
- emagged = 1
- emp_act(1)
- else if(!active)
-
- if(istype(O, /obj/item/weapon/wrench))
-
- if(!anchored && !isinspace())
- connect_to_network()
- user << "\blue You secure the generator to the floor."
- anchored = 1
- else if(anchored)
- disconnect_from_network()
- user << "\blue You unsecure the generator from the floor."
- anchored = 0
-
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
-
- else if(istype(O, /obj/item/weapon/screwdriver))
- panel_open = !panel_open
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(panel_open)
- user << "\blue You open the access panel."
- else
- user << "\blue You close the access panel."
- else if(istype(O, /obj/item/weapon/crowbar) && panel_open)
- default_deconstruction_crowbar()
-
-/obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob)
- ..()
- if (!anchored)
- return
-
- interact(user)
-
-/obj/machinery/power/port_gen/pacman/attack_ai(mob/user as mob)
- interact(user)
-
-/obj/machinery/power/port_gen/pacman/attack_paw(mob/user as mob)
- interact(user)
-
-/obj/machinery/power/port_gen/pacman/interact(mob/user)
- if (get_dist(src, user) > 1 )
- if (!istype(user, /mob/living/silicon/ai))
- user.unset_machine()
- user << browse(null, "window=port_gen")
- return
-
- user.set_machine(src)
-
- var/dat = text("[name]
")
- if (active)
- dat += text("Generator: On
")
- else
- dat += text("Generator: Off
")
- dat += text("[capitalize(sheet_name)]: [sheets] - Eject
")
- var/stack_percent = round(sheet_left * 100, 1)
- dat += text("Current stack: [stack_percent]%
")
- dat += text("Power output: - [power_gen * power_output] +
")
- dat += text("Power current: [(powernet == null ? "Unconnected" : "[avail()]")]
")
- dat += text("Heat: [heat]
")
- dat += "
Close"
- user << browse("[dat]", "window=port_gen")
- onclose(user, "port_gen")
-
-/obj/machinery/power/port_gen/pacman/Topic(href, href_list)
- if(..())
- return
-
- src.add_fingerprint(usr)
- if(href_list["action"])
- if(href_list["action"] == "enable")
- if(!active && HasFuel() && !crit_fail)
- active = 1
- icon_state = "portgen1"
- src.updateUsrDialog()
- if(href_list["action"] == "disable")
- if (active)
- active = 0
- icon_state = "portgen0"
- src.updateUsrDialog()
- if(href_list["action"] == "eject")
- if(!active)
- DropFuel()
- src.updateUsrDialog()
- if(href_list["action"] == "lower_power")
- if (power_output > 1)
- power_output--
- src.updateUsrDialog()
- if (href_list["action"] == "higher_power")
- if (power_output < 4 || emagged)
- power_output++
- src.updateUsrDialog()
- if (href_list["action"] == "close")
- usr << browse(null, "window=port_gen")
- usr.unset_machine()
-
-/obj/machinery/power/port_gen/pacman/super
- name = "\improper S.U.P.E.R.P.A.C.M.A.N.-type portable generator"
- icon_state = "portgen1"
- sheet_path = /obj/item/stack/sheet/mineral/uranium
- power_gen = 15000
- time_per_sheet = 65
- board_path = "/obj/item/weapon/circuitboard/pacman/super"
- overheat()
- explosion(src.loc, 3, 3, 3, -1)
-
-/obj/machinery/power/port_gen/pacman/mrs
- name = "\improper M.R.S.P.A.C.M.A.N.-type portable generator"
- icon_state = "portgen2"
- sheet_path = /obj/item/stack/sheet/mineral/diamond
- power_gen = 40000
- time_per_sheet = 80
- board_path = "/obj/item/weapon/circuitboard/pacman/mrs"
- overheat()
- explosion(src.loc, 4, 4, 4, -1)
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
+
+/* new portable generator - work in progress
+
+/obj/machinery/power/port_gen
+ name = "portable generator"
+ desc = "A portable generator used for emergency backup power."
+ icon = 'generator.dmi'
+ icon_state = "off"
+ density = 1
+ anchored = 0
+ directwired = 0
+ var/t_status = 0
+ var/t_per = 5000
+ var/filter = 1
+ var/tank = null
+ var/turf/inturf
+ var/starter = 0
+ var/rpm = 0
+ var/rpmtarget = 0
+ var/capacity = 1e6
+ var/turf/outturf
+ var/lastgen
+
+
+/obj/machinery/power/port_gen/process()
+ideally we're looking to generate 5000
+
+/obj/machinery/power/port_gen/attackby(obj/item/weapon/W, mob/user)
+tank [un]loading stuff
+
+/obj/machinery/power/port_gen/attack_hand(mob/user)
+turn on/off
+
+/obj/machinery/power/port_gen/examine()
+display round(lastgen) and plasmatank amount
+
+*/
+
+//Previous code been here forever, adding new framework for portable generators
+
+
+//Baseline portable generator. Has all the default handling. Not intended to be used on it's own (since it generates unlimited power).
+/obj/machinery/power/port_gen
+ name = "portable generator"
+ desc = "A portable generator for emergency backup power"
+ icon = 'icons/obj/power.dmi'
+ icon_state = "portgen0"
+ density = 1
+ anchored = 0
+ directwired = 0
+ use_power = 0
+
+ var/active = 0
+ var/power_gen = 5000
+ var/recent_fault = 0
+ var/power_output = 1
+ var/consumption = 0
+
+/obj/machinery/power/port_gen/proc/HasFuel() //Placeholder for fuel check.
+ return 1
+
+/obj/machinery/power/port_gen/proc/UseFuel() //Placeholder for fuel use.
+ return
+
+/obj/machinery/power/port_gen/proc/DropFuel()
+ return
+
+/obj/machinery/power/port_gen/proc/handleInactive()
+ return
+
+/obj/machinery/power/port_gen/process()
+ if(active && HasFuel() && !crit_fail && anchored && powernet)
+ add_avail(power_gen * power_output)
+ UseFuel()
+ src.updateDialog()
+
+ else
+ active = 0
+ icon_state = initial(icon_state)
+ handleInactive()
+
+/obj/machinery/power/port_gen/attack_hand(mob/user as mob)
+ if(..())
+ return
+ if(!anchored)
+ return
+
+/obj/machinery/power/port_gen/examine()
+ set src in oview(1)
+ ..()
+ if(active)
+ usr << "It is running."
+ else
+ usr << "It isn't running."
+
+/obj/machinery/power/port_gen/pacman
+ name = "\improper P.A.C.M.A.N.-type portable generator"
+ var/sheets = 0
+ var/max_sheets = 100
+ var/sheet_name = ""
+ var/sheet_path = /obj/item/stack/sheet/mineral/plasma
+ var/board_path = "/obj/item/weapon/circuitboard/pacman"
+ var/sheet_left = 0 // How much is left of the sheet
+ var/time_per_sheet = 40
+ var/heat = 0
+
+/obj/machinery/power/port_gen/pacman/initialize()
+ ..()
+ if(anchored)
+ connect_to_network()
+
+/obj/machinery/power/port_gen/pacman/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
+ component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+ component_parts += new board_path(src)
+ var/obj/sheet = new sheet_path(null)
+ sheet_name = sheet.name
+ RefreshParts()
+
+/obj/machinery/power/port_gen/pacman/Del()
+ DropFuel()
+ ..()
+
+/obj/machinery/power/port_gen/pacman/RefreshParts()
+ var/temp_rating = 0
+ var/temp_reliability = 0
+ var/consumption_coeff = 0
+ for(var/obj/item/weapon/stock_parts/SP in component_parts)
+ if(istype(SP, /obj/item/weapon/stock_parts/matter_bin))
+ max_sheets = SP.rating * SP.rating * 50
+ else if(istype(SP, /obj/item/weapon/stock_parts/capacitor))
+ temp_rating += SP.rating
+ else
+ consumption_coeff += SP.rating
+ for(var/obj/item/weapon/CP in component_parts)
+ temp_reliability += CP.reliability
+ reliability = min(round(temp_reliability / 4), 100)
+ power_gen = round(initial(power_gen) * temp_rating * 2)
+ consumption = consumption_coeff
+
+/obj/machinery/power/port_gen/pacman/examine()
+ ..()
+ usr << "\blue The generator has [sheets] units of [sheet_name] fuel left, producing [power_gen] per cycle."
+ if(crit_fail) usr << "\red The generator seems to have broken down."
+
+/obj/machinery/power/port_gen/pacman/HasFuel()
+ if(sheets >= 1 / (time_per_sheet / power_output) - sheet_left)
+ return 1
+ return 0
+
+/obj/machinery/power/port_gen/pacman/DropFuel()
+ if(sheets)
+ var/fail_safe = 0
+ while(sheets > 0 && fail_safe < 100)
+ fail_safe += 1
+ var/obj/item/stack/sheet/S = new sheet_path(loc)
+ var/amount = min(sheets, S.max_amount)
+ S.amount = amount
+ sheets -= amount
+
+/obj/machinery/power/port_gen/pacman/UseFuel()
+ var/needed_sheets = 1 / (time_per_sheet * consumption / power_output)
+ var/temp = min(needed_sheets, sheet_left)
+ needed_sheets -= temp
+ sheet_left -= temp
+ sheets -= round(needed_sheets)
+ needed_sheets -= round(needed_sheets)
+ if (sheet_left <= 0 && sheets > 0)
+ sheet_left = 1 - needed_sheets
+ sheets--
+
+ var/lower_limit = 56 + power_output * 10
+ var/upper_limit = 76 + power_output * 10
+ var/bias = 0
+ if (power_output > 4)
+ upper_limit = 400
+ bias = power_output - consumption * (4 - consumption)
+ if (heat < lower_limit)
+ heat += 4 - consumption
+ else
+ heat += rand(-7 + bias, 7 + bias)
+ if (heat < lower_limit)
+ heat = lower_limit
+ if (heat > upper_limit)
+ heat = upper_limit
+
+ if (heat > 300)
+ overheat()
+ del(src)
+ return
+
+/obj/machinery/power/port_gen/pacman/handleInactive()
+
+ if (heat > 0)
+ heat = max(heat - 2, 0)
+ src.updateDialog()
+
+/obj/machinery/power/port_gen/pacman/proc/overheat()
+ explosion(src.loc, 2, 5, 2, -1)
+
+/obj/machinery/power/port_gen/pacman/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ if(istype(O, sheet_path))
+ var/obj/item/stack/addstack = O
+ var/amount = min((max_sheets - sheets), addstack.amount)
+ if(amount < 1)
+ user << "\blue The [src.name] is full!"
+ return
+ user << "\blue You add [amount] sheets to the [src.name]."
+ sheets += amount
+ addstack.use(amount)
+ updateUsrDialog()
+ return
+ else if (istype(O, /obj/item/weapon/card/emag))
+ emagged = 1
+ emp_act(1)
+ else if(!active)
+
+ if(istype(O, /obj/item/weapon/wrench))
+
+ if(!anchored && !isinspace())
+ connect_to_network()
+ user << "\blue You secure the generator to the floor."
+ anchored = 1
+ else if(anchored)
+ disconnect_from_network()
+ user << "\blue You unsecure the generator from the floor."
+ anchored = 0
+
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+
+ else if(istype(O, /obj/item/weapon/screwdriver))
+ panel_open = !panel_open
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ if(panel_open)
+ user << "\blue You open the access panel."
+ else
+ user << "\blue You close the access panel."
+ else if(istype(O, /obj/item/weapon/crowbar) && panel_open)
+ default_deconstruction_crowbar()
+
+/obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob)
+ ..()
+ if (!anchored)
+ return
+
+ interact(user)
+
+/obj/machinery/power/port_gen/pacman/attack_ai(mob/user as mob)
+ interact(user)
+
+/obj/machinery/power/port_gen/pacman/attack_paw(mob/user as mob)
+ interact(user)
+
+/obj/machinery/power/port_gen/pacman/interact(mob/user)
+ if (get_dist(src, user) > 1 )
+ if (!istype(user, /mob/living/silicon/ai))
+ user.unset_machine()
+ user << browse(null, "window=port_gen")
+ return
+
+ user.set_machine(src)
+
+ var/dat = text("[name]
")
+ if (active)
+ dat += text("Generator: On
")
+ else
+ dat += text("Generator: Off
")
+ dat += text("[capitalize(sheet_name)]: [sheets] - Eject
")
+ var/stack_percent = round(sheet_left * 100, 1)
+ dat += text("Current stack: [stack_percent]%
")
+ dat += text("Power output: - [power_gen * power_output] +
")
+ dat += text("Power current: [(powernet == null ? "Unconnected" : "[avail()]")]
")
+ dat += text("Heat: [heat]
")
+ dat += "
Close"
+ user << browse("[dat]", "window=port_gen")
+ onclose(user, "port_gen")
+
+/obj/machinery/power/port_gen/pacman/Topic(href, href_list)
+ if(..())
+ return
+
+ src.add_fingerprint(usr)
+ if(href_list["action"])
+ if(href_list["action"] == "enable")
+ if(!active && HasFuel() && !crit_fail)
+ active = 1
+ icon_state = "portgen1"
+ src.updateUsrDialog()
+ if(href_list["action"] == "disable")
+ if (active)
+ active = 0
+ icon_state = "portgen0"
+ src.updateUsrDialog()
+ if(href_list["action"] == "eject")
+ if(!active)
+ DropFuel()
+ src.updateUsrDialog()
+ if(href_list["action"] == "lower_power")
+ if (power_output > 1)
+ power_output--
+ src.updateUsrDialog()
+ if (href_list["action"] == "higher_power")
+ if (power_output < 4 || emagged)
+ power_output++
+ src.updateUsrDialog()
+ if (href_list["action"] == "close")
+ usr << browse(null, "window=port_gen")
+ usr.unset_machine()
+
+/obj/machinery/power/port_gen/pacman/super
+ name = "\improper S.U.P.E.R.P.A.C.M.A.N.-type portable generator"
+ icon_state = "portgen1"
+ sheet_path = /obj/item/stack/sheet/mineral/uranium
+ power_gen = 15000
+ time_per_sheet = 65
+ board_path = "/obj/item/weapon/circuitboard/pacman/super"
+ overheat()
+ explosion(src.loc, 3, 3, 3, -1)
+
+/obj/machinery/power/port_gen/pacman/mrs
+ name = "\improper M.R.S.P.A.C.M.A.N.-type portable generator"
+ icon_state = "portgen2"
+ sheet_path = /obj/item/stack/sheet/mineral/diamond
+ power_gen = 40000
+ time_per_sheet = 80
+ board_path = "/obj/item/weapon/circuitboard/pacman/mrs"
+ overheat()
+ explosion(src.loc, 4, 4, 4, -1)
diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
index 2f09b4c4f4f..65de436a9d7 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
@@ -1,410 +1,416 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
-
-/*Composed of 7 parts
-3 Particle emitters
-proc
-emit_particle()
-
-1 power box
-the only part of this thing that uses power, can hack to mess with the pa/make it better
-
-1 fuel chamber
-contains procs for mixing gas and whatever other fuel it uses
-mix_gas()
-
-1 gas holder WIP
-acts like a tank valve on the ground that you wrench gas tanks onto
-proc
-extract_gas()
-return_gas()
-attach_tank()
-remove_tank()
-get_available_mix()
-
-1 End Cap
-
-1 Control computer
-interface for the pa, acts like a computer with an html menu for diff parts and a status report
-all other parts contain only a ref to this
-a /machine/, tells the others to do work
-contains ref for all parts
-proc
-process()
-check_build()
-
-Setup map
- |EC|
-CC|FC|
- |PB|
-PE|PE|PE
-
-
-Icon Addemdum
-Icon system is much more robust, and the icons are all variable based.
-Each part has a reference string, powered, strength, and contruction values.
-Using this the update_icon() proc is simplified a bit (using for absolutely was problematic with naming),
-so the icon_state comes out be:
-"[reference][strength]", with a switch controlling construction_states and ensuring that it doesn't
-power on while being contructed, and all these variables are set by the computer through it's scan list
-Essential order of the icons:
-Standard - [reference]
-Wrenched - [reference]
-Wired - [reference]w
-Closed - [reference]c
-Powered - [reference]p[strength]
-Strength being set by the computer and a null strength (Computer is powered off or inactive) returns a 'null', counting as empty
-So, hopefully this is helpful if any more icons are to be added/changed/wondering what the hell is going on here
-
-*/
-
-/obj/structure/particle_accelerator
- name = "Particle Accelerator"
- desc = "Part of a Particle Accelerator."
- icon = 'icons/obj/machines/particle_accelerator.dmi'
- icon_state = "none"
- anchored = 0
- density = 1
- var/obj/machinery/particle_accelerator/control_box/master = null
- var/construction_state = 0
- var/reference = null
- var/powered = 0
- var/strength = null
- var/desc_holder = null
-
-/obj/structure/particle_accelerator/end_cap
- name = "Alpha Particle Generation Array"
- desc_holder = "This is where Alpha particles are generated from \[REDACTED\]"
- icon_state = "end_cap"
- reference = "end_cap"
-
-/obj/structure/particle_accelerator/update_icon()
- ..()
- return
-
-
-/obj/structure/particle_accelerator/verb/rotate()
- set name = "Rotate Clockwise"
- set category = "Object"
- set src in oview(1)
-
- if (src.anchored || usr:stat)
- usr << "It is fastened to the floor!"
- return 0
- src.dir = turn(src.dir, 270)
- return 1
-
-/obj/structure/particle_accelerator/verb/rotateccw()
- set name = "Rotate Counter Clockwise"
- set category = "Object"
- set src in oview(1)
-
- if (src.anchored || usr:stat)
- usr << "It is fastened to the floor!"
- return 0
- src.dir = turn(src.dir, 90)
- return 1
-
-/obj/structure/particle_accelerator/examine()
- switch(src.construction_state)
- if(0)
- src.desc = text("A [name], looks like it's not attached to the flooring")
- if(1)
- src.desc = text("A [name], it is missing some cables")
- if(2)
- src.desc = text("A [name], the panel is open")
- if(3)
- src.desc = text("The [name] is assembled")
- if(powered)
- src.desc = src.desc_holder
- ..()
- return
-
-
-/obj/structure/particle_accelerator/attackby(obj/item/W, mob/user)
- if(istool(W))
- if(src.process_tool_hit(W,user))
- return
- ..()
- return
-
-
-/obj/structure/particle_accelerator/Move()
- ..()
- if(master && master.active)
- master.toggle_power()
- investigate_log("was moved whilst active; it powered down.","singulo")
-
-/obj/structure/particle_accelerator/ex_act(severity)
- switch(severity)
- if(1.0)
- del(src)
- return
- if(2.0)
- if (prob(50))
- del(src)
- return
- if(3.0)
- if (prob(25))
- del(src)
- return
- else
- return
-
-
-/obj/structure/particle_accelerator/blob_act()
- if(prob(50))
- del(src)
- return
-
-
-/obj/structure/particle_accelerator/meteorhit()
- if(prob(50))
- del(src)
- return
-
-/obj/structure/particle_accelerator/update_icon()
- switch(construction_state)
- if(0,1)
- icon_state="[reference]"
- if(2)
- icon_state="[reference]w"
- if(3)
- if(powered)
- icon_state="[reference]p[strength]"
- else
- icon_state="[reference]c"
- return
-
-/obj/structure/particle_accelerator/proc/update_state()
- if(master)
- master.update_state()
- return 0
-
-
-/obj/structure/particle_accelerator/proc/report_ready(var/obj/O)
- if(O && (O == master))
- if(construction_state >= 3)
- return 1
- return 0
-
-
-/obj/structure/particle_accelerator/proc/report_master()
- if(master)
- return master
- return 0
-
-
-/obj/structure/particle_accelerator/proc/connect_master(var/obj/O)
- if(O && istype(O,/obj/machinery/particle_accelerator/control_box))
- if(O.dir == src.dir)
- master = O
- return 1
- return 0
-
-
-/obj/structure/particle_accelerator/proc/process_tool_hit(var/obj/O, var/mob/user)
- if(!(O) || !(user))
- return 0
- if(!ismob(user) || !isobj(O))
- return 0
- var/temp_state = src.construction_state
-
- switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps
- if(0)
- if(istype(O, /obj/item/weapon/wrench) && !isinspace())
- playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
- src.anchored = 1
- user.visible_message("[user.name] secures the [src.name] to the floor.", \
- "You secure the external bolts.")
- temp_state++
- if(1)
- if(istype(O, /obj/item/weapon/wrench))
- playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
- src.anchored = 0
- user.visible_message("[user.name] detaches the [src.name] from the floor.", \
- "You remove the external bolts.")
- temp_state--
- else if(istype(O, /obj/item/weapon/cable_coil))
- if(O:use(1,user))
- user.visible_message("[user.name] adds wires to the [src.name].", \
- "You add some wires.")
- temp_state++
- if(2)
- if(istype(O, /obj/item/weapon/wirecutters))//TODO:Shock user if its on?
- user.visible_message("[user.name] removes some wires from the [src.name].", \
- "You remove some wires.")
- temp_state--
- else if(istype(O, /obj/item/weapon/screwdriver))
- user.visible_message("[user.name] closes the [src.name]'s access panel.", \
- "You close the access panel.")
- temp_state++
- if(3)
- if(istype(O, /obj/item/weapon/screwdriver))
- user.visible_message("[user.name] opens the [src.name]'s access panel.", \
- "You open the access panel.")
- temp_state--
- if(temp_state == src.construction_state)//Nothing changed
- return 0
- else
- src.construction_state = temp_state
- if(src.construction_state < 3)//Was taken apart, update state
- update_state()
- update_icon()
- return 1
- return 0
-
-
-
-/obj/machinery/particle_accelerator
- name = "Particle Accelerator"
- desc = "Part of a Particle Accelerator."
- icon = 'icons/obj/machines/particle_accelerator.dmi'
- icon_state = "none"
- anchored = 0
- density = 1
- use_power = 0
- idle_power_usage = 0
- active_power_usage = 0
- var/construction_state = 0
- var/active = 0
- var/reference = null
- var/powered = null
- var/strength = 0
- var/desc_holder = null
-
-
-/obj/machinery/particle_accelerator/verb/rotate()
- set name = "Rotate Clockwise"
- set category = "Object"
- set src in oview(1)
-
- if (src.anchored || usr:stat)
- usr << "It is fastened to the floor!"
- return 0
- src.dir = turn(src.dir, 270)
- return 1
-
-/obj/machinery/particle_accelerator/verb/rotateccw()
- set name = "Rotate Counter-Clockwise"
- set category = "Object"
- set src in oview(1)
-
- if (src.anchored || usr:stat)
- usr << "It is fastened to the floor!"
- return 0
- src.dir = turn(src.dir, 90)
- return 1
-
-/obj/machinery/particle_accelerator/update_icon()
- return
-
-/obj/machinery/particle_accelerator/examine()
- switch(src.construction_state)
- if(0)
- src.desc = text("A [name], looks like it's not attached to the flooring")
- if(1)
- src.desc = text("A [name], it is missing some cables")
- if(2)
- src.desc = text("A [name], the panel is open")
- if(3)
- src.desc = text("The [name] is assembled")
- if(powered)
- src.desc = src.desc_holder
- ..()
- return
-
-
-/obj/machinery/particle_accelerator/attackby(obj/item/W, mob/user)
- if(istool(W))
- if(src.process_tool_hit(W,user))
- return
- ..()
- return
-
-/obj/machinery/particle_accelerator/ex_act(severity)
- switch(severity)
- if(1.0)
- del(src)
- return
- if(2.0)
- if (prob(50))
- del(src)
- return
- if(3.0)
- if (prob(25))
- del(src)
- return
- else
- return
-
-
-/obj/machinery/particle_accelerator/blob_act()
- if(prob(50))
- del(src)
- return
-
-
-/obj/machinery/particle_accelerator/meteorhit()
- if(prob(50))
- del(src)
- return
-
-
-/obj/machinery/particle_accelerator/proc/update_state()
- return 0
-
-
-/obj/machinery/particle_accelerator/proc/process_tool_hit(var/obj/O, var/mob/user)
- if(!(O) || !(user))
- return 0
- if(!ismob(user) || !isobj(O))
- return 0
- var/temp_state = src.construction_state
- switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps
- if(0)
- if(istype(O, /obj/item/weapon/wrench))
- playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
- src.anchored = 1
- user.visible_message("[user.name] secures the [src.name] to the floor.", \
- "You secure the external bolts.")
- temp_state++
- if(1)
- if(istype(O, /obj/item/weapon/wrench))
- playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
- src.anchored = 0
- user.visible_message("[user.name] detaches the [src.name] from the floor.", \
- "You remove the external bolts.")
- temp_state--
- else if(istype(O, /obj/item/weapon/cable_coil))
- if(O:use(1))
- user.visible_message("[user.name] adds wires to the [src.name].", \
- "You add some wires.")
- temp_state++
- if(2)
- if(istype(O, /obj/item/weapon/wirecutters))//TODO:Shock user if its on?
- user.visible_message("[user.name] removes some wires from the [src.name].", \
- "You remove some wires.")
- temp_state--
- else if(istype(O, /obj/item/weapon/screwdriver))
- user.visible_message("[user.name] closes the [src.name]'s access panel.", \
- "You close the access panel.")
- temp_state++
- if(3)
- if(istype(O, /obj/item/weapon/screwdriver))
- user.visible_message("[user.name] opens the [src.name]'s access panel.", \
- "You open the access panel.")
- temp_state--
- active = 0
- if(temp_state == src.construction_state)//Nothing changed
- return 0
- else
- if(src.construction_state < 3)//Was taken apart, update state
- update_state()
- if(use_power)
- use_power = 0
- src.construction_state = temp_state
- if(src.construction_state >= 3)
- use_power = 1
- update_icon()
- return 1
- return 0
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
+
+/*Composed of 7 parts
+3 Particle emitters
+proc
+emit_particle()
+
+1 power box
+the only part of this thing that uses power, can hack to mess with the pa/make it better
+
+1 fuel chamber
+contains procs for mixing gas and whatever other fuel it uses
+mix_gas()
+
+1 gas holder WIP
+acts like a tank valve on the ground that you wrench gas tanks onto
+proc
+extract_gas()
+return_gas()
+attach_tank()
+remove_tank()
+get_available_mix()
+
+1 End Cap
+
+1 Control computer
+interface for the pa, acts like a computer with an html menu for diff parts and a status report
+all other parts contain only a ref to this
+a /machine/, tells the others to do work
+contains ref for all parts
+proc
+process()
+check_build()
+
+Setup map
+ |EC|
+CC|FC|
+ |PB|
+PE|PE|PE
+
+
+Icon Addemdum
+Icon system is much more robust, and the icons are all variable based.
+Each part has a reference string, powered, strength, and contruction values.
+Using this the update_icon() proc is simplified a bit (using for absolutely was problematic with naming),
+so the icon_state comes out be:
+"[reference][strength]", with a switch controlling construction_states and ensuring that it doesn't
+power on while being contructed, and all these variables are set by the computer through it's scan list
+Essential order of the icons:
+Standard - [reference]
+Wrenched - [reference]
+Wired - [reference]w
+Closed - [reference]c
+Powered - [reference]p[strength]
+Strength being set by the computer and a null strength (Computer is powered off or inactive) returns a 'null', counting as empty
+So, hopefully this is helpful if any more icons are to be added/changed/wondering what the hell is going on here
+
+*/
+
+/obj/structure/particle_accelerator
+ name = "Particle Accelerator"
+ desc = "Part of a Particle Accelerator."
+ icon = 'icons/obj/machines/particle_accelerator.dmi'
+ icon_state = "none"
+ anchored = 0
+ density = 1
+ var/obj/machinery/particle_accelerator/control_box/master = null
+ var/construction_state = 0
+ var/reference = null
+ var/powered = 0
+ var/strength = null
+ var/desc_holder = null
+
+/obj/structure/particle_accelerator/Del()
+ construction_state = 0
+ if(master)
+ master.part_scan()
+ ..()
+
+/obj/structure/particle_accelerator/end_cap
+ name = "Alpha Particle Generation Array"
+ desc_holder = "This is where Alpha particles are generated from \[REDACTED\]"
+ icon_state = "end_cap"
+ reference = "end_cap"
+
+/obj/structure/particle_accelerator/update_icon()
+ ..()
+ return
+
+
+/obj/structure/particle_accelerator/verb/rotate()
+ set name = "Rotate Clockwise"
+ set category = "Object"
+ set src in oview(1)
+
+ if (src.anchored || usr:stat)
+ usr << "It is fastened to the floor!"
+ return 0
+ src.dir = turn(src.dir, 270)
+ return 1
+
+/obj/structure/particle_accelerator/verb/rotateccw()
+ set name = "Rotate Counter Clockwise"
+ set category = "Object"
+ set src in oview(1)
+
+ if (src.anchored || usr:stat)
+ usr << "It is fastened to the floor!"
+ return 0
+ src.dir = turn(src.dir, 90)
+ return 1
+
+/obj/structure/particle_accelerator/examine()
+ switch(src.construction_state)
+ if(0)
+ src.desc = text("A [name], looks like it's not attached to the flooring")
+ if(1)
+ src.desc = text("A [name], it is missing some cables")
+ if(2)
+ src.desc = text("A [name], the panel is open")
+ if(3)
+ src.desc = text("The [name] is assembled")
+ if(powered)
+ src.desc = src.desc_holder
+ ..()
+ return
+
+
+/obj/structure/particle_accelerator/attackby(obj/item/W, mob/user)
+ if(istool(W))
+ if(src.process_tool_hit(W,user))
+ return
+ ..()
+ return
+
+
+/obj/structure/particle_accelerator/Move()
+ ..()
+ if(master && master.active)
+ master.toggle_power()
+ investigate_log("was moved whilst active; it powered down.","singulo")
+
+/obj/structure/particle_accelerator/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ del(src)
+ return
+ if(2.0)
+ if (prob(50))
+ del(src)
+ return
+ if(3.0)
+ if (prob(25))
+ del(src)
+ return
+ else
+ return
+
+
+/obj/structure/particle_accelerator/blob_act()
+ if(prob(50))
+ del(src)
+ return
+
+
+/obj/structure/particle_accelerator/meteorhit()
+ if(prob(50))
+ del(src)
+ return
+
+/obj/structure/particle_accelerator/update_icon()
+ switch(construction_state)
+ if(0,1)
+ icon_state="[reference]"
+ if(2)
+ icon_state="[reference]w"
+ if(3)
+ if(powered)
+ icon_state="[reference]p[strength]"
+ else
+ icon_state="[reference]c"
+ return
+
+/obj/structure/particle_accelerator/proc/update_state()
+ if(master)
+ master.update_state()
+ return 0
+
+
+/obj/structure/particle_accelerator/proc/report_ready(var/obj/O)
+ if(O && (O == master))
+ if(construction_state >= 3)
+ return 1
+ return 0
+
+
+/obj/structure/particle_accelerator/proc/report_master()
+ if(master)
+ return master
+ return 0
+
+
+/obj/structure/particle_accelerator/proc/connect_master(var/obj/O)
+ if(O && istype(O,/obj/machinery/particle_accelerator/control_box))
+ if(O.dir == src.dir)
+ master = O
+ return 1
+ return 0
+
+
+/obj/structure/particle_accelerator/proc/process_tool_hit(var/obj/O, var/mob/user)
+ if(!(O) || !(user))
+ return 0
+ if(!ismob(user) || !isobj(O))
+ return 0
+ var/temp_state = src.construction_state
+
+ switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps
+ if(0)
+ if(istype(O, /obj/item/weapon/wrench) && !isinspace())
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
+ src.anchored = 1
+ user.visible_message("[user.name] secures the [src.name] to the floor.", \
+ "You secure the external bolts.")
+ temp_state++
+ if(1)
+ if(istype(O, /obj/item/weapon/wrench))
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
+ src.anchored = 0
+ user.visible_message("[user.name] detaches the [src.name] from the floor.", \
+ "You remove the external bolts.")
+ temp_state--
+ else if(istype(O, /obj/item/stack/cable_coil))
+ if(O:use(1,user))
+ user.visible_message("[user.name] adds wires to the [src.name].", \
+ "You add some wires.")
+ temp_state++
+ if(2)
+ if(istype(O, /obj/item/weapon/wirecutters))//TODO:Shock user if its on?
+ user.visible_message("[user.name] removes some wires from the [src.name].", \
+ "You remove some wires.")
+ temp_state--
+ else if(istype(O, /obj/item/weapon/screwdriver))
+ user.visible_message("[user.name] closes the [src.name]'s access panel.", \
+ "You close the access panel.")
+ temp_state++
+ if(3)
+ if(istype(O, /obj/item/weapon/screwdriver))
+ user.visible_message("[user.name] opens the [src.name]'s access panel.", \
+ "You open the access panel.")
+ temp_state--
+ if(temp_state == src.construction_state)//Nothing changed
+ return 0
+ else
+ src.construction_state = temp_state
+ if(src.construction_state < 3)//Was taken apart, update state
+ update_state()
+ update_icon()
+ return 1
+ return 0
+
+
+
+/obj/machinery/particle_accelerator
+ name = "Particle Accelerator"
+ desc = "Part of a Particle Accelerator."
+ icon = 'icons/obj/machines/particle_accelerator.dmi'
+ icon_state = "none"
+ anchored = 0
+ density = 1
+ use_power = 0
+ idle_power_usage = 0
+ active_power_usage = 0
+ var/construction_state = 0
+ var/active = 0
+ var/reference = null
+ var/powered = null
+ var/strength = 0
+ var/desc_holder = null
+
+
+/obj/machinery/particle_accelerator/verb/rotate()
+ set name = "Rotate Clockwise"
+ set category = "Object"
+ set src in oview(1)
+
+ if (src.anchored || usr:stat)
+ usr << "It is fastened to the floor!"
+ return 0
+ src.dir = turn(src.dir, 270)
+ return 1
+
+/obj/machinery/particle_accelerator/verb/rotateccw()
+ set name = "Rotate Counter-Clockwise"
+ set category = "Object"
+ set src in oview(1)
+
+ if (src.anchored || usr:stat)
+ usr << "It is fastened to the floor!"
+ return 0
+ src.dir = turn(src.dir, 90)
+ return 1
+
+/obj/machinery/particle_accelerator/update_icon()
+ return
+
+/obj/machinery/particle_accelerator/examine()
+ switch(src.construction_state)
+ if(0)
+ src.desc = text("A [name], looks like it's not attached to the flooring")
+ if(1)
+ src.desc = text("A [name], it is missing some cables")
+ if(2)
+ src.desc = text("A [name], the panel is open")
+ if(3)
+ src.desc = text("The [name] is assembled")
+ if(powered)
+ src.desc = src.desc_holder
+ ..()
+ return
+
+
+/obj/machinery/particle_accelerator/attackby(obj/item/W, mob/user)
+ if(istool(W))
+ if(src.process_tool_hit(W,user))
+ return
+ ..()
+ return
+
+/obj/machinery/particle_accelerator/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ del(src)
+ return
+ if(2.0)
+ if (prob(50))
+ del(src)
+ return
+ if(3.0)
+ if (prob(25))
+ del(src)
+ return
+ else
+ return
+
+
+/obj/machinery/particle_accelerator/blob_act()
+ if(prob(50))
+ del(src)
+ return
+
+
+/obj/machinery/particle_accelerator/meteorhit()
+ if(prob(50))
+ del(src)
+ return
+
+
+/obj/machinery/particle_accelerator/proc/update_state()
+ return 0
+
+
+/obj/machinery/particle_accelerator/proc/process_tool_hit(var/obj/O, var/mob/user)
+ if(!(O) || !(user))
+ return 0
+ if(!ismob(user) || !isobj(O))
+ return 0
+ var/temp_state = src.construction_state
+ switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps
+ if(0)
+ if(istype(O, /obj/item/weapon/wrench))
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
+ src.anchored = 1
+ user.visible_message("[user.name] secures the [src.name] to the floor.", \
+ "You secure the external bolts.")
+ temp_state++
+ if(1)
+ if(istype(O, /obj/item/weapon/wrench))
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
+ src.anchored = 0
+ user.visible_message("[user.name] detaches the [src.name] from the floor.", \
+ "You remove the external bolts.")
+ temp_state--
+ else if(istype(O, /obj/item/stack/cable_coil))
+ if(O:use(1))
+ user.visible_message("[user.name] adds wires to the [src.name].", \
+ "You add some wires.")
+ temp_state++
+ if(2)
+ if(istype(O, /obj/item/weapon/wirecutters))//TODO:Shock user if its on?
+ user.visible_message("[user.name] removes some wires from the [src.name].", \
+ "You remove some wires.")
+ temp_state--
+ else if(istype(O, /obj/item/weapon/screwdriver))
+ user.visible_message("[user.name] closes the [src.name]'s access panel.", \
+ "You close the access panel.")
+ temp_state++
+ if(3)
+ if(istype(O, /obj/item/weapon/screwdriver))
+ user.visible_message("[user.name] opens the [src.name]'s access panel.", \
+ "You open the access panel.")
+ temp_state--
+ active = 0
+ if(temp_state == src.construction_state)//Nothing changed
+ return 0
+ else
+ if(src.construction_state < 3)//Was taken apart, update state
+ update_state()
+ if(use_power)
+ use_power = 0
+ src.construction_state = temp_state
+ if(src.construction_state >= 3)
+ use_power = 1
+ update_icon()
+ return 1
+ return 0
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index 436dda7c594..5cb6f3f4a6d 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -26,6 +26,10 @@
connected_parts = list()
..()
+/obj/machinery/particle_accelerator/control_box/Del()
+ if(active)
+ toggle_power()
+ ..()
/obj/machinery/particle_accelerator/control_box/attack_hand(mob/user as mob)
if(construction_state >= 3)
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 706d5fbb2a4..d90798bcf52 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -1,9 +1,6 @@
// the SMES
// stores power
-#define SMESMAXCHARGELEVEL 200000
-#define SMESMAXOUTPUT 200000
-
/obj/machinery/power/smes
name = "power storage unit"
desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."
@@ -11,22 +8,36 @@
density = 1
anchored = 1
use_power = 0
- var/output = 50000
- var/lastout = 0
- var/loaddemand = 0
- var/capacity = 5e6
- var/charge = 1e6
- var/charging = 0
- var/chargemode = 0
- var/chargecount = 0
- var/chargelevel = 50000
- var/online = 1
- var/n_tag = null
+ var/capacity = 5e6 // maximum charge
+ var/charge = 1e6 // actual charge
+
+ var/input_attempt = 0 // 1 = attempting to charge, 0 = not attempting to charge
+ var/inputting = 0 // 1 = actually inputting, 0 = not inputting
+ var/input_level = 50000 // amount of power the SMES attempts to charge by
+ var/input_level_max = 200000 // cap on input_level
+ var/input_available = 0 // amount of charge available from input last tick
+
+ var/output_attempt = 1 // 1 = attempting to output, 0 = not attempting to output
+ var/outputting = 1 // 1 = actually outputting, 0 = not outputting
+ var/output_level = 50000 // amount of power the SMES attempts to output
+ var/output_level_max = 200000 // cap on output_level
+ var/output_used = 0 // amount of power actually outputted. may be less than output_level if the powernet returns excess power
+
var/obj/machinery/power/terminal/terminal = null
/obj/machinery/power/smes/New()
..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/smes(null)
+ component_parts += new /obj/item/weapon/cell/high(null)
+ component_parts += new /obj/item/weapon/cell/high(null)
+ component_parts += new /obj/item/weapon/cell/high(null)
+ component_parts += new /obj/item/weapon/cell/high(null)
+ component_parts += new /obj/item/weapon/cell/high(null)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 5)
+ RefreshParts()
spawn(5)
dir_loop:
for(var/d in cardinal)
@@ -35,29 +46,75 @@
if(term && term.dir == turn(d, 180))
terminal = term
break dir_loop
+
if(!terminal)
stat |= BROKEN
return
terminal.master = src
- updateicon()
+ update_icon()
return
+/obj/machinery/power/smes/RefreshParts()
+ var/IO = 0
+ var/C = 0
+ for(var/obj/item/weapon/stock_parts/capacitor/CP in component_parts)
+ IO += CP.rating
+ input_level_max = 200000 * IO
+ output_level_max = 200000 * IO
+ for(var/obj/item/weapon/cell/PC in component_parts)
+ C += PC.maxcharge
+ capacity = C / (15000) * 1e6
+
+/obj/machinery/power/smes/attackby(obj/item/I, mob/user)
+ if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I))
+ update_icon()
+ return
+
+ if(default_change_direction_wrench(user, I))
+ terminal = null
+ var/turf/T = get_step(src, dir)
+ for(var/obj/machinery/power/terminal/term in T)
+ if(term && term.dir == turn(dir, 180))
+ terminal = term
+ terminal.master = src
+ user << "Terminal found."
+ break
+ if(!terminal)
+ for(var/obj/structure/cable/C in T)
+ if(C.d1 == turn(dir, 180) || C.d2 == turn(dir, 180))
+ terminal = C
+ user << "Cable found."
+ break
+ if(!terminal)
+ user << "No power source found."
+ return
+ stat &= ~BROKEN
+ update_icon()
+ return
+
+ default_deconstruction_crowbar(I)
+
/obj/machinery/power/smes/Del()
- message_admins("SMES deleted at ([x],[y],[z] - JMP)")
- log_game("SMES deleted at ([x],[y],[z])")
- investigate_log("deleted at ([x],[y],[z])","singulo")
+ var/area/area = get_area(src)
+ message_admins("SMES deleted at ([area.name])")
+ log_game("SMES deleted at ([area.name])")
+ investigate_log("deleted at ([area.name])","singulo")
..()
-/obj/machinery/power/smes/proc/updateicon()
+/obj/machinery/power/smes/update_icon()
overlays.Cut()
if(stat & BROKEN) return
- overlays += image('icons/obj/power.dmi', "smes-op[online]")
+ if(panel_open)
+ return
- if(charging)
+
+ overlays += image('icons/obj/power.dmi', "smes-op[outputting]")
+
+ if(inputting)
overlays += image('icons/obj/power.dmi', "smes-oc1")
else
- if(chargemode)
+ if(input_attempt)
overlays += image('icons/obj/power.dmi', "smes-oc0")
var/clevel = chargedisplay()
@@ -78,71 +135,64 @@
//store machine state to see if we need to update the icon overlays
var/last_disp = chargedisplay()
- var/last_chrg = charging
- var/last_onln = online
+ var/last_chrg = inputting
+ var/last_onln = outputting
- if(terminal)
- var/excess = terminal.surplus()
+ if(terminal && input_attempt)
+ input_available = terminal.surplus()
- if(charging)
- if(excess >= 0) // if there's power available, try to charge
+ if(inputting)
+ if(input_available > 0 && input_available >= input_level) // if there's power available, try to charge
- var/load = min((capacity-charge)/SMESRATE, chargelevel) // charge at set rate, limited to spare capacity
+ var/load = min((capacity-charge)/SMESRATE, input_level) // charge at set rate, limited to spare capacity
charge += load * SMESRATE // increase the charge
add_load(load) // add the load to the terminal side network
else // if not enough capcity
- charging = 0 // stop charging
- chargecount = 0
+ inputting = 0 // stop inputting
else
- if(chargemode)
- if(chargecount > rand(3,6))
- charging = 1
- chargecount = 0
+ if(input_attempt && input_available > 0 && input_available >= input_level)
+ inputting = 1
- if(excess > chargelevel)
- chargecount++
- else
- chargecount = 0
- else
- chargecount = 0
- if(online) // if outputting
- lastout = min( charge/SMESRATE, output) //limit output to that stored
+ if(outputting)
+ output_used = min( charge/SMESRATE, output_level) //limit output to that stored
- charge -= lastout*SMESRATE // reduce the storage (may be recovered in /restore() if excessive)
+ charge -= output_used*SMESRATE // reduce the storage (may be recovered in /restore() if excessive)
- add_avail(lastout) // add output to powernet (smes side)
+ add_avail(output_used) // add output to powernet (smes side)
- if(charge < 0.0001)
- online = 0 // stop output if charge falls to zero
+ if(output_used < 0.0001) // either from no charge or set to 0
+ outputting = 0
investigate_log("lost power and turned off","singulo")
+ else if(output_attempt && charge > output_level && output_level > 0)
+ outputting = 1
+ else
+ output_used = 0
// only update icon if state changed
- if(last_disp != chargedisplay() || last_chrg != charging || last_onln != online)
- updateicon()
+ if(last_disp != chargedisplay() || last_chrg != inputting || last_onln != outputting)
+ update_icon()
+
- updateDialog()
- return
// called after all power processes are finished
// restores charge level to smes if there was excess this ptick
-
/obj/machinery/power/smes/proc/restore()
if(stat & BROKEN)
return
- if(!online)
- loaddemand = 0
+ if(!outputting)
+ output_used = 0
return
var/excess = powernet.netexcess // this was how much wasn't used on the network last ptick, minus any removed by other SMESes
- excess = min(lastout, excess) // clamp it to how much was actually output by this SMES last ptick
+ excess = min(output_used, excess) // clamp it to how much was actually output by this SMES last ptick
excess = min((capacity-charge)/SMESRATE, excess) // for safety, also limit recharge by space capacity of SMES (shouldn't happen)
@@ -153,10 +203,10 @@
charge += excess * SMESRATE
powernet.netexcess -= excess // remove the excess from the powernet, so later SMESes don't try to use it
- loaddemand = lastout-excess
+ output_used -= excess
if(clev != chargedisplay() )
- updateicon()
+ update_icon()
return
@@ -166,175 +216,128 @@
/obj/machinery/power/smes/attack_ai(mob/user)
- add_fingerprint(user)
if(stat & BROKEN) return
- interact(user)
+ ui_interact(user)
/obj/machinery/power/smes/attack_hand(mob/user)
add_fingerprint(user)
if(stat & BROKEN) return
- interact(user)
+ ui_interact(user)
-/obj/machinery/power/smes/interact(mob/user)
- if(get_dist(src, user) > 1 && !istype(user, /mob/living/silicon/ai))
- user.unset_machine()
- user << browse(null, "window=smes")
+/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
+ if(!user)
return
- user.set_machine(src)
+ var/list/data = list(
+ "capacityPercent" = round(100.0*charge/capacity, 0.1),
+ "capacity" = capacity,
+ "charge" = charge,
- var/t = "SMES Power Storage Unit [n_tag? "([n_tag])" : null]
"
+ "inputAttempt" = input_attempt,
+ "inputting" = inputting,
+ "inputLevel" = input_level,
+ "inputLevelMax" = input_level_max,
+ "inputAvailable" = input_available,
- t += "Stored capacity : [round(100.0*charge/capacity, 0.1)]%
"
-
- t += "Input: [charging ? "Charging" : "Not Charging"] [chargemode ? "Auto Off" : "Auto Off "]
"
-
-
- t += "Input level: M - - - [add_lspace(chargelevel,5)] + + + M
"
-
- t += "
"
-
- t += "Output: [online ? "Online Offline" : "Online Offline "]
"
-
- t += "Output level: M - - - [add_lspace(output,5)] + + + M
"
-
- t += "Output load: [round(loaddemand)] W
"
-
- t += "
Close"
-
- t += ""
- user << browse(t, "window=smes;size=460x300")
- onclose(user, "smes")
- return
+ "outputAttempt" = output_attempt,
+ "outputting" = outputting,
+ "outputLevel" = output_level,
+ "outputLevelMax" = output_level_max,
+ "outputUsed" = output_used
+ )
+ // update the ui if it exists, returns null if no ui is passed/found
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
+ if (!ui)
+ // the ui does not exist, so we'll create a new() one
+ // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
+ ui = new(user, src, ui_key, "smes.tmpl", "SMES - [name]", 350, 560)
+ // when the ui is first opened this is the data it will use
+ ui.set_initial_data(data)
+ // open the new ui window
+ ui.open()
+ // auto update every Master Controller tick
+ ui.set_auto_update(1)
/obj/machinery/power/smes/Topic(href, href_list)
+// world << "[href] ; [href_list[href]]"
+
if(..())
return
-//world << "[href] ; [href_list[href]]"
- if( href_list["close"] )
- usr << browse(null, "window=smes")
- usr.unset_machine()
- return
+ else if( href_list["input_attempt"] )
+ input_attempt = text2num(href_list["input_attempt"])
+ if(!input_attempt)
+ inputting = 0
+ log_smes(usr.ckey)
+ update_icon()
- else if( href_list["cmode"] )
- chargemode = !chargemode
- if(!chargemode)
- charging = 0
- investigate_log("input/output; [chargelevel>output?"":""][chargelevel]/[output] | Output-mode: [online?"on":"off"] | Input-mode: [chargemode?"auto":"off"] by [usr.key]","singulo")
- updateicon()
+ else if( href_list["output_attempt"] )
+ output_attempt = text2num(href_list["output_attempt"])
+ if(!output_attempt)
+ outputting = 0
+ log_smes(usr.ckey)
+ update_icon()
- else if( href_list["online"] )
- online = !online
- investigate_log("input/output; [chargelevel>output?"":""][chargelevel]/[output] | Output-mode: [online?"on":"off"] | Input-mode: [chargemode?"auto":"off"] by [usr.key]","singulo")
- updateicon()
-
- else if( href_list["input"] )
-
- var/i = text2num(href_list["input"])
-
- var/d = 0
- switch(i)
- if(-4)
- chargelevel = 0
- if(4)
- chargelevel = SMESMAXCHARGELEVEL //30000
-
- if(1)
- d = 100
- if(-1)
- d = -100
- if(2)
- d = 1000
- if(-2)
- d = -1000
- if(3)
- d = 10000
- if(-3)
- d = -10000
-
- chargelevel += d
- chargelevel = max(0, min(SMESMAXCHARGELEVEL, chargelevel)) // clamp to range
- investigate_log("input/output; [chargelevel>output?"":""][chargelevel]/[output] | Output-mode: [online?"on":"off"] | Input-mode: [chargemode?"auto":"off"] by [usr.key]","singulo")
- src.updateUsrDialog()
-
- else if( href_list["output"] )
-
- var/i = text2num(href_list["output"])
-
- var/d = 0
- switch(i)
- if(-4)
- output = 0
- if(4)
- output = SMESMAXOUTPUT //30000
-
- if(1)
- d = 100
- if(-1)
- d = -100
- if(2)
- d = 1000
- if(-2)
- d = -1000
- if(3)
- d = 10000
- if(-3)
- d = -10000
-
- output += d
- output = max(0, min(SMESMAXOUTPUT, output)) // clamp to range
-
- investigate_log("input/output; [chargelevel>output?"":""][chargelevel]/[output] | Output-mode: [online?"on":"off"] | Input-mode: [chargemode?"auto":"off"] by [usr.key]","singulo")
- src.updateUsrDialog()
-
-
-/obj/machinery/power/smes/proc/ion_act()
- if(src.z == 1)
- if(prob(1)) //explosion
- world << "\red SMES explosion in [src.loc.loc]"
- for(var/mob/M in viewers(src))
- M.show_message("\red The [src.name] is making strange noises!", 3, "\red You hear sizzling electronics.", 2)
- sleep(10*pick(4,5,6,7,10,14))
- var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
- smoke.set_up(3, 0, src.loc)
- smoke.attach(src)
- smoke.start()
- explosion(src.loc, -1, 0, 1, 3, 0)
- del(src)
- return
- if(prob(15)) //Power drain
- world << "\red SMES power drain in [src.loc.loc]"
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(3, 1, src)
- s.start()
- if(prob(50))
- emp_act(1)
+ else if( href_list["set_input_level"] )
+ switch(href_list["set_input_level"])
+ if("max")
+ input_level = input_level_max
+ if("custom")
+ var/custom = input(usr, "What rate would you like this SMES to attempt to charge at? Max is [input_level_max].") as null|num
+ if(isnum(custom))
+ input_level = custom
+ if("plus")
+ input_level += 10000
+ if("minus")
+ input_level -= 10000
else
- emp_act(2)
- if(prob(5)) //smoke only
- world << "\red SMES smoke in [src.loc.loc]"
- var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
- smoke.set_up(3, 0, src.loc)
- smoke.attach(src)
- smoke.start()
+ var/n = text2num(href_list["set_input_level"])
+ if(isnum(n))
+ input_level = n
+
+ input_level = Clamp(input_level, 0, input_level_max)
+ log_smes(usr.ckey)
+
+ else if(href_list["set_output_level"])
+ switch(href_list["set_output_level"])
+ if("max")
+ output_level = output_level_max
+ if("custom")
+ var/custom = input(usr, "What rate would you like this SMES to attempt to output at? Max is [output_level_max].") as null|num
+ if(isnum(custom))
+ output_level = custom
+ if("plus")
+ output_level += 10000
+ if("minus")
+ output_level -= 10000
+ else
+ var/n = text2num(href_list["set_output_level"])
+ if(isnum(n))
+ output_level = n
+
+ output_level = Clamp(output_level, 0, output_level_max)
+ log_smes(usr.ckey)
+
+/obj/machinery/power/smes/proc/log_smes(var/user = "")
+ investigate_log("input/output; [input_level>output_level?"":""][input_level]/[output_level] | Charge: [charge] | Output-mode: [output_attempt?"on":"off"] | Input-mode: [input_attempt?"auto":"off"] by [user]","singulo")
/obj/machinery/power/smes/emp_act(severity)
- online = 0
- charging = 0
- output = 0
+ input_attempt = rand(0,1)
+ inputting = input_attempt
+ output_attempt = rand(0,1)
+ outputting = output_attempt
+ output_level = rand(0, output_level_max)
+ input_level = rand(0, input_level_max)
charge -= 1e6/severity
if (charge < 0)
charge = 0
- spawn(100)
- output = initial(output)
- charging = initial(charging)
- online = initial(online)
+ update_icon()
+ log_smes("an emp")
..()
@@ -348,12 +351,4 @@
..()
-
-/proc/rate_control(var/S, var/V, var/C, var/Min=1, var/Max=5, var/Limit=null)
- var/href = "-[href]=-[Min]'>- [(C?C : 0)] [href]=[Min]'>+[href]=[Max]'>+"
- if(Limit) return "[href]=-[Limit]'>-"+rate+"[href]=[Limit]'>+"
- return rate
-
-
#undef SMESRATE
\ No newline at end of file
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index d9fcccdb536..98c6771296f 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -514,4 +514,10 @@ var/list/solars_list = list()
/obj/item/weapon/paper/solar
name = "paper- 'Going green! Setup your own solar array instructions.'"
- info = "Welcome
At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or plasma! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array.
You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!.
Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker.
Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.
That's all to it, be safe, be green!
"
\ No newline at end of file
+ info = "Welcome
At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or plasma! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array.
You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!.
Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker.
Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.
That's all to it, be safe, be green!
"
+
+/proc/rate_control(var/S, var/V, var/C, var/Min=1, var/Max=5, var/Limit=null) //How not to name vars
+ var/href = "-[href]=-[Min]'>- [(C?C : 0)] [href]=[Min]'>+[href]=[Max]'>+"
+ if(Limit) return "[href]=-[Limit]'>-"+rate+"[href]=[Limit]'>+"
+ return rate
\ No newline at end of file
diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm
index bd61fd339d7..4a4f8549726 100644
--- a/code/modules/power/turbine.dm
+++ b/code/modules/power/turbine.dm
@@ -37,6 +37,7 @@
var/rpmtarget = 0
var/capacity = 1e6
var/comp_id = 0
+ var/efficiency
/obj/machinery/power/turbine
@@ -51,6 +52,7 @@
directwired = 1
var/turf/simulated/outturf
var/lastgen
+ var/productivity = 1
/obj/machinery/computer/turbine_computer
name = "gas turbine control computer"
@@ -59,6 +61,7 @@
icon_state = "airtunnel0e"
anchored = 1
density = 1
+ circuit = /obj/item/weapon/circuitboard/turbine_computer
var/obj/machinery/compressor/compressor
var/id = 0
@@ -66,7 +69,16 @@
/obj/machinery/compressor/New()
..()
-
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/power_compressor(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 5)
+ RefreshParts()
// The inlet of the compressor is the direction it faces
gas_contained = new
@@ -87,8 +99,29 @@
// /obj/machinery/power/compressor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
// return !density
+/obj/machinery/compressor/RefreshParts()
+ var/E = 0
+ for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
+ E += M.rating
+ efficiency = E / 6
-/obj/machinery/power/compressor/CanAtmosPass(var/turf/T)
+/obj/machinery/compressor/attackby(obj/item/I, mob/user)
+ if(default_deconstruction_screwdriver(user, initial(icon_state), initial(icon_state), I))
+ return
+
+ if(default_change_direction_wrench(user, I))
+ turbine = null
+ inturf = get_step(src, dir)
+ turbine = locate() in get_step(src, get_dir(inturf, src))
+ if(turbine)
+ user << "Turbine connected."
+ else
+ user << "Turbine not connected."
+ return
+
+ default_deconstruction_crowbar(I)
+
+/obj/machinery/compressor/CanAtmosPass(var/turf/T)
return !density
/obj/machinery/compressor/process()
@@ -112,7 +145,7 @@
// RPM function to include compression friction - be advised that too low/high of a compfriction value can make things screwy
- rpm = max(0, rpm - (rpm*rpm)/COMPFRICTION)
+ rpm = max(0, rpm - (rpm*rpm)/(COMPFRICTION/efficiency))
if(starter && !(stat & NOPOWER))
@@ -144,7 +177,16 @@
/obj/machinery/power/turbine/New()
..()
-
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/power_turbine(src)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+ component_parts += new /obj/item/stack/cable_coil(src, 5)
+ RefreshParts()
// The outlet is pointed at the direction of the turbine component
outturf = get_step(src, dir)
@@ -166,11 +208,15 @@
// /obj/machinery/power/turbine/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
// return !density
+/obj/machinery/power/turbine/RefreshParts()
+ var/P = 0
+ for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
+ P += C.rating
+ productivity = P / 6
+
/obj/machinery/power/turbine/CanAtmosPass(var/turf/T)
return !density
-
-
/obj/machinery/power/turbine/process()
if(stat & BROKEN)
@@ -185,7 +231,7 @@
// This is the power generation function. If anything is needed it's good to plot it in EXCEL before modifying
// the TURBGENQ and TURBGENG values
- lastgen = ((compressor.rpm / TURBGENQ)**TURBGENG) *TURBGENQ
+ lastgen = ((compressor.rpm / TURBGENQ)**TURBGENG) * TURBGENQ * productivity
add_avail(lastgen)
@@ -217,11 +263,25 @@
interact(user)
+/obj/machinery/power/turbine/attackby(obj/item/I, mob/user)
+ if(default_deconstruction_screwdriver(user, initial(icon_state), initial(icon_state), I))
+ return
+ if(default_change_direction_wrench(user, I))
+ compressor = null
+ outturf = get_step(src, dir)
+ compressor = locate() in get_step(src, get_dir(outturf, src))
+ if(compressor)
+ user << "Compressor connected."
+ else
+ user << "Compressor not connected."
+ return
+
+ default_deconstruction_crowbar(I)
/obj/machinery/power/turbine/interact(mob/user)
- if ( (get_dist(src, user) > 1 ) || (stat & (NOPOWER|BROKEN)) && (!istype(user, /mob/living/silicon/ai)) )
+ if ( !Adjacent(user) || (stat & (NOPOWER|BROKEN)) && (!istype(user, /mob/living/silicon)) )
user.unset_machine(src)
user << browse(null, "window=turbine")
return
@@ -272,9 +332,10 @@
/obj/machinery/computer/turbine_computer/New()
..()
spawn(5)
- for(var/obj/machinery/compressor/C in world)
- if(id == C.comp_id)
- compressor = C
+ search_turbine()
+
+/obj/machinery/computer/turbine_computer/proc/search_turbine()
+ compressor = locate(/obj/machinery/compressor) in range(5)
/obj/machinery/computer/turbine_computer/attack_hand(var/mob/user as mob)
if(..())
@@ -285,7 +346,7 @@
/obj/machinery/computer/turbine_computer/interact(mob/user)
var/dat
- if(compressor)
+ if(compressor && compressor.turbine)
dat += {"
Gas turbine remote control system
\nTurbine status: [ src.compressor.starter ? "Off On" : "Off On"]
\n
@@ -296,7 +357,9 @@
\n
\n"}
else
- dat += "\redNo compatible attached compressor found."
+ dat += "There is [!compressor ? "no compressor" : " compressor[!compressor.turbine ? " and no turbine" : ""]"].
"
+ if(!compressor)
+ dat += "Search for compressor"
var/datum/browser/popup = new(user, "turbinecomputer", name)
popup.set_content(dat)
@@ -314,6 +377,8 @@
usr << browse(null, "window=turbinecomputer")
usr.unset_machine(src)
return
+ else if(href_list["search"])
+ search_turbine()
src.updateUsrDialog()
return
diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm
index b6557e600d0..819c228617b 100644
--- a/code/modules/projectiles/ammunition/energy.dm
+++ b/code/modules/projectiles/ammunition/energy.dm
@@ -103,4 +103,10 @@
/obj/item/ammo_casing/energy/meteor
projectile_type = /obj/item/projectile/meteor
- select_name = "goddamn meteor"
\ No newline at end of file
+ select_name = "goddamn meteor"
+
+/obj/item/ammo_casing/energy/kinetic
+ projectile_type = /obj/item/projectile/kinetic
+ select_name = "kinetic"
+ e_cost = 500
+ fire_sound = 'sound/weapons/Gunshot4.ogg'
diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm
index f2605d939e2..81b6af92124 100644
--- a/code/modules/projectiles/ammunition/magazines.dm
+++ b/code/modules/projectiles/ammunition/magazines.dm
@@ -123,6 +123,13 @@
..()
icon_state = "[initial(icon_state)]-[round(ammo_count(),2)]"
+obj/item/ammo_box/magazine/tommygunm45
+ name = "tommy gun drum (.45)"
+ icon_state = "drum45"
+ ammo_type = /obj/item/ammo_casing/c45
+ caliber = ".45"
+ max_ammo = 50
+
/obj/item/ammo_box/magazine/m50
name = "magazine (.50ae)"
icon_state = "50ae"
@@ -148,6 +155,7 @@
caliber = "a762"
max_ammo = 50
+
/obj/item/ammo_box/magazine/m762/update_icon()
..()
icon_state = "[initial(icon_state)]-[round(ammo_count(),10)]"
\ No newline at end of file
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index d7309b080e3..743e682d7e9 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -1,96 +1,99 @@
-/obj/item/weapon/gun
- name = "gun"
- desc = "It's a gun. It's pretty terrible, though."
- icon = 'icons/obj/gun.dmi'
- icon_state = "detective"
- item_state = "gun"
- flags = CONDUCT
- slot_flags = SLOT_BELT
- m_amt = 2000
- w_class = 3.0
- throwforce = 5
- throw_speed = 4
- throw_range = 5
- force = 5.0
- origin_tech = "combat=1"
- attack_verb = list("struck", "hit", "bashed")
-
- var/fire_sound = "gunshot"
- var/silenced = 0
- var/recoil = 0
- var/clumsy_check = 1
- var/obj/item/ammo_casing/chambered = null
-
- proc/process_chamber()
- return 0
-
- proc/special_check(var/mob/M) //Placeholder for any special checks, like detective's revolver.
- return 1
-
- proc/shoot_with_empty_chamber(mob/living/user as mob|obj)
- user << "*click*"
- return
-
- proc/shoot_live_shot(mob/living/user as mob|obj)
- if(recoil)
- spawn()
- shake_camera(user, recoil + 1, recoil)
-
- if(silenced)
- playsound(user, fire_sound, 10, 1)
- else
- playsound(user, fire_sound, 50, 1)
- user.visible_message("[user] fires [src]!", "You fire [src]!", "You hear a [istype(src, /obj/item/weapon/gun/energy) ? "laser blast" : "gunshot"]!")
-
- emp_act(severity)
- for(var/obj/O in contents)
- O.emp_act(severity)
-
-
- afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params)//TODO: go over this
- if(flag) //It's adjacent, is the user, or is on the user's person
- return
-
- //Exclude lasertag guns from the CLUMSY check.
- if(clumsy_check)
- if(istype(user, /mob/living))
- var/mob/living/M = user
- if ((CLUMSY in M.mutations) && prob(40))
- M << "You shoot yourself in the foot with \the [src]!"
- afterattack(user, user)
- M.drop_item()
- return
-
- if (!user.IsAdvancedToolUser())
- user << "You don't have the dexterity to do this!"
- return
- if(istype(user, /mob/living))
- var/mob/living/M = user
- if (HULK in M.mutations)
- M << "Your meaty finger is much too large for the trigger guard!"
- return
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.dna && H.dna.mutantrace == "adamantine")
- user << "Your metal fingers don't fit in the trigger guard!"
- return
-
- add_fingerprint(user)
-
- if(!special_check(user))
- return
- if(chambered)
- if(!chambered.fire(target, user, params, , silenced))
- shoot_with_empty_chamber(user)
- else
- shoot_live_shot(user)
- else
- shoot_with_empty_chamber(user)
- process_chamber()
- update_icon()
-
- if(user.hand)
- user.update_inv_l_hand(0)
- else
- user.update_inv_r_hand(0)
-
+/obj/item/weapon/gun
+ name = "gun"
+ desc = "It's a gun. It's pretty terrible, though."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "detective"
+ item_state = "gun"
+ flags = CONDUCT
+ slot_flags = SLOT_BELT
+ m_amt = 2000
+ w_class = 3.0
+ throwforce = 5
+ throw_speed = 4
+ throw_range = 5
+ force = 5.0
+ origin_tech = "combat=1"
+ attack_verb = list("struck", "hit", "bashed")
+
+ var/fire_sound = "gunshot"
+ var/silenced = 0
+ var/recoil = 0
+ var/clumsy_check = 1
+ var/obj/item/ammo_casing/chambered = null
+ var/trigger_guard = 1
+
+ proc/process_chamber()
+ return 0
+
+ proc/special_check(var/mob/M) //Placeholder for any special checks, like detective's revolver.
+ return 1
+
+ proc/shoot_with_empty_chamber(mob/living/user as mob|obj)
+ user << "*click*"
+ return
+
+ proc/shoot_live_shot(mob/living/user as mob|obj)
+ if(recoil)
+ spawn()
+ shake_camera(user, recoil + 1, recoil)
+
+ if(silenced)
+ playsound(user, fire_sound, 10, 1)
+ else
+ playsound(user, fire_sound, 50, 1)
+ user.visible_message("[user] fires [src]!", "You fire [src]!", "You hear a [istype(src, /obj/item/weapon/gun/energy) ? "laser blast" : "gunshot"]!")
+
+ emp_act(severity)
+ for(var/obj/O in contents)
+ O.emp_act(severity)
+
+
+ afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params)//TODO: go over this
+ if(flag) //It's adjacent, is the user, or is on the user's person
+ return
+
+ //Exclude lasertag guns from the CLUMSY check.
+ if(clumsy_check)
+ if(istype(user, /mob/living))
+ var/mob/living/M = user
+ if ((CLUMSY in M.mutations) && prob(40))
+ M << "You shoot yourself in the foot with \the [src]!"
+ afterattack(user, user)
+ M.drop_item()
+ return
+
+ if (!user.IsAdvancedToolUser())
+ user << "You don't have the dexterity to do this!"
+ return
+
+ if(trigger_guard)
+ if(istype(user, /mob/living))
+ var/mob/living/M = user
+ if (HULK in M.mutations)
+ M << "Your meaty finger is much too large for the trigger guard!"
+ return
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ if(H.dna && H.dna.mutantrace == "adamantine")
+ user << "Your metal fingers don't fit in the trigger guard!"
+ return
+
+ add_fingerprint(user)
+
+ if(!special_check(user))
+ return
+ if(chambered)
+ if(!chambered.fire(target, user, params, , silenced))
+ shoot_with_empty_chamber(user)
+ else
+ shoot_live_shot(user)
+ else
+ shoot_with_empty_chamber(user)
+ process_chamber()
+ update_icon()
+
+ if(user.hand)
+ user.update_inv_l_hand(0)
+ else
+ user.update_inv_r_hand(0)
+
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 241a7145478..eaef43c40c3 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -102,4 +102,30 @@
name = "mind flayer"
desc = "A prototype weapon recovered from the ruins of Research-Station Epsilon."
icon_state = "xray"
- ammo_type = list(/obj/item/ammo_casing/energy/mindflayer)
+ ammo_type = list(/obj/item/ammo_casing/energy/mindflayer)
+
+/obj/item/weapon/gun/energy/kinetic_accelerator
+ name = "proto-kinetic accelerator"
+ desc = "According to Nanotrasen accounting, this is mining equipment. It's been modified for extreme power output to crush rocks, but often serves as a miner's first defense against hostile alien life; it's not very powerful unless used in a low pressure environment."
+ icon_state = "kineticgun"
+ item_state = "kineticgun"
+ ammo_type = list(/obj/item/ammo_casing/energy/kinetic)
+ cell_type = "/obj/item/weapon/cell/crap"
+ var/overheat = 0
+ var/recent_reload = 1
+
+/obj/item/weapon/gun/energy/kinetic_accelerator/shoot_live_shot()
+ overheat = 1
+ spawn(20)
+ overheat = 0
+ recent_reload = 0
+ ..()
+
+/obj/item/weapon/gun/energy/kinetic_accelerator/attack_self(var/mob/living/user/L)
+ if(overheat || recent_reload)
+ return
+ power_supply.give(500)
+ playsound(src.loc, 'sound/weapons/shotgunpump.ogg', 60, 1)
+ recent_reload = 1
+ update_icon()
+ return
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm
index a4b7da17b15..cfee0eb3e0c 100644
--- a/code/modules/projectiles/guns/magic.dm
+++ b/code/modules/projectiles/guns/magic.dm
@@ -15,6 +15,7 @@
var/ammo_type
origin_tech = null
clumsy_check = 0
+ trigger_guard = 0
/obj/item/weapon/gun/magic/afterattack(atom/target as mob, mob/living/user as mob, flag)
newshot()
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 93eba8d5eff..034e8d49f3f 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -113,6 +113,15 @@
return
..()
+/obj/item/weapon/gun/projectile/automatic/tommygun
+ name = "tommy gun"
+ desc = "A genuine Chicago Typewriter."
+ icon_state = "tommygun"
+ item_state = "tommygun"
+ slot_flags = 0
+ origin_tech = "combat=5;materials=1;syndicate=2"
+ mag_type = /obj/item/ammo_box/magazine/tommygunm45
+ fire_sound = 'sound/weapons/Gunshot_smg.ogg'
/* The thing I found with guns in ss13 is that they don't seem to simulate the rounds in the magazine in the gun.
Afaik, since projectile.dm features a revolver, this would make sense since the magazine is part of the gun.
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 9e483255dd7..4cfb5ba79d2 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -1,144 +1,159 @@
-/*
-#define BRUTE "brute"
-#define BURN "burn"
-#define TOX "tox"
-#define OXY "oxy"
-#define CLONE "clone"
-
-#define ADD "add"
-#define SET "set"
-*/
-
-/obj/item/projectile
- name = "projectile"
- icon = 'icons/obj/projectiles.dmi'
- icon_state = "bullet"
- density = 1
- unacidable = 1
- anchored = 1 //There's a reason this is here, Mport. God fucking damn it -Agouri. Find&Fix by Pete. The reason this is here is to stop the curving of emitter shots.
- pass_flags = PASSTABLE
- mouse_opacity = 0
- var/bumped = 0 //Prevents it from hitting more than one guy at once
- var/def_zone = "" //Aiming at
- var/mob/firer = null//Who shot it
- var/silenced = 0 //Attack message
- var/yo = null
- var/xo = null
- var/current = null
- var/atom/original = null // the original target clicked
- var/turf/starting = null // the projectile's starting turf
- var/list/permutated = list() // we've passed through these atoms, don't try to hit them again
-
- var/p_x = 16
- var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center
-
- var/damage = 10
- var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here
- var/nodamage = 0 //Determines if the projectile will skip any damage inflictions
- var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb
- var/projectile_type = "/obj/item/projectile"
- var/kill_count = 50 //This will de-increment every process(). When 0, it will delete the projectile.
- //Effects
- var/stun = 0
- var/weaken = 0
- var/paralyze = 0
- var/irradiate = 0
- var/stutter = 0
- var/eyeblur = 0
- var/drowsy = 0
- var/forcedodge = 0
-
-
- proc/delete()
- // Garbage collect the projectiles
- loc = null
-
- proc/on_hit(var/atom/target, var/blocked = 0, var/hit_zone)
- if(!isliving(target)) return 0
- if(isanimal(target)) return 0
- var/mob/living/L = target
- return L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, blocked)
-
-
- Bump(atom/A as mob|obj|turf|area)
- if(A == firer)
- loc = A.loc
- return 0 //cannot shoot yourself
-
- if(bumped && original) return 0
-
- bumped = 1
- if(ismob(A))
- var/mob/M = A
- if(!istype(A, /mob/living))
- loc = A.loc
- return 0// nope.avi
-
- var/reagent_note
- if(reagents && reagents.reagent_list)
- reagent_note = " REAGENTS:"
- for(var/datum/reagent/R in reagents.reagent_list)
- reagent_note += R.id + " ("
- reagent_note += num2text(R.volume) + ") "
- var/distance = get_dist(get_turf(A), starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations.
- def_zone = ran_zone(def_zone, max(100-(7*distance), 5)) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use.
- if(silenced)
- M << "You've been shot in the [parse_zone(def_zone)] by [src]!"
- else
- M.visible_message("[M] is hit by [src] in the [parse_zone(def_zone)]!", \
- "[M] is hit by [src] in the [parse_zone(def_zone)]!") //X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
- add_logs(firer, M, "shot", object="[src]", addition=reagent_note)
-
-
- spawn(0)
- if(A)
- // We get the location before running A.bullet_act, incase the proc deletes A and makes it null
- var/turf/new_loc = null
- if(istype(A, /turf))
- new_loc = A
- else
- new_loc = A.loc
-
- var/permutation = A.bullet_act(src, def_zone) // searches for return value, could be deleted after run so check A isn't null
-
- if(permutation == -1 || (forcedodge && !istype(A, /turf)))// the bullet passes through a dense object!
- bumped = 0 // reset bumped variable!
- loc = new_loc
- permutated.Add(A)
- return 0
-
- density = 0
- invisibility = 101
- delete()
- return 0
- return 1
-
-
- CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
- if(air_group || (height==0)) return 1
-
- if(istype(mover, /obj/item/projectile))
- return prob(95)
- else
- return 1
-
-
- process()
- if(kill_count < 1)
- delete()
- return
- kill_count--
- spawn while(src && src.loc)
- if((!( current ) || loc == current))
- current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z)
- if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
- delete()
- return
- step_towards(src, current)
- sleep(1)
- if(!bumped && !isturf(original))
- if(loc == get_turf(original))
- if(!(original in permutated))
- Bump(original)
- sleep(1)
- return
+/*
+#define BRUTE "brute"
+#define BURN "burn"
+#define TOX "tox"
+#define OXY "oxy"
+#define CLONE "clone"
+
+#define ADD "add"
+#define SET "set"
+*/
+
+/obj/item/projectile
+ name = "projectile"
+ icon = 'icons/obj/projectiles.dmi'
+ icon_state = "bullet"
+ density = 1
+ unacidable = 1
+ anchored = 1 //There's a reason this is here, Mport. God fucking damn it -Agouri. Find&Fix by Pete. The reason this is here is to stop the curving of emitter shots.
+ pass_flags = PASSTABLE
+ mouse_opacity = 0
+ hitsound = 'sound/weapons/pierce.ogg'
+ var/bumped = 0 //Prevents it from hitting more than one guy at once
+ var/def_zone = "" //Aiming at
+ var/mob/firer = null//Who shot it
+ var/silenced = 0 //Attack message
+ var/yo = null
+ var/xo = null
+ var/current = null
+ var/atom/original = null // the original target clicked
+ var/turf/starting = null // the projectile's starting turf
+ var/list/permutated = list() // we've passed through these atoms, don't try to hit them again
+
+ var/p_x = 16
+ var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center
+
+ var/damage = 10
+ var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here
+ var/nodamage = 0 //Determines if the projectile will skip any damage inflictions
+ var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb
+ var/projectile_type = "/obj/item/projectile"
+ var/kill_count = 50 //This will de-increment every process(). When 0, it will delete the projectile.
+ //Effects
+ var/stun = 0
+ var/weaken = 0
+ var/paralyze = 0
+ var/irradiate = 0
+ var/stutter = 0
+ var/eyeblur = 0
+ var/drowsy = 0
+ var/forcedodge = 0
+
+
+ proc/delete()
+ // Garbage collect the projectiles
+ loc = null
+
+ proc/on_hit(var/atom/target, var/blocked = 0, var/hit_zone)
+ if(!isliving(target)) return 0
+ if(isanimal(target)) return 0
+ var/mob/living/L = target
+ return L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, blocked)
+
+ proc/vol_by_damage()
+ if(src.damage)
+ return Clamp((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then clamp the value between 30 and 100
+ else
+ return 50 //if the projectile doesn't do damage, play its hitsound at 50% volume
+
+ Bump(atom/A as mob|obj|turf|area)
+
+ if(A == firer)
+ loc = A.loc
+ return 0 //cannot shoot yourself
+
+ if(bumped && original) return 0
+
+ bumped = 1
+ if(ismob(A))
+ var/mob/M = A
+ if(!istype(A, /mob/living))
+ loc = A.loc
+ return 0// nope.avi
+
+ var/reagent_note
+ if(reagents && reagents.reagent_list)
+ reagent_note = " REAGENTS:"
+ for(var/datum/reagent/R in reagents.reagent_list)
+ reagent_note += R.id + " ("
+ reagent_note += num2text(R.volume) + ") "
+ var/distance = get_dist(get_turf(A), starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations.
+ def_zone = ran_zone(def_zone, max(100-(7*distance), 5)) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use.
+ if(silenced)
+ playsound(loc, hitsound, 5, 1, -1)
+ M << "You've been shot by \a [src] in \the [parse_zone(def_zone)]!"
+ else
+ if(hitsound)
+ var/volume = vol_by_damage()
+ playsound(loc, hitsound, volume, 1, -1)
+ M.visible_message("[M] is hit by \a [src] in the [parse_zone(def_zone)]!", \
+ "[M] is hit by \a [src] in the [parse_zone(def_zone)]!") //X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
+ add_logs(firer, M, "shot", object="[src]", addition=reagent_note)
+
+
+ spawn(0)
+ if(A)
+ // We get the location before running A.bullet_act, incase the proc deletes A and makes it null
+ var/turf/new_loc = null
+ if(istype(A, /turf))
+ new_loc = A
+ else
+ new_loc = A.loc
+
+ var/permutation = A.bullet_act(src, def_zone) // searches for return value, could be deleted after run so check A isn't null
+
+ if(permutation == -1 || (forcedodge && !istype(A, /turf)))// the bullet passes through a dense object!
+ bumped = 0 // reset bumped variable!
+ loc = new_loc
+ permutated.Add(A)
+ return 0
+
+ density = 0
+ invisibility = 101
+ delete()
+ return 0
+ return 1
+
+
+ CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ if(air_group || (height==0)) return 1
+
+ if(istype(mover, /obj/item/projectile))
+ return prob(95)
+ else
+ return 1
+
+
+ process()
+ if(kill_count < 1)
+ delete()
+ return
+ kill_count--
+ spawn while(src && src.loc)
+ if((!( current ) || loc == current))
+ current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z)
+ if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
+ delete()
+ return
+ step_towards(src, current)
+ sleep(1)
+ if(!bumped && ((original && original.layer>=2.75) || ismob(original)))
+ if(loc == get_turf(original))
+ if(!(original in permutated))
+ Bump(original)
+ sleep(1)
+ Range()
+ return
+
+/obj/item/projectile/proc/Range()
+ return
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 061660d27cd..4bda18157a1 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -4,6 +4,7 @@
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 20
damage_type = BURN
+ hitsound = 'sound/weapons/sear.ogg'
flag = "laser"
eyeblur = 2
@@ -12,6 +13,7 @@
icon_state = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0
+ hitsound = null
damage_type = BURN
flag = "laser"
eyeblur = 2
@@ -58,6 +60,7 @@
/obj/item/projectile/bluetag
name = "lasertag beam"
icon_state = "bluelaser"
+ hitsound = null
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0
damage_type = BURN
@@ -73,6 +76,7 @@
/obj/item/projectile/redtag
name = "lasertag beam"
icon_state = "laser"
+ hitsound = null
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0
damage_type = BURN
@@ -87,6 +91,7 @@
/obj/item/projectile/omnitag//A laser tag bolt that stuns EVERYONE
name = "lasertag beam"
+ hitsound = null
icon_state = "omnilaser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index 2e3e61c032a..2a8551c9351 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -13,6 +13,7 @@
stun = 10
weaken = 10
stutter = 10
+ hitsound = "sparks"
on_hit(var/atom/target, var/blocked = 0)
if(!ismob(target) || blocked >= 2) //Fully blocked by mob or collided with dense object - burst into sparks!
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 0aee7b729e2..19f94640b58 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -9,10 +9,11 @@
/obj/item/projectile/magic/death
name = "bolt of death"
icon_state = "pulse1_bl"
- damage = 9001
- damage_type = OXY
- nodamage = 0
- flag = "magic"
+
+/obj/item/projectile/magic/death/on_hit(var/target)
+ if(ismob(target))
+ var/mob/M = target
+ M.death(0)
/obj/item/projectile/magic/fireball
name = "bolt of fireball"
@@ -133,7 +134,10 @@ proc/wabbajack(mob/living/M)
new_mob = new /mob/living/carbon/monkey(M.loc)
new_mob.universal_speak = 1
if("robot")
- new_mob = new /mob/living/silicon/robot(M.loc)
+ if(prob(30))
+ new_mob = new /mob/living/silicon/robot/syndicate(M.loc)
+ else
+ new_mob = new /mob/living/silicon/robot(M.loc)
new_mob.gender = M.gender
new_mob.invisibility = 0
new_mob.job = "Cyborg"
@@ -170,7 +174,7 @@ proc/wabbajack(mob/living/M)
if("cat") new_mob = new /mob/living/simple_animal/cat(M.loc)
if("carp") new_mob = new /mob/living/simple_animal/hostile/carp(M.loc)
if("bear") new_mob = new /mob/living/simple_animal/hostile/bear(M.loc)
- if("mushroom") new_mob = new /mob/living/simple_animal/mushroom(M.loc)
+ if("mushroom") new_mob = new /mob/living/simple_animal/hostile/mushroom(M.loc)
if("tomato") new_mob = new /mob/living/simple_animal/tomato(M.loc)
if("mouse") new_mob = new /mob/living/simple_animal/mouse(M.loc)
if("chicken") new_mob = new /mob/living/simple_animal/chicken(M.loc)
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index d3b734d6d2d..d1ce1991beb 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -135,3 +135,46 @@
var/mob/living/carbon/human/M = target
M.adjustBrainLoss(20)
M.hallucination += 20
+
+/obj/item/projectile/kinetic
+ name = "kinetic force"
+ icon_state = null
+ damage = 15
+ damage_type = BRUTE
+ flag = "bomb"
+ var/range = 2
+
+obj/item/projectile/kinetic/New()
+ var/turf/proj_turf = get_turf(src)
+ if(!istype(proj_turf, /turf))
+ return
+ var/datum/gas_mixture/environment = proj_turf.return_air()
+ var/pressure = environment.return_pressure()
+ if(pressure < 50)
+ name = "full strength kinetic force"
+ damage = 30
+ ..()
+
+/obj/item/projectile/kinetic/Range()
+ range--
+ if(range <= 0)
+ new /obj/item/effect/kinetic_blast(src.loc)
+ delete()
+
+/obj/item/projectile/kinetic/on_hit(var/atom/target)
+ var/turf/target_turf= get_turf(target)
+ if(istype(target_turf, /turf/simulated/mineral))
+ var/turf/simulated/mineral/M = target_turf
+ M.gets_drilled()
+ new /obj/item/effect/kinetic_blast(target_turf)
+ ..()
+
+/obj/item/effect/kinetic_blast
+ name = "kinetic explosion"
+ icon = 'icons/obj/projectiles.dmi'
+ icon_state = "kinetic_blast"
+ layer = 4.1
+
+/obj/item/effect/kinetic_blast/New()
+ spawn(4)
+ del(src)
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 7a41e3686ec..0035f9f1d71 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -15,6 +15,7 @@
var/amount = 30
var/beaker = null
var/recharged = 0
+ var/recharge_delay = 15 //Time it game ticks between recharges
var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine",
"sodium","aluminium","silicon","phosphorus","sulfur","chlorine","potassium","iron",
"copper","mercury","radium","water","ethanol","sugar","sacid")
@@ -40,7 +41,7 @@
if(recharged < 0)
recharge()
- recharged = 15
+ recharged = recharge_delay
else
recharged -= 1
@@ -180,6 +181,64 @@
ui_interact(user)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/obj/machinery/chem_dispenser/constructable
+ name = "portable chem dispenser"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "minidispenser"
+ energy = 5
+ max_energy = 5
+ amount = 5
+ recharge_delay = 30
+ dispensable_reagents = list()
+ var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen"),
+ list("lithium", "sugar", "sacid", "water", "copper", "mercury", "sodium"),
+ list("ethanol", "chlorine", "potassium", "aluminium", "radium", "fluorine", "iron"))
+
+/obj/machinery/chem_dispenser/constructable/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/cell/high(null)
+ RefreshParts()
+
+/obj/machinery/chem_dispenser/constructable/RefreshParts()
+ var/time = 0
+ var/temp_energy = 0
+ var/i
+ for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
+ temp_energy += M.rating
+ temp_energy--
+ max_energy = temp_energy * 5 //max energy = (bin1.rating + bin2.rating - 1) * 5, 5 on lowest 25 on highest
+ for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
+ time += C.rating
+ for(var/obj/item/weapon/cell/P in component_parts)
+ time += round(P.maxcharge, 10000) / 10000
+ recharge_delay /= time/2 //delay between recharges, double the usual time on lowest 50% less than usual on highest
+ for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
+ for(i=1, i<=M.rating, i++)
+ dispensable_reagents |= sortList(special_reagents[i])
+
+/obj/machinery/chem_dispenser/constructable/attackby(var/obj/item/I, var/mob/user)
+ ..()
+ if(default_deconstruction_screwdriver(user, "minidispenser-o", "minidispenser", I))
+ return
+
+ if(panel_open)
+ if(istype(I, /obj/item/weapon/crowbar))
+ if(beaker)
+ var/obj/item/weapon/reagent_containers/glass/B = beaker
+ B.loc = loc
+ beaker = null
+ default_deconstruction_crowbar(I)
+ return 1
+
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/obj/machinery/chem_master
@@ -227,6 +286,9 @@
/obj/machinery/chem_master/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob)
+ if(default_unfasten_wrench(user, B))
+ return
+
if(istype(B, /obj/item/weapon/reagent_containers/glass))
if(src.beaker)
@@ -456,7 +518,7 @@
anchored = 1
icon = 'icons/obj/chemical.dmi'
icon_state = "mixer0"
- circuit = "/obj/item/weapon/circuitboard/pandemic"
+ circuit = /obj/item/weapon/circuitboard/pandemic
use_power = 1
idle_power_usage = 20
var/temp_html = ""
@@ -749,6 +811,7 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime)
use_power = 1
idle_power_usage = 5
active_power_usage = 100
+ pass_flags = PASSTABLE
var/inuse = 0
var/obj/item/weapon/reagent_containers/beaker = null
var/limit = 10
@@ -836,6 +899,8 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime)
/obj/machinery/reagentgrinder/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ if(default_unfasten_wrench(user, O))
+ return
if (istype(O,/obj/item/weapon/reagent_containers/glass) || \
istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 36b9c7b4777..89f6569aee0 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -214,7 +214,7 @@ datum
reaction_turf(var/turf/simulated/T, var/volume)
if (!istype(T)) return
src = null
- if(volume >= 3)
+ if(volume >= 10)
T.MakeSlippery()
for(var/mob/living/carbon/slime/M in T)
@@ -272,10 +272,13 @@ datum
M.confused += 3
..()
return
-
+
reaction_turf(var/turf/simulated/T, var/volume)
..()
if(!istype(T)) return
+ if(volume>=10)
+ for(var/obj/effect/rune/R in T)
+ del R
T.Bless()
lube
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index ae17574aeaa..6e8e54dea8b 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -1007,7 +1007,15 @@ datum
/mob/living/simple_animal/hostile/syndicate/ranged/space,
/mob/living/simple_animal/hostile/alien/queen/large,
/mob/living/simple_animal/hostile/retaliate,
- /mob/living/simple_animal/hostile/retaliate/clown
+ /mob/living/simple_animal/hostile/retaliate/clown,
+ /mob/living/simple_animal/hostile/mushroom,
+ /mob/living/simple_animal/hostile/asteroid,
+ /mob/living/simple_animal/hostile/asteroid/basilisk,
+ /mob/living/simple_animal/hostile/asteroid/goldgrub,
+ /mob/living/simple_animal/hostile/asteroid/goliath,
+ /mob/living/simple_animal/hostile/asteroid/hivelord,
+ /mob/living/simple_animal/hostile/asteroid/hivelordbrood,
+ /mob/living/simple_animal/hostile/carp/holocarp
)//exclusion list for things you don't want the reaction to create.
var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
@@ -1071,29 +1079,18 @@ datum
/mob/living/simple_animal/hostile/syndicate/ranged/space,
/mob/living/simple_animal/hostile/alien/queen/large,
/mob/living/simple_animal/hostile/retaliate,
- /mob/living/simple_animal/hostile/retaliate/clown
+ /mob/living/simple_animal/hostile/retaliate/clown,
+ /mob/living/simple_animal/hostile/mushroom,
+ /mob/living/simple_animal/hostile/asteroid,
+ /mob/living/simple_animal/hostile/asteroid/basilisk,
+ /mob/living/simple_animal/hostile/asteroid/goldgrub,
+ /mob/living/simple_animal/hostile/asteroid/goliath,
+ /mob/living/simple_animal/hostile/asteroid/hivelord,
+ /mob/living/simple_animal/hostile/asteroid/hivelordbrood,
+ /mob/living/simple_animal/hostile/carp/holocarp
)//exclusion list for things you don't want the reaction to create.
var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
- var/message = "A gold slime reaction has occured"
-
- var/atom/A = holder.my_atom
- if(A)
- var/turf/T = get_turf(A)
- var/area/my_area = get_area(T)
- message += " in [my_area.name]. (JMP)"
- message += " (VV)"
-
- var/mob/M = get(A, /mob)
- if(M)
- message += " - Carried By: [M.real_name] ([M.key]) (PP) (?)"
- else
- message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]"
- else
- message += "."
-
- message_admins(message, 0, 1)
-
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/reagents/reagent_containers/food/condiment.dm
index fd0051502d3..a85453571d8 100644
--- a/code/modules/reagents/reagent_containers/food/condiment.dm
+++ b/code/modules/reagents/reagent_containers/food/condiment.dm
@@ -1,219 +1,219 @@
-
-///////////////////////////////////////////////Condiments
-//Notes by Darem: The condiments food-subtype is for stuff you don't actually eat but you use to modify existing food. They all
-// leave empty containers when used up and can be filled/re-filled with other items. Formatting for first section is identical
-// to mixed-drinks code. If you want an object that starts pre-loaded, you need to make it in addition to the other code.
-
-//Food items that aren't eaten normally and leave an empty container behind.
-/obj/item/weapon/reagent_containers/food/condiment
- name = "Condiment Container"
- desc = "Just your average condiment container."
- icon = 'icons/obj/food.dmi'
- icon_state = "emptycondiment"
- flags = OPENCONTAINER
- possible_transfer_amounts = list(1,5,10)
- volume = 50
- //Possible_states has the reagent id as key and a list of, in order, the icon_state, the name and the desc as values. Used in the on_reagent_change() to change names, descs and sprites.
- var/list/possible_states = list("ketchup" = list("ketchup", "Ketchup", "You feel more American already."), "capsaicin" = list("hotsauce", "Hotsauce", "You can almost TASTE the stomach ulcers now!"), "enzyme" = list("enzyme", "Universal Enzyme", "Used in cooking various dishes"), "soysauce" = list("soysauce", "Soy Sauce", "A salty soy-based flavoring"), "frostoil" = list("coldsauce", "Coldsauce", "Leaves the tongue numb in it's passage"), "sodiumchloride" = list("saltshaker", "Salt Shaker", "Salt. From space oceans, presumably"), "blackpepper" = list("pepermillsmall", "Pepper Mill", "Often used to flavor food or make people sneeze"), "cornoil" = list("oliveoil", "Corn Oil", "A delicious oil used in cooking. Made from corn"), "sugar" = list("emptycondiment", "Sugar", "Tasty spacey sugar!"))
-
-/obj/item/weapon/reagent_containers/food/condiment/attackby(obj/item/weapon/W as obj, mob/user as mob)
- return
-
-/obj/item/weapon/reagent_containers/food/condiment/attack_self(mob/user as mob)
- return
-
-/obj/item/weapon/reagent_containers/food/condiment/attack(mob/M as mob, mob/user as mob, def_zone)
- var/datum/reagents/R = src.reagents
-
- if(!R || !R.total_volume)
- user << "None of [src] left, oh no!"
- return 0
-
- if(M == user)
- M << "You swallow some of contents of the [src]."
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- reagents.trans_to(M, 10)
- playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
- return 1
-
- else if( istype(M, /mob/living/carbon/human) )
- for(var/mob/O in viewers(world.view, user))
- O.show_message("[user] attempts to feed [M] [src].", 1)
- if(!do_mob(user, M)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message("[user] feeds [M] [src].", 1)
-
- add_logs(user, M, "fed", object="[reagentlist(src)]")
-
- if(reagents.total_volume)
- reagents.reaction(M, INGEST)
- spawn(5)
- reagents.trans_to(M, 10)
-
- playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
- return 1
- return 0
-
-/obj/item/weapon/reagent_containers/food/condiment/attackby(obj/item/I as obj, mob/user as mob)
- return
-
-/obj/item/weapon/reagent_containers/food/condiment/afterattack(obj/target, mob/user , proximity)
- if(!proximity) return
- if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
-
- if(!target.reagents.total_volume)
- user << "[target] is empty."
- return
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "[src] is full."
- return
-
- var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
- user << "You fill [src] with [trans] units of the contents of [target]."
-
- //Something like a glass or a food item. Player probably wants to transfer TO it.
- else if(target.is_open_container() || istype(target, /obj/item/weapon/reagent_containers/food/snacks))
- if(!reagents.total_volume)
- user << "[src] is empty."
- return
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "you can't add anymore to [target]."
- return
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "You transfer [trans] units of the condiment to [target]."
-
-/obj/item/weapon/reagent_containers/food/condiment/on_reagent_change()
- if(icon_state == "saltshakersmall" || icon_state == "peppermillsmall")
- return
- if(reagents.reagent_list.len > 0)
- var/main_reagent = reagents.get_master_reagent_id()
- if(main_reagent in possible_states)
- var/list/temp_list = possible_states[main_reagent]
- icon_state = temp_list[1]
- name = temp_list[2]
- desc = temp_list[3]
-
- else
- name = "misc Condiment Bottle"
- main_reagent = reagents.get_master_reagent_name()
- if (reagents.reagent_list.len==1)
- desc = "Looks like it is [lowertext(main_reagent)], but you are not sure."
- else
- desc = "A mixture of various condiments. [lowertext(main_reagent)] is one of them."
- icon_state = "mixedcondiments"
- else
- icon_state = "emptycondiment"
- name = "condiment Bottle"
- desc = "An empty condiment bottle."
- return
-
-/obj/item/weapon/reagent_containers/food/condiment/enzyme
- name = "Universal Enzyme"
- desc = "Used in cooking various dishes."
- icon_state = "enzyme"
-
- New()
- ..()
- reagents.add_reagent("enzyme", 50)
-
-/obj/item/weapon/reagent_containers/food/condiment/sugar
-
- New()
- ..()
- reagents.add_reagent("sugar", 50)
-
-/obj/item/weapon/reagent_containers/food/condiment/saltshaker //Seperate from above since it's a small shaker rather then
- name = "Salt Shaker" // a large one.
- desc = "Salt. From space oceans, presumably."
- icon_state = "saltshakersmall"
- possible_transfer_amounts = list(1,20) //for clown turning the lid off
- amount_per_transfer_from_this = 1
- volume = 20
-
- New()
- ..()
- reagents.add_reagent("sodiumchloride", 20)
-
-/obj/item/weapon/reagent_containers/food/condiment/peppermill
- name = "Pepper Mill"
- desc = "Often used to flavor food or make people sneeze."
- icon_state = "peppermillsmall"
- possible_transfer_amounts = list(1,20) //for clown turning the lid off
- amount_per_transfer_from_this = 1
- volume = 20
-
- New()
- ..()
- reagents.add_reagent("blackpepper", 20)
-
-//Food packs. To easily apply deadly toxi... delicious sauces to your food!
-/obj/item/weapon/reagent_containers/food/condiment/pack
- name = "condiment pack"
- desc = "A small plastic pack with condiments to put on your food"
- icon_state = "condi_empty"
- volume = 10
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(10)
- possible_states = list("ketchup" = list("condi_ketchup", "Ketchup", "You feel more American already."), "capsaicin" = list("condi_hotsauce", "Hotsauce", "You can almost TASTE the stomach ulcers now!"), "soysauce" = list("condi_soysauce", "Soy Sauce", "A salty soy-based flavoring"), "frostoil" = list("condi_frostoil", "Coldsauce", "Leaves the tongue numb in it's passage"), "sodiumchloride" = list("condi_salt", "Salt Shaker", "Salt. From space oceans, presumably"), "blackpepper" = list("condi_pepper", "Pepper Mill", "Often used to flavor food or make people sneeze"), "cornoil" = list("condi_cornoil", "Corn Oil", "A delicious oil used in cooking. Made from corn"), "sugar" = list("condi_sugar", "Sugar", "Tasty spacey sugar!"))
- var/originalname = "condiment" //Can't use initial(name) for this. This stores the name set by condimasters.
-
-/obj/item/weapon/reagent_containers/food/condiment/pack/New()
- ..()
- pixel_x = rand(-7, 7)
- pixel_y = rand(-7, 7)
-
-/obj/item/weapon/reagent_containers/food/condiment/pack/attack(mob/M, mob/user, def_zone) //Can't feed these to people directly.
- return
-
-/obj/item/weapon/reagent_containers/food/condiment/pack/afterattack(obj/target, mob/user , proximity)
- if(!proximity) return
-
- //You can tear the bag open above food to put the condiments on it, obviously.
- if(istype(target, /obj/item/weapon/reagent_containers/food/snacks))
- if(!reagents.total_volume)
- user << "You tear open [src], but there's nothing in it."
- del src
- return
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "You tear open [src], but [target] is stacked so high that it just drips off!" //Not sure if food can ever be full, but better safe than sorry.
- del src
- return
- else
- user << "You tear open [src] above [target] and the condiments drip onto it."
- src.reagents.trans_to(target, amount_per_transfer_from_this)
- del src
-
-/obj/item/weapon/reagent_containers/food/condiment/pack/on_reagent_change()
- if(reagents.reagent_list.len > 0)
- var/main_reagent = reagents.get_master_reagent_id()
- if(main_reagent in possible_states)
- var/list/temp_list = possible_states[main_reagent]
- icon_state = temp_list[1]
- desc = temp_list[3]
- else
- icon_state = "condi_mixed"
- desc = "A small condiment pack. The label says it contains [originalname]"
- else
- icon_state = "condi_empty"
- desc = "A small condiment pack. It is empty."
-
-//Ketchup
-/obj/item/weapon/reagent_containers/food/condiment/pack/ketchup
- name = "ketchup pack"
- originalname = "ketchup"
-
-/obj/item/weapon/reagent_containers/food/condiment/pack/ketchup/New()
- ..()
- reagents.add_reagent("ketchup", 10)
-
-//Hot sauce
-/obj/item/weapon/reagent_containers/food/condiment/pack/hotsauce
- name = "hotsauce pack"
- originalname = "hotsauce"
-
-/obj/item/weapon/reagent_containers/food/condiment/pack/hotsauce/New()
- ..()
- reagents.add_reagent("capsaicin", 10)
+
+///////////////////////////////////////////////Condiments
+//Notes by Darem: The condiments food-subtype is for stuff you don't actually eat but you use to modify existing food. They all
+// leave empty containers when used up and can be filled/re-filled with other items. Formatting for first section is identical
+// to mixed-drinks code. If you want an object that starts pre-loaded, you need to make it in addition to the other code.
+
+//Food items that aren't eaten normally and leave an empty container behind.
+/obj/item/weapon/reagent_containers/food/condiment
+ name = "Condiment Container"
+ desc = "Just your average condiment container."
+ icon = 'icons/obj/food.dmi'
+ icon_state = "emptycondiment"
+ flags = OPENCONTAINER
+ possible_transfer_amounts = list(1,5,10)
+ volume = 50
+ //Possible_states has the reagent id as key and a list of, in order, the icon_state, the name and the desc as values. Used in the on_reagent_change() to change names, descs and sprites.
+ var/list/possible_states = list("ketchup" = list("ketchup", "Ketchup", "You feel more American already."), "capsaicin" = list("hotsauce", "Hotsauce", "You can almost TASTE the stomach ulcers now!"), "enzyme" = list("enzyme", "Universal Enzyme", "Used in cooking various dishes"), "soysauce" = list("soysauce", "Soy Sauce", "A salty soy-based flavoring"), "frostoil" = list("coldsauce", "Coldsauce", "Leaves the tongue numb in it's passage"), "sodiumchloride" = list("saltshaker", "Salt Shaker", "Salt. From space oceans, presumably"), "blackpepper" = list("pepermillsmall", "Pepper Mill", "Often used to flavor food or make people sneeze"), "cornoil" = list("oliveoil", "Corn Oil", "A delicious oil used in cooking. Made from corn"), "sugar" = list("emptycondiment", "Sugar", "Tasty spacey sugar!"))
+
+/obj/item/weapon/reagent_containers/food/condiment/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/attack_self(mob/user as mob)
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/attack(mob/M as mob, mob/user as mob, def_zone)
+ var/datum/reagents/R = src.reagents
+
+ if(!R || !R.total_volume)
+ user << "None of [src] left, oh no!"
+ return 0
+
+ if(M == user)
+ M << "You swallow some of contents of the [src]."
+ if(reagents.total_volume)
+ reagents.reaction(M, INGEST)
+ spawn(5)
+ reagents.trans_to(M, 10)
+ playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
+ return 1
+
+ else if( istype(M, /mob/living/carbon/human) )
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message("[user] attempts to feed [M] [src].", 1)
+ if(!do_mob(user, M)) return
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message("[user] feeds [M] [src].", 1)
+
+ add_logs(user, M, "fed", object="[reagentlist(src)]")
+
+ if(reagents.total_volume)
+ reagents.reaction(M, INGEST)
+ spawn(5)
+ reagents.trans_to(M, 10)
+
+ playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
+ return 1
+ return 0
+
+/obj/item/weapon/reagent_containers/food/condiment/attackby(obj/item/I as obj, mob/user as mob)
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/afterattack(obj/target, mob/user , proximity)
+ if(!proximity) return
+ if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
+
+ if(!target.reagents.total_volume)
+ user << "[target] is empty."
+ return
+
+ if(reagents.total_volume >= reagents.maximum_volume)
+ user << "[src] is full."
+ return
+
+ var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
+ user << "You fill [src] with [trans] units of the contents of [target]."
+
+ //Something like a glass or a food item. Player probably wants to transfer TO it.
+ else if(target.is_open_container() || istype(target, /obj/item/weapon/reagent_containers/food/snacks))
+ if(!reagents.total_volume)
+ user << "[src] is empty."
+ return
+ if(target.reagents.total_volume >= target.reagents.maximum_volume)
+ user << "you can't add anymore to [target]."
+ return
+ var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "You transfer [trans] units of the condiment to [target]."
+
+/obj/item/weapon/reagent_containers/food/condiment/on_reagent_change()
+ if(icon_state == "saltshakersmall" || icon_state == "peppermillsmall")
+ return
+ if(reagents.reagent_list.len > 0)
+ var/main_reagent = reagents.get_master_reagent_id()
+ if(main_reagent in possible_states)
+ var/list/temp_list = possible_states[main_reagent]
+ icon_state = temp_list[1]
+ name = temp_list[2]
+ desc = temp_list[3]
+
+ else
+ name = "misc Condiment Bottle"
+ main_reagent = reagents.get_master_reagent_name()
+ if (reagents.reagent_list.len==1)
+ desc = "Looks like it is [lowertext(main_reagent)], but you are not sure."
+ else
+ desc = "A mixture of various condiments. [lowertext(main_reagent)] is one of them."
+ icon_state = "mixedcondiments"
+ else
+ icon_state = "emptycondiment"
+ name = "condiment Bottle"
+ desc = "An empty condiment bottle."
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/enzyme
+ name = "Universal Enzyme"
+ desc = "Used in cooking various dishes."
+ icon_state = "enzyme"
+
+ New()
+ ..()
+ reagents.add_reagent("enzyme", 50)
+
+/obj/item/weapon/reagent_containers/food/condiment/sugar
+
+ New()
+ ..()
+ reagents.add_reagent("sugar", 50)
+
+/obj/item/weapon/reagent_containers/food/condiment/saltshaker //Seperate from above since it's a small shaker rather then
+ name = "Salt Shaker" // a large one.
+ desc = "Salt. From space oceans, presumably."
+ icon_state = "saltshakersmall"
+ possible_transfer_amounts = list(1,20) //for clown turning the lid off
+ amount_per_transfer_from_this = 1
+ volume = 20
+
+ New()
+ ..()
+ reagents.add_reagent("sodiumchloride", 20)
+
+/obj/item/weapon/reagent_containers/food/condiment/peppermill
+ name = "Pepper Mill"
+ desc = "Often used to flavor food or make people sneeze."
+ icon_state = "peppermillsmall"
+ possible_transfer_amounts = list(1,20) //for clown turning the lid off
+ amount_per_transfer_from_this = 1
+ volume = 20
+
+ New()
+ ..()
+ reagents.add_reagent("blackpepper", 20)
+
+//Food packs. To easily apply deadly toxi... delicious sauces to your food!
+/obj/item/weapon/reagent_containers/food/condiment/pack
+ name = "condiment pack"
+ desc = "A small plastic pack with condiments to put on your food"
+ icon_state = "condi_empty"
+ volume = 10
+ amount_per_transfer_from_this = 10
+ possible_transfer_amounts = list(10)
+ possible_states = list("ketchup" = list("condi_ketchup", "Ketchup", "You feel more American already."), "capsaicin" = list("condi_hotsauce", "Hotsauce", "You can almost TASTE the stomach ulcers now!"), "soysauce" = list("condi_soysauce", "Soy Sauce", "A salty soy-based flavoring"), "frostoil" = list("condi_frostoil", "Coldsauce", "Leaves the tongue numb in it's passage"), "sodiumchloride" = list("condi_salt", "Salt Shaker", "Salt. From space oceans, presumably"), "blackpepper" = list("condi_pepper", "Pepper Mill", "Often used to flavor food or make people sneeze"), "cornoil" = list("condi_cornoil", "Corn Oil", "A delicious oil used in cooking. Made from corn"), "sugar" = list("condi_sugar", "Sugar", "Tasty spacey sugar!"))
+ var/originalname = "condiment" //Can't use initial(name) for this. This stores the name set by condimasters.
+
+/obj/item/weapon/reagent_containers/food/condiment/pack/New()
+ ..()
+ pixel_x = rand(-7, 7)
+ pixel_y = rand(-7, 7)
+
+/obj/item/weapon/reagent_containers/food/condiment/pack/attack(mob/M, mob/user, def_zone) //Can't feed these to people directly.
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/pack/afterattack(obj/target, mob/user , proximity)
+ if(!proximity) return
+
+ //You can tear the bag open above food to put the condiments on it, obviously.
+ if(istype(target, /obj/item/weapon/reagent_containers/food/snacks))
+ if(!reagents.total_volume)
+ user << "You tear open [src], but there's nothing in it."
+ del src
+ return
+ if(target.reagents.total_volume >= target.reagents.maximum_volume)
+ user << "You tear open [src], but [target] is stacked so high that it just drips off!" //Not sure if food can ever be full, but better safe than sorry.
+ del src
+ return
+ else
+ user << "You tear open [src] above [target] and the condiments drip onto it."
+ src.reagents.trans_to(target, amount_per_transfer_from_this)
+ del src
+
+/obj/item/weapon/reagent_containers/food/condiment/pack/on_reagent_change()
+ if(reagents.reagent_list.len > 0)
+ var/main_reagent = reagents.get_master_reagent_id()
+ if(main_reagent in possible_states)
+ var/list/temp_list = possible_states[main_reagent]
+ icon_state = temp_list[1]
+ desc = temp_list[3]
+ else
+ icon_state = "condi_mixed"
+ desc = "A small condiment pack. The label says it contains [originalname]"
+ else
+ icon_state = "condi_empty"
+ desc = "A small condiment pack. It is empty."
+
+//Ketchup
+/obj/item/weapon/reagent_containers/food/condiment/pack/ketchup
+ name = "ketchup pack"
+ originalname = "ketchup"
+
+/obj/item/weapon/reagent_containers/food/condiment/pack/ketchup/New()
+ ..()
+ reagents.add_reagent("ketchup", 10)
+
+//Hot sauce
+/obj/item/weapon/reagent_containers/food/condiment/pack/hotsauce
+ name = "hotsauce pack"
+ originalname = "hotsauce"
+
+/obj/item/weapon/reagent_containers/food/condiment/pack/hotsauce/New()
+ ..()
+ reagents.add_reagent("capsaicin", 10)
diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm
index b05fe1d7d47..ccdd272fb8b 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks.dm
@@ -23,11 +23,11 @@
var/fillevel = gulp_size
if(!R.total_volume || !R)
- user << "\red None of [src] left, oh no!"
+ user << " None of [src] left, oh no!"
return 0
if(M == user)
- M << "\blue You swallow a gulp of [src]."
+ M << "You swallow a gulp of [src]."
if(reagents.total_volume)
reagents.reaction(M, INGEST)
spawn(5)
diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
index cadaecc6918..a50c3690d39 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
@@ -122,14 +122,10 @@
throw_speed = 3
throw_range = 5
item_state = "beer"
+ hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("stabbed", "slashed", "attacked")
var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
-/obj/item/weapon/broken_bottle/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
- playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
- return ..()
-
-
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin
name = "Griffeater Gin"
desc = "A bottle of high quality gin, produced in the New London Space Station."
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index a47cf704f81..5665dd3fa55 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -11,7 +11,7 @@
var/eatverb
var/wrapped = 0
var/dried_type = null
-
+ var/potency = null
//Placeholder for effect that trigger on eating that aren't tied to reagents.
/obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume()
@@ -20,7 +20,10 @@
usr.drop_from_inventory(src) //so icons update :[
if(trash)
- if(ispath(trash,/obj/item))
+ if(ispath(trash,/obj/item/weapon/grown))
+ var/obj/item/TrashItem = new trash(usr,src.potency)
+ usr.put_in_hands(TrashItem)
+ else if(ispath(trash,/obj/item))
var/obj/item/TrashItem = new trash(usr)
usr.put_in_hands(TrashItem)
else if(istype(trash,/obj/item))
@@ -48,15 +51,15 @@
M << "You can't eat wrapped food!"
return 0
else if(fullness <= 50)
- M << "You hungrily [eatverb] some of the [src] and gobble it down!"
+ M << "You hungrily [eatverb] some of \the [src] and gobble it down!"
else if(fullness > 50 && fullness < 150)
- M << "You hungrily begin to [eatverb] the [src]."
+ M << "You hungrily begin to [eatverb] \the [src]."
else if(fullness > 150 && fullness < 350)
- M << "You [eatverb] the [src]."
+ M << "You [eatverb] \the [src]."
else if(fullness > 350 && fullness < 550)
- M << "You unwillingly [eatverb] a bit of the [src]."
+ M << "You unwillingly [eatverb] a bit of \the [src]."
else if(fullness > (550 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
- M << "You cannot force any more of the [src] to go down your throat."
+ M << "You cannot force any more of \the [src] to go down your throat."
return 0
else
if(! (isslime(M) || isbrain(M)) ) //If you're feeding it to someone else.
@@ -2508,4 +2511,4 @@
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("toxin", 5)
- bitesize = 3
+ bitesize = 3
diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/reagents/reagent_containers/food/snacks/meat.dm
index 3fc9aa535a2..8869a0259ce 100644
--- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks/meat.dm
@@ -3,7 +3,6 @@
desc = "A slab of meat"
icon_state = "meat"
dried_type = /obj/item/weapon/reagent_containers/food/snacks/sosjerky
- health = 180
New()
..()
reagents.add_reagent("nutriment", 3)
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 4e816b54cc3..f576fa36413 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -41,12 +41,17 @@
return
var/obj/effect/decal/chempuff/D = new/obj/effect/decal/chempuff(get_turf(src))
+ var/tiles =1
D.create_reagents(amount_per_transfer_from_this)
- reagents.trans_to(D, amount_per_transfer_from_this, 1/3)
+ if(amount_per_transfer_from_this >=10)
+ tiles =1
+ else
+ tiles =3
+
+ reagents.trans_to(D, amount_per_transfer_from_this, 1/tiles)
D.color = mix_color_from_reagents(D.reagents.reagent_list)
-
spawn(0)
- for(var/i=0, i<3, i++)
+ for(var/i=0, iYou switched [amount_per_transfer_from_this == 10 ? "on" : "off"] the pressure nozzle. You'll now use [amount_per_transfer_from_this] units per spray. "
+ user << "You [amount_per_transfer_from_this == 10 ? "remove" : "fix"] the nozzle. You'll now use [amount_per_transfer_from_this] units per spray."
/obj/item/weapon/reagent_containers/spray/examine()
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index a640d4ef451..c8d94e4365c 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -14,6 +14,8 @@
possible_transfer_amounts = null //list(5, 10, 15)
volume = 15
var/mode = SYRINGE_DRAW
+ g_amt = 20
+ m_amt = 10
on_reagent_change()
update_icon()
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 972c9cc3057..51f0bd79ea8 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -1,1334 +1,1341 @@
-// Disposal bin
-// Holds items for disposal into pipe system
-// Draws air from turf, gradually charges internal reservoir
-// Once full (~1 atm), uses air resv to flush items into the pipes
-// Automatically recharges air (unless off), will flush when ready if pre-set
-// Can hold items and human size things, no other draggables
-// Toilets are a type of disposal bin for small objects only and work on magic. By magic, I mean torque rotation
-#define SEND_PRESSURE 0.05*ONE_ATMOSPHERE
-
-/obj/machinery/disposal
- name = "disposal unit"
- desc = "A pneumatic waste disposal unit."
- icon = 'icons/obj/pipes/disposal.dmi'
- icon_state = "disposal"
- anchored = 1
- density = 1
- var/datum/gas_mixture/air_contents // internal reservoir
- var/mode = 1 // item mode 0=off 1=charging 2=charged
- var/flush = 0 // true if flush handle is pulled
- var/obj/structure/disposalpipe/trunk/trunk = null // the attached pipe trunk
- var/flushing = 0 // true if flushing in progress
- var/flush_every_ticks = 30 //Every 30 ticks it will look whether it is ready to flush
- var/flush_count = 0 //this var adds 1 once per tick. When it reaches flush_every_ticks it resets and tries to flush.
- var/last_sound = 0
-
- // create a new disposal
- // find the attached trunk (if present) and init gas resvr.
-/obj/machinery/disposal/New()
- ..()
-
- trunk_check()
-
- air_contents = new/datum/gas_mixture()
- //gas.volume = 1.05 * CELLSTANDARD
- update()
-
-/obj/machinery/disposal/proc/trunk_check()
- trunk = locate() in src.loc
- if(!trunk)
- mode = 0
- flush = 0
- else
- mode = initial(mode)
- flush = initial(flush)
- trunk.linked = src // link the pipe trunk to self
-
-/obj/machinery/disposal/Del()
- for(var/atom/movable/AM in contents)
- AM.loc = src.loc
- ..()
-
-/obj/machinery/disposal/initialize()
- // this will get a copy of the air turf and take a SEND PRESSURE amount of air from it
- var/atom/L = loc
- var/datum/gas_mixture/env = new
- env.copy_from(L.return_air())
- var/datum/gas_mixture/removed = env.remove(SEND_PRESSURE + 1)
- air_contents.merge(removed)
- trunk_check()
-
- // attack by item places it in to disposal
-/obj/machinery/disposal/attackby(var/obj/item/I, var/mob/user)
- if(stat & BROKEN || !I || !user)
- return
-
- if(isrobot(user) && !istype(I, /obj/item/weapon/storage/bag/trash))
- return
- src.add_fingerprint(user)
- if(mode<=0) // It's off
- if(istype(I, /obj/item/weapon/screwdriver))
- if(contents.len > 0)
- user << "Eject the items first!"
- return
- if(mode==0) // It's off but still not unscrewed
- mode=-1 // Set it to doubleoff l0l
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "You remove the screws around the power connection."
- return
- else if(mode==-1)
- mode=0
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "You attach the screws around the power connection."
- return
- else if(istype(I,/obj/item/weapon/weldingtool) && mode==-1)
- if(contents.len > 0)
- user << "Eject the items first!"
- return
- var/obj/item/weapon/weldingtool/W = I
- if(W.remove_fuel(0,user))
- playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
- user << "You start slicing the floorweld off the disposal unit."
-
- if(do_after(user,20))
- if(!src || !W.isOn()) return
- user << "You sliced the floorweld off the disposal unit."
- var/obj/structure/disposalconstruct/C = new (src.loc)
- src.transfer_fingerprints_to(C)
- C.ptype = 6 // 6 = disposal unit
- C.anchored = 1
- C.density = 1
- C.update()
- del(src)
- return
- else
- user << "You need more welding fuel to complete this task."
- return
-
- if(istype(I, /obj/item/weapon/melee/energy/blade))
- user << "You can't place that item inside the disposal unit."
- return
-
- if(istype(I, /obj/item/weapon/storage/bag/trash))
- var/obj/item/weapon/storage/bag/trash/T = I
- user << "\blue You empty the bag."
- for(var/obj/item/O in T.contents)
- T.remove_from_storage(O,src)
- T.update_icon()
- update()
- return
-
- var/obj/item/weapon/grab/G = I
- if(istype(G)) // handle grabbed mob
- if(ismob(G.affecting))
- var/mob/GM = G.affecting
- for (var/mob/V in viewers(usr))
- V.show_message("[usr] starts putting [GM.name] into the disposal.", 3)
- if(do_after(usr, 20))
- if (GM.client)
- GM.client.perspective = EYE_PERSPECTIVE
- GM.client.eye = src
- GM.loc = src
- for (var/mob/C in viewers(src))
- C.show_message("\red [GM.name] has been placed in the [src] by [user].", 3)
- del(G)
- return
-
- if(!I) return
-
- user.drop_item()
- if(I)
- I.loc = src
-
- user << "You place \the [I] into the [src]."
- for(var/mob/M in viewers(src))
- if(M == user)
- continue
- M.show_message("[user.name] places \the [I] into the [src].", 3)
-
- update()
-
-// mouse drop another mob or self
-//
-/obj/machinery/disposal/MouseDrop_T(mob/target, mob/user)
- if (!istype(target) || target.buckled || get_dist(user, src) > 1 || get_dist(user, target) > 1 || user.stat || istype(user, /mob/living/silicon/ai))
- return
- src.add_fingerprint(user)
- var/target_loc = target.loc
- var/msg
- for (var/mob/V in viewers(usr))
- if(target == user && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
- V.show_message("[usr] starts climbing into the disposal.", 3)
- if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
- if(target.anchored) return
- if(!ishuman(user) && !ismonkey(user)) return
- V.show_message("[usr] starts stuffing [target.name] into the disposal.", 3)
- if(!do_after(usr, 20))
- return
- if(target_loc != target.loc)
- return
- if(target == user && !user.stat && !user.weakened && !user.stunned && !user.paralysis) // if drop self, then climbed in
- // must be awake, not stunned or whatever
- msg = "[user.name] climbs into the [src]."
- user << "You climb into the [src]."
- else if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
- msg = "[user.name] stuffs [target.name] into the [src]!"
- user << "You stuff [target.name] into the [src]!"
- else
- return
- if (target.client)
- target.client.perspective = EYE_PERSPECTIVE
- target.client.eye = src
- target.loc = src
-
- for (var/mob/C in viewers(src))
- if(C == user)
- continue
- C.show_message(msg, 3)
-
- update()
- return
-
-// can breath normally in the disposal
-/obj/machinery/disposal/alter_health()
- return get_turf(src)
-
-/obj/machinery/disposal/relaymove(mob/user as mob)
- attempt_escape(user)
-
-// resist to escape the bin
-/obj/machinery/disposal/container_resist()
- attempt_escape(usr)
-
-/obj/machinery/disposal/proc/attempt_escape(mob/user as mob)
- if(src.flushing)
- return
- go_out(user)
- return
-
-// leave the disposal
-/obj/machinery/disposal/proc/go_out(mob/user)
-
- if (user.client)
- user.client.eye = user.client.mob
- user.client.perspective = MOB_PERSPECTIVE
- user.loc = src.loc
- update()
- return
-
-
-// monkeys can only pull the flush lever
-/obj/machinery/disposal/attack_paw(mob/user as mob)
- if(stat & BROKEN)
- return
-
- flush = !flush
- update()
- return
-
-// ai as human but can't flush
-/obj/machinery/disposal/attack_ai(mob/user as mob)
- interact(user, 1)
-
-// human interact with machine
-/obj/machinery/disposal/attack_hand(mob/user as mob)
- if(user && user.loc == src)
- usr << "\red You cannot reach the controls from inside."
- return
- /*
- if(mode==-1)
- usr << "\red The disposal units power is disabled."
- return
- */
- interact(user, 0)
-
-// user interaction
-/obj/machinery/disposal/interact(mob/user, var/ai=0)
-
- src.add_fingerprint(user)
- if(stat & BROKEN)
- user.unset_machine()
- return
-
- var/dat = "Waste Disposal Unit Waste Disposal Unit
"
-
- if(!ai) // AI can't pull flush handle
- if(flush)
- dat += "Disposal handle: Disengage Engaged"
- else
- dat += "Disposal handle: Disengaged Engage"
-
- dat += "
Eject contents
"
-
- if(mode <= 0)
- dat += "Pump: Off On
"
- else if(mode == 1)
- dat += "Pump: Off On (pressurizing)
"
- else
- dat += "Pump: Off On (idle)
"
-
- var/per = Clamp(100* air_contents.return_pressure() / (SEND_PRESSURE), 0, 100)
-
- dat += "Pressure: [round(per, 1)]%
"
-
-
- user.set_machine(src)
- user << browse(dat, "window=disposal;size=360x170")
- onclose(user, "disposal")
-
-// handle machine interaction
-
-/obj/machinery/disposal/Topic(href, href_list)
- if(..())
- return
- if(usr.loc == src)
- usr << "\red You cannot reach the controls from inside."
- return
-
- if(mode==-1 && !href_list["eject"]) // only allow ejecting if mode is -1
- usr << "\red The disposal units power is disabled."
- return
- ..()
- usr.set_machine(src)
-
- if(href_list["close"])
- usr.unset_machine()
- usr << browse(null, "window=disposal")
- return
-
- if(href_list["pump"])
- if(text2num(href_list["pump"]))
- mode = 1
- else
- mode = 0
- update()
-
- if(href_list["handle"])
- flush = text2num(href_list["handle"])
- update()
-
- if(href_list["eject"])
- eject()
- return
-
-// eject the contents of the disposal unit
-/obj/machinery/disposal/proc/eject()
- for(var/atom/movable/AM in src)
- AM.loc = src.loc
- AM.pipe_eject(0)
- update()
-
-// update the icon & overlays to reflect mode & status
-/obj/machinery/disposal/proc/update()
- overlays.Cut()
- if(stat & BROKEN)
- icon_state = "disposal-broken"
- mode = 0
- flush = 0
- return
-
- // flush handle
- if(flush)
- overlays += image('icons/obj/pipes/disposal.dmi', "dispover-handle")
-
- // only handle is shown if no power
- if(stat & NOPOWER || mode == -1)
- return
-
- // check for items in disposal - occupied light
- if(contents.len > 0)
- overlays += image('icons/obj/pipes/disposal.dmi', "dispover-full")
-
- // charging and ready light
- if(mode == 1)
- overlays += image('icons/obj/pipes/disposal.dmi', "dispover-charge")
- else if(mode == 2)
- overlays += image('icons/obj/pipes/disposal.dmi', "dispover-ready")
-
-// timed process
-// charge the gas reservoir and perform flush if ready
-/obj/machinery/disposal/process()
- if(stat & BROKEN) // nothing can happen if broken
- return
-
- flush_count++
- if( flush_count >= flush_every_ticks )
- if( contents.len )
- if(mode == 2)
- spawn(0)
- feedback_inc("disposal_auto_flush",1)
- flush()
- flush_count = 0
-
- src.updateDialog()
-
- if(flush && air_contents.return_pressure() >= SEND_PRESSURE ) // flush can happen even without power
- spawn(0)
- flush()
-
- if(stat & NOPOWER) // won't charge if no power
- return
-
- use_power(100) // base power usage
-
- if(mode != 1) // if off or ready, no need to charge
- return
-
- // otherwise charge
- use_power(500) // charging power usage
-
- var/atom/L = loc // recharging from loc turf
-
- var/datum/gas_mixture/env = L.return_air()
- var/pressure_delta = (SEND_PRESSURE*1.01) - air_contents.return_pressure()
-
- if(env.temperature > 0)
- var/transfer_moles = 0.1 * pressure_delta*air_contents.volume/(env.temperature * R_IDEAL_GAS_EQUATION)
-
- //Actually transfer the gas
- var/datum/gas_mixture/removed = env.remove(transfer_moles)
- air_contents.merge(removed)
- air_update_turf()
-
-
- // if full enough, switch to ready mode
- if(air_contents.return_pressure() >= SEND_PRESSURE)
- mode = 2
- update()
- return
-
-// perform a flush
-/obj/machinery/disposal/proc/flush()
-
- flushing = 1
- flick("[icon_state]-flush", src)
-
- var/wrapcheck = 0
- var/obj/structure/disposalholder/H = new() // virtual holder object which actually
- // travels through the pipes.
- for(var/obj/item/smallDelivery/O in src)
- wrapcheck = 1
-
- if(wrapcheck == 1)
- H.tomail = 1
-
- sleep(10)
- if(last_sound < world.time + 1)
- playsound(src, 'sound/machines/disposalflush.ogg', 50, 0, 0)
- last_sound = world.time
- sleep(5) // wait for animation to finish
-
- H.init(src) // copy the contents of disposer to holder
- air_contents = new() // new empty gas resv.
-
- H.start(src) // start the holder processing movement
- flushing = 0
- // now reset disposal state
- flush = 0
- if(mode == 2) // if was ready,
- mode = 1 // switch to charging
- update()
- return
-
-
-// called when area power changes
-/obj/machinery/disposal/power_change()
- ..() // do default setting/reset of stat NOPOWER bit
- update() // update icon
- return
-
-
-// called when holder is expelled from a disposal
-// should usually only occur if the pipe network is modified
-/obj/machinery/disposal/proc/expel(var/obj/structure/disposalholder/H)
-
- var/turf/target
- playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
- if(H) // Somehow, someone managed to flush a window which broke mid-transit and caused the disposal to go in an infinite loop trying to expel null, hopefully this fixes it
- for(var/atom/movable/AM in H)
- target = get_offset_target_turf(src.loc, rand(5)-rand(5), rand(5)-rand(5))
-
- AM.loc = src.loc
- AM.pipe_eject(0)
- spawn(1)
- if(AM)
- AM.throw_at(target, 5, 1)
-
- H.vent_gas(loc)
- del(H)
-
-/obj/machinery/disposal/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
- if (istype(mover,/obj/item) && mover.throwing)
- var/obj/item/I = mover
- if(istype(I, /obj/item/projectile))
- return
- if(prob(75))
- I.loc = src
- for(var/mob/M in viewers(src))
- M.show_message("\the [I] lands in \the [src].", 3)
- else
- for(var/mob/M in viewers(src))
- M.show_message("\the [I] bounces off of \the [src]'s rim!.", 3)
- return 0
- else
- return ..(mover, target, height, air_group)
-
-// virtual disposal object
-// travels through pipes in lieu of actual items
-// contents will be items flushed by the disposal
-// this allows the gas flushed to be tracked
-
-/obj/structure/disposalholder
- invisibility = 101
- var/datum/gas_mixture/gas = null // gas used to flush, will appear at exit point
- var/active = 0 // true if the holder is moving, otherwise inactive
- dir = 0
- var/count = 1000 //*** can travel 1000 steps before going inactive (in case of loops)
- var/has_fat_guy = 0 // true if contains a fat person
- var/destinationTag = 0 // changes if contains a delivery container
- var/tomail = 0 //changes if contains wrapped package
- var/hasmob = 0 //If it contains a mob
-
-
- // initialize a holder from the contents of a disposal unit
- proc/init(var/obj/machinery/disposal/D)
- gas = D.air_contents// transfer gas resv. into holder object
-
- //Check for any living mobs trigger hasmob.
- //hasmob effects whether the package goes to cargo or its tagged destination.
- for(var/mob/living/M in D)
- if(M && M.stat != 2)
- hasmob = 1
-
- //Checks 1 contents level deep. This means that players can be sent through disposals...
- //...but it should require a second person to open the package. (i.e. person inside a wrapped locker)
- for(var/obj/O in D)
- if(O.contents)
- for(var/mob/living/M in O.contents)
- if(M && M.stat != 2)
- hasmob = 1
-
- // now everything inside the disposal gets put into the holder
- // note AM since can contain mobs or objs
- for(var/atom/movable/AM in D)
- AM.loc = src
- if(istype(AM, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = AM
- if(FAT in H.mutations) // is a human and fat?
- has_fat_guy = 1 // set flag on holder
- if(istype(AM, /obj/structure/bigDelivery) && !hasmob)
- var/obj/structure/bigDelivery/T = AM
- src.destinationTag = T.sortTag
- if(istype(AM, /obj/item/smallDelivery) && !hasmob)
- var/obj/item/smallDelivery/T = AM
- src.destinationTag = T.sortTag
-
-
- // start the movement process
- // argument is the disposal unit the holder started in
- proc/start(var/obj/machinery/disposal/D)
- if(!D.trunk)
- D.expel(src) // no trunk connected, so expel immediately
- return
-
- loc = D.trunk
- active = 1
- dir = DOWN
- spawn(1)
- move() // spawn off the movement process
-
- return
-
- // movement process, persists while holder is moving through pipes
- proc/move()
- var/obj/structure/disposalpipe/last
- while(active)
- if(has_fat_guy && prob(2)) // chance of becoming stuck per segment if contains a fat guy
- active = 0
- // find the fat guys
- for(var/mob/living/carbon/human/H in src)
-
- break
- sleep(1) // was 1
- var/obj/structure/disposalpipe/curr = loc
- last = curr
- curr = curr.transfer(src)
- if(!curr)
- last.expel(src, loc, dir)
-
- //
- if(!(count--))
- active = 0
- return
-
-
-
- // find the turf which should contain the next pipe
- proc/nextloc()
- return get_step(loc,dir)
-
- // find a matching pipe on a turf
- proc/findpipe(var/turf/T)
-
- if(!T)
- return null
-
- var/fdir = turn(dir, 180) // flip the movement direction
- for(var/obj/structure/disposalpipe/P in T)
- if(fdir & P.dpdir) // find pipe direction mask that matches flipped dir
- return P
- // if no matching pipe, return null
- return null
-
- // merge two holder objects
- // used when a a holder meets a stuck holder
- proc/merge(var/obj/structure/disposalholder/other)
- for(var/atom/movable/AM in other)
- AM.loc = src // move everything in other holder to this one
- if(ismob(AM))
- var/mob/M = AM
- if(M.client) // if a client mob, update eye to follow this holder
- M.client.eye = src
-
- if(other.has_fat_guy)
- has_fat_guy = 1
- del(other)
-
-
- // called when player tries to move while in a pipe
- relaymove(mob/user as mob)
- if (user.stat)
- return
- if (src.loc)
- for (var/mob/M in hearers(src.loc.loc))
- M << "CLONG, clong!"
-
- playsound(src.loc, 'sound/effects/clang.ogg', 50, 0, 0)
-
- // called to vent all gas in holder to a location
- proc/vent_gas(var/atom/location)
- location.assume_air(gas) // vent all gas to turf
- return
-
-// Disposal pipes
-
-/obj/structure/disposalpipe
- icon = 'icons/obj/pipes/disposal.dmi'
- name = "disposal pipe"
- desc = "An underfloor disposal pipe."
- anchored = 1
- density = 0
-
- level = 1 // underfloor only
- var/dpdir = 0 // bitmask of pipe directions
- dir = 0 // dir will contain dominant direction for junction pipes
- var/health = 10 // health points 0-10
- layer = 2.3 // slightly lower than wires and other pipes
- var/base_icon_state // initial icon state on map
-
- // new pipe, set the icon_state as on map
- New()
- ..()
- base_icon_state = icon_state
- return
-
-
- // pipe is deleted
- // ensure if holder is present, it is expelled
- Del()
- var/obj/structure/disposalholder/H = locate() in src
- if(H)
- // holder was present
- H.active = 0
- var/turf/T = src.loc
- if(T.density)
- // deleting pipe is inside a dense turf (wall)
- // this is unlikely, but just dump out everything into the turf in case
-
- for(var/atom/movable/AM in H)
- AM.loc = T
- AM.pipe_eject(0)
- del(H)
- ..()
- return
-
- // otherwise, do normal expel from turf
- if(H)
- expel(H, T, 0)
- ..()
-
- // returns the direction of the next pipe object, given the entrance dir
- // by default, returns the bitmask of remaining directions
- proc/nextdir(var/fromdir)
- return dpdir & (~turn(fromdir, 180))
-
- // transfer the holder through this pipe segment
- // overriden for special behaviour
- //
- proc/transfer(var/obj/structure/disposalholder/H)
- var/nextdir = nextdir(H.dir)
- H.dir = nextdir
- var/turf/T = H.nextloc()
- var/obj/structure/disposalpipe/P = H.findpipe(T)
-
- if(P)
- // find other holder in next loc, if inactive merge it with current
- var/obj/structure/disposalholder/H2 = locate() in P
- if(H2 && !H2.active)
- H.merge(H2)
-
- H.loc = P
- else // if wasn't a pipe, then set loc to turf
- H.loc = T
- return null
-
- return P
-
-
- // update the icon_state to reflect hidden status
- proc/update()
- var/turf/T = src.loc
- hide(T.intact && !istype(T,/turf/space)) // space never hides pipes
-
- // hide called by levelupdate if turf intact status changes
- // change visibility status and force update of icon
- hide(var/intact)
- invisibility = intact ? 101: 0 // hide if floor is intact
- updateicon()
-
- // update actual icon_state depending on visibility
- // if invisible, append "f" to icon_state to show faded version
- // this will be revealed if a T-scanner is used
- // if visible, use regular icon_state
- proc/updateicon()
- if(invisibility)
- icon_state = "[base_icon_state]f"
- else
- icon_state = base_icon_state
- return
-
-
- // expel the held objects into a turf
- // called when there is a break in the pipe
- //
-
- proc/expel(var/obj/structure/disposalholder/H, var/turf/T, var/direction)
-
- var/turf/target
-
- if(istype(T, /turf/simulated/floor)) //intact floor, pop the tile
- var/turf/simulated/floor/F = T
- if(F.floor_tile)
- F.floor_tile.loc = H //It took me a day to figure out this was the right way to do it. ¯\_(;_;)_/¯
- F.floor_tile = null //So it doesn't get deleted in make_plating()
- F.make_plating()
-
- if(direction) // direction is specified
- if(istype(T, /turf/space)) // if ended in space, then range is unlimited
- target = get_edge_target_turf(T, direction)
- else // otherwise limit to 10 tiles
- target = get_ranged_target_turf(T, direction, 10)
-
- playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
- if(H)
- for(var/atom/movable/AM in H)
- AM.loc = T
- AM.pipe_eject(direction)
- spawn(1)
- if(AM)
- AM.throw_at(target, 100, 1)
-
- else // no specified direction, so throw in random direction
-
- playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
- if(H)
- for(var/atom/movable/AM in H)
- target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5))
-
- AM.loc = T
- AM.pipe_eject(0)
- spawn(1)
- if(AM)
- AM.throw_at(target, 5, 1)
- H.vent_gas(T)
- del(H)
- return
-
- // call to break the pipe
- // will expel any holder inside at the time
- // then delete the pipe
- // remains : set to leave broken pipe pieces in place
- proc/broken(var/remains = 0)
- if(remains)
- for(var/D in cardinal)
- if(D & dpdir)
- var/obj/structure/disposalpipe/broken/P = new(src.loc)
- P.dir = D
-
- src.invisibility = 101 // make invisible (since we won't delete the pipe immediately)
- var/obj/structure/disposalholder/H = locate() in src
- if(H)
- // holder was present
- H.active = 0
- var/turf/T = src.loc
- if(T.density)
- // broken pipe is inside a dense turf (wall)
- // this is unlikely, but just dump out everything into the turf in case
-
- for(var/atom/movable/AM in H)
- AM.loc = T
- AM.pipe_eject(0)
- del(H)
- return
-
- // otherwise, do normal expel from turf
- if(H)
- expel(H, T, 0)
-
- spawn(2) // delete pipe after 2 ticks to ensure expel proc finished
- del(src)
-
-
- // pipe affected by explosion
- ex_act(severity)
-
- switch(severity)
- if(1.0)
- broken(0)
- return
- if(2.0)
- health -= rand(5,15)
- healthcheck()
- return
- if(3.0)
- health -= rand(0,15)
- healthcheck()
- return
-
-
- // test health for brokenness
- proc/healthcheck()
- if(health < -2)
- broken(0)
- else if(health<1)
- broken(1)
- return
-
- //attack by item
- //weldingtool: unfasten and convert to obj/disposalconstruct
-
- attackby(var/obj/item/I, var/mob/user)
-
- var/turf/T = src.loc
- if(T.intact)
- return // prevent interaction with T-scanner revealed pipes
- src.add_fingerprint(user)
- if(istype(I, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/W = I
-
- if(W.remove_fuel(0,user))
- playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
- // check if anything changed over 2 seconds
- var/turf/uloc = user.loc
- var/atom/wloc = W.loc
- user << "Slicing the disposal pipe."
- sleep(30)
- if(!W.isOn()) return
- if(user.loc == uloc && wloc == W.loc)
- welded()
- else
- user << "You must stay still while welding the pipe."
- else
- user << "You need more welding fuel to cut the pipe."
- return
-
- // called when pipe is cut with welder
- proc/welded()
-
- var/obj/structure/disposalconstruct/C = new (src.loc)
- switch(base_icon_state)
- if("pipe-s")
- C.ptype = 0
- if("pipe-c")
- C.ptype = 1
- if("pipe-j1")
- C.ptype = 2
- if("pipe-j2")
- C.ptype = 3
- if("pipe-y")
- C.ptype = 4
- if("pipe-t")
- C.ptype = 5
- if("pipe-j1s")
- C.ptype = 9
- if("pipe-j2s")
- C.ptype = 10
- src.transfer_fingerprints_to(C)
- C.dir = dir
- C.density = 0
- C.anchored = 1
- C.update()
-
- del(src)
-
-// *** TEST verb
-//client/verb/dispstop()
-// for(var/obj/structure/disposalholder/H in world)
-// H.active = 0
-
-// a straight or bent segment
-/obj/structure/disposalpipe/segment
- icon_state = "pipe-s"
-
- New()
- ..()
- if(icon_state == "pipe-s")
- dpdir = dir | turn(dir, 180)
- else
- dpdir = dir | turn(dir, -90)
-
- update()
- return
-
-
-
-
-//a three-way junction with dir being the dominant direction
-/obj/structure/disposalpipe/junction
- icon_state = "pipe-j1"
-
- New()
- ..()
- if(icon_state == "pipe-j1")
- dpdir = dir | turn(dir, -90) | turn(dir,180)
- else if(icon_state == "pipe-j2")
- dpdir = dir | turn(dir, 90) | turn(dir,180)
- else // pipe-y
- dpdir = dir | turn(dir,90) | turn(dir, -90)
- update()
- return
-
-
- // next direction to move
- // if coming in from secondary dirs, then next is primary dir
- // if coming in from primary dir, then next is equal chance of other dirs
-
- nextdir(var/fromdir)
- var/flipdir = turn(fromdir, 180)
- if(flipdir != dir) // came from secondary dir
- return dir // so exit through primary
- else // came from primary
- // so need to choose either secondary exit
- var/mask = ..(fromdir)
-
- // find a bit which is set
- var/setbit = 0
- if(mask & NORTH)
- setbit = NORTH
- else if(mask & SOUTH)
- setbit = SOUTH
- else if(mask & EAST)
- setbit = EAST
- else
- setbit = WEST
-
- if(prob(50)) // 50% chance to choose the found bit or the other one
- return setbit
- else
- return mask & (~setbit)
-
-//a three-way junction that sorts objects
-/obj/structure/disposalpipe/sortjunction
-
- icon_state = "pipe-j1s"
- var/sortType = 0 //Look at the list called TAGGERLOCATIONS in setup.dm
- var/posdir = 0
- var/negdir = 0
- var/sortdir = 0
-
- proc/updatedesc()
- desc = "An underfloor disposal pipe with a package sorting mechanism."
- if(sortType>0)
- var/tag = uppertext(TAGGERLOCATIONS[sortType])
- desc += "\nIt's tagged with [tag]"
-
- proc/updatedir()
- posdir = dir
- negdir = turn(posdir, 180)
-
- if(icon_state == "pipe-j1s")
- sortdir = turn(posdir, -90)
- else
- icon_state = "pipe-j2s"
- sortdir = turn(posdir, 90)
-
- dpdir = sortdir | posdir | negdir
-
- New()
- ..()
- updatedir()
- updatedesc()
- update()
- return
-
- attackby(var/obj/item/I, var/mob/user)
- if(..())
- return
-
- if(istype(I, /obj/item/device/destTagger))
- var/obj/item/device/destTagger/O = I
-
- if(O.currTag > 0)// Tag set
- sortType = O.currTag
- playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1)
- var/tag = uppertext(TAGGERLOCATIONS[O.currTag])
- user << "\blue Changed filter to [tag]"
- updatedesc()
-
-
- // next direction to move
- // if coming in from negdir, then next is primary dir or sortdir
- // if coming in from posdir, then flip around and go back to posdir
- // if coming in from sortdir, go to posdir
-
- nextdir(var/fromdir, var/sortTag)
- //var/flipdir = turn(fromdir, 180)
- if(fromdir != sortdir) // probably came from the negdir
-
- if(src.sortType == sortTag) //if destination matches filtered type...
- return sortdir // exit through sortdirection
- else
- return posdir
- else // came from sortdir
- // so go with the flow to positive direction
- return posdir
-
- transfer(var/obj/structure/disposalholder/H)
- var/nextdir = nextdir(H.dir, H.destinationTag)
- H.dir = nextdir
- var/turf/T = H.nextloc()
- var/obj/structure/disposalpipe/P = H.findpipe(T)
-
- if(P)
- // find other holder in next loc, if inactive merge it with current
- var/obj/structure/disposalholder/H2 = locate() in P
- if(H2 && !H2.active)
- H.merge(H2)
-
- H.loc = P
- else // if wasn't a pipe, then set loc to turf
- H.loc = T
- return null
-
- return P
-
-
-//a three-way junction that sorts objects destined for the mail office mail table (tomail = 1)
-/obj/structure/disposalpipe/wrapsortjunction
-
- desc = "An underfloor disposal pipe which sorts wrapped and unwrapped objects."
- icon_state = "pipe-j1s"
- var/posdir = 0
- var/negdir = 0
- var/sortdir = 0
-
- New()
- ..()
- posdir = dir
- if(icon_state == "pipe-j1s")
- sortdir = turn(posdir, -90)
- negdir = turn(posdir, 180)
- else
- icon_state = "pipe-j2s"
- sortdir = turn(posdir, 90)
- negdir = turn(posdir, 180)
- dpdir = sortdir | posdir | negdir
-
- update()
- return
-
- // next direction to move
- // if coming in from negdir, then next is primary dir or sortdir
- // if coming in from posdir, then flip around and go back to posdir
- // if coming in from sortdir, go to posdir
-
- nextdir(var/fromdir, var/istomail)
- //var/flipdir = turn(fromdir, 180)
- if(fromdir != sortdir) // probably came from the negdir
-
- if(istomail) //if destination matches filtered type...
- return sortdir // exit through sortdirection
- else
- return posdir
- else // came from sortdir
- // so go with the flow to positive direction
- return posdir
-
- transfer(var/obj/structure/disposalholder/H)
- var/nextdir = nextdir(H.dir, H.tomail)
- H.dir = nextdir
- var/turf/T = H.nextloc()
- var/obj/structure/disposalpipe/P = H.findpipe(T)
-
- if(P)
- // find other holder in next loc, if inactive merge it with current
- var/obj/structure/disposalholder/H2 = locate() in P
- if(H2 && !H2.active)
- H.merge(H2)
-
- H.loc = P
- else // if wasn't a pipe, then set loc to turf
- H.loc = T
- return null
-
- return P
-
-
-
-
-
-//a trunk joining to a disposal bin or outlet on the same turf
-/obj/structure/disposalpipe/trunk
- icon_state = "pipe-t"
- var/obj/linked // the linked obj/machinery/disposal or obj/disposaloutlet
-
-/obj/structure/disposalpipe/trunk/New()
- ..()
- dpdir = dir
- spawn(1)
- getlinked()
-
- update()
- return
-
-/obj/structure/disposalpipe/trunk/proc/getlinked()
- linked = null
- var/obj/machinery/disposal/D = locate() in src.loc
- if(D)
- linked = D
- if (!D.trunk)
- D.trunk = src
-
- var/obj/structure/disposaloutlet/O = locate() in src.loc
- if(O)
- linked = O
-
- update()
- return
-
- // Override attackby so we disallow trunkremoval when somethings ontop
-/obj/structure/disposalpipe/trunk/attackby(var/obj/item/I, var/mob/user)
-
- //Disposal bins or chutes
- /*
- These shouldn't be required
- var/obj/machinery/disposal/D = locate() in src.loc
- if(D && D.anchored)
- return
-
- //Disposal outlet
- var/obj/structure/disposaloutlet/O = locate() in src.loc
- if(O && O.anchored)
- return
- */
-
- //Disposal constructors
- var/obj/structure/disposalconstruct/C = locate() in src.loc
- if(C && C.anchored)
- return
-
- var/turf/T = src.loc
- if(T.intact)
- return // prevent interaction with T-scanner revealed pipes
- src.add_fingerprint(user)
- if(istype(I, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/W = I
-
- if(linked)
- user << "You need to deconstruct disposal machinery above this pipe."
- return
-
- if(W.remove_fuel(0,user))
- playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
- // check if anything changed over 2 seconds
- var/turf/uloc = user.loc
- var/atom/wloc = W.loc
- user << "Slicing the disposal pipe."
- sleep(30)
- if(!W.isOn()) return
- if(user.loc == uloc && wloc == W.loc)
- welded()
- else
- user << "You must stay still while welding the pipe."
- else
- user << "You need more welding fuel to cut the pipe."
-
- return
-
- // would transfer to next pipe segment, but we are in a trunk
- // if not entering from disposal bin,
- // transfer to linked object (outlet or bin)
-
-/obj/structure/disposalpipe/trunk/transfer(var/obj/structure/disposalholder/H)
-
- if(H.dir == DOWN) // we just entered from a disposer
- return ..() // so do base transfer proc
- // otherwise, go to the linked object
- if(linked)
- var/obj/structure/disposaloutlet/O = linked
- if(istype(O) && (H))
- O.expel(H) // expel at outlet
- else
- var/obj/machinery/disposal/D = linked
- if(H)
- D.expel(H) // expel at disposal
- else
- if(H)
- src.expel(H, src.loc, 0) // expel at turf
- return null
-
- // nextdir
-
-/obj/structure/disposalpipe/trunk/nextdir(var/fromdir)
- if(fromdir == DOWN)
- return dir
- else
- return 0
-
-// a broken pipe
-/obj/structure/disposalpipe/broken
- icon_state = "pipe-b"
- dpdir = 0 // broken pipes have dpdir=0 so they're not found as 'real' pipes
- // i.e. will be treated as an empty turf
- desc = "A broken piece of disposal pipe."
-
- New()
- ..()
- update()
- return
-
- // called when welded
- // for broken pipe, remove and turn into scrap
-
- welded()
-// var/obj/item/scrap/S = new(src.loc)
-// S.set_components(200,0,0)
- del(src)
-
-// the disposal outlet machine
-
-/obj/structure/disposaloutlet
- name = "disposal outlet"
- desc = "An outlet for the pneumatic disposal system."
- icon = 'icons/obj/pipes/disposal.dmi'
- icon_state = "outlet"
- density = 1
- anchored = 1
- var/active = 0
- var/turf/target // this will be where the output objects are 'thrown' to.
- var/mode = 0
- var/start_eject = 0
- var/eject_range = 2
-
- New()
- ..()
-
- spawn(1)
- target = get_ranged_target_turf(src, dir, 10)
-
-
- var/obj/structure/disposalpipe/trunk/trunk = locate() in src.loc
- if(trunk)
- trunk.linked = src // link the pipe trunk to self
-
- // expel the contents of the holder object, then delete it
- // called when the holder exits the outlet
- proc/expel(var/obj/structure/disposalholder/H)
-
- flick("outlet-open", src)
- if((start_eject + 30) < world.time)
- start_eject = world.time
- playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0)
- sleep(20)
- playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
- else
- sleep(20)
- if(H)
- for(var/atom/movable/AM in H)
- AM.loc = src.loc
- AM.pipe_eject(dir)
- spawn(5)
- if(AM)
- AM.throw_at(target, eject_range, 1)
- H.vent_gas(src.loc)
- del(H)
- return
-
- attackby(var/obj/item/I, var/mob/user)
- if(!I || !user)
- return
- src.add_fingerprint(user)
- if(istype(I, /obj/item/weapon/screwdriver))
- if(mode==0)
- mode=1
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "You remove the screws around the power connection."
- return
- else if(mode==1)
- mode=0
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "You attach the screws around the power connection."
- return
- else if(istype(I,/obj/item/weapon/weldingtool) && mode==1)
- var/obj/item/weapon/weldingtool/W = I
- if(W.remove_fuel(0,user))
- playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
- user << "You start slicing the floorweld off the disposal outlet."
- if(do_after(user,20))
- if(!src || !W.isOn()) return
- user << "You sliced the floorweld off the disposal outlet."
- var/obj/structure/disposalconstruct/C = new (src.loc)
- src.transfer_fingerprints_to(C)
- C.ptype = 7 // 7 = outlet
- C.update()
- C.anchored = 1
- C.density = 1
- del(src)
- return
- else
- user << "You need more welding fuel to complete this task."
- return
-
-
-
-// called when movable is expelled from a disposal pipe or outlet
-// by default does nothing, override for special behaviour
-
-/atom/movable/proc/pipe_eject(var/direction)
- return
-
-// check if mob has client, if so restore client view on eject
-/mob/pipe_eject(var/direction)
- if (src.client)
- src.client.perspective = MOB_PERSPECTIVE
- src.client.eye = src
-
- return
-
-/obj/effect/decal/cleanable/blood/gibs/pipe_eject(var/direction)
- var/list/dirs
- if(direction)
- dirs = list( direction, turn(direction, -45), turn(direction, 45))
- else
- dirs = alldirs.Copy()
-
- src.streak(dirs)
-
-/obj/effect/decal/cleanable/robot_debris/gib/pipe_eject(var/direction)
- var/list/dirs
- if(direction)
- dirs = list( direction, turn(direction, -45), turn(direction, 45))
- else
- dirs = alldirs.Copy()
-
- src.streak(dirs)
+// Disposal bin
+// Holds items for disposal into pipe system
+// Draws air from turf, gradually charges internal reservoir
+// Once full (~1 atm), uses air resv to flush items into the pipes
+// Automatically recharges air (unless off), will flush when ready if pre-set
+// Can hold items and human size things, no other draggables
+// Toilets are a type of disposal bin for small objects only and work on magic. By magic, I mean torque rotation
+#define SEND_PRESSURE 0.05*ONE_ATMOSPHERE
+
+/obj/machinery/disposal
+ name = "disposal unit"
+ desc = "A pneumatic waste disposal unit."
+ icon = 'icons/obj/pipes/disposal.dmi'
+ icon_state = "disposal"
+ anchored = 1
+ density = 1
+ var/datum/gas_mixture/air_contents // internal reservoir
+ var/mode = 1 // item mode 0=off 1=charging 2=charged
+ var/flush = 0 // true if flush handle is pulled
+ var/obj/structure/disposalpipe/trunk/trunk = null // the attached pipe trunk
+ var/flushing = 0 // true if flushing in progress
+ var/flush_every_ticks = 30 //Every 30 ticks it will look whether it is ready to flush
+ var/flush_count = 0 //this var adds 1 once per tick. When it reaches flush_every_ticks it resets and tries to flush.
+ var/last_sound = 0
+
+ // create a new disposal
+ // find the attached trunk (if present) and init gas resvr.
+/obj/machinery/disposal/New()
+ ..()
+
+ trunk_check()
+
+ air_contents = new/datum/gas_mixture()
+ //gas.volume = 1.05 * CELLSTANDARD
+ update()
+
+/obj/machinery/disposal/proc/trunk_check()
+ trunk = locate() in src.loc
+ if(!trunk)
+ mode = 0
+ flush = 0
+ else
+ mode = initial(mode)
+ flush = initial(flush)
+ trunk.linked = src // link the pipe trunk to self
+
+/obj/machinery/disposal/Del()
+ for(var/atom/movable/AM in contents)
+ AM.loc = src.loc
+ ..()
+
+/obj/machinery/disposal/initialize()
+ // this will get a copy of the air turf and take a SEND PRESSURE amount of air from it
+ var/atom/L = loc
+ var/datum/gas_mixture/env = new
+ env.copy_from(L.return_air())
+ var/datum/gas_mixture/removed = env.remove(SEND_PRESSURE + 1)
+ air_contents.merge(removed)
+ trunk_check()
+
+ // attack by item places it in to disposal
+/obj/machinery/disposal/attackby(var/obj/item/I, var/mob/user)
+ if(stat & BROKEN || !I || !user)
+ return
+
+ if(isrobot(user) && !istype(I, /obj/item/weapon/storage/bag/trash))
+ return
+ src.add_fingerprint(user)
+ if(mode<=0) // It's off
+ if(istype(I, /obj/item/weapon/screwdriver))
+ if(contents.len > 0)
+ user << "Eject the items first!"
+ return
+ if(mode==0) // It's off but still not unscrewed
+ mode=-1 // Set it to doubleoff l0l
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You remove the screws around the power connection."
+ return
+ else if(mode==-1)
+ mode=0
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You attach the screws around the power connection."
+ return
+ else if(istype(I,/obj/item/weapon/weldingtool) && mode==-1)
+ if(contents.len > 0)
+ user << "Eject the items first!"
+ return
+ var/obj/item/weapon/weldingtool/W = I
+ if(W.remove_fuel(0,user))
+ playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
+ user << "You start slicing the floorweld off \the [src]."
+
+ if(do_after(user,20))
+ if(!src || !W.isOn()) return
+ user << "You slice the floorweld off \the [src]."
+ var/obj/structure/disposalconstruct/C = new (src.loc)
+ src.transfer_fingerprints_to(C)
+ C.ptype = 6 // 6 = disposal unit
+ C.anchored = 1
+ C.density = 1
+ C.update()
+ del(src)
+ return
+ else
+ user << "You need more welding fuel to complete this task."
+ return
+
+ if(istype(I, /obj/item/weapon/melee/energy/blade))
+ user << "You can't place \the [I] into \the [src]."
+ return
+
+ if(istype(I, /obj/item/weapon/storage/bag/trash))
+ var/obj/item/weapon/storage/bag/trash/T = I
+ user << "\blue You empty the bag."
+ for(var/obj/item/O in T.contents)
+ T.remove_from_storage(O,src)
+ T.update_icon()
+ update()
+ return
+
+ var/obj/item/weapon/grab/G = I
+ if(istype(G)) // handle grabbed mob
+ if(ismob(G.affecting))
+ var/mob/GM = G.affecting
+ for (var/mob/V in viewers(usr))
+ V.show_message("[usr] starts putting [GM.name] into \the [src].", 3)
+ if(do_after(usr, 20))
+ if (GM.client)
+ GM.client.perspective = EYE_PERSPECTIVE
+ GM.client.eye = src
+ GM.loc = src
+ for (var/mob/C in viewers(src))
+ C.show_message("\red [GM.name] has been placed in \the [src] by [user].", 3)
+ del(G)
+ return
+
+ if(!I) return
+
+ user.drop_item()
+ if(I)
+ I.loc = src
+
+ user << "You place \the [I] into \the [src]."
+ for(var/mob/M in viewers(src))
+ if(M == user)
+ continue
+ M.show_message("[user.name] places \the [I] into \the [src].", 3)
+
+ update()
+
+// mouse drop another mob or self
+//
+/obj/machinery/disposal/MouseDrop_T(mob/target, mob/user)
+ if (!istype(target) || target.buckled || get_dist(user, src) > 1 || get_dist(user, target) > 1 || user.stat || istype(user, /mob/living/silicon/ai))
+ return
+ src.add_fingerprint(user)
+ var/target_loc = target.loc
+ var/msg
+ for (var/mob/V in viewers(usr))
+ if(target == user && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
+ V.show_message("[usr] starts climbing into \the [src].", 3)
+ if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
+ if(target.anchored) return
+ if(!ishuman(user) && !ismonkey(user)) return
+ V.show_message("[usr] starts stuffing [target.name] into \the [src].", 3)
+ if(!do_after(usr, 20))
+ return
+ if(target_loc != target.loc)
+ return
+ if(target == user && !user.stat && !user.weakened && !user.stunned && !user.paralysis) // if drop self, then climbed in
+ // must be awake, not stunned or whatever
+ msg = "[user.name] climbs into \the [src]."
+ user << "You climb into \the [src]."
+ else if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
+ msg = "[user.name] stuffs [target.name] into \the [src]!"
+ user << "You stuff [target.name] into \the [src]!"
+ else
+ return
+ if (target.client)
+ target.client.perspective = EYE_PERSPECTIVE
+ target.client.eye = src
+ target.loc = src
+
+ for (var/mob/C in viewers(src))
+ if(C == user)
+ continue
+ C.show_message(msg, 3)
+
+ update()
+ return
+
+// can breath normally in the disposal
+/obj/machinery/disposal/alter_health()
+ return get_turf(src)
+
+/obj/machinery/disposal/relaymove(mob/user as mob)
+ attempt_escape(user)
+
+// resist to escape the bin
+/obj/machinery/disposal/container_resist()
+ attempt_escape(usr)
+
+/obj/machinery/disposal/proc/attempt_escape(mob/user as mob)
+ if(src.flushing)
+ return
+ go_out(user)
+ return
+
+// leave the disposal
+/obj/machinery/disposal/proc/go_out(mob/user)
+
+ if (user.client)
+ user.client.eye = user.client.mob
+ user.client.perspective = MOB_PERSPECTIVE
+ user.loc = src.loc
+ update()
+ return
+
+
+// monkeys can only pull the flush lever
+/obj/machinery/disposal/attack_paw(mob/user as mob)
+ if(stat & BROKEN)
+ return
+
+ flush = !flush
+ update()
+ return
+
+// ai as human but can't flush
+/obj/machinery/disposal/attack_ai(mob/user as mob)
+ interact(user, 1)
+
+// human interact with machine
+/obj/machinery/disposal/attack_hand(mob/user as mob)
+ if(user && user.loc == src)
+ usr << "\red You cannot reach the controls from inside."
+ return
+ /*
+ if(mode==-1)
+ usr << "\red The disposal units power is disabled."
+ return
+ */
+ interact(user, 0)
+
+// hostile mob escape from disposals
+/obj/machinery/disposal/attack_animal(var/mob/living/simple_animal/M)
+ if(M.environment_smash)
+ visible_message("[M.name] smashes \the [src] apart!")
+ del(src)
+ return
+
+// user interaction
+/obj/machinery/disposal/interact(mob/user, var/ai=0)
+
+ src.add_fingerprint(user)
+ if(stat & BROKEN)
+ user.unset_machine()
+ return
+
+ var/dat = "Waste Disposal Unit Waste Disposal Unit
"
+
+ if(!ai) // AI can't pull flush handle
+ if(flush)
+ dat += "Disposal handle: Disengage Engaged"
+ else
+ dat += "Disposal handle: Disengaged Engage"
+
+ dat += "
Eject contents
"
+
+ if(mode <= 0)
+ dat += "Pump: Off On
"
+ else if(mode == 1)
+ dat += "Pump: Off On (pressurizing)
"
+ else
+ dat += "Pump: Off On (idle)
"
+
+ var/per = Clamp(100* air_contents.return_pressure() / (SEND_PRESSURE), 0, 100)
+
+ dat += "Pressure: [round(per, 1)]%
"
+
+
+ user.set_machine(src)
+ user << browse(dat, "window=disposal;size=360x170")
+ onclose(user, "disposal")
+
+// handle machine interaction
+
+/obj/machinery/disposal/Topic(href, href_list)
+ if(..())
+ return
+ if(usr.loc == src)
+ usr << "\red You cannot reach the controls from inside."
+ return
+
+ if(mode==-1 && !href_list["eject"]) // only allow ejecting if mode is -1
+ usr << "\red \The [src]'s power is disabled."
+ return
+ ..()
+ usr.set_machine(src)
+
+ if(href_list["close"])
+ usr.unset_machine()
+ usr << browse(null, "window=disposal")
+ return
+
+ if(href_list["pump"])
+ if(text2num(href_list["pump"]))
+ mode = 1
+ else
+ mode = 0
+ update()
+
+ if(href_list["handle"])
+ flush = text2num(href_list["handle"])
+ update()
+
+ if(href_list["eject"])
+ eject()
+ return
+
+// eject the contents of the disposal unit
+/obj/machinery/disposal/proc/eject()
+ for(var/atom/movable/AM in src)
+ AM.loc = src.loc
+ AM.pipe_eject(0)
+ update()
+
+// update the icon & overlays to reflect mode & status
+/obj/machinery/disposal/proc/update()
+ overlays.Cut()
+ if(stat & BROKEN)
+ icon_state = "disposal-broken"
+ mode = 0
+ flush = 0
+ return
+
+ // flush handle
+ if(flush)
+ overlays += image('icons/obj/pipes/disposal.dmi', "dispover-handle")
+
+ // only handle is shown if no power
+ if(stat & NOPOWER || mode == -1)
+ return
+
+ // check for items in disposal - occupied light
+ if(contents.len > 0)
+ overlays += image('icons/obj/pipes/disposal.dmi', "dispover-full")
+
+ // charging and ready light
+ if(mode == 1)
+ overlays += image('icons/obj/pipes/disposal.dmi', "dispover-charge")
+ else if(mode == 2)
+ overlays += image('icons/obj/pipes/disposal.dmi', "dispover-ready")
+
+// timed process
+// charge the gas reservoir and perform flush if ready
+/obj/machinery/disposal/process()
+ if(stat & BROKEN) // nothing can happen if broken
+ return
+
+ flush_count++
+ if( flush_count >= flush_every_ticks )
+ if( contents.len )
+ if(mode == 2)
+ spawn(0)
+ feedback_inc("disposal_auto_flush",1)
+ flush()
+ flush_count = 0
+
+ src.updateDialog()
+
+ if(flush && air_contents.return_pressure() >= SEND_PRESSURE ) // flush can happen even without power
+ spawn(0)
+ flush()
+
+ if(stat & NOPOWER) // won't charge if no power
+ return
+
+ use_power(100) // base power usage
+
+ if(mode != 1) // if off or ready, no need to charge
+ return
+
+ // otherwise charge
+ use_power(500) // charging power usage
+
+ var/atom/L = loc // recharging from loc turf
+
+ var/datum/gas_mixture/env = L.return_air()
+ var/pressure_delta = (SEND_PRESSURE*1.01) - air_contents.return_pressure()
+
+ if(env.temperature > 0)
+ var/transfer_moles = 0.1 * pressure_delta*air_contents.volume/(env.temperature * R_IDEAL_GAS_EQUATION)
+
+ //Actually transfer the gas
+ var/datum/gas_mixture/removed = env.remove(transfer_moles)
+ air_contents.merge(removed)
+ air_update_turf()
+
+
+ // if full enough, switch to ready mode
+ if(air_contents.return_pressure() >= SEND_PRESSURE)
+ mode = 2
+ update()
+ return
+
+// perform a flush
+/obj/machinery/disposal/proc/flush()
+
+ flushing = 1
+ flick("[icon_state]-flush", src)
+
+ var/wrapcheck = 0
+ var/obj/structure/disposalholder/H = new() // virtual holder object which actually
+ // travels through the pipes.
+ for(var/obj/item/smallDelivery/O in src)
+ wrapcheck = 1
+
+ if(wrapcheck == 1)
+ H.tomail = 1
+
+ sleep(10)
+ if(last_sound < world.time + 1)
+ playsound(src, 'sound/machines/disposalflush.ogg', 50, 0, 0)
+ last_sound = world.time
+ sleep(5) // wait for animation to finish
+
+ H.init(src) // copy the contents of disposer to holder
+ air_contents = new() // new empty gas resv.
+
+ H.start(src) // start the holder processing movement
+ flushing = 0
+ // now reset disposal state
+ flush = 0
+ if(mode == 2) // if was ready,
+ mode = 1 // switch to charging
+ update()
+ return
+
+
+// called when area power changes
+/obj/machinery/disposal/power_change()
+ ..() // do default setting/reset of stat NOPOWER bit
+ update() // update icon
+ return
+
+
+// called when holder is expelled from a disposal
+// should usually only occur if the pipe network is modified
+/obj/machinery/disposal/proc/expel(var/obj/structure/disposalholder/H)
+
+ var/turf/target
+ playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
+ if(H) // Somehow, someone managed to flush a window which broke mid-transit and caused the disposal to go in an infinite loop trying to expel null, hopefully this fixes it
+ for(var/atom/movable/AM in H)
+ target = get_offset_target_turf(src.loc, rand(5)-rand(5), rand(5)-rand(5))
+
+ AM.loc = src.loc
+ AM.pipe_eject(0)
+ spawn(1)
+ if(AM)
+ AM.throw_at(target, 5, 1)
+
+ H.vent_gas(loc)
+ del(H)
+
+/obj/machinery/disposal/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ if (istype(mover,/obj/item) && mover.throwing)
+ var/obj/item/I = mover
+ if(istype(I, /obj/item/projectile))
+ return
+ if(prob(75))
+ I.loc = src
+ for(var/mob/M in viewers(src))
+ M.show_message("\the [I] lands in \the [src].", 3)
+ else
+ for(var/mob/M in viewers(src))
+ M.show_message("\the [I] bounces off of \the [src]'s rim!.", 3)
+ return 0
+ else
+ return ..(mover, target, height, air_group)
+
+// virtual disposal object
+// travels through pipes in lieu of actual items
+// contents will be items flushed by the disposal
+// this allows the gas flushed to be tracked
+
+/obj/structure/disposalholder
+ invisibility = 101
+ var/datum/gas_mixture/gas = null // gas used to flush, will appear at exit point
+ var/active = 0 // true if the holder is moving, otherwise inactive
+ dir = 0
+ var/count = 1000 //*** can travel 1000 steps before going inactive (in case of loops)
+ var/has_fat_guy = 0 // true if contains a fat person
+ var/destinationTag = 0 // changes if contains a delivery container
+ var/tomail = 0 //changes if contains wrapped package
+ var/hasmob = 0 //If it contains a mob
+
+
+ // initialize a holder from the contents of a disposal unit
+ proc/init(var/obj/machinery/disposal/D)
+ gas = D.air_contents// transfer gas resv. into holder object
+
+ //Check for any living mobs trigger hasmob.
+ //hasmob effects whether the package goes to cargo or its tagged destination.
+ for(var/mob/living/M in D)
+ if(M && M.stat != 2)
+ hasmob = 1
+
+ //Checks 1 contents level deep. This means that players can be sent through disposals...
+ //...but it should require a second person to open the package. (i.e. person inside a wrapped locker)
+ for(var/obj/O in D)
+ if(O.contents)
+ for(var/mob/living/M in O.contents)
+ if(M && M.stat != 2)
+ hasmob = 1
+
+ // now everything inside the disposal gets put into the holder
+ // note AM since can contain mobs or objs
+ for(var/atom/movable/AM in D)
+ AM.loc = src
+ if(istype(AM, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = AM
+ if(FAT in H.mutations) // is a human and fat?
+ has_fat_guy = 1 // set flag on holder
+ if(istype(AM, /obj/structure/bigDelivery) && !hasmob)
+ var/obj/structure/bigDelivery/T = AM
+ src.destinationTag = T.sortTag
+ if(istype(AM, /obj/item/smallDelivery) && !hasmob)
+ var/obj/item/smallDelivery/T = AM
+ src.destinationTag = T.sortTag
+
+
+ // start the movement process
+ // argument is the disposal unit the holder started in
+ proc/start(var/obj/machinery/disposal/D)
+ if(!D.trunk)
+ D.expel(src) // no trunk connected, so expel immediately
+ return
+
+ loc = D.trunk
+ active = 1
+ dir = DOWN
+ spawn(1)
+ move() // spawn off the movement process
+
+ return
+
+ // movement process, persists while holder is moving through pipes
+ proc/move()
+ var/obj/structure/disposalpipe/last
+ while(active)
+ if(has_fat_guy && prob(2)) // chance of becoming stuck per segment if contains a fat guy
+ active = 0
+ // find the fat guys
+ for(var/mob/living/carbon/human/H in src)
+
+ break
+ sleep(1) // was 1
+ var/obj/structure/disposalpipe/curr = loc
+ last = curr
+ curr = curr.transfer(src)
+ if(!curr)
+ last.expel(src, loc, dir)
+
+ //
+ if(!(count--))
+ active = 0
+ return
+
+
+
+ // find the turf which should contain the next pipe
+ proc/nextloc()
+ return get_step(loc,dir)
+
+ // find a matching pipe on a turf
+ proc/findpipe(var/turf/T)
+
+ if(!T)
+ return null
+
+ var/fdir = turn(dir, 180) // flip the movement direction
+ for(var/obj/structure/disposalpipe/P in T)
+ if(fdir & P.dpdir) // find pipe direction mask that matches flipped dir
+ return P
+ // if no matching pipe, return null
+ return null
+
+ // merge two holder objects
+ // used when a a holder meets a stuck holder
+ proc/merge(var/obj/structure/disposalholder/other)
+ for(var/atom/movable/AM in other)
+ AM.loc = src // move everything in other holder to this one
+ if(ismob(AM))
+ var/mob/M = AM
+ if(M.client) // if a client mob, update eye to follow this holder
+ M.client.eye = src
+
+ if(other.has_fat_guy)
+ has_fat_guy = 1
+ del(other)
+
+
+ // called when player tries to move while in a pipe
+ relaymove(mob/user as mob)
+ if (user.stat)
+ return
+ if (src.loc)
+ for (var/mob/M in hearers(src.loc.loc))
+ M << "CLONG, clong!"
+
+ playsound(src.loc, 'sound/effects/clang.ogg', 50, 0, 0)
+
+ // called to vent all gas in holder to a location
+ proc/vent_gas(var/atom/location)
+ location.assume_air(gas) // vent all gas to turf
+ return
+
+// Disposal pipes
+
+/obj/structure/disposalpipe
+ icon = 'icons/obj/pipes/disposal.dmi'
+ name = "disposal pipe"
+ desc = "An underfloor disposal pipe."
+ anchored = 1
+ density = 0
+
+ level = 1 // underfloor only
+ var/dpdir = 0 // bitmask of pipe directions
+ dir = 0 // dir will contain dominant direction for junction pipes
+ var/health = 10 // health points 0-10
+ layer = 2.3 // slightly lower than wires and other pipes
+ var/base_icon_state // initial icon state on map
+
+ // new pipe, set the icon_state as on map
+ New()
+ ..()
+ base_icon_state = icon_state
+ return
+
+
+ // pipe is deleted
+ // ensure if holder is present, it is expelled
+ Del()
+ var/obj/structure/disposalholder/H = locate() in src
+ if(H)
+ // holder was present
+ H.active = 0
+ var/turf/T = src.loc
+ if(T.density)
+ // deleting pipe is inside a dense turf (wall)
+ // this is unlikely, but just dump out everything into the turf in case
+
+ for(var/atom/movable/AM in H)
+ AM.loc = T
+ AM.pipe_eject(0)
+ del(H)
+ ..()
+ return
+
+ // otherwise, do normal expel from turf
+ if(H)
+ expel(H, T, 0)
+ ..()
+
+ // returns the direction of the next pipe object, given the entrance dir
+ // by default, returns the bitmask of remaining directions
+ proc/nextdir(var/fromdir)
+ return dpdir & (~turn(fromdir, 180))
+
+ // transfer the holder through this pipe segment
+ // overriden for special behaviour
+ //
+ proc/transfer(var/obj/structure/disposalholder/H)
+ var/nextdir = nextdir(H.dir)
+ H.dir = nextdir
+ var/turf/T = H.nextloc()
+ var/obj/structure/disposalpipe/P = H.findpipe(T)
+
+ if(P)
+ // find other holder in next loc, if inactive merge it with current
+ var/obj/structure/disposalholder/H2 = locate() in P
+ if(H2 && !H2.active)
+ H.merge(H2)
+
+ H.loc = P
+ else // if wasn't a pipe, then set loc to turf
+ H.loc = T
+ return null
+
+ return P
+
+
+ // update the icon_state to reflect hidden status
+ proc/update()
+ var/turf/T = src.loc
+ hide(T.intact && !istype(T,/turf/space)) // space never hides pipes
+
+ // hide called by levelupdate if turf intact status changes
+ // change visibility status and force update of icon
+ hide(var/intact)
+ invisibility = intact ? 101: 0 // hide if floor is intact
+ updateicon()
+
+ // update actual icon_state depending on visibility
+ // if invisible, append "f" to icon_state to show faded version
+ // this will be revealed if a T-scanner is used
+ // if visible, use regular icon_state
+ proc/updateicon()
+ if(invisibility)
+ icon_state = "[base_icon_state]f"
+ else
+ icon_state = base_icon_state
+ return
+
+
+ // expel the held objects into a turf
+ // called when there is a break in the pipe
+ //
+
+ proc/expel(var/obj/structure/disposalholder/H, var/turf/T, var/direction)
+
+ var/turf/target
+
+ if(istype(T, /turf/simulated/floor)) //intact floor, pop the tile
+ var/turf/simulated/floor/F = T
+ if(F.floor_tile)
+ F.floor_tile.loc = H //It took me a day to figure out this was the right way to do it. ¯\_(;_;)_/¯
+ F.floor_tile = null //So it doesn't get deleted in make_plating()
+ F.make_plating()
+
+ if(direction) // direction is specified
+ if(istype(T, /turf/space)) // if ended in space, then range is unlimited
+ target = get_edge_target_turf(T, direction)
+ else // otherwise limit to 10 tiles
+ target = get_ranged_target_turf(T, direction, 10)
+
+ playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
+ if(H)
+ for(var/atom/movable/AM in H)
+ AM.loc = T
+ AM.pipe_eject(direction)
+ spawn(1)
+ if(AM)
+ AM.throw_at(target, 100, 1)
+
+ else // no specified direction, so throw in random direction
+
+ playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
+ if(H)
+ for(var/atom/movable/AM in H)
+ target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5))
+
+ AM.loc = T
+ AM.pipe_eject(0)
+ spawn(1)
+ if(AM)
+ AM.throw_at(target, 5, 1)
+ H.vent_gas(T)
+ del(H)
+ return
+
+ // call to break the pipe
+ // will expel any holder inside at the time
+ // then delete the pipe
+ // remains : set to leave broken pipe pieces in place
+ proc/broken(var/remains = 0)
+ if(remains)
+ for(var/D in cardinal)
+ if(D & dpdir)
+ var/obj/structure/disposalpipe/broken/P = new(src.loc)
+ P.dir = D
+
+ src.invisibility = 101 // make invisible (since we won't delete the pipe immediately)
+ var/obj/structure/disposalholder/H = locate() in src
+ if(H)
+ // holder was present
+ H.active = 0
+ var/turf/T = src.loc
+ if(T.density)
+ // broken pipe is inside a dense turf (wall)
+ // this is unlikely, but just dump out everything into the turf in case
+
+ for(var/atom/movable/AM in H)
+ AM.loc = T
+ AM.pipe_eject(0)
+ del(H)
+ return
+
+ // otherwise, do normal expel from turf
+ if(H)
+ expel(H, T, 0)
+
+ spawn(2) // delete pipe after 2 ticks to ensure expel proc finished
+ del(src)
+
+
+ // pipe affected by explosion
+ ex_act(severity)
+
+ switch(severity)
+ if(1.0)
+ broken(0)
+ return
+ if(2.0)
+ health -= rand(5,15)
+ healthcheck()
+ return
+ if(3.0)
+ health -= rand(0,15)
+ healthcheck()
+ return
+
+
+ // test health for brokenness
+ proc/healthcheck()
+ if(health < -2)
+ broken(0)
+ else if(health<1)
+ broken(1)
+ return
+
+ //attack by item
+ //weldingtool: unfasten and convert to obj/disposalconstruct
+
+ attackby(var/obj/item/I, var/mob/user)
+
+ var/turf/T = src.loc
+ if(T.intact)
+ return // prevent interaction with T-scanner revealed pipes
+ src.add_fingerprint(user)
+ if(istype(I, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/W = I
+
+ if(W.remove_fuel(0,user))
+ playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
+ // check if anything changed over 2 seconds
+ var/turf/uloc = user.loc
+ var/atom/wloc = W.loc
+ user << "Slicing the disposal pipe."
+ sleep(30)
+ if(!W.isOn()) return
+ if(user.loc == uloc && wloc == W.loc)
+ welded()
+ else
+ user << "You must stay still while welding the pipe."
+ else
+ user << "You need more welding fuel to cut the pipe."
+ return
+
+ // called when pipe is cut with welder
+ proc/welded()
+
+ var/obj/structure/disposalconstruct/C = new (src.loc)
+ switch(base_icon_state)
+ if("pipe-s")
+ C.ptype = 0
+ if("pipe-c")
+ C.ptype = 1
+ if("pipe-j1")
+ C.ptype = 2
+ if("pipe-j2")
+ C.ptype = 3
+ if("pipe-y")
+ C.ptype = 4
+ if("pipe-t")
+ C.ptype = 5
+ if("pipe-j1s")
+ C.ptype = 9
+ if("pipe-j2s")
+ C.ptype = 10
+ src.transfer_fingerprints_to(C)
+ C.dir = dir
+ C.density = 0
+ C.anchored = 1
+ C.update()
+
+ del(src)
+
+// *** TEST verb
+//client/verb/dispstop()
+// for(var/obj/structure/disposalholder/H in world)
+// H.active = 0
+
+// a straight or bent segment
+/obj/structure/disposalpipe/segment
+ icon_state = "pipe-s"
+
+ New()
+ ..()
+ if(icon_state == "pipe-s")
+ dpdir = dir | turn(dir, 180)
+ else
+ dpdir = dir | turn(dir, -90)
+
+ update()
+ return
+
+
+
+
+//a three-way junction with dir being the dominant direction
+/obj/structure/disposalpipe/junction
+ icon_state = "pipe-j1"
+
+ New()
+ ..()
+ if(icon_state == "pipe-j1")
+ dpdir = dir | turn(dir, -90) | turn(dir,180)
+ else if(icon_state == "pipe-j2")
+ dpdir = dir | turn(dir, 90) | turn(dir,180)
+ else // pipe-y
+ dpdir = dir | turn(dir,90) | turn(dir, -90)
+ update()
+ return
+
+
+ // next direction to move
+ // if coming in from secondary dirs, then next is primary dir
+ // if coming in from primary dir, then next is equal chance of other dirs
+
+ nextdir(var/fromdir)
+ var/flipdir = turn(fromdir, 180)
+ if(flipdir != dir) // came from secondary dir
+ return dir // so exit through primary
+ else // came from primary
+ // so need to choose either secondary exit
+ var/mask = ..(fromdir)
+
+ // find a bit which is set
+ var/setbit = 0
+ if(mask & NORTH)
+ setbit = NORTH
+ else if(mask & SOUTH)
+ setbit = SOUTH
+ else if(mask & EAST)
+ setbit = EAST
+ else
+ setbit = WEST
+
+ if(prob(50)) // 50% chance to choose the found bit or the other one
+ return setbit
+ else
+ return mask & (~setbit)
+
+//a three-way junction that sorts objects
+/obj/structure/disposalpipe/sortjunction
+
+ icon_state = "pipe-j1s"
+ var/sortType = 0 //Look at the list called TAGGERLOCATIONS in setup.dm
+ var/posdir = 0
+ var/negdir = 0
+ var/sortdir = 0
+
+ proc/updatedesc()
+ desc = "An underfloor disposal pipe with a package sorting mechanism."
+ if(sortType>0)
+ var/tag = uppertext(TAGGERLOCATIONS[sortType])
+ desc += "\nIt's tagged with [tag]"
+
+ proc/updatedir()
+ posdir = dir
+ negdir = turn(posdir, 180)
+
+ if(icon_state == "pipe-j1s")
+ sortdir = turn(posdir, -90)
+ else
+ icon_state = "pipe-j2s"
+ sortdir = turn(posdir, 90)
+
+ dpdir = sortdir | posdir | negdir
+
+ New()
+ ..()
+ updatedir()
+ updatedesc()
+ update()
+ return
+
+ attackby(var/obj/item/I, var/mob/user)
+ if(..())
+ return
+
+ if(istype(I, /obj/item/device/destTagger))
+ var/obj/item/device/destTagger/O = I
+
+ if(O.currTag > 0)// Tag set
+ sortType = O.currTag
+ playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1)
+ var/tag = uppertext(TAGGERLOCATIONS[O.currTag])
+ user << "\blue Changed filter to [tag]"
+ updatedesc()
+
+
+ // next direction to move
+ // if coming in from negdir, then next is primary dir or sortdir
+ // if coming in from posdir, then flip around and go back to posdir
+ // if coming in from sortdir, go to posdir
+
+ nextdir(var/fromdir, var/sortTag)
+ //var/flipdir = turn(fromdir, 180)
+ if(fromdir != sortdir) // probably came from the negdir
+
+ if(src.sortType == sortTag) //if destination matches filtered type...
+ return sortdir // exit through sortdirection
+ else
+ return posdir
+ else // came from sortdir
+ // so go with the flow to positive direction
+ return posdir
+
+ transfer(var/obj/structure/disposalholder/H)
+ var/nextdir = nextdir(H.dir, H.destinationTag)
+ H.dir = nextdir
+ var/turf/T = H.nextloc()
+ var/obj/structure/disposalpipe/P = H.findpipe(T)
+
+ if(P)
+ // find other holder in next loc, if inactive merge it with current
+ var/obj/structure/disposalholder/H2 = locate() in P
+ if(H2 && !H2.active)
+ H.merge(H2)
+
+ H.loc = P
+ else // if wasn't a pipe, then set loc to turf
+ H.loc = T
+ return null
+
+ return P
+
+
+//a three-way junction that sorts objects destined for the mail office mail table (tomail = 1)
+/obj/structure/disposalpipe/wrapsortjunction
+
+ desc = "An underfloor disposal pipe which sorts wrapped and unwrapped objects."
+ icon_state = "pipe-j1s"
+ var/posdir = 0
+ var/negdir = 0
+ var/sortdir = 0
+
+ New()
+ ..()
+ posdir = dir
+ if(icon_state == "pipe-j1s")
+ sortdir = turn(posdir, -90)
+ negdir = turn(posdir, 180)
+ else
+ icon_state = "pipe-j2s"
+ sortdir = turn(posdir, 90)
+ negdir = turn(posdir, 180)
+ dpdir = sortdir | posdir | negdir
+
+ update()
+ return
+
+ // next direction to move
+ // if coming in from negdir, then next is primary dir or sortdir
+ // if coming in from posdir, then flip around and go back to posdir
+ // if coming in from sortdir, go to posdir
+
+ nextdir(var/fromdir, var/istomail)
+ //var/flipdir = turn(fromdir, 180)
+ if(fromdir != sortdir) // probably came from the negdir
+
+ if(istomail) //if destination matches filtered type...
+ return sortdir // exit through sortdirection
+ else
+ return posdir
+ else // came from sortdir
+ // so go with the flow to positive direction
+ return posdir
+
+ transfer(var/obj/structure/disposalholder/H)
+ var/nextdir = nextdir(H.dir, H.tomail)
+ H.dir = nextdir
+ var/turf/T = H.nextloc()
+ var/obj/structure/disposalpipe/P = H.findpipe(T)
+
+ if(P)
+ // find other holder in next loc, if inactive merge it with current
+ var/obj/structure/disposalholder/H2 = locate() in P
+ if(H2 && !H2.active)
+ H.merge(H2)
+
+ H.loc = P
+ else // if wasn't a pipe, then set loc to turf
+ H.loc = T
+ return null
+
+ return P
+
+
+
+
+
+//a trunk joining to a disposal bin or outlet on the same turf
+/obj/structure/disposalpipe/trunk
+ icon_state = "pipe-t"
+ var/obj/linked // the linked obj/machinery/disposal or obj/disposaloutlet
+
+/obj/structure/disposalpipe/trunk/New()
+ ..()
+ dpdir = dir
+ spawn(1)
+ getlinked()
+
+ update()
+ return
+
+/obj/structure/disposalpipe/trunk/proc/getlinked()
+ linked = null
+ var/obj/machinery/disposal/D = locate() in src.loc
+ if(D)
+ linked = D
+ if (!D.trunk)
+ D.trunk = src
+
+ var/obj/structure/disposaloutlet/O = locate() in src.loc
+ if(O)
+ linked = O
+
+ update()
+ return
+
+ // Override attackby so we disallow trunkremoval when somethings ontop
+/obj/structure/disposalpipe/trunk/attackby(var/obj/item/I, var/mob/user)
+
+ //Disposal bins or chutes
+ /*
+ These shouldn't be required
+ var/obj/machinery/disposal/D = locate() in src.loc
+ if(D && D.anchored)
+ return
+
+ //Disposal outlet
+ var/obj/structure/disposaloutlet/O = locate() in src.loc
+ if(O && O.anchored)
+ return
+ */
+
+ //Disposal constructors
+ var/obj/structure/disposalconstruct/C = locate() in src.loc
+ if(C && C.anchored)
+ return
+
+ var/turf/T = src.loc
+ if(T.intact)
+ return // prevent interaction with T-scanner revealed pipes
+ src.add_fingerprint(user)
+ if(istype(I, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/W = I
+
+ if(linked)
+ user << "You need to deconstruct disposal machinery above this pipe."
+ return
+
+ if(W.remove_fuel(0,user))
+ playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
+ // check if anything changed over 2 seconds
+ var/turf/uloc = user.loc
+ var/atom/wloc = W.loc
+ user << "Slicing the disposal pipe."
+ sleep(30)
+ if(!W.isOn()) return
+ if(user.loc == uloc && wloc == W.loc)
+ welded()
+ else
+ user << "You must stay still while welding the pipe."
+ else
+ user << "You need more welding fuel to cut the pipe."
+
+ return
+
+ // would transfer to next pipe segment, but we are in a trunk
+ // if not entering from disposal bin,
+ // transfer to linked object (outlet or bin)
+
+/obj/structure/disposalpipe/trunk/transfer(var/obj/structure/disposalholder/H)
+
+ if(H.dir == DOWN) // we just entered from a disposer
+ return ..() // so do base transfer proc
+ // otherwise, go to the linked object
+ if(linked)
+ var/obj/structure/disposaloutlet/O = linked
+ if(istype(O) && (H))
+ O.expel(H) // expel at outlet
+ else
+ var/obj/machinery/disposal/D = linked
+ if(H)
+ D.expel(H) // expel at disposal
+ else
+ if(H)
+ src.expel(H, src.loc, 0) // expel at turf
+ return null
+
+ // nextdir
+
+/obj/structure/disposalpipe/trunk/nextdir(var/fromdir)
+ if(fromdir == DOWN)
+ return dir
+ else
+ return 0
+
+// a broken pipe
+/obj/structure/disposalpipe/broken
+ icon_state = "pipe-b"
+ dpdir = 0 // broken pipes have dpdir=0 so they're not found as 'real' pipes
+ // i.e. will be treated as an empty turf
+ desc = "A broken piece of disposal pipe."
+
+ New()
+ ..()
+ update()
+ return
+
+ // called when welded
+ // for broken pipe, remove and turn into scrap
+
+ welded()
+// var/obj/item/scrap/S = new(src.loc)
+// S.set_components(200,0,0)
+ del(src)
+
+// the disposal outlet machine
+
+/obj/structure/disposaloutlet
+ name = "disposal outlet"
+ desc = "An outlet for the pneumatic disposal system."
+ icon = 'icons/obj/pipes/disposal.dmi'
+ icon_state = "outlet"
+ density = 1
+ anchored = 1
+ var/active = 0
+ var/turf/target // this will be where the output objects are 'thrown' to.
+ var/mode = 0
+ var/start_eject = 0
+ var/eject_range = 2
+
+ New()
+ ..()
+
+ spawn(1)
+ target = get_ranged_target_turf(src, dir, 10)
+
+
+ var/obj/structure/disposalpipe/trunk/trunk = locate() in src.loc
+ if(trunk)
+ trunk.linked = src // link the pipe trunk to self
+
+ // expel the contents of the holder object, then delete it
+ // called when the holder exits the outlet
+ proc/expel(var/obj/structure/disposalholder/H)
+
+ flick("outlet-open", src)
+ if((start_eject + 30) < world.time)
+ start_eject = world.time
+ playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0)
+ sleep(20)
+ playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
+ else
+ sleep(20)
+ if(H)
+ for(var/atom/movable/AM in H)
+ AM.loc = src.loc
+ AM.pipe_eject(dir)
+ spawn(5)
+ if(AM)
+ AM.throw_at(target, eject_range, 1)
+ H.vent_gas(src.loc)
+ del(H)
+ return
+
+ attackby(var/obj/item/I, var/mob/user)
+ if(!I || !user)
+ return
+ src.add_fingerprint(user)
+ if(istype(I, /obj/item/weapon/screwdriver))
+ if(mode==0)
+ mode=1
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You remove the screws around the power connection."
+ return
+ else if(mode==1)
+ mode=0
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You attach the screws around the power connection."
+ return
+ else if(istype(I,/obj/item/weapon/weldingtool) && mode==1)
+ var/obj/item/weapon/weldingtool/W = I
+ if(W.remove_fuel(0,user))
+ playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
+ user << "You start slicing the floorweld off \the [src]."
+ if(do_after(user,20))
+ if(!src || !W.isOn()) return
+ user << "You slice the floorweld off \the [src]."
+ var/obj/structure/disposalconstruct/C = new (src.loc)
+ src.transfer_fingerprints_to(C)
+ C.ptype = 7 // 7 = outlet
+ C.update()
+ C.anchored = 1
+ C.density = 1
+ del(src)
+ return
+ else
+ user << "You need more welding fuel to complete this task."
+ return
+
+
+
+// called when movable is expelled from a disposal pipe or outlet
+// by default does nothing, override for special behaviour
+
+/atom/movable/proc/pipe_eject(var/direction)
+ return
+
+// check if mob has client, if so restore client view on eject
+/mob/pipe_eject(var/direction)
+ if (src.client)
+ src.client.perspective = MOB_PERSPECTIVE
+ src.client.eye = src
+
+ return
+
+/obj/effect/decal/cleanable/blood/gibs/pipe_eject(var/direction)
+ var/list/dirs
+ if(direction)
+ dirs = list( direction, turn(direction, -45), turn(direction, 45))
+ else
+ dirs = alldirs.Copy()
+
+ src.streak(dirs)
+
+/obj/effect/decal/cleanable/robot_debris/gib/pipe_eject(var/direction)
+ var/list/dirs
+ if(direction)
+ dirs = list( direction, turn(direction, -45), turn(direction, 45))
+ else
+ dirs = alldirs.Copy()
+
+ src.streak(dirs)
diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm
index 90528dac641..5a2597750a4 100644
--- a/code/modules/research/circuitprinter.dm
+++ b/code/modules/research/circuitprinter.dm
@@ -55,24 +55,14 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
attackby(var/obj/item/O as obj, var/mob/user as mob)
if (shocked)
shock(user,50)
- if (istype(O, /obj/item/weapon/screwdriver))
+ if (default_deconstruction_screwdriver(user, "circuit_imprinter_t", "circuit_imprinter", O))
if(linked_console)
linked_console.linked_imprinter = null
linked_console = null
- default_deconstruction_screwdriver(user, "circuit_imprinter_t", "circuit_imprinter")
return
+
if (panel_open)
if(istype(O, /obj/item/weapon/crowbar))
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
- M.state = 2
- M.icon_state = "box_1"
- for(var/obj/I in component_parts)
- if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker))
- reagents.trans_to(I, reagents.total_volume)
- if(I.reliability != 100 && crit_fail)
- I.crit_fail = 1
- I.loc = src.loc
if(g_amount >= 3750)
var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc)
G.amount = round(g_amount / 3750)
@@ -82,7 +72,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
if(diamond_amount >= 2000)
var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc)
G.amount = round(diamond_amount / 2000)
- del(src)
+ default_deconstruction_crowbar(O)
return
else
user << "\red You can't load the [src.name] while it's opened."
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index 1fe46335880..d86770c9031 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -381,8 +381,8 @@ datum/design/safeguard_module
id = "safeguard_module"
req_tech = list("programming" = 3, "materials" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
- build_path = /obj/item/weapon/aiModule/supplied/safeguard
+ materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
+ build_path = /obj/item/weapon/aiModule/supplied/safeguard
datum/design/onehuman_module
name = "Module Design (OneHuman)"
@@ -390,8 +390,8 @@ datum/design/onehuman_module
id = "onehuman_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
- build_path = /obj/item/weapon/aiModule/zeroth/oneHuman
+ materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
+ build_path = /obj/item/weapon/aiModule/zeroth/oneHuman
datum/design/protectstation_module
name = "Module Design (ProtectStation)"
@@ -399,8 +399,8 @@ datum/design/protectstation_module
id = "protectstation_module"
req_tech = list("programming" = 3, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
- build_path = /obj/item/weapon/aiModule/supplied/protectStation
+ materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
+ build_path = /obj/item/weapon/aiModule/supplied/protectStation
/*datum/design/notele_module
name = "Module Design (TeleporterOffline Module)"
@@ -417,8 +417,8 @@ datum/design/quarantine_module
id = "quarantine_module"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
- build_path = /obj/item/weapon/aiModule/supplied/quarantine
+ materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
+ build_path = /obj/item/weapon/aiModule/supplied/quarantine
datum/design/oxygen_module
name = "Module Design (OxygenIsToxicToHumans)"
@@ -426,8 +426,8 @@ datum/design/oxygen_module
id = "oxygen_module"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
- build_path = /obj/item/weapon/aiModule/supplied/oxygen
+ materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
+ build_path = /obj/item/weapon/aiModule/supplied/oxygen
datum/design/freeform_module
name = "Module Design (Freeform)"
@@ -435,8 +435,8 @@ datum/design/freeform_module
id = "freeform_module"
req_tech = list("programming" = 4, "materials" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
- build_path = /obj/item/weapon/aiModule/supplied/freeform
+ materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
+ build_path = /obj/item/weapon/aiModule/supplied/freeform
datum/design/reset_module
name = "Module Design (Reset)"
@@ -453,8 +453,8 @@ datum/design/purge_module
id = "purge_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
- build_path = /obj/item/weapon/aiModule/reset/purge
+ materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
+ build_path = /obj/item/weapon/aiModule/reset/purge
datum/design/freeformcore_module
name = "Core Module Design (Freeform)"
@@ -462,8 +462,8 @@ datum/design/freeformcore_module
id = "freeformcore_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
- build_path = /obj/item/weapon/aiModule/core/freeformcore
+ materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
+ build_path = /obj/item/weapon/aiModule/core/freeformcore
datum/design/asimov
name = "Core Module Design (Asimov)"
@@ -471,8 +471,8 @@ datum/design/asimov
id = "asimov_module"
req_tech = list("programming" = 3, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
- build_path = /obj/item/weapon/aiModule/core/full/asimov
+ materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
+ build_path = /obj/item/weapon/aiModule/core/full/asimov
datum/design/paladin_module
name = "Core Module Design (P.A.L.A.D.I.N.)"
@@ -480,8 +480,8 @@ datum/design/paladin_module
id = "paladin_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
- build_path = /obj/item/weapon/aiModule/core/full/paladin
+ materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
+ build_path = /obj/item/weapon/aiModule/core/full/paladin
datum/design/tyrant_module
name = "Core Module Design (T.Y.R.A.N.T.)"
@@ -489,8 +489,8 @@ datum/design/tyrant_module
id = "tyrant_module"
req_tech = list("programming" = 4, "syndicate" = 2, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
- build_path = /obj/item/weapon/aiModule/core/full/tyrant
+ materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
+ build_path = /obj/item/weapon/aiModule/core/full/tyrant
datum/design/corporate_module
name = "Core Module Design (Corporate)"
@@ -1063,6 +1063,15 @@ datum/design/super_matter_bin
+datum/design/telesci_gps
+ name = "GPS Device"
+ desc = "Little thingie that can track its position at all times."
+ id = "telesci_gps"
+ req_tech = list("materials" = 2, "magnets" = 3, "bluespace" = 3)
+ build_type = PROTOLATHE
+ materials = list("$metal" = 500, "$glass" = 1000)
+ build_path = /obj/item/device/gps
+
datum/design/subspace_ansible
name = "Subspace Ansible"
desc = "A compact module capable of sensing extradimensional activity."
@@ -1185,6 +1194,132 @@ datum/design/light_replacer
//////////////MISC Boards///////////////
////////////////////////////////////////
+datum/design/smes
+ name = "SMES Board"
+ desc = "The circuit board for a SMES."
+ id = "smes"
+ req_tech = list("programming" = 4, "power" = 5, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/smes
+
+datum/design/turbine_computer
+ name = "Power Turbine Console Board"
+ desc = "The circuit board for a power turbine console."
+ id = "power_turbine_console"
+ req_tech = list("programming" = 4, "power" = 4, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/turbine_computer
+
+datum/design/power_compressor
+ name = "Power Compressor Board"
+ desc = "The circuit board for a power compressor."
+ id = "power_compressor"
+ req_tech = list("programming" = 4, "power" = 5, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/power_compressor
+
+datum/design/power_turbine
+ name = "Power Turbine Board"
+ desc = "The circuit board for a power turbine."
+ id = "power_turbine"
+ req_tech = list("programming" = 4, "power" = 4, "engineering" = 5)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/power_turbine
+
+datum/design/teleport_station
+ name = "Teleportation Station Board"
+ desc = "The circuit board for a teleportation station."
+ id = "tele_station"
+ req_tech = list("programming" = 4, "bluespace" = 4, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/teleporter_station
+
+datum/design/teleport_hub
+ name = "Teleportation Hub Board"
+ desc = "The circuit board for a teleportation hub."
+ id = "tele_hub"
+ req_tech = list("programming" = 3, "bluespace" = 5, "materials" = 4, "engineering" = 5)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/teleporter_hub
+
+datum/design/telepad
+ name = "Telepad Board"
+ desc = "The circuit board for a telescience telepad."
+ id = "telepad"
+ req_tech = list("programming" = 4, "bluespace" = 4, "materials" = 3, "engineering" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/telesci_pad
+
+datum/design/sleeper
+ name = "Sleeper Board"
+ desc = "The circuit board for a sleeper."
+ id = "sleeper"
+ req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/sleeper
+
+datum/design/cryotube
+ name = "Cryotube Board"
+ desc = "The circuit board for a cryotube."
+ id = "cryotube"
+ req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/cryo_tube
+
+datum/design/thermomachine
+ name = "Freezer/Heater Board"
+ desc = "The circuit board for a freezer/heater."
+ id = "thermomachine"
+ req_tech = list("programming" = 3, "plasmatech" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/thermomachine
+
+datum/design/biogenerator
+ name = "Biogenerator Board"
+ desc = "The circuit board for a biogenerator."
+ id = "biogenerator"
+ req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/biogenerator
+/*
+datum/design/hydroponics
+ name = "Hydroponics Tray Board"
+ desc = "The circuit board for a hydroponics tray."
+ id = "hydro_tray"
+ req_tech = list("programming" = 1, "biotech" = 1)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/hydroponics
+*/
+datum/design/microwave
+ name = "Microwave Board"
+ desc = "The circuit board for a microwave."
+ id = "microwave"
+ req_tech = list("programming" = 1)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/microwave
+
+datum/design/chem_dispenser
+ name = "Portable Chem Dispenser Board"
+ desc = "The circuit board for a portable chem dispenser."
+ id = "chem_dispenser"
+ req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4, "materials" = 4, "plasmatech" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/chem_dispenser
+
datum/design/destructive_analyzer
name = "Destructive Analyzer Board"
desc = "The circuit board for a destructive analyzer."
diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm
index 7c57f8ccb77..7f9a5ed16a2 100644
--- a/code/modules/research/destructive_analyzer.dm
+++ b/code/modules/research/destructive_analyzer.dm
@@ -42,19 +42,14 @@ Note: Must be placed within 3 tiles of the R&D Console
/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/O as obj, var/mob/user as mob)
if (shocked)
shock(user,50)
- if (istype(O, /obj/item/weapon/screwdriver))
+ if (default_deconstruction_screwdriver(user, "d_analyzer_t", "d_analyzer", O))
if(linked_console)
linked_console.linked_destroy = null
linked_console = null
- default_deconstruction_screwdriver(user, "d_analyzer_t", "d_analyzer")
return
- if (panel_open)
- if(istype(O, /obj/item/weapon/crowbar))
- default_deconstruction_crowbar()
- return 1
- else
- user << "You can't load the [src.name] while it's opened."
- return 1
+
+ default_deconstruction_crowbar(O)
+
if (disabled)
return
if (!linked_console)
diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm
index 1e09063ca1d..5c3c9d10b43 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -61,11 +61,10 @@ Note: Must be placed west/left of and R&D console to function.
shock(user,50)
if (O.is_open_container())
return 1
- if (istype(O, /obj/item/weapon/screwdriver))
+ if (default_deconstruction_screwdriver(user, "protolathe_t", "protolathe", O))
if(linked_console)
linked_console.linked_lathe = null
linked_console = null
- default_deconstruction_screwdriver(user, "protolathe_t", "protolathe")
return
if (panel_open)
if(istype(O, /obj/item/weapon/crowbar))
@@ -96,7 +95,7 @@ Note: Must be placed west/left of and R&D console to function.
if(adamantine_amount >= 2000)
var/obj/item/stack/sheet/mineral/adamantine/G = new /obj/item/stack/sheet/mineral/adamantine(src.loc)
G.amount = round(adamantine_amount / G.perunit)
- default_deconstruction_crowbar()
+ default_deconstruction_crowbar(O)
return 1
else
user << "\red You can't load the [src.name] while it's opened."
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 5da7d4c1adf..d3e1ef6a330 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -561,6 +561,9 @@ won't update every console in existence) but it's more of a hassle to do. Also,
/obj/machinery/computer/rdconsole/attack_hand(mob/user as mob)
if(..())
return
+ interact(user)
+
+/obj/machinery/computer/rdconsole/interact(mob/user)
user.set_machine(src)
var/dat = ""
@@ -585,70 +588,86 @@ won't update every console in existence) but it's more of a hassle to do. Also,
switch(screen)
//////////////////////R&D CONSOLE SCREENS//////////////////
- if(0.0) dat += "Updating Database...."
+ if(0.0) dat += "Updating Database...."
- if(0.1) dat += "Processing and Updating Database..."
+ if(0.1) dat += "Processing and Updating Database..."
if(0.2)
- dat += "SYSTEM LOCKED
"
+ dat += "SYSTEM LOCKED"
dat += "Unlock"
if(0.3)
- dat += "Constructing Prototype. Please Wait..."
+ dat += "Constructing Prototype. Please Wait..."
if(0.4)
- dat += "Imprinting Circuit. Please Wait..."
+ dat += "Imprinting Circuit. Please Wait..."
if(1.0) //Main Menu
- dat += "Main Menu:
"
+ dat += ""
+ dat += "Main Menu:
"
dat += "Current Research Levels
"
- if(t_disk) dat += "Disk Operations
"
- else if(d_disk) dat += "Disk Operations
"
- else dat += "(Please Insert Disk)
"
- if(linked_destroy != null) dat += "Destructive Analyzer Menu
"
- if(linked_lathe != null) dat += "Protolathe Construction Menu
"
- if(linked_imprinter != null) dat += "Circuit Construction Menu
"
+ if(t_disk)
+ dat += "Disk Operations
"
+ else if(d_disk)
+ dat += "Disk Operations
"
+ else
+ dat += "Disk Operations
"
+ if(linked_destroy)
+ dat += "Destructive Analyzer Menu
"
+ else
+ dat += "Destructive Analyzer Menu
"
+ if(linked_lathe)
+ dat += "Protolathe Construction Menu
"
+ else
+ dat += "Protolathe Construction Menu
"
+ if(linked_imprinter)
+ dat += "Circuit Construction Menu
"
+ else
+ dat += "Circuit Construction Menu
"
dat += "Settings"
+ dat += ""
if(1.1) //Research viewer
- dat += "Current Research Levels:
"
+ dat += "Main Menu"
+ dat += "Current Research Levels:
"
for(var/datum/tech/T in files.known_tech)
dat += "[T.name]
"
dat += "* Level: [T.level]
"
dat += "* Summary: [T.desc]
"
- dat += "Main Menu"
+ dat += ""
if(1.2) //Technology Disk Menu
dat += "Main Menu
"
- dat += "Disk Contents: (Technology Data Disk)
"
+ dat += "Technology Data Disk Contents:
"
if(t_disk.stored == null)
- dat += "The disk has no data stored on it.
"
+ dat += "The disk has no data stored on it."
dat += "Operations: "
- dat += "Load Tech to Disk || "
+ dat += "Load Tech to Disk"
else
dat += "Name: [t_disk.stored.name]
"
dat += "Level: [t_disk.stored.level]
"
- dat += "Description: [t_disk.stored.desc]
"
+ dat += "Description: [t_disk.stored.desc]"
dat += "Operations: "
- dat += "Upload to Database || "
- dat += "Clear Disk || "
+ dat += "Upload to Database"
+ dat += "Clear Disk"
dat += "Eject Disk"
if(1.3) //Technology Disk submenu
- dat += "
Main Menu || "
- dat += "Return to Disk Operations
"
- dat += "Load Technology to Disk:
"
+ dat += "Main Menu"
+ dat += "Return to Disk Operations"
+ dat += "Load Technology to Disk:
"
for(var/datum/tech/T in files.known_tech)
dat += "[T.name] "
- dat += "(Copy to Disk)
"
+ dat += "Copy to Disk
"
+ dat += ""
if(1.4) //Design Disk menu.
- dat += "Main Menu
"
+ dat += "Main Menu"
if(d_disk.blueprint == null)
- dat += "The disk has no data stored on it.
"
+ dat += "The disk has no data stored on it."
dat += "Operations: "
- dat += "Load Design to Disk || "
+ dat += "Load Design to Disk"
else
dat += "Name: [d_disk.blueprint.name]
"
dat += "Level: [Clamp((d_disk.blueprint.reliability + rand(-15,15)), 0, 100)]
"
@@ -660,208 +679,208 @@ won't update every console in existence) but it's more of a hassle to do. Also,
for(var/M in d_disk.blueprint.materials)
if(copytext(M, 1, 2) == "$") dat += "* [copytext(M, 2)] x [d_disk.blueprint.materials[M]]
"
else dat += "* [M] x [d_disk.blueprint.materials[M]]
"
- dat += "
Operations: "
- dat += "Upload to Database || "
- dat += "Clear Disk || "
+ dat += "Operations: "
+ dat += "Upload to Database"
+ dat += "Clear Disk"
dat += "Eject Disk"
if(1.5) //Technology disk submenu
- dat += "Main Menu || "
- dat += "Return to Disk Operations
"
- dat += "Load Design to Disk:
"
+ dat += "Main Menu"
+ dat += "Return to Disk Operations"
+ dat += "Load Design to Disk:
"
for(var/datum/design/D in files.known_designs)
dat += "[D.name] "
- dat += "(Copy to Disk)
"
+ dat += "Copy to Disk
"
+ dat += ""
if(1.6) //R&D console settings
- dat += "Main Menu
"
- dat += "R&D Console Setting:
"
+ dat += "Main Menu"
+ dat += "R&D Console Setting:
"
if(sync)
dat += "Sync Database with Network
"
+ dat += "Connect to Research Network
"
dat += "Disconnect from Research Network
"
else
+ dat += "Sync Database with Network
"
dat += "Connect to Research Network
"
+ dat += "Disconnect from Research Network
"
dat += "Device Linkage Menu
"
dat += "Lock Console
"
- dat += "Reset R&D Database.
"
+ dat += "Reset R&D Database"
if(1.7) //R&D device linkage
- dat += "Main Menu || "
- dat += "Settings Menu
"
- dat += "R&D Console Device Linkage Menu:
"
- dat += "Re-sync with Nearby Devices
"
- dat += "Linked Devices:
"
+ dat += "Main Menu"
+ dat += "Settings Menu "
+ dat += "R&D Console Device Linkage Menu:
"
+ dat += "Re-sync with Nearby Devices
"
+ dat += "Linked Devices:
"
if(linked_destroy)
- dat += "* Destructive Analyzer (Disconnect)
"
+ dat += "* Destructive Analyzer Disconnect
"
else
- dat += "* (No Destructive Analyzer Linked)
"
+ dat += "* No Destructive Analyzer Linked
"
if(linked_lathe)
- dat += "* Protolathe (Disconnect)
"
+ dat += "* Protolathe Disconnect
"
else
- dat += "* (No Protolathe Linked)
"
+ dat += "* No Protolathe Linked
"
if(linked_imprinter)
- dat += "* Circuit Imprinter (Disconnect)
"
+ dat += "* Circuit Imprinter Disconnect
"
else
- dat += "* (No Circuit Imprinter Linked)
"
+ dat += "* No Circuit Imprinter Linked
"
+ dat += ""
////////////////////DESTRUCTIVE ANALYZER SCREENS////////////////////////////
if(2.0)
- dat += "NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE
"
dat += "Main Menu"
+ dat += "NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE"
if(2.1)
- dat += "No Item Loaded. Standing-by...
"
dat += "Main Menu"
+ dat += "No Item Loaded. Standing-by..."
if(2.2)
- dat += "Main Menu
"
- dat += "Deconstruction Menu
"
+ dat += "Main Menu"
+ dat += "Deconstruction Menu
"
dat += "Name: [linked_destroy.loaded_item.name]
"
dat += "Reliability: [linked_destroy.loaded_item.reliability]
"
dat += "Origin Tech:
"
var/list/temp_tech = linked_destroy.ConvertReqString2List(linked_destroy.loaded_item.origin_tech)
for(var/T in temp_tech)
dat += "* [CallTechName(T)] [temp_tech[T]]
"
- dat += "
Deconstruct Item || "
- dat += "Eject Item || "
+ dat += "Options: "
+ dat += "Deconstruct Item"
+ dat += "Eject Item"
if(2.3)
- dat += "Item is neither reliable enough or broken enough to learn from.
"
dat += "Main Menu"
+ dat += "Item is neither reliable enough or broken enough to learn from."
/////////////////////PROTOLATHE SCREENS/////////////////////////
if(3.0)
dat += "Main Menu
"
- dat += "NO PROTOLATHE LINKED TO CONSOLE
"
+ dat += "NO PROTOLATHE LINKED TO CONSOLE"
if(3.1)
- dat += "Main Menu || "
- dat += "Material Storage || "
- dat += "Chemical Storage
"
- dat += "Protolathe Menu:
"
- dat += "Material Amount: [linked_lathe.TotalMaterials()] cm3 (MAX: [linked_lathe.max_material_storage])
"
- dat += "Chemical Volume: [linked_lathe.reagents.total_volume] (MAX: [linked_lathe.reagents.maximum_volume])
"
+ dat += "Main Menu "
+ dat += "Material Storage"
+ dat += "Protolathe Menu:
"
+ dat += "Material Amount: [linked_lathe.TotalMaterials()] / [linked_lathe.max_material_storage]
"
+ dat += "Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
"
var/coeff = linked_lathe.efficiency_coeff
for(var/datum/design/D in files.known_designs)
if(!(D.build_type & PROTOLATHE))
continue
var/temp_dat = "[D.name]"
+ var/temp_material
var/check_materials = 1
for(var/M in D.materials)
- temp_dat += " [D.materials[M]/coeff] [CallMaterialName(M)]"
+ temp_material += " [D.materials[M]/coeff] [CallMaterialName(M)]"
if(copytext(M, 1, 2) == "$")
switch(M)
if("$glass")
- if(D.materials[M]/coeff > linked_lathe.g_amount) check_materials = 0
+ if(D.materials[M]/coeff > linked_lathe.g_amount)
+ check_materials = 0
if("$metal")
- if(D.materials[M]/coeff > linked_lathe.m_amount) check_materials = 0
+ if(D.materials[M]/coeff > linked_lathe.m_amount)
+ check_materials = 0
if("$gold")
- if(D.materials[M]/coeff > linked_lathe.gold_amount) check_materials = 0
+ if(D.materials[M]/coeff > linked_lathe.gold_amount)
+ check_materials = 0
if("$silver")
- if(D.materials[M]/coeff > linked_lathe.silver_amount) check_materials = 0
+ if(D.materials[M]/coeff > linked_lathe.silver_amount)
+ check_materials = 0
if("$plasma")
- if(D.materials[M]/coeff > linked_lathe.plasma_amount) check_materials = 0
+ if(D.materials[M]/coeff > linked_lathe.plasma_amount)
+ check_materials = 0
if("$uranium")
- if(D.materials[M]/coeff > linked_lathe.uranium_amount) check_materials = 0
+ if(D.materials[M]/coeff > linked_lathe.uranium_amount)
+ check_materials = 0
if("$diamond")
- if(D.materials[M]/coeff > linked_lathe.diamond_amount) check_materials = 0
+ if(D.materials[M]/coeff > linked_lathe.diamond_amount)
+ check_materials = 0
if("$clown")
- if(D.materials[M]/coeff > linked_lathe.clown_amount) check_materials = 0
+ if(D.materials[M]/coeff > linked_lathe.clown_amount)
+ check_materials = 0
else if (!linked_lathe.reagents.has_reagent(M, D.materials[M]/coeff))
check_materials = 0
if (check_materials)
- dat += "* [temp_dat]
"
+ dat += "* [temp_dat][temp_material]
"
else
- dat += "* [temp_dat]
"
+ dat += "* [temp_dat][temp_material]
"
+ dat += ""
if(3.2) //Protolathe Material Storage Sub-menu
- dat += "Main Menu || "
- dat += "Protolathe Menu
"
- dat += "Material Storage
"
+ dat += "Main Menu"
+ dat += "Protolathe Menu"
+ dat += "Material Storage:
"
//Metal
- dat += "* [linked_lathe.m_amount] cm3 of Metal || "
- dat += "Eject: "
- if(linked_lathe.m_amount >= 3750) dat += "(1 Sheet) "
- if(linked_lathe.m_amount >= 18750) dat += "(5 Sheets) "
- if(linked_lathe.m_amount >= 3750) dat += "(Max Sheets)"
+ dat += "* [linked_lathe.m_amount] of Metal: "
+ if(linked_lathe.m_amount >= 3750) dat += "Eject "
+ if(linked_lathe.m_amount >= 18750) dat += "5x "
+ if(linked_lathe.m_amount >= 3750) dat += "All"
dat += "
"
//Glass
- dat += "* [linked_lathe.g_amount] cm3 of Glass || "
- dat += "Eject: "
- if(linked_lathe.g_amount >= 3750) dat += "(1 Sheet) "
- if(linked_lathe.g_amount >= 18750) dat += "(5 Sheets) "
- if(linked_lathe.g_amount >= 3750) dat += "(Max Sheets)"
+ dat += "* [linked_lathe.g_amount] of Glass: "
+ if(linked_lathe.g_amount >= 3750) dat += "Eject "
+ if(linked_lathe.g_amount >= 18750) dat += "5x "
+ if(linked_lathe.g_amount >= 3750) dat += "All"
dat += "
"
//Gold
- dat += "* [linked_lathe.gold_amount] cm3 of Gold || "
- dat += "Eject: "
- if(linked_lathe.gold_amount >= 2000) dat += "(1 Sheet) "
- if(linked_lathe.gold_amount >= 10000) dat += "(5 Sheets) "
- if(linked_lathe.gold_amount >= 2000) dat += "(Max Sheets)"
+ dat += "* [linked_lathe.gold_amount] of Gold: "
+ if(linked_lathe.gold_amount >= 2000) dat += "Eject "
+ if(linked_lathe.gold_amount >= 10000) dat += "5x "
+ if(linked_lathe.gold_amount >= 2000) dat += "All"
dat += "
"
//Silver
- dat += "* [linked_lathe.silver_amount] cm3 of Silver || "
- dat += "Eject: "
- if(linked_lathe.silver_amount >= 2000) dat += "(1 Sheet) "
- if(linked_lathe.silver_amount >= 10000) dat += "(5 Sheets) "
- if(linked_lathe.silver_amount >= 2000) dat += "(Max Sheets)"
+ dat += "* [linked_lathe.silver_amount] of Silver: "
+ if(linked_lathe.silver_amount >= 2000) dat += "Eject "
+ if(linked_lathe.silver_amount >= 10000) dat += "5x "
+ if(linked_lathe.silver_amount >= 2000) dat += "All"
dat += "
"
//Plasma
- dat += "* [linked_lathe.plasma_amount] cm3 of Solid Plasma || "
- dat += "Eject: "
- if(linked_lathe.plasma_amount >= 2000) dat += "(1 Sheet) "
- if(linked_lathe.plasma_amount >= 10000) dat += "(5 Sheets) "
- if(linked_lathe.plasma_amount >= 2000) dat += "(Max Sheets)"
+ dat += "* [linked_lathe.plasma_amount] of Solid Plasma: "
+ if(linked_lathe.plasma_amount >= 2000) dat += "Eject "
+ if(linked_lathe.plasma_amount >= 10000) dat += "5x "
+ if(linked_lathe.plasma_amount >= 2000) dat += "All"
dat += "
"
//Uranium
- dat += "* [linked_lathe.uranium_amount] cm3 of Uranium || "
- dat += "Eject: "
- if(linked_lathe.uranium_amount >= 2000) dat += "(1 Sheet) "
- if(linked_lathe.uranium_amount >= 10000) dat += "(5 Sheets) "
- if(linked_lathe.uranium_amount >= 2000) dat += "(Max Sheets)"
+ dat += "* [linked_lathe.uranium_amount] of Uranium: "
+ if(linked_lathe.uranium_amount >= 2000) dat += "Eject "
+ if(linked_lathe.uranium_amount >= 10000) dat += "5x "
+ if(linked_lathe.uranium_amount >= 2000) dat += "All"
dat += "
"
//Diamond
- dat += "* [linked_lathe.diamond_amount] cm3 of Diamond || "
- dat += "Eject: "
- if(linked_lathe.diamond_amount >= 2000) dat += "(1 Sheet) "
- if(linked_lathe.diamond_amount >= 10000) dat += "(5 Sheets) "
- if(linked_lathe.diamond_amount >= 2000) dat += "(Max Sheets)"
+ dat += "* [linked_lathe.diamond_amount] of Diamond: "
+ if(linked_lathe.diamond_amount >= 2000) dat += "Eject "
+ if(linked_lathe.diamond_amount >= 10000) dat += "5x "
+ if(linked_lathe.diamond_amount >= 2000) dat += "All"
dat += "
"
//Bananium
- dat += "* [linked_lathe.clown_amount] cm3 of Bananium || "
- dat += "Eject: "
- if(linked_lathe.clown_amount >= 2000) dat += "(1 Sheet) "
- if(linked_lathe.clown_amount >= 10000) dat += "(5 Sheets) "
- if(linked_lathe.clown_amount >= 2000) dat += "(Max Sheets)"
-
- if(3.3) //Protolathe Chemical Storage Submenu
- dat += "Main Menu || "
- dat += "Protolathe Menu
"
- dat += "Chemical Storage
"
- for(var/datum/reagent/R in linked_lathe.reagents.reagent_list)
- dat += "Name: [R.name] | Units: [R.volume] "
- dat += "(Purge)
"
- dat += "Disposal All Chemicals in Storage
"
+ dat += "* [linked_lathe.clown_amount] of Bananium: "
+ if(linked_lathe.clown_amount >= 2000) dat += "Eject "
+ if(linked_lathe.clown_amount >= 10000) dat += "5x "
+ if(linked_lathe.clown_amount >= 2000) dat += "All"
+ dat += ""
///////////////////CIRCUIT IMPRINTER SCREENS////////////////////
if(4.0)
dat += "Main Menu
"
- dat += "NO CIRCUIT IMPRINTER LINKED TO CONSOLE
"
+ dat += "NO CIRCUIT IMPRINTER LINKED TO CONSOLE"
if(4.1)
- dat += "Main Menu || "
- dat += "Material Storage || "
- dat += "Chemical Storage
"
- dat += "Circuit Imprinter Menu:
"
- dat += "Material Amount: [linked_imprinter.TotalMaterials()] cm3
"
+ dat += "Main Menu"
+ dat += "Material Storage"
+ dat += "Chemical Storage"
+ dat += "Circuit Imprinter Menu:
"
+ dat += "Material Amount: [linked_imprinter.TotalMaterials()]
"
dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]
"
var/coeff = 2 ** linked_imprinter.efficiency_coeff
for(var/datum/design/D in files.known_designs)
if(!(D.build_type & IMPRINTER))
continue
var/temp_dat = "[D.name]"
+ var/temp_materials
var/check_materials = 1
for(var/M in D.materials)
- temp_dat += " [D.materials[M]/coeff] [CallMaterialName(M)]"
+ temp_materials += " [D.materials[M]/coeff] [CallMaterialName(M)]"
if(copytext(M, 1, 2) == "$")
switch(M)
if("$glass")
@@ -873,46 +892,47 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else if (!linked_imprinter.reagents.has_reagent(M, D.materials[M]/coeff))
check_materials = 0
if (check_materials)
- dat += "* [temp_dat]
"
+ dat += "* [temp_dat][temp_materials]
"
else
- dat += "* [temp_dat]
"
+ dat += "* [temp_dat][temp_materials]
"
+ dat += ""
if(4.2)
- dat += "Main Menu || "
- dat += "Imprinter Menu
"
- dat += "Chemical Storage
"
+ dat += "Main Menu"
+ dat += "Imprinter Menu"
+ dat += "Disposal All Chemicals in Storage"
+ dat += "Chemical Storage:
"
for(var/datum/reagent/R in linked_imprinter.reagents.reagent_list)
- dat += "Name: [R.name] | Units: [R.volume] "
- dat += "(Purge)
"
- dat += "Disposal All Chemicals in Storage
"
+ dat += "[R.name]: [R.volume]"
+ dat += "Purge
"
if(4.3)
- dat += "Main Menu || "
- dat += "Circuit Imprinter Menu
"
- dat += "Material Storage
"
+ dat += "Main Menu"
+ dat += "Circuit Imprinter Menu"
+ dat += "Material Storage:
"
//Glass
- dat += "* [linked_imprinter.g_amount] cm3 of Glass || "
- dat += "Eject: "
- if(linked_imprinter.g_amount >= 3750) dat += "(1 Sheet) "
- if(linked_imprinter.g_amount >= 18750) dat += "(5 Sheets) "
- if(linked_imprinter.g_amount >= 3750) dat += "(Max Sheets)"
+ dat += "* [linked_imprinter.g_amount] glass: "
+ if(linked_imprinter.g_amount >= 3750) dat += "Eject "
+ if(linked_imprinter.g_amount >= 18750) dat += "5x "
+ if(linked_imprinter.g_amount >= 3750) dat += "All"
dat += "
"
//Gold
- dat += "* [linked_imprinter.gold_amount] cm3 of Gold || "
- dat += "Eject: "
- if(linked_imprinter.gold_amount >= 2000) dat += "(1 Sheet) "
- if(linked_imprinter.gold_amount >= 10000) dat += "(5 Sheets) "
- if(linked_imprinter.gold_amount >= 2000) dat += "(Max Sheets)"
+ dat += "* [linked_imprinter.gold_amount] gold: "
+ if(linked_imprinter.gold_amount >= 2000) dat += "Eject "
+ if(linked_imprinter.gold_amount >= 10000) dat += "5x "
+ if(linked_imprinter.gold_amount >= 2000) dat += "All"
dat += "
"
//Diamond
- dat += "* [linked_imprinter.diamond_amount] cm3 of Diamond || "
- dat += "Eject: "
- if(linked_imprinter.diamond_amount >= 2000) dat += "(1 Sheet) "
- if(linked_imprinter.diamond_amount >= 10000) dat += "(5 Sheets) "
- if(linked_imprinter.diamond_amount >= 2000) dat += "(Max Sheets)"
+ dat += "* [linked_imprinter.diamond_amount] diamond: "
+ if(linked_imprinter.diamond_amount >= 2000) dat += "Eject "
+ if(linked_imprinter.diamond_amount >= 10000) dat += "5x "
+ if(linked_imprinter.diamond_amount >= 2000) dat += "All"
+ dat += ""
- user << browse("Research and Development Console
[dat]", "window=rdconsole;size=575x400")
- onclose(user, "rdconsole")
+ var/datum/browser/popup = new(user, "rndconsole", name, 420, 450)
+ popup.set_content(dat)
+ popup.open()
+ return
/obj/machinery/computer/rdconsole/robotics
name = "Robotics R&D Console"
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index ca14c2201d0..10e956bfcd7 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -1,343 +1,342 @@
-/obj/machinery/r_n_d/server
- name = "R&D Server"
- icon = 'icons/obj/machines/research.dmi'
- icon_state = "server"
- var/datum/research/files
- var/health = 100
- var/list/id_with_upload = list() //List of R&D consoles with upload to server access.
- var/list/id_with_download = list() //List of R&D consoles with download from server access.
- var/id_with_upload_string = "" //String versions for easy editing in map editor.
- var/id_with_download_string = ""
- var/server_id = 0
- var/heat_gen = 100
- var/heating_power = 40000
- var/delay = 10
- req_access = list(access_rd) //Only the R&D can change server settings.
-
-/obj/machinery/r_n_d/server/New()
- ..()
- component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/rdserver(null)
- component_parts += new /obj/item/weapon/stock_parts/scanning_module(null)
- component_parts += new /obj/item/weapon/cable_coil(null, 1)
- component_parts += new /obj/item/weapon/cable_coil(null, 1)
- RefreshParts()
- src.initialize(); //Agouri
-
-/obj/machinery/r_n_d/server/Del()
- griefProtection()
- ..()
-
-/obj/machinery/r_n_d/server/RefreshParts()
- var/tot_rating = 0
- for(var/obj/item/weapon/stock_parts/SP in src)
- tot_rating += SP.rating
- heat_gen /= max(1, tot_rating)
-
-/obj/machinery/r_n_d/server/initialize()
- if(!files) files = new /datum/research(src)
- var/list/temp_list
- if(!id_with_upload.len)
- temp_list = list()
- temp_list = text2list(id_with_upload_string, ";")
- for(var/N in temp_list)
- id_with_upload += text2num(N)
- if(!id_with_download.len)
- temp_list = list()
- temp_list = text2list(id_with_download_string, ";")
- for(var/N in temp_list)
- id_with_download += text2num(N)
-
-/obj/machinery/r_n_d/server/process()
- var/datum/gas_mixture/environment = loc.return_air()
- switch(environment.temperature)
- if(0 to T0C)
- health = min(100, health + 1)
- if(T0C to (T20C + 20))
- health = Clamp(health, 0, 100)
- if((T20C + 20) to (T0C + 70))
- health = max(0, health - 1)
- if(health <= 0)
- /*griefProtection() This seems to get called twice before running any code that deletes/damages the server or it's files anwyay.
- refreshParts and the hasReq procs that get called by this are laggy and do not need to be called by every server on the map every tick */
- var/updateRD = 0
- files.known_designs = list()
- for(var/datum/tech/T in files.known_tech)
- if(prob(1))
- updateRD++
- T.level--
- if(updateRD)
- files.RefreshResearch()
- if(delay)
- delay--
- else
- produce_heat(heat_gen)
- delay = initial(delay)
-
-/obj/machinery/r_n_d/server/meteorhit(var/obj/O as obj)
- griefProtection()
- ..()
-
-
-/obj/machinery/r_n_d/server/emp_act(severity)
- griefProtection()
- ..()
-
-
-/obj/machinery/r_n_d/server/ex_act(severity)
- griefProtection()
- ..()
-
-
-/obj/machinery/r_n_d/server/blob_act()
- griefProtection()
- ..()
-
-
-
-//Backup files to centcom to help admins recover data after greifer attacks
-/obj/machinery/r_n_d/server/proc/griefProtection()
- for(var/obj/machinery/r_n_d/server/centcom/C in world)
- for(var/datum/tech/T in files.known_tech)
- C.files.AddTech2Known(T)
- for(var/datum/design/D in files.known_designs)
- C.files.AddDesign2Known(D)
- C.files.RefreshResearch()
-
-/obj/machinery/r_n_d/server/proc/produce_heat(heat_amt)
- if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from space heater.
- var/turf/simulated/L = loc
- if(istype(L))
- var/datum/gas_mixture/env = L.return_air()
- if(env.temperature < (heat_amt+T0C))
-
- var/transfer_moles = 0.25 * env.total_moles()
-
- var/datum/gas_mixture/removed = env.remove(transfer_moles)
-
- if(removed)
-
- var/heat_capacity = removed.heat_capacity()
- if(heat_capacity == 0 || heat_capacity == null)
- heat_capacity = 1
- removed.temperature = min((removed.temperature*heat_capacity + heating_power)/heat_capacity, 1000)
-
- env.merge(removed)
- air_update_turf()
-
-/obj/machinery/r_n_d/server/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if (disabled)
- return
- if (shocked)
- shock(user,50)
- if (istype(O, /obj/item/weapon/screwdriver))
- default_deconstruction_screwdriver(user, "server_o", "server")
- return
- if (panel_open)
- if(istype(O, /obj/item/weapon/crowbar))
- griefProtection()
- default_deconstruction_crowbar()
- return 1
-
-/obj/machinery/r_n_d/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves.
- if (disabled)
- return
- if (shocked)
- shock(user,50)
- return
-
-/obj/machinery/r_n_d/server/centcom
- name = "Centcom Central R&D Database"
- server_id = -1
-
-/obj/machinery/r_n_d/server/centcom/initialize()
- ..()
- var/list/no_id_servers = list()
- var/list/server_ids = list()
- for(var/obj/machinery/r_n_d/server/S in world)
- switch(S.server_id)
- if(-1)
- continue
- if(0)
- no_id_servers += S
- else
- server_ids += S.server_id
-
- for(var/obj/machinery/r_n_d/server/S in no_id_servers)
- var/num = 1
- while(!S.server_id)
- if(num in server_ids)
- num++
- else
- S.server_id = num
- server_ids += num
- no_id_servers -= S
-
-/obj/machinery/r_n_d/server/centcom/process()
- return PROCESS_KILL //don't need process()
-
-
-/obj/machinery/computer/rdservercontrol
- name = "R&D Server Controller"
- icon_state = "rdcomp"
- var/screen = 0
- var/obj/machinery/r_n_d/server/temp_server
- var/list/servers = list()
- var/list/consoles = list()
- var/badmin = 0
- circuit = /obj/item/weapon/circuitboard/rdservercontrol
-
-/obj/machinery/computer/rdservercontrol/Topic(href, href_list)
- if(..())
- return
-
- add_fingerprint(usr)
- usr.set_machine(src)
- if(!src.allowed(usr) && !emagged)
- usr << "\red You do not have the required access level"
- return
-
- if(href_list["main"])
- screen = 0
-
- else if(href_list["access"] || href_list["data"] || href_list["transfer"])
- temp_server = null
- consoles = list()
- servers = list()
- for(var/obj/machinery/r_n_d/server/S in world)
- if(S.server_id == text2num(href_list["access"]) || S.server_id == text2num(href_list["data"]) || S.server_id == text2num(href_list["transfer"]))
- temp_server = S
- break
- if(href_list["access"])
- screen = 1
- for(var/obj/machinery/computer/rdconsole/C in world)
- if(C.sync)
- consoles += C
- else if(href_list["data"])
- screen = 2
- else if(href_list["transfer"])
- screen = 3
- for(var/obj/machinery/r_n_d/server/S in world)
- if(S == src)
- continue
- servers += S
-
- else if(href_list["upload_toggle"])
- var/num = text2num(href_list["upload_toggle"])
- if(num in temp_server.id_with_upload)
- temp_server.id_with_upload -= num
- else
- temp_server.id_with_upload += num
-
- else if(href_list["download_toggle"])
- var/num = text2num(href_list["download_toggle"])
- if(num in temp_server.id_with_download)
- temp_server.id_with_download -= num
- else
- temp_server.id_with_download += num
-
- else if(href_list["reset_tech"])
- var/choice = alert("Technology Data Rest", "Are you sure you want to reset this technology to its default data? Data lost cannot be recovered.", "Continue", "Cancel")
- if(choice == "Continue")
- for(var/datum/tech/T in temp_server.files.known_tech)
- if(T.id == href_list["reset_tech"])
- T.level = 1
- break
- temp_server.files.RefreshResearch()
-
- else if(href_list["reset_design"])
- var/choice = alert("Design Data Deletion", "Are you sure you want to delete this design? If you still have the prerequisites for the design, it'll reset to its base reliability. Data lost cannot be recovered.", "Continue", "Cancel")
- if(choice == "Continue")
- for(var/datum/design/D in temp_server.files.known_designs)
- if(D.id == href_list["reset_design"])
- temp_server.files.known_designs -= D
- break
- temp_server.files.RefreshResearch()
-
- updateUsrDialog()
- return
-
-/obj/machinery/computer/rdservercontrol/attack_hand(mob/user as mob)
- if(..())
- return
- user.set_machine(src)
- var/dat = ""
-
- switch(screen)
- if(0) //Main Menu
- dat += "Connected Servers:
"
-
- for(var/obj/machinery/r_n_d/server/S in world)
- if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin)
- continue
- dat += "[S.name] || "
- dat += " Access Rights | "
- dat += "Data Management"
- if(badmin) dat += " | Server-to-Server Transfer"
- dat += "
"
-
- if(1) //Access rights menu
- dat += "[temp_server.name] Access Rights
"
- dat += "Consoles with Upload Access
"
- for(var/obj/machinery/computer/rdconsole/C in consoles)
- var/turf/console_turf = get_turf(C)
- dat += "* [console_turf.loc]" //FYI, these are all numeric ids, eventually.
- if(C.id in temp_server.id_with_upload)
- dat += " (Remove)
"
- else
- dat += " (Add)
"
- dat += "Consoles with Download Access
"
- for(var/obj/machinery/computer/rdconsole/C in consoles)
- var/turf/console_turf = get_turf(C)
- dat += "* [console_turf.loc]"
- if(C.id in temp_server.id_with_download)
- dat += " (Remove)
"
- else
- dat += " (Add)
"
- dat += "
Main Menu"
-
- if(2) //Data Management menu
- dat += "[temp_server.name] Data ManagementP
"
- dat += "Known Technologies
"
- for(var/datum/tech/T in temp_server.files.known_tech)
- dat += "* [T.name] "
- dat += "(Reset)
" //FYI, these are all strings.
- dat += "Known Designs
"
- for(var/datum/design/D in temp_server.files.known_designs)
- dat += "* [D.name] "
- dat += "(Delete)
"
- dat += "
Main Menu"
-
- if(3) //Server Data Transfer
- dat += "[temp_server.name] Server to Server Transfer
"
- dat += "Send Data to what server?
"
- for(var/obj/machinery/r_n_d/server/S in servers)
- dat += "[S.name] (Transfer)
"
- dat += "
Main Menu"
- user << browse("R&D Server Control
[dat]", "window=server_control;size=575x400")
- onclose(user, "server_control")
- return
-
-/obj/machinery/computer/rdservercontrol/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
- if(istype(D, /obj/item/weapon/card/emag) && !emagged)
- playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
- emagged = 1
- user << "\blue You you disable the security protocols"
- else
- ..()
- src.updateUsrDialog()
- return
-
-
-/obj/machinery/r_n_d/server/robotics
- name = "Robotics R&D Server"
- id_with_upload_string = "1;2"
- id_with_download_string = "1;2"
- server_id = 2
-
-
-/obj/machinery/r_n_d/server/core
- name = "Core R&D Server"
- id_with_upload_string = "1"
- id_with_download_string = "1"
+/obj/machinery/r_n_d/server
+ name = "R&D Server"
+ icon = 'icons/obj/machines/research.dmi'
+ icon_state = "server"
+ var/datum/research/files
+ var/health = 100
+ var/list/id_with_upload = list() //List of R&D consoles with upload to server access.
+ var/list/id_with_download = list() //List of R&D consoles with download from server access.
+ var/id_with_upload_string = "" //String versions for easy editing in map editor.
+ var/id_with_download_string = ""
+ var/server_id = 0
+ var/heat_gen = 100
+ var/heating_power = 40000
+ var/delay = 10
+ req_access = list(access_rd) //Only the R&D can change server settings.
+
+/obj/machinery/r_n_d/server/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/rdserver(null)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ RefreshParts()
+ src.initialize(); //Agouri
+
+/obj/machinery/r_n_d/server/Del()
+ griefProtection()
+ ..()
+
+/obj/machinery/r_n_d/server/RefreshParts()
+ var/tot_rating = 0
+ for(var/obj/item/weapon/stock_parts/SP in src)
+ tot_rating += SP.rating
+ heat_gen /= max(1, tot_rating)
+
+/obj/machinery/r_n_d/server/initialize()
+ if(!files) files = new /datum/research(src)
+ var/list/temp_list
+ if(!id_with_upload.len)
+ temp_list = list()
+ temp_list = text2list(id_with_upload_string, ";")
+ for(var/N in temp_list)
+ id_with_upload += text2num(N)
+ if(!id_with_download.len)
+ temp_list = list()
+ temp_list = text2list(id_with_download_string, ";")
+ for(var/N in temp_list)
+ id_with_download += text2num(N)
+
+/obj/machinery/r_n_d/server/process()
+ var/datum/gas_mixture/environment = loc.return_air()
+ switch(environment.temperature)
+ if(0 to T0C)
+ health = min(100, health + 1)
+ if(T0C to (T20C + 20))
+ health = Clamp(health, 0, 100)
+ if((T20C + 20) to (T0C + 70))
+ health = max(0, health - 1)
+ if(health <= 0)
+ /*griefProtection() This seems to get called twice before running any code that deletes/damages the server or it's files anwyay.
+ refreshParts and the hasReq procs that get called by this are laggy and do not need to be called by every server on the map every tick */
+ var/updateRD = 0
+ files.known_designs = list()
+ for(var/datum/tech/T in files.known_tech)
+ if(prob(1))
+ updateRD++
+ T.level--
+ if(updateRD)
+ files.RefreshResearch()
+ if(delay)
+ delay--
+ else
+ produce_heat(heat_gen)
+ delay = initial(delay)
+
+/obj/machinery/r_n_d/server/meteorhit(var/obj/O as obj)
+ griefProtection()
+ ..()
+
+
+/obj/machinery/r_n_d/server/emp_act(severity)
+ griefProtection()
+ ..()
+
+
+/obj/machinery/r_n_d/server/ex_act(severity)
+ griefProtection()
+ ..()
+
+
+/obj/machinery/r_n_d/server/blob_act()
+ griefProtection()
+ ..()
+
+
+
+//Backup files to centcom to help admins recover data after greifer attacks
+/obj/machinery/r_n_d/server/proc/griefProtection()
+ for(var/obj/machinery/r_n_d/server/centcom/C in world)
+ for(var/datum/tech/T in files.known_tech)
+ C.files.AddTech2Known(T)
+ for(var/datum/design/D in files.known_designs)
+ C.files.AddDesign2Known(D)
+ C.files.RefreshResearch()
+
+/obj/machinery/r_n_d/server/proc/produce_heat(heat_amt)
+ if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from space heater.
+ var/turf/simulated/L = loc
+ if(istype(L))
+ var/datum/gas_mixture/env = L.return_air()
+ if(env.temperature < (heat_amt+T0C))
+
+ var/transfer_moles = 0.25 * env.total_moles()
+
+ var/datum/gas_mixture/removed = env.remove(transfer_moles)
+
+ if(removed)
+
+ var/heat_capacity = removed.heat_capacity()
+ if(heat_capacity == 0 || heat_capacity == null)
+ heat_capacity = 1
+ removed.temperature = min((removed.temperature*heat_capacity + heating_power)/heat_capacity, 1000)
+
+ env.merge(removed)
+ air_update_turf()
+
+/obj/machinery/r_n_d/server/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ if (disabled)
+ return
+ if (shocked)
+ shock(user,50)
+ if (default_deconstruction_screwdriver(user, "server_o", "server", O))
+ return
+ if (panel_open)
+ if(istype(O, /obj/item/weapon/crowbar))
+ griefProtection()
+ default_deconstruction_crowbar(O)
+ return 1
+
+/obj/machinery/r_n_d/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves.
+ if (disabled)
+ return
+ if (shocked)
+ shock(user,50)
+ return
+
+/obj/machinery/r_n_d/server/centcom
+ name = "Centcom Central R&D Database"
+ server_id = -1
+
+/obj/machinery/r_n_d/server/centcom/initialize()
+ ..()
+ var/list/no_id_servers = list()
+ var/list/server_ids = list()
+ for(var/obj/machinery/r_n_d/server/S in world)
+ switch(S.server_id)
+ if(-1)
+ continue
+ if(0)
+ no_id_servers += S
+ else
+ server_ids += S.server_id
+
+ for(var/obj/machinery/r_n_d/server/S in no_id_servers)
+ var/num = 1
+ while(!S.server_id)
+ if(num in server_ids)
+ num++
+ else
+ S.server_id = num
+ server_ids += num
+ no_id_servers -= S
+
+/obj/machinery/r_n_d/server/centcom/process()
+ return PROCESS_KILL //don't need process()
+
+
+/obj/machinery/computer/rdservercontrol
+ name = "R&D Server Controller"
+ icon_state = "rdcomp"
+ var/screen = 0
+ var/obj/machinery/r_n_d/server/temp_server
+ var/list/servers = list()
+ var/list/consoles = list()
+ var/badmin = 0
+ circuit = /obj/item/weapon/circuitboard/rdservercontrol
+
+/obj/machinery/computer/rdservercontrol/Topic(href, href_list)
+ if(..())
+ return
+
+ add_fingerprint(usr)
+ usr.set_machine(src)
+ if(!src.allowed(usr) && !emagged)
+ usr << "\red You do not have the required access level"
+ return
+
+ if(href_list["main"])
+ screen = 0
+
+ else if(href_list["access"] || href_list["data"] || href_list["transfer"])
+ temp_server = null
+ consoles = list()
+ servers = list()
+ for(var/obj/machinery/r_n_d/server/S in world)
+ if(S.server_id == text2num(href_list["access"]) || S.server_id == text2num(href_list["data"]) || S.server_id == text2num(href_list["transfer"]))
+ temp_server = S
+ break
+ if(href_list["access"])
+ screen = 1
+ for(var/obj/machinery/computer/rdconsole/C in world)
+ if(C.sync)
+ consoles += C
+ else if(href_list["data"])
+ screen = 2
+ else if(href_list["transfer"])
+ screen = 3
+ for(var/obj/machinery/r_n_d/server/S in world)
+ if(S == src)
+ continue
+ servers += S
+
+ else if(href_list["upload_toggle"])
+ var/num = text2num(href_list["upload_toggle"])
+ if(num in temp_server.id_with_upload)
+ temp_server.id_with_upload -= num
+ else
+ temp_server.id_with_upload += num
+
+ else if(href_list["download_toggle"])
+ var/num = text2num(href_list["download_toggle"])
+ if(num in temp_server.id_with_download)
+ temp_server.id_with_download -= num
+ else
+ temp_server.id_with_download += num
+
+ else if(href_list["reset_tech"])
+ var/choice = alert("Technology Data Rest", "Are you sure you want to reset this technology to its default data? Data lost cannot be recovered.", "Continue", "Cancel")
+ if(choice == "Continue")
+ for(var/datum/tech/T in temp_server.files.known_tech)
+ if(T.id == href_list["reset_tech"])
+ T.level = 1
+ break
+ temp_server.files.RefreshResearch()
+
+ else if(href_list["reset_design"])
+ var/choice = alert("Design Data Deletion", "Are you sure you want to delete this design? If you still have the prerequisites for the design, it'll reset to its base reliability. Data lost cannot be recovered.", "Continue", "Cancel")
+ if(choice == "Continue")
+ for(var/datum/design/D in temp_server.files.known_designs)
+ if(D.id == href_list["reset_design"])
+ temp_server.files.known_designs -= D
+ break
+ temp_server.files.RefreshResearch()
+
+ updateUsrDialog()
+ return
+
+/obj/machinery/computer/rdservercontrol/attack_hand(mob/user as mob)
+ if(..())
+ return
+ user.set_machine(src)
+ var/dat = ""
+
+ switch(screen)
+ if(0) //Main Menu
+ dat += "Connected Servers:
"
+
+ for(var/obj/machinery/r_n_d/server/S in world)
+ if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin)
+ continue
+ dat += "[S.name] || "
+ dat += " Access Rights | "
+ dat += "Data Management"
+ if(badmin) dat += " | Server-to-Server Transfer"
+ dat += "
"
+
+ if(1) //Access rights menu
+ dat += "[temp_server.name] Access Rights
"
+ dat += "Consoles with Upload Access
"
+ for(var/obj/machinery/computer/rdconsole/C in consoles)
+ var/turf/console_turf = get_turf(C)
+ dat += "* [console_turf.loc]" //FYI, these are all numeric ids, eventually.
+ if(C.id in temp_server.id_with_upload)
+ dat += " (Remove)
"
+ else
+ dat += " (Add)
"
+ dat += "Consoles with Download Access
"
+ for(var/obj/machinery/computer/rdconsole/C in consoles)
+ var/turf/console_turf = get_turf(C)
+ dat += "* [console_turf.loc]"
+ if(C.id in temp_server.id_with_download)
+ dat += " (Remove)
"
+ else
+ dat += " (Add)
"
+ dat += "
Main Menu"
+
+ if(2) //Data Management menu
+ dat += "[temp_server.name] Data ManagementP
"
+ dat += "Known Technologies
"
+ for(var/datum/tech/T in temp_server.files.known_tech)
+ dat += "* [T.name] "
+ dat += "(Reset)
" //FYI, these are all strings.
+ dat += "Known Designs
"
+ for(var/datum/design/D in temp_server.files.known_designs)
+ dat += "* [D.name] "
+ dat += "(Delete)
"
+ dat += "
Main Menu"
+
+ if(3) //Server Data Transfer
+ dat += "[temp_server.name] Server to Server Transfer
"
+ dat += "Send Data to what server?
"
+ for(var/obj/machinery/r_n_d/server/S in servers)
+ dat += "[S.name] (Transfer)
"
+ dat += "
Main Menu"
+ user << browse("R&D Server Control
[dat]", "window=server_control;size=575x400")
+ onclose(user, "server_control")
+ return
+
+/obj/machinery/computer/rdservercontrol/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
+ if(istype(D, /obj/item/weapon/card/emag) && !emagged)
+ playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
+ emagged = 1
+ user << "\blue You you disable the security protocols"
+ else
+ ..()
+ src.updateUsrDialog()
+ return
+
+
+/obj/machinery/r_n_d/server/robotics
+ name = "Robotics R&D Server"
+ id_with_upload_string = "1;2"
+ id_with_download_string = "1;2"
+ server_id = 2
+
+
+/obj/machinery/r_n_d/server/core
+ name = "Core R&D Server"
+ id_with_upload_string = "1"
+ id_with_download_string = "1"
server_id = 1
\ No newline at end of file
diff --git a/code/modules/surgery/generic_steps.dm b/code/modules/surgery/generic_steps.dm
index 260f92e9efd..ea066277ed3 100644
--- a/code/modules/surgery/generic_steps.dm
+++ b/code/modules/surgery/generic_steps.dm
@@ -1,68 +1,68 @@
-
-//make incision
-/datum/surgery_step/incise
- implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchenknife = 65, /obj/item/weapon/shard = 45)
- time = 24
-
-/datum/surgery_step/incise/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
- user.visible_message("[user] begins to make an incision in [target]'s [parse_zone(target_zone)].")
-
-
-
-//clamp bleeders
-/datum/surgery_step/clamp_bleeders
- implements = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/wirecutters = 60, /obj/item/weapon/cable_coil = 15)
- time = 48
-
-/datum/surgery_step/clamp_bleeders/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
- user.visible_message("[user] begins to clamp bleeders in [target]'s [parse_zone(target_zone)].")
-
-
-//retract skin
-/datum/surgery_step/retract_skin
- implements = list(/obj/item/weapon/retractor = 100, /obj/item/weapon/screwdriver = 45, /obj/item/weapon/wirecutters = 35)
- time = 32
-
-/datum/surgery_step/retract_skin/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
- user.visible_message("[user] begins to retract the skin in [target]'s [parse_zone(target_zone)].")
-
-
-
-//close incision
-/datum/surgery_step/close
- implements = list(/obj/item/weapon/cautery = 100, /obj/item/weapon/weldingtool = 70, /obj/item/weapon/lighter = 45, /obj/item/weapon/match = 20)
- time = 32
-
-/datum/surgery_step/close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
- user.visible_message("[user] begins to mend the incision in [target]'s [parse_zone(target_zone)].")
-
-
-/datum/surgery_step/close/tool_check(mob/user, obj/item/tool)
- if(istype(tool, /obj/item/weapon/cautery))
- return 1
-
- if(istype(tool, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = tool
- if(WT.isOn()) return 1
-
- else if(istype(tool, /obj/item/weapon/lighter))
- var/obj/item/weapon/lighter/L = tool
- if(L.lit) return 1
-
- else if(istype(tool, /obj/item/weapon/match))
- var/obj/item/weapon/match/M = tool
- if(M.lit) return 1
-
- return 0
-
-
-//saw bone
-/datum/surgery_step/saw
- implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/melee/arm_blade = 75, /obj/item/weapon/hatchet = 35, /obj/item/weapon/butch = 25)
- time = 64
-
-/datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
- user.visible_message("[user] begins to saw through the bone in [target]'s [parse_zone(target_zone)].")
-
-
-
+
+//make incision
+/datum/surgery_step/incise
+ implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchenknife = 65, /obj/item/weapon/shard = 45)
+ time = 24
+
+/datum/surgery_step/incise/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] begins to make an incision in [target]'s [parse_zone(target_zone)].")
+
+
+
+//clamp bleeders
+/datum/surgery_step/clamp_bleeders
+ implements = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/wirecutters = 60, /obj/item/stack/cable_coil = 15)
+ time = 48
+
+/datum/surgery_step/clamp_bleeders/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] begins to clamp bleeders in [target]'s [parse_zone(target_zone)].")
+
+
+//retract skin
+/datum/surgery_step/retract_skin
+ implements = list(/obj/item/weapon/retractor = 100, /obj/item/weapon/screwdriver = 45, /obj/item/weapon/wirecutters = 35)
+ time = 32
+
+/datum/surgery_step/retract_skin/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] begins to retract the skin in [target]'s [parse_zone(target_zone)].")
+
+
+
+//close incision
+/datum/surgery_step/close
+ implements = list(/obj/item/weapon/cautery = 100, /obj/item/weapon/weldingtool = 70, /obj/item/weapon/lighter = 45, /obj/item/weapon/match = 20)
+ time = 32
+
+/datum/surgery_step/close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] begins to mend the incision in [target]'s [parse_zone(target_zone)].")
+
+
+/datum/surgery_step/close/tool_check(mob/user, obj/item/tool)
+ if(istype(tool, /obj/item/weapon/cautery))
+ return 1
+
+ if(istype(tool, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = tool
+ if(WT.isOn()) return 1
+
+ else if(istype(tool, /obj/item/weapon/lighter))
+ var/obj/item/weapon/lighter/L = tool
+ if(L.lit) return 1
+
+ else if(istype(tool, /obj/item/weapon/match))
+ var/obj/item/weapon/match/M = tool
+ if(M.lit) return 1
+
+ return 0
+
+
+//saw bone
+/datum/surgery_step/saw
+ implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/melee/arm_blade = 75, /obj/item/weapon/hatchet = 35, /obj/item/weapon/butch = 25)
+ time = 64
+
+/datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] begins to saw through the bone in [target]'s [parse_zone(target_zone)].")
+
+
+
diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm
index 91734c1b63e..bdca49bfde9 100644
--- a/code/modules/surgery/tools.dm
+++ b/code/modules/surgery/tools.dm
@@ -71,6 +71,7 @@
g_amt = 5000
origin_tech = "materials=1;biotech=1"
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
+ hitsound = 'sound/weapons/bladeslice.ogg'
suicide_act(mob/user)
viewers(user) << pick("[user] is slitting \his wrists with [src]! It looks like \he's trying to commit suicide.", \
diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm
index b8fe1897fd3..ab3ce7abfc3 100644
--- a/code/modules/telesci/gps.dm
+++ b/code/modules/telesci/gps.dm
@@ -9,6 +9,7 @@ var/list/GPS_list = list()
origin_tech = "programming=2;engineering=2"
var/gpstag = "COM0"
var/emped = 0
+ var/turf/locked_location
/obj/item/device/gps/New()
..()
@@ -37,6 +38,8 @@ var/list/GPS_list = list()
else
t += "
Set Tag "
t += "
Tag: [gpstag]"
+ if(locked_location && locked_location.loc)
+ t += "
Bluespace coordinates saved: [locked_location.loc]"
for(var/obj/item/device/gps/G in GPS_list)
var/turf/pos = get_turf(G)
diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm
index 2b689bd2290..e1eaf1f19eb 100644
--- a/code/modules/telesci/telepad.dm
+++ b/code/modules/telesci/telepad.dm
@@ -8,6 +8,38 @@
use_power = 1
idle_power_usage = 200
active_power_usage = 5000
+ var/efficiency
+
+/obj/machinery/telepad/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/telesci_pad(null)
+ component_parts += new /obj/item/bluespace_crystal/artificial(null)
+ component_parts += new /obj/item/bluespace_crystal/artificial(null)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ RefreshParts()
+
+/obj/machinery/telepad/RefreshParts()
+ var/E
+ for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
+ E += C.rating
+ efficiency = E
+
+/obj/machinery/telepad/attackby(obj/item/I, mob/user)
+ if(default_deconstruction_screwdriver(user, "pad-idle-o", "pad-idle", I))
+ return
+
+ if(panel_open)
+ if(istype(I, /obj/item/device/multitool))
+ var/obj/item/device/multitool/M = I
+ M.buffer = src
+ user << "You save the data in the [I.name]'s buffer."
+
+ default_deconstruction_crowbar(I)
+
+
//CARGO TELEPAD//
/obj/machinery/telepad_cargo
name = "cargo telepad"
diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm
index b0761e14c37..8c29fb7f0dd 100644
--- a/code/modules/telesci/telesci_computer.dm
+++ b/code/modules/telesci/telesci_computer.dm
@@ -2,6 +2,7 @@
name = "\improper Telepad Control Console"
desc = "Used to teleport objects to and from the telescience telepad."
icon_state = "teleport"
+ circuit = /obj/item/weapon/circuitboard/telesci_console
var/sending = 1
var/obj/machinery/telepad/telepad = null
var/temp_msg = "Telescience control console initialized.
Welcome."
@@ -13,25 +14,30 @@
var/power_off
var/rotation_off
//var/angle_off
+ var/last_target
var/rotation = 0
var/angle = 45
- var/power
+ var/power = 5
// Based on the power used
- var/teleport_cooldown = 0
- var/list/power_options = list(5, 10, 20, 25, 30, 40, 50, 80, 100) // every index requires a bluespace crystal
+ var/teleport_cooldown = 0 // every index requires a bluespace crystal
+ var/list/power_options = list(5, 10, 20, 25, 30, 40, 50, 80, 100)
var/teleporting = 0
var/starting_crystals = 3
+ var/max_crystals = 4
var/list/crystals = list()
+ var/obj/item/device/gps/inserted_gps
/obj/machinery/computer/telescience/New()
..()
- link_telepad()
recalibrate()
/obj/machinery/computer/telescience/Del()
eject()
+ if(inserted_gps)
+ inserted_gps.loc = loc
+ inserted_gps = null
..()
/obj/machinery/computer/telescience/examine()
@@ -40,13 +46,8 @@
/obj/machinery/computer/telescience/initialize()
..()
- link_telepad()
for(var/i = 1; i <= starting_crystals; i++)
crystals += new /obj/item/bluespace_crystal/artificial(null) // starting crystals
- power = power_options[1]
-
-/obj/machinery/computer/telescience/proc/link_telepad()
- telepad = locate() in range(src, 7)
/obj/machinery/computer/telescience/update_icon()
if(stat & BROKEN)
@@ -65,13 +66,25 @@
/obj/machinery/computer/telescience/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/bluespace_crystal))
- if(crystals.len >= power_options.len)
+ if(crystals.len >= max_crystals)
user << "There are not enough crystal slots."
return
user.drop_item()
crystals += W
W.loc = null
user.visible_message("[user] inserts [W] into \the [src]'s crystal slot.")
+ else if(istype(W, /obj/item/device/gps))
+ if(!inserted_gps)
+ inserted_gps = W
+ user.drop_from_inventory(W)
+ W.loc = src
+ user.visible_message("[user] inserts [W] into \the [src]'s GPS device slot.")
+ else if(istype(W, /obj/item/device/multitool))
+ var/obj/item/device/multitool/M = W
+ if(M.buffer && istype(M.buffer, /obj/machinery/telepad))
+ telepad = M.buffer
+ M.buffer = null
+ user << "You upload the data from the [W.name]'s buffer."
else
..()
@@ -84,41 +97,51 @@
interact(user)
/obj/machinery/computer/telescience/interact(mob/user)
-
- var/t = "[temp_msg]
"
- t += "Set Bearing"
- t += "[rotation]°"
- t += "Set Elevation"
- t += "[angle]°"
- t += "Set Power"
- t += ""
-
- for(var/i = 1; i <= power_options.len; i++)
- if(crystals.len < i)
- t += "[power_options[i]]"
- continue
- if(power == power_options[i])
- t += "[power_options[i]]"
- continue
- t += "[power_options[i]]"
-
- t += ""
- t += "Set Sector"
- t += "[z_co ? z_co : "NULL"]"
-
- t += "
Send"
- t += " Receive"
- t += "
Recalibrate Crystals Eject Crystals"
-
- // Information about the last teleport
- t += "
"
- if(!last_tele_data)
- t += "No teleport data found."
+ var/t
+ if(!telepad)
+ in_use = 0 //Yeah so if you deconstruct teleporter while its in the process of shooting it wont disable the console
+ t += "No telepad located.
Please add telepad data.
"
else
- t += "Source Location: ([last_tele_data.src_x], [last_tele_data.src_y])
"
- //t += "Distance: [round(last_tele_data.distance, 0.1)]m
"
- t += "Time: [round(last_tele_data.time, 0.1)] secs
"
- t += ""
+ if(inserted_gps)
+ t += "Eject GPS"
+ t += "Set GPS memory"
+ else
+ t += "Eject GPS"
+ t += "Set GPS memory"
+ t += "[temp_msg]
"
+ t += "Set Bearing"
+ t += "[rotation]°"
+ t += "Set Elevation"
+ t += "[angle]°"
+ t += "Set Power"
+ t += ""
+
+ for(var/i = 1; i <= power_options.len; i++)
+ if(crystals.len + telepad.efficiency < i)
+ t += "[power_options[i]]"
+ continue
+ if(power == power_options[i])
+ t += "[power_options[i]]"
+ continue
+ t += "[power_options[i]]"
+ t += ""
+
+ t += "Set Sector"
+ t += "[z_co ? z_co : "NULL"]"
+
+ t += "
Send"
+ t += " Receive"
+ t += "
Recalibrate Crystals Eject Crystals"
+
+ // Information about the last teleport
+ t += "
"
+ if(!last_tele_data)
+ t += "No teleport data found."
+ else
+ t += "Source Location: ([last_tele_data.src_x], [last_tele_data.src_y])
"
+ //t += "Distance: [round(last_tele_data.distance, 0.1)]m
"
+ t += "Time: [round(last_tele_data.time, 0.1)] secs
"
+ t += ""
var/datum/browser/popup = new(user, "telesci", name, 300, 500)
popup.set_content(t)
@@ -162,6 +185,7 @@
var/spawn_time = round(proj_data.time) * 10
var/turf/target = locate(trueX, trueY, z_co)
+ last_target = target
var/area/A = get_area(target)
flick("pad-beam", telepad)
@@ -287,6 +311,12 @@
/obj/machinery/computer/telescience/Topic(href, href_list)
if(..())
return
+ if(!telepad)
+ updateDialog()
+ return
+ if(telepad.panel_open)
+ temp_msg = "Telepad undergoing physical maintenance operations."
+
if(href_list["setrotation"])
var/new_rot = input("Please input desired bearing in degrees.", name, rotation) as num
if(..()) // Check after we input a value, as they could've moved after they entered something
@@ -304,7 +334,7 @@
var/index = href_list["setpower"]
index = text2num(index)
if(index != null && power_options[index])
- if(crystals.len >= index)
+ if(crystals.len + telepad.efficiency >= index)
power = power_options[index]
if(href_list["setz"])
@@ -313,6 +343,17 @@
return
z_co = Clamp(round(new_z), 1, 10)
+ if(href_list["ejectGPS"])
+ inserted_gps.loc = loc
+ inserted_gps = null
+
+ if(href_list["setMemory"])
+ if(last_target)
+ inserted_gps.locked_location = last_target
+ temp_msg = "Location saved."
+ else
+ temp_msg = "ERROR!
No data stored."
+
if(href_list["send"])
sending = 1
teleport(usr)
diff --git a/code/unused/Agouri_stuff.dm b/code/unused/Agouri_stuff.dm
index de3fa1a031e..b567de3b53e 100644
--- a/code/unused/Agouri_stuff.dm
+++ b/code/unused/Agouri_stuff.dm
@@ -1,1949 +1,1949 @@
-/*
-/obj/vehicle/airtight
- //inner atmos
- var/use_internal_tank = 0
- var/internal_tank_valve = ONE_ATMOSPHERE
- var/obj/machinery/portable_atmospherics/canister/internal_tank
- var/datum/gas_mixture/cabin_air
- var/obj/machinery/atmospherics/portables_connector/connected_port = null
-
- var/datum/global_iterator/pr_int_temp_processor //normalizes internal air mixture temperature
- var/datum/global_iterator/pr_give_air //moves air from tank to cabin
-
-
-/obj/vehicle/airtight/New()
- ..()
- src.add_airtank()
- src.add_cabin()
- src.add_airtight_iterators()
-
-
-
-
-//######################################### Helpers for airtight vehicles #########################################
-
-/obj/vehicle/airtight/proc/add_cabin()
- cabin_air = new
- cabin_air.temperature = T20C
- cabin_air.volume = 200
- cabin_air.oxygen = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
- cabin_air.nitrogen = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
- return cabin_air
-
-/obj/vehicle/airtight/proc/add_airtank()
- internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src)
- return internal_tank
-
-/obj/vehicle/airtight/proc/add_airtight_iterators()
- pr_int_temp_processor = new /datum/global_iterator/vehicle_preserve_temp(list(src))
- pr_give_air = new /datum/global_iterator/vehicle_tank_give_air(list(src))
-
-
-//######################################### Specific datums for airtight vehicles #################################
-
-
-/datum/global_iterator/vehicle_preserve_temp //normalizing cabin air temperature to 20 degrees celsium
- delay = 20
-
- process(var/obj/vehicle/airtight/V)
- if(V.cabin_air && V.cabin_air.return_volume() > 0)
- var/delta = V.cabin_air.temperature - T20C
- V.cabin_air.temperature -= max(-10, min(10, round(delta/4,0.1)))
- return
-
-
-/datum/global_iterator/vehicle_tank_give_air
- delay = 15
-
- process(var/obj/vehicle/airtight/V)
- if(V.internal_tank)
- var/datum/gas_mixture/tank_air = V.internal_tank.return_air()
- var/datum/gas_mixture/cabin_air = V.cabin_air
-
- var/release_pressure = V.internal_tank_valve
- var/cabin_pressure = cabin_air.return_pressure()
- var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2)
- var/transfer_moles = 0
- if(pressure_delta > 0) //cabin pressure lower than release pressure
- if(tank_air.return_temperature() > 0)
- transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
- var/datum/gas_mixture/removed = tank_air.remove(transfer_moles)
- cabin_air.merge(removed)
- else if(pressure_delta < 0) //cabin pressure higher than release pressure
- var/datum/gas_mixture/t_air = V.get_turf_air()
- pressure_delta = cabin_pressure - release_pressure
- if(t_air)
- pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta)
- if(pressure_delta > 0) //if location pressure is lower than cabin pressure
- transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
- var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles)
- if(t_air)
- t_air.merge(removed)
- else //just delete the cabin gas, we're in space or some shit
- del(removed)
- else
- return stop()
- return
-
-
-//######################################### Atmospherics for vehicles #############################################
-
-
-/obj/vehicle/proc/get_turf_air()
- var/turf/T = get_turf(src)
- if(T)
- . = T.return_air()
- return
-
-/obj/vehicle/airtight/remove_air(amount)
- if(use_internal_tank)
- return cabin_air.remove(amount)
- else
- var/turf/T = get_turf(src)
- if(T)
- return T.remove_air(amount)
- return
-
-/obj/vehicle/airtight/return_air()
- if(use_internal_tank)
- return cabin_air
- return get_turf_air()
-
-/obj/vehicle/airtight/proc/return_pressure()
- . = 0
- if(use_internal_tank)
- . = cabin_air.return_pressure()
- else
- var/datum/gas_mixture/t_air = get_turf_air()
- if(t_air)
- . = t_air.return_pressure()
- return
-
-
-/obj/vehicle/airtight/proc/return_temperature()
- . = 0
- if(use_internal_tank)
- . = cabin_air.return_temperature()
- else
- var/datum/gas_mixture/t_air = get_turf_air()
- if(t_air)
- . = t_air.return_temperature()
- return
-
-/obj/vehicle/airtight/proc/connect(obj/machinery/atmospherics/portables_connector/new_port)
- //Make sure not already connected to something else
- if(connected_port || !new_port || new_port.connected_device)
- return 0
-
- //Make sure are close enough for a valid connection
- if(new_port.loc != src.loc)
- return 0
-
- //Perform the connection
- connected_port = new_port
- connected_port.connected_device = src
-
- //Actually enforce the air sharing
- var/datum/pipe_network/network = connected_port.return_network(src)
- if(network && !(internal_tank.return_air() in network.gases))
- network.gases += internal_tank.return_air()
- network.update = 1
- log_message("Vehicle airtank connected to external port.")
- return 1
-
-/obj/vehicle/airtight/proc/disconnect()
- if(!connected_port)
- return 0
-
- var/datum/pipe_network/network = connected_port.return_network(src)
- if(network)
- network.gases -= internal_tank.return_air()
-
- connected_port.connected_device = null
- connected_port = null
- src.log_message("Vehicle airtank disconnected from external port.")
- return 1
-
-
-
-
-/////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////
-
-
-
-/obj/vehicle
- name = "Vehicle"
- icon = 'icons/vehicles/vehicles.dmi'
- density = 1
- anchored = 1
- unacidable = 1 //To avoid the pilot-deleting shit that came with mechas
- layer = MOB_LAYER
- //var/can_move = 1
- var/mob/living/carbon/occupant = null
- //var/step_in = 10 //make a step in step_in/10 sec.
- //var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South.
- //var/step_energy_drain = 10
- var/health = 300 //health is health
- //var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
- //the values in this list show how much damage will pass through, not how much will be absorbed.
- var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1)
- var/obj/item/weapon/cell/cell //Our power source
- var/state = 0
- var/list/log = new
- var/last_message = 0
- var/add_req_access = 1
- var/maint_access = 1
- //var/dna //dna-locking the mech
- var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference
- var/datum/effect/effect/system/spark_spread/spark_system = new
- var/lights = 0
- var/lights_power = 6
-
- //inner atmos //These go in airtight.dm, not all vehicles are space-faring -Agouri
- //var/use_internal_tank = 0
- //var/internal_tank_valve = ONE_ATMOSPHERE
- //var/obj/machinery/portable_atmospherics/canister/internal_tank
- //var/datum/gas_mixture/cabin_air
- //var/obj/machinery/atmospherics/portables_connector/connected_port = null
-
- var/obj/item/device/radio/radio = null
-
- var/max_temperature = 2500
- //var/internal_damage_threshold = 50 //health percentage below which internal damage is possible
- var/internal_damage = 0 //contains bitflags
-
- var/list/operation_req_access = list()//required access level for mecha operation
- var/list/internals_req_access = list(access_engine,access_robotics)//required access level to open cell compartment
-
- //var/datum/global_iterator/pr_int_temp_processor //normalizes internal air mixture temperature //In airtight.dm you go -Agouri
- var/datum/global_iterator/pr_inertial_movement //controls intertial movement in spesss
-
- //var/datum/global_iterator/pr_give_air //moves air from tank to cabin //Y-you too -Agouri
-
- var/datum/global_iterator/pr_internal_damage //processes internal damage
-
-
- var/wreckage
-
- var/list/equipment = new
- var/obj/selected
- //var/max_equip = 3
-
- var/datum/events/events
-
-
-
-/obj/vehicle/New()
- ..()
- events = new
- icon_state += "-unmanned"
- add_radio()
- //add_cabin() //No cabin for non-airtights
-
- spark_system.set_up(2, 0, src)
- spark_system.attach(src)
- add_cell()
- add_iterators()
- removeVerb(/obj/mecha/verb/disconnect_from_port)
- removeVerb(/atom/movable/verb/pull)
- log_message("[src.name]'s functions initialised. Work protocols active - Entering IDLE mode.")
- loc.Entered(src)
- return
-
-
-//################ Helpers ###########################################################
-
-
-/obj/vehicle/proc/removeVerb(verb_path)
- verbs -= verb_path
-
-/obj/vehicle/proc/addVerb(verb_path)
- verbs += verb_path
-
-/*/obj/vehicle/proc/add_airtank() //In airtight.dm -Agouri
- internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src)
- return internal_tank*/
-
-/obj/vehicle/proc/add_cell(var/obj/item/weapon/cell/C=null)
- if(C)
- C.forceMove(src)
- cell = C
- return
- cell = new(src)
- cell.charge = 15000
- cell.maxcharge = 15000
-
-/*/obj/vehicle/proc/add_cabin() //In airtight.dm -Agouri
- cabin_air = new
- cabin_air.temperature = T20C
- cabin_air.volume = 200
- cabin_air.oxygen = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
- cabin_air.nitrogen = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
- return cabin_air*/
-
-/obj/vehicle/proc/add_radio()
- radio = new(src)
- radio.name = "[src] radio"
- radio.icon = icon
- radio.icon_state = icon_state
- radio.subspace_transmission = 1
-
-/obj/vehicle/proc/add_iterators()
- pr_inertial_movement = new /datum/global_iterator/vehicle_intertial_movement(null,0)
- //pr_internal_damage = new /datum/global_iterator/vehicle_internal_damage(list(src),0)
- //pr_int_temp_processor = new /datum/global_iterator/vehicle_preserve_temp(list(src)) //In airtight.dm's add_airtight_iterators -Agouri
- //pr_give_air = new /datum/global_iterator/vehicle_tank_give_air(list(src) //Same here -Agouri
-
-/obj/vehicle/proc/check_for_support()
- if(locate(/obj/structure/grille, orange(1, src)) || locate(/obj/structure/lattice, orange(1, src)) || locate(/turf/simulated, orange(1, src)) || locate(/turf/unsimulated, orange(1, src)))
- return 1
- else
- return 0
-
-//################ Logs and messages ############################################
-
-
-/obj/vehicle/proc/log_message(message as text,red=null)
- log.len++
- log[log.len] = list("time"=world.timeofday,"message"="[red?"":null][message][red?"":null]")
- return log.len
-
-
-
-//################ Global Iterator Datums ######################################
-
-
-/datum/global_iterator/vehicle_intertial_movement //inertial movement in space
- delay = 7
-
- process(var/obj/vehicle/V as obj, direction)
- if(direction)
- if(!step(V, direction)||V.check_for_support())
- src.stop()
- else
- src.stop()
- return
-
-
-/datum/global_iterator/mecha_internal_damage // processing internal damage
-
- process(var/obj/mecha/mecha)
- if(!mecha.hasInternalDamage())
- return stop()
- if(mecha.hasInternalDamage(MECHA_INT_FIRE))
- if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5))
- mecha.clearInternalDamage(MECHA_INT_FIRE)
- if(mecha.internal_tank)
- if(mecha.internal_tank.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)))
- mecha.setInternalDamage(MECHA_INT_TANK_BREACH)
- var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air()
- if(int_tank_air && int_tank_air.return_volume()>0) //heat the air_contents
- int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15))
- if(mecha.cabin_air && mecha.cabin_air.return_volume()>0)
- mecha.cabin_air.temperature = min(6000+T0C, mecha.cabin_air.return_temperature()+rand(10,15))
- if(mecha.cabin_air.return_temperature()>mecha.max_temperature/2)
- mecha.take_damage(4/round(mecha.max_temperature/mecha.cabin_air.return_temperature(),0.1),"fire")
- if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum
- mecha.pr_int_temp_processor.stop()
- if(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)) //remove some air from internal tank
- if(mecha.internal_tank)
- var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air()
- var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10)
- if(mecha.loc && hascall(mecha.loc,"assume_air"))
- mecha.loc.assume_air(leaked_gas)
- else
- del(leaked_gas)
- if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT))
- if(mecha.get_charge())
- mecha.spark_system.start()
- mecha.cell.charge -= min(20,mecha.cell.charge)
- mecha.cell.maxcharge -= min(20,mecha.cell.maxcharge)
- return
-
-
-*/
-
-
-
-
-
-/////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////
-
-
-
-
-/*/turf/DblClick()
- if(istype(usr, /mob/living/silicon/ai))
- return move_camera_by_click()
- if(usr.stat || usr.restrained() || usr.lying)
- return ..()
-
- if(usr.hand && istype(usr.l_hand, /obj/item/weapon/flamethrower))
- var/turflist = getline(usr,src)
- var/obj/item/weapon/flamethrower/F = usr.l_hand
- F.flame_turf(turflist)
- else if(!usr.hand && istype(usr.r_hand, /obj/item/weapon/flamethrower))
- var/turflist = getline(usr,src)
- var/obj/item/weapon/flamethrower/F = usr.r_hand
- F.flame_turf(turflist)
-
- return ..()
-
-/turf/New()
- ..()
- for(var/atom/movable/AM as mob|obj in src)
- spawn( 0 )
- src.Entered(AM)
- return
- return
-
-/turf/ex_act(severity)
- return 0
-
-
-/turf/bullet_act(var/obj/item/projectile/Proj)
- if(istype(Proj ,/obj/item/projectile/beam/pulse))
- src.ex_act(2)
- ..()
- return 0
-
-/turf/bullet_act(var/obj/item/projectile/Proj)
- if(istype(Proj ,/obj/item/projectile/bullet/gyro))
- explosion(src, -1, 0, 2)
- ..()
- return 0
-
-/turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area)
- if (!mover || !isturf(mover.loc))
- return 1
-
-
- //First, check objects to block exit that are not on the border
- for(var/obj/obstacle in mover.loc)
- if((obstacle.flags & ~ON_BORDER) && (mover != obstacle) && (forget != obstacle))
- if(!obstacle.CheckExit(mover, src))
- mover.Bump(obstacle, 1)
- return 0
-
- //Now, check objects to block exit that are on the border
- for(var/obj/border_obstacle in mover.loc)
- if((border_obstacle.flags & ON_BORDER) && (mover != border_obstacle) && (forget != border_obstacle))
- if(!border_obstacle.CheckExit(mover, src))
- mover.Bump(border_obstacle, 1)
- return 0
-
- //Next, check objects to block entry that are on the border
- for(var/obj/border_obstacle in src)
- if(border_obstacle.flags & ON_BORDER)
- if(!border_obstacle.CanPass(mover, mover.loc, 1, 0) && (forget != border_obstacle))
- mover.Bump(border_obstacle, 1)
- return 0
-
- //Then, check the turf itself
- if (!src.CanPass(mover, src))
- mover.Bump(src, 1)
- return 0
-
- //Finally, check objects/mobs to block entry that are not on the border
- for(var/atom/movable/obstacle in src)
- if(obstacle.flags & ~ON_BORDER)
- if(!obstacle.CanPass(mover, mover.loc, 1, 0) && (forget != obstacle))
- mover.Bump(obstacle, 1)
- return 0
- return 1 //Nothing found to block so return success!
-
-
-/turf/Entered(atom/movable/M as mob|obj)
- var/loopsanity = 100
- if(ismob(M))
- if(!M:lastarea)
- M:lastarea = get_area(M.loc)
- if(M:lastarea.has_gravity == 0)
- inertial_drift(M)
-
- /*
- if(M.flags & NOGRAV)
- inertial_drift(M)
- */
-
-
-
- else if(!istype(src, /turf/space))
- M:inertia_dir = 0
- ..()
- var/objects = 0
- for(var/atom/A as mob|obj|turf|area in src)
- if(objects > loopsanity) break
- objects++
- spawn( 0 )
- if ((A && M))
- A.HasEntered(M, 1)
- return
- objects = 0
- for(var/atom/A as mob|obj|turf|area in range(1))
- if(objects > loopsanity) break
- objects++
- spawn( 0 )
- if ((A && M))
- A.HasProximity(M, 1)
- return
- return
-
-/turf/proc/inertial_drift(atom/movable/A as mob|obj)
- if(!(A.last_move)) return
- if((istype(A, /mob/) && src.x > 2 && src.x < (world.maxx - 1) && src.y > 2 && src.y < (world.maxy-1)))
- var/mob/M = A
- if(M.Process_Spacemove(1))
- M.inertia_dir = 0
- return
- spawn(5)
- if((M && !(M.anchored) && (M.loc == src)))
- if(M.inertia_dir)
- step(M, M.inertia_dir)
- return
- M.inertia_dir = M.last_move
- step(M, M.inertia_dir)
- return
-
-/turf/proc/levelupdate()
- for(var/obj/O in src)
- if(O.level == 1)
- O.hide(src.intact)
-
-// override for space turfs, since they should never hide anything
-/turf/space/levelupdate()
- for(var/obj/O in src)
- if(O.level == 1)
- O.hide(0)
-
-// Removes all signs of lattice on the pos of the turf -Donkieyo
-/turf/proc/RemoveLattice()
- var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
- if(L)
- del L
-
-/turf/proc/ReplaceWithFloor(explode=0)
- var/prior_icon = icon_old
- var/old_dir = dir
-
- var/turf/simulated/floor/W = new /turf/simulated/floor( locate(src.x, src.y, src.z) )
-
- W.RemoveLattice()
- W.dir = old_dir
- if(prior_icon) W.icon_state = prior_icon
- else W.icon_state = "floor"
-
- if (!explode)
- W.opacity = 1
- W.sd_SetOpacity(0)
- //This is probably gonna make lighting go a bit wonky in bombed areas, but sd_SetOpacity was the primary reason bombs have been so laggy. --NEO
- W.levelupdate()
- return W
-
-/turf/proc/ReplaceWithPlating()
- var/prior_icon = icon_old
- var/old_dir = dir
-
- var/turf/simulated/floor/plating/W = new /turf/simulated/floor/plating( locate(src.x, src.y, src.z) )
-
- W.RemoveLattice()
- W.dir = old_dir
- if(prior_icon) W.icon_state = prior_icon
- else W.icon_state = "plating"
- W.opacity = 1
- W.sd_SetOpacity(0)
- W.levelupdate()
- return W
-
-/turf/proc/ReplaceWithEngineFloor()
- var/old_dir = dir
-
- var/turf/simulated/floor/engine/E = new /turf/simulated/floor/engine( locate(src.x, src.y, src.z) )
-
- E.dir = old_dir
- E.icon_state = "engine"
-
-/turf/simulated/Entered(atom/A, atom/OL)
- if (istype(A,/mob/living/carbon))
- var/mob/living/carbon/M = A
- if(M.lying) return
- if(istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- if(istype(H.shoes, /obj/item/clothing/shoes/clown_shoes))
- if(H.m_intent == "run")
- if(H.footstep >= 2)
- H.footstep = 0
- else
- H.footstep++
- if(H.footstep == 0)
- playsound(src, "clownstep", 50, 1) // this will get annoying very fast.
- else
- playsound(src, "clownstep", 20, 1)
-
- switch (src.wet)
- if(1)
- if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes
- if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP))
- M.stop_pulling()
- step(M, M.dir)
- M << "\blue You slipped on the wet floor!"
- playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
- M.Stun(8)
- M.Weaken(5)
- else
- M.inertia_dir = 0
- return
- else if(!istype(M, /mob/living/carbon/slime))
- if (M.m_intent == "run")
- M.stop_pulling()
- step(M, M.dir)
- M << "\blue You slipped on the wet floor!"
- playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
- M.Stun(8)
- M.Weaken(5)
- else
- M.inertia_dir = 0
- return
-
- if(2) //lube
- if(!istype(M, /mob/living/carbon/slime))
- M.stop_pulling()
- step(M, M.dir)
- spawn(1) step(M, M.dir)
- spawn(2) step(M, M.dir)
- spawn(3) step(M, M.dir)
- spawn(4) step(M, M.dir)
- M.take_organ_damage(2) // Was 5 -- TLE
- M << "\blue You slipped on the floor!"
- playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
- M.Weaken(10)
-
- ..()
-
-/turf/proc/ReplaceWithSpace()
- var/old_dir = dir
- var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) )
- S.dir = old_dir
- return S
-
-/turf/proc/ReplaceWithLattice()
- var/old_dir = dir
- var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) )
- S.dir = old_dir
- new /obj/structure/lattice( locate(src.x, src.y, src.z) )
- return S
-
-/turf/proc/ReplaceWithWall()
- var/old_icon = icon_state
- var/turf/simulated/wall/S = new /turf/simulated/wall( locate(src.x, src.y, src.z) )
- S.icon_old = old_icon
- S.opacity = 0
- S.sd_NewOpacity(1)
- return S
-
-/turf/proc/ReplaceWithRWall()
- var/old_icon = icon_state
- var/turf/simulated/wall/r_wall/S = new /turf/simulated/wall/r_wall( locate(src.x, src.y, src.z) )
- S.icon_old = old_icon
- S.opacity = 0
- S.sd_NewOpacity(1)
- return S
-
-/turf/simulated/wall/New()
- ..()
-
-/turf/simulated/wall/proc/dismantle_wall(devastated=0, explode=0)
- if(istype(src,/turf/simulated/wall/r_wall))
- if(!devastated)
- playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
- new /obj/structure/girder/reinforced(src)
- new /obj/item/stack/sheet/plasteel( src )
- else
- new /obj/item/stack/sheet/metal( src )
- new /obj/item/stack/sheet/metal( src )
- new /obj/item/stack/sheet/plasteel( src )
- else if(istype(src,/turf/simulated/wall/cult))
- if(!devastated)
- playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
- new /obj/effect/decal/remains/human(src)
- else
- new /obj/effect/decal/remains/human(src)
-
- else
- if(!devastated)
- playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
- new /obj/structure/girder(src)
- new /obj/item/stack/sheet/metal( src )
- new /obj/item/stack/sheet/metal( src )
- else
- new /obj/item/stack/sheet/metal( src )
- new /obj/item/stack/sheet/metal( src )
- new /obj/item/stack/sheet/metal( src )
-
- ReplaceWithPlating(explode)
-
-/turf/simulated/wall/examine()
- set src in oview(1)
-
- usr << "It looks like a regular wall."
- return
-
-/turf/simulated/wall/ex_act(severity)
- switch(severity)
- if(1.0)
- //SN src = null
- src.ReplaceWithSpace()
- del(src)
- return
- if(2.0)
- if (prob(50))
- dismantle_wall(0,1)
- else
- dismantle_wall(1,1)
- if(3.0)
- var/proba
- if (istype(src, /turf/simulated/wall/r_wall))
- proba = 15
- else
- proba = 40
- if (prob(proba))
- dismantle_wall(0,1)
- else
- return
-
-/turf/simulated/wall/blob_act()
- if(prob(50))
- dismantle_wall()
-
-/turf/simulated/wall/attack_paw(mob/user as mob)
- if ((user.mutations & HULK))
- if (prob(40))
- usr << text("\blue You smash through the wall.")
- dismantle_wall(1)
- return
- else
- usr << text("\blue You punch the wall.")
- return
-
- return src.attack_hand(user)
-
-
-/turf/simulated/wall/attack_animal(mob/living/simple_animal/M as mob)
- if(M.wall_smash)
- if (istype(src, /turf/simulated/wall/r_wall))
- M << text("\blue This wall is far too strong for you to destroy.")
- return
- else
- if (prob(40))
- M << text("\blue You smash through the wall.")
- dismantle_wall(1)
- return
- else
- M << text("\blue You smash against the wall.")
- return
-
- M << "\blue You push the wall but nothing happens!"
- return
-
-/turf/simulated/wall/attack_hand(mob/user as mob)
- if ((user.mutations & HULK))
- if (prob(40))
- usr << text("\blue You smash through the wall.")
- dismantle_wall(1)
- return
- else
- usr << text("\blue You punch the wall.")
- return
-
- user << "\blue You push the wall but nothing happens!"
- playsound(src.loc, 'sound/weapons/Genhit.ogg', 25, 1)
- src.add_fingerprint(user)
- return
-
-/turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob)
-
- if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
- usr << "\red You don't have the dexterity to do this!"
- return
-
- if (istype(W, /obj/item/weapon/weldingtool) && W:welding)
- var/turf/T = get_turf(user)
- if (!( istype(T, /turf) ))
- return
-
- if (thermite)
- var/obj/effect/overlay/O = new/obj/effect/overlay( src )
- O.name = "Thermite"
- O.desc = "Looks hot."
- O.icon = 'icons/effects/fire.dmi'
- O.icon_state = "2"
- O.anchored = 1
- O.density = 1
- O.layer = 5
- var/turf/simulated/floor/F = ReplaceWithPlating()
- F.burn_tile()
- F.icon_state = "wall_thermite"
- user << "\red The thermite melts the wall."
- spawn(100) del(O)
- F.sd_LumReset()
- return
-
- if (W:remove_fuel(0,user))
- W:welding = 2
- user << "\blue Now disassembling the outer wall plating."
- playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
- sleep(100)
- if (W && istype(src, /turf/simulated/wall))
- if ((get_turf(user) == T && user.equipped() == W))
- user << "\blue You disassembled the outer wall plating."
- dismantle_wall()
- W:welding = 1
- else
- user << "\blue You need more welding fuel to complete this task."
- return
-
- else if (istype(W, /obj/item/weapon/pickaxe/plasmacutter))
- var/turf/T = user.loc
- if (!( istype(T, /turf) ))
- return
-
- if (thermite)
- var/obj/effect/overlay/O = new/obj/effect/overlay( src )
- O.name = "Thermite"
- O.desc = "Looks hot."
- O.icon = 'icons/effects/fire.dmi'
- O.icon_state = "2"
- O.anchored = 1
- O.density = 1
- O.layer = 5
- var/turf/simulated/floor/F = ReplaceWithPlating()
- F.burn_tile()
- F.icon_state = "wall_thermite"
- user << "\red The thermite melts the wall."
- spawn(100) del(O)
- F.sd_LumReset()
- return
-
- else
- user << "\blue Now disassembling the outer wall plating."
- playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
- sleep(60)
- if (W && istype(src, /turf/simulated/wall))
- if ((get_turf(user) == T && user.equipped() == W))
- user << "\blue You disassembled the outer wall plating."
- dismantle_wall()
- for(var/mob/O in viewers(user, 5))
- O.show_message(text("\blue The wall was sliced apart by []!", user), 1, text("\red You hear metal being sliced apart."), 2)
- return
-
- else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill))
- var/turf/T = user.loc
- user << "\blue Now drilling through wall."
- sleep(60)
- if (W && istype(src, /turf/simulated/wall))
- if ((user.loc == T && user.equipped() == W))
- dismantle_wall(1)
- for(var/mob/O in viewers(user, 5))
- O.show_message(text("\blue The wall was drilled apart by []!", user), 1, text("\red You hear metal being drilled appart."), 2)
- return
-
- else if(istype(W, /obj/item/weapon/melee/energy/blade))
- var/turf/T = user.loc
- user << "\blue Now slicing through wall."
- W:spark_system.start()
- playsound(src.loc, "sparks", 50, 1)
- sleep(70)
- if (W && istype(src, /turf/simulated/wall))
- if ((user.loc == T && user.equipped() == W))
- W:spark_system.start()
- playsound(src.loc, "sparks", 50, 1)
- playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
- dismantle_wall(1)
- for(var/mob/O in viewers(user, 5))
- O.show_message(text("\blue The wall was sliced apart by []!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
- return
-
- else if(istype(W,/obj/item/apc_frame))
- var/obj/item/apc_frame/AH = W
- AH.try_build(src)
- else if(istype(W,/obj/item/weapon/contraband/poster))
- var/obj/item/weapon/contraband/poster/P = W
- if(P.resulting_poster)
- var/check = 0
- var/stuff_on_wall = 0
- for( var/obj/O in src.contents) //Let's see if it already has a poster on it or too much stuff
- if(istype(O,/obj/effect/decal/poster))
- check = 1
- break
- stuff_on_wall++
- if(stuff_on_wall==3)
- check = 1
- break
-
- if(check)
- user << "The wall is far too cluttered to place a poster!"
- return
-
- user << "You start placing the poster on the wall..." //Looks like it's uncluttered enough. Place the poster.
-
- P.resulting_poster.loc = src
- var/temp = P.resulting_poster.icon_state
- var/temp_loc = user.loc
- P.resulting_poster.icon_state = "poster_being_set"
- playsound(P.resulting_poster.loc, 'sound/items/poster_being_created.ogg', 100, 1)
- sleep(24)
-
- if(user.loc == temp_loc)//Let's check if he still is there
- user << "You place the poster!"
- P.resulting_poster.icon_state = temp
- src.contents += P.resulting_poster
- del(P)
- else
- user << "You stop placing the poster."
- P.resulting_poster.loc = P
- P.resulting_poster.icon_state = temp
- else
- return attack_hand(user)
- return
-
-
-/turf/simulated/wall/r_wall/attackby(obj/item/W as obj, mob/user as mob)
-
- if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
- usr << "\red You don't have the dexterity to do this!"
- return
-
- if(!istype(src, /turf/simulated/wall/r_wall))
- return // this may seem stupid and redundant but apparently floors can call this attackby() proc, it was spamming shit up. -- Doohl
-
-
- if (istype(W, /obj/item/weapon/weldingtool) && W:welding)
- W:eyecheck(user)
- var/turf/T = user.loc
- if (!( istype(T, /turf) ))
- return
-
- if (thermite)
- var/obj/effect/overlay/O = new/obj/effect/overlay( src )
- O.name = "Thermite"
- O.desc = "Looks hot."
- O.icon = 'icons/effects/fire.dmi'
- O.icon_state = "2"
- O.anchored = 1
- O.density = 1
- O.layer = 5
- var/turf/simulated/floor/F = ReplaceWithPlating()
- F.burn_tile()
- F.icon_state = "wall_thermite"
- user << "\red The thermite melts the wall."
- spawn(100) del(O)
- F.sd_LumReset()
- return
-
- if (src.d_state == 2)
- W:welding = 2
- user << "\blue Slicing metal cover."
- playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
- sleep(60)
- if ((user.loc == T && user.equipped() == W))
- src.d_state = 3
- user << "\blue You removed the metal cover."
- W:welding = 1
-
- else if (src.d_state == 5)
- W:welding = 2
- user << "\blue Removing support rods."
- playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
- sleep(100)
- if ((user.loc == T && user.equipped() == W))
- src.d_state = 6
- new /obj/item/stack/rods( src )
- user << "\blue You removed the support rods."
- W:welding = 1
-
- else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
- var/turf/T = user.loc
- if (!( istype(T, /turf) ))
- return
-
- if (thermite)
- var/obj/effect/overlay/O = new/obj/effect/overlay( src )
- O.name = "Thermite"
- O.desc = "Looks hot."
- O.icon = 'icons/effects/fire.dmi'
- O.icon_state = "2"
- O.anchored = 1
- O.density = 1
- O.layer = 5
- var/turf/simulated/floor/F = ReplaceWithPlating()
- F.burn_tile()
- F.icon_state = "wall_thermite"
- user << "\red The thermite melts the wall."
- spawn(100) del(O)
- F.sd_LumReset()
- return
-
- if (src.d_state == 2)
- user << "\blue Slicing metal cover."
- playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
- sleep(40)
- if ((user.loc == T && user.equipped() == W))
- src.d_state = 3
- user << "\blue You removed the metal cover."
-
- else if (src.d_state == 5)
- user << "\blue Removing support rods."
- playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
- sleep(70)
- if ((user.loc == T && user.equipped() == W))
- src.d_state = 6
- new /obj/item/stack/rods( src )
- user << "\blue You removed the support rods."
-
- else if(istype(W, /obj/item/weapon/melee/energy/blade))
- user << "\blue This wall is too thick to slice through. You will need to find a different path."
- return
-
- else if (istype(W, /obj/item/weapon/wrench))
- if (src.d_state == 4)
- var/turf/T = user.loc
- user << "\blue Detaching support rods."
- playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
- sleep(40)
- if ((user.loc == T && user.equipped() == W))
- src.d_state = 5
- user << "\blue You detach the support rods."
-
- else if (istype(W, /obj/item/weapon/wirecutters))
- if (src.d_state == 0)
- playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
- src.d_state = 1
- new /obj/item/stack/rods( src )
-
- else if (istype(W, /obj/item/weapon/screwdriver))
- if (src.d_state == 1)
- var/turf/T = user.loc
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
- user << "\blue Removing support lines."
- sleep(40)
- if ((user.loc == T && user.equipped() == W))
- src.d_state = 2
- user << "\blue You removed the support lines."
-
- else if (istype(W, /obj/item/weapon/crowbar))
-
- if (src.d_state == 3)
- var/turf/T = user.loc
- user << "\blue Prying cover off."
- playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
- sleep(100)
- if ((user.loc == T && user.equipped() == W))
- src.d_state = 4
- user << "\blue You removed the cover."
-
- else if (src.d_state == 6)
- var/turf/T = user.loc
- user << "\blue Prying outer sheath off."
- playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
- sleep(100)
- if(src)
- if ((user.loc == T && user.equipped() == W))
- user << "\blue You removed the outer sheath."
- dismantle_wall()
- return
-
- else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill))
- var/turf/T = user.loc
- user << "\blue You begin to drill though, this will take some time."
- sleep(200)
- if(src)
- if ((user.loc == T && user.equipped() == W))
- user << "\blue Your drill tears though the reinforced plating."
- dismantle_wall()
- return
-
- else if ((istype(W, /obj/item/stack/sheet/metal)) && (src.d_state))
- var/turf/T = user.loc
- user << "\blue Repairing wall."
- sleep(100)
- if ((user.loc == T && user.equipped() == W))
- src.d_state = 0
- src.icon_state = initial(src.icon_state)
- user << "\blue You repaired the wall."
- if (W:amount > 1)
- W:amount--
- else
- del(W)
-
- else if(istype(W,/obj/item/weapon/contraband/poster))
- var/obj/item/weapon/contraband/poster/P = W
- if(P.resulting_poster)
- var/check = 0
- var/stuff_on_wall = 0
- for( var/obj/O in src.contents) //Let's see if it already has a poster on it or too much stuff
- if(istype(O,/obj/effect/decal/poster))
- check = 1
- break
- stuff_on_wall++
- if(stuff_on_wall==3)
- check = 1
- break
-
- if(check)
- user << "The wall is far too cluttered to place a poster!"
- return
-
- user << "You start placing the poster on the wall..." //Looks like it's uncluttered enough. Place the poster.
-
- P.resulting_poster.loc = src
- var/temp = P.resulting_poster.icon_state
- var/temp_loc = user.loc
- P.resulting_poster.icon_state = "poster_being_set"
- playsound(P.resulting_poster.loc, 'sound/items/poster_being_created.ogg', 100, 1)
- sleep(24)
-
- if(user.loc == temp_loc)//Let's check if he still is there
- user << "You place the poster!"
- P.resulting_poster.icon_state = temp
- src.contents += P.resulting_poster
- del(P)
- else
- user << "You stop placing the poster."
- P.resulting_poster.loc = P
- P.resulting_poster.icon_state = temp
- return
-
- if(istype(W,/obj/item/apc_frame))
- var/obj/item/apc_frame/AH = W
- AH.try_build(src)
- return
-
- if(src.d_state > 0)
- src.icon_state = "r_wall-[d_state]"
-
- else
- return attack_hand(user)
- return
-
-/turf/simulated/wall/meteorhit(obj/M as obj)
- if (prob(15))
- dismantle_wall()
- else if(prob(70))
- ReplaceWithPlating()
- else
- ReplaceWithLattice()
- return 0
-
-
-//This is so damaged or burnt tiles or platings don't get remembered as the default tile
-var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","damaged4",
- "damaged5","panelscorched","floorscorched1","floorscorched2","platingdmg1","platingdmg2",
- "platingdmg3","plating","light_on","light_on_flicker1","light_on_flicker2",
- "light_on_clicker3","light_on_clicker4","light_on_clicker5","light_broken",
- "light_on_broken","light_off","wall_thermite","grass1","grass2","grass3","grass4",
- "asteroid","asteroid_dug",
- "asteroid0","asteroid1","asteroid2","asteroid3","asteroid4",
- "asteroid5","asteroid6","asteroid7","asteroid8",
- "burning","oldburning","light-on-r","light-on-y","light-on-g","light-on-b")
-
-var/list/plating_icons = list("plating","platingdmg1","platingdmg2","platingdmg3","asteroid","asteroid_dug")
-
-/turf/simulated/floor
-
- //Note to coders, the 'intact' var can no longer be used to determine if the floor is a plating or not.
- //Use the is_plating(), is_plasteel_floor() and is_light_floor() procs instead. --Errorage
- name = "floor"
- icon = 'icons/turf/floors.dmi'
- icon_state = "floor"
- var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default
- var/icon_plating = "plating"
- thermal_conductivity = 0.040
- heat_capacity = 10000
- var/broken = 0
- var/burnt = 0
- var/obj/item/stack/tile/floor_tile = new/obj/item/stack/tile/plasteel
-
- airless
- icon_state = "floor"
- name = "airless floor"
- oxygen = 0.01
- nitrogen = 0.01
- temperature = TCMB
-
- New()
- ..()
- name = "floor"
-
- light
- name = "Light floor"
- luminosity = 5
- icon_state = "light_on"
- floor_tile = new/obj/item/stack/tile/light
-
- New()
- floor_tile.New() //I guess New() isn't run on objects spawned without the definition of a turf to house them, ah well.
- var/n = name //just in case commands rename it in the ..() call
- ..()
- spawn(4)
- update_icon()
- name = n
-
- grass
- name = "Grass patch"
- icon_state = "grass1"
- floor_tile = new/obj/item/stack/tile/grass
-
- New()
- floor_tile.New() //I guess New() isn't run on objects spawned without the definition of a turf to house them, ah well.
- icon_state = "grass[pick("1","2","3","4")]"
- ..()
- spawn(4)
- update_icon()
- for(var/direction in cardinal)
- if(istype(get_step(src,direction),/turf/simulated/floor))
- var/turf/simulated/floor/FF = get_step(src,direction)
- FF.update_icon() //so siding get updated properly
-
-/turf/simulated/floor/vault
- icon_state = "rockvault"
-
- New(location,type)
- ..()
- icon_state = "[type]vault"
-
-/turf/simulated/wall/vault
- icon_state = "rockvault"
-
- New(location,type)
- ..()
- icon_state = "[type]vault"
-
-/turf/simulated/floor/engine
- name = "reinforced floor"
- icon_state = "engine"
- thermal_conductivity = 0.025
- heat_capacity = 325000
-
-/turf/simulated/floor/engine/cult
- name = "engraved floor"
- icon_state = "cult"
-
-
-/turf/simulated/floor/engine/n20
- New()
- ..()
- var/datum/gas_mixture/adding = new
- var/datum/gas/sleeping_agent/trace_gas = new
-
- trace_gas.moles = 2000
- adding.trace_gases += trace_gas
- adding.temperature = T20C
-
- assume_air(adding)
-
-/turf/simulated/floor/engine/vacuum
- name = "vacuum floor"
- icon_state = "engine"
- oxygen = 0
- nitrogen = 0.001
- temperature = TCMB
-
-/turf/simulated/floor/plating
- name = "plating"
- icon_state = "plating"
- floor_tile = null
- intact = 0
-
-/turf/simulated/floor/plating/airless
- icon_state = "plating"
- name = "airless plating"
- oxygen = 0.01
- nitrogen = 0.01
- temperature = TCMB
-
- New()
- ..()
- name = "plating"
-
-/turf/simulated/floor/grid
- icon = 'icons/turf/floors.dmi'
- icon_state = "circuit"
-
-/turf/simulated/floor/New()
- ..()
- if(icon_state in icons_to_ignore_at_floor_init) //so damaged/burned tiles or plating icons aren't saved as the default
- icon_regular_floor = "floor"
- else
- icon_regular_floor = icon_state
-
-//turf/simulated/floor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
-// if ((istype(mover, /obj/machinery/vehicle) && !(src.burnt)))
-// if (!( locate(/obj/machinery/mass_driver, src) ))
-// return 0
-// return ..()
-
-/turf/simulated/floor/ex_act(severity)
- //set src in oview(1)
- switch(severity)
- if(1.0)
- src.ReplaceWithSpace()
- if(2.0)
- switch(pick(1,2;75,3))
- if (1)
- src.ReplaceWithLattice()
- if(prob(33)) new /obj/item/stack/sheet/metal(src)
- if(2)
- src.ReplaceWithSpace()
- if(3)
- if(prob(80))
- src.break_tile_to_plating()
- else
- src.break_tile()
- src.hotspot_expose(1000,CELL_VOLUME)
- if(prob(33)) new /obj/item/stack/sheet/metal(src)
- if(3.0)
- if (prob(50))
- src.break_tile()
- src.hotspot_expose(1000,CELL_VOLUME)
- return
-
-/turf/simulated/floor/blob_act()
- return
-
-turf/simulated/floor/proc/update_icon()
- if(is_plasteel_floor())
- if(!broken && !burnt)
- icon_state = icon_regular_floor
- if(is_plating())
- if(!broken && !burnt)
- icon_state = icon_plating //Because asteroids are 'platings' too.
- if(is_light_floor())
- var/obj/item/stack/tile/light/T = floor_tile
- if(T.on)
- switch(T.state)
- if(0)
- icon_state = "light_on"
- sd_SetLuminosity(5)
- if(1)
- var/num = pick("1","2","3","4")
- icon_state = "light_on_flicker[num]"
- sd_SetLuminosity(5)
- if(2)
- icon_state = "light_on_broken"
- sd_SetLuminosity(5)
- if(3)
- icon_state = "light_off"
- sd_SetLuminosity(0)
- else
- sd_SetLuminosity(0)
- icon_state = "light_off"
- if(is_grass_floor())
- if(!broken && !burnt)
- if(!(icon_state in list("grass1","grass2","grass3","grass4")))
- icon_state = "grass[pick("1","2","3","4")]"
- spawn(1)
- if(istype(src,/turf/simulated/floor)) //Was throwing runtime errors due to a chance of it changing to space halfway through.
- if(air)
- update_visuals(air)
-
-turf/simulated/floor/return_siding_icon_state()
- ..()
- if(is_grass_floor())
- var/dir_sum = 0
- for(var/direction in cardinal)
- var/turf/T = get_step(src,direction)
- if(!(T.is_grass_floor()))
- dir_sum += direction
- if(dir_sum)
- return "wood_siding[dir_sum]"
- else
- return 0
-
-
-/turf/simulated/floor/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
-/turf/simulated/floor/attack_hand(mob/user as mob)
- if (is_light_floor())
- var/obj/item/stack/tile/light/T = floor_tile
- T.on = !T.on
- update_icon()
- if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored)
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
- var/mob/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
-
-/turf/simulated/floor/engine/attackby(obj/item/weapon/C as obj, mob/user as mob)
- if(!C)
- return
- if(!user)
- return
- if(istype(C, /obj/item/weapon/wrench))
- user << "\blue Removing rods..."
- playsound(src.loc, 'sound/items/Ratchet.ogg', 80, 1)
- if(do_after(user, 30))
- new /obj/item/stack/rods(src, 2)
- ReplaceWithFloor()
- var/turf/simulated/floor/F = src
- F.make_plating()
- return
-
-/turf/simulated/floor/proc/gets_drilled()
- return
-
-/turf/simulated/floor/proc/break_tile_to_plating()
- if(!is_plating())
- make_plating()
- break_tile()
-
-/turf/simulated/floor/is_plasteel_floor()
- if(istype(floor_tile,/obj/item/stack/tile/plasteel))
- return 1
- else
- return 0
-
-/turf/simulated/floor/is_light_floor()
- if(istype(floor_tile,/obj/item/stack/tile/light))
- return 1
- else
- return 0
-
-/turf/simulated/floor/is_grass_floor()
- if(istype(floor_tile,/obj/item/stack/tile/grass))
- return 1
- else
- return 0
-
-/turf/simulated/floor/is_plating()
- if(!floor_tile)
- return 1
- return 0
-
-/turf/simulated/floor/proc/break_tile()
- if(istype(src,/turf/simulated/floor/engine)) return
- if(istype(src,/turf/simulated/floor/mech_bay_recharge_floor))
- src.ReplaceWithPlating()
- if(broken) return
- if(is_plasteel_floor())
- src.icon_state = "damaged[pick(1,2,3,4,5)]"
- broken = 1
- else if(is_plasteel_floor())
- src.icon_state = "light_broken"
- broken = 1
- else if(is_plating())
- src.icon_state = "platingdmg[pick(1,2,3)]"
- broken = 1
- else if(is_grass_floor())
- src.icon_state = "sand[pick("1","2","3")]"
- broken = 1
-
-/turf/simulated/floor/proc/burn_tile()
- if(istype(src,/turf/simulated/floor/engine)) return
- if(broken || burnt) return
- if(is_plasteel_floor())
- src.icon_state = "damaged[pick(1,2,3,4,5)]"
- burnt = 1
- else if(is_plasteel_floor())
- src.icon_state = "floorscorched[pick(1,2)]"
- burnt = 1
- else if(is_plating())
- src.icon_state = "panelscorched"
- burnt = 1
- else if(is_grass_floor())
- src.icon_state = "sand[pick("1","2","3")]"
- burnt = 1
-
-//This proc will delete the floor_tile and the update_iocn() proc will then change the icon_state of the turf
-//This proc auto corrects the grass tiles' siding.
-/turf/simulated/floor/proc/make_plating()
- if(istype(src,/turf/simulated/floor/engine)) return
-
- if(is_grass_floor())
- for(var/direction in cardinal)
- if(istype(get_step(src,direction),/turf/simulated/floor))
- var/turf/simulated/floor/FF = get_step(src,direction)
- FF.update_icon() //so siding get updated properly
-
- if(!floor_tile) return
- del(floor_tile)
- icon_plating = "plating"
- sd_SetLuminosity(0)
- floor_tile = null
- intact = 0
- broken = 0
- burnt = 0
-
- update_icon()
- levelupdate()
-
-//This proc will make the turf a plasteel floor tile. The expected argument is the tile to make the turf with
-//If none is given it will make a new object. dropping or unequipping must be handled before or after calling
-//this proc.
-/turf/simulated/floor/proc/make_plasteel_floor(var/obj/item/stack/tile/plasteel/T = null)
- broken = 0
- burnt = 0
- intact = 1
- sd_SetLuminosity(0)
- if(T)
- if(istype(T,/obj/item/stack/tile/plasteel))
- floor_tile = T
- if (icon_regular_floor)
- icon_state = icon_regular_floor
- else
- icon_state = "floor"
- icon_regular_floor = icon_state
- update_icon()
- levelupdate()
- return
- //if you gave a valid parameter, it won't get thisf ar.
- floor_tile = new/obj/item/stack/tile/plasteel
- icon_state = "floor"
- icon_regular_floor = icon_state
-
- update_icon()
- levelupdate()
-
-//This proc will make the turf a light floor tile. The expected argument is the tile to make the turf with
-//If none is given it will make a new object. dropping or unequipping must be handled before or after calling
-//this proc.
-/turf/simulated/floor/proc/make_light_floor(var/obj/item/stack/tile/light/T = null)
- broken = 0
- burnt = 0
- intact = 1
- if(T)
- if(istype(T,/obj/item/stack/tile/light))
- floor_tile = T
- update_icon()
- levelupdate()
- return
- //if you gave a valid parameter, it won't get thisf ar.
- floor_tile = new/obj/item/stack/tile/light
-
- update_icon()
- levelupdate()
-
-//This proc will make a turf into a grass patch. Fun eh? Insert the grass tile to be used as the argument
-//If no argument is given a new one will be made.
-/turf/simulated/floor/proc/make_grass_floor(var/obj/item/stack/tile/grass/T = null)
- broken = 0
- burnt = 0
- intact = 1
- if(T)
- if(istype(T,/obj/item/stack/tile/grass))
- floor_tile = T
- update_icon()
- levelupdate()
- return
- //if you gave a valid parameter, it won't get thisf ar.
- floor_tile = new/obj/item/stack/tile/grass
-
- update_icon()
- levelupdate()
-
-/turf/simulated/floor/attackby(obj/item/C as obj, mob/user as mob)
-
- if(!C || !user)
- return 0
-
- if(istype(C,/obj/item/weapon/light/bulb)) //only for light tiles
- if(is_light_floor())
- var/obj/item/stack/tile/light/T = floor_tile
- if(T.state)
- user.u_equip(C)
- del(C)
- T.state = C //fixing it by bashing it with a light bulb, fun eh?
- update_icon()
- user << "\blue You replace the light bulb."
- else
- user << "\blue The lightbulb seems fine, no need to replace it."
-
- if(istype(C, /obj/item/weapon/crowbar) && (!(is_plating())))
- if(broken || burnt)
- user << "\red You remove the broken plating."
- else
- user << "\red You remove the [floor_tile.name]."
- new floor_tile.type(src)
-
- make_plating()
- playsound(src.loc, 'sound/items/Crowbar.ogg', 80, 1)
-
- return
-
- if(istype(C, /obj/item/stack/rods))
- var/obj/item/stack/rods/R = C
- if (is_plating())
- if (R.amount >= 2)
- user << "\blue Reinforcing the floor..."
- if(do_after(user, 30) && R && R.amount >= 2 && is_plating())
- ReplaceWithEngineFloor()
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 80, 1)
- R.use(2)
- return
- else
- user << "\red You need more rods."
- else
- user << "\red You must remove the plating first."
- return
-
- if(istype(C, /obj/item/stack/tile))
- if(is_plating())
- if(!broken && !burnt)
- var/obj/item/stack/tile/T = C
- floor_tile = new T.type
- intact = 1
- if(istype(T,/obj/item/stack/tile/light))
- var/obj/item/stack/tile/light/L = T
- var/obj/item/stack/tile/light/F = floor_tile
- F.state = L.state
- F.on = L.on
- if(istype(T,/obj/item/stack/tile/grass))
- for(var/direction in cardinal)
- if(istype(get_step(src,direction),/turf/simulated/floor))
- var/turf/simulated/floor/FF = get_step(src,direction)
- FF.update_icon() //so siding gets updated properly
- T.use(1)
- update_icon()
- levelupdate()
- playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1)
- else
- user << "\blue This section is too damaged to support a tile. Use a welder to fix the damage."
-
-
- if(istype(C, /obj/item/weapon/cable_coil))
- if(is_plating())
- var/obj/item/weapon/cable_coil/coil = C
- coil.turf_place(src, user)
- else
- user << "\red You must remove the plating first."
-
- if(istype(C, /obj/item/weapon/shovel))
- if(is_grass_floor())
- new /obj/item/weapon/ore/glass(src)
- new /obj/item/weapon/ore/glass(src) //Make some sand if you shovel grass
- user << "\blue You shovel the grass."
- make_plating()
- else
- user << "\red You cannot shovel this."
-
- if(istype(C, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/welder = C
- if(welder.welding && (is_plating()))
- if(broken || burnt)
- if(welder.remove_fuel(0,user))
- user << "\red You fix some dents on the broken plating."
- playsound(src.loc, 'sound/items/Welder.ogg', 80, 1)
- icon_state = "plating"
- burnt = 0
- broken = 0
- else
- user << "\blue You need more welding fuel to complete this task."
-
-/turf/unsimulated/floor/attack_paw(user as mob)
- return src.attack_hand(user)
-
-/turf/unsimulated/floor/attack_hand(var/mob/user as mob)
- if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored)
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
- var/mob/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
-
-// imported from space.dm
-
-/turf/space/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
-/turf/space/attack_hand(mob/user as mob)
- if ((user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored)
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
- var/atom/movable/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
-
-/turf/space/attackby(obj/item/C as obj, mob/user as mob)
-
- if (istype(C, /obj/item/stack/rods))
- var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
- if(L)
- return
- var/obj/item/stack/rods/R = C
- user << "\blue Constructing support lattice ..."
- playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1)
- ReplaceWithLattice()
- R.use(1)
- return
-
- if (istype(C, /obj/item/stack/tile/plasteel))
- var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
- if(L)
- var/obj/item/stack/tile/plasteel/S = C
- del(L)
- playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1)
- S.build(src)
- S.use(1)
- return
- else
- user << "\red The plating is going to need some support."
- return
-
-
-// Ported from unstable r355
-
-/turf/space/Entered(atom/movable/A as mob|obj)
- ..()
- if ((!(A) || src != A.loc || istype(null, /obj/effect/beam))) return
-
- inertial_drift(A)
-
- if(ticker && ticker.mode)
-
- // Okay, so let's make it so that people can travel z levels but not nuke disks!
- // if(ticker.mode.name == "nuclear emergency") return
-
- if(ticker.mode.name == "extended"||ticker.mode.name == "sandbox")
- Sandbox_Spacemove(A)
-
- else
- if (src.x <= 2 || A.x >= (world.maxx - 1) || src.y <= 2 || A.y >= (world.maxy - 1))
- if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
- del(A)
- return
-
- if(istype(A, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks travel Z levels ... And moving this shit down here so it only fires when they're actually trying to change z-level.
- return
-
- if(!isemptylist(A.search_contents_for(/obj/item/weapon/disk/nuclear)))
- if(istype(A, /mob/living))
- var/mob/living/MM = A
- if(MM.client)
- MM << "\red Something you are carrying is preventing you from leaving. Don't play stupid; you know exactly what it is."
- return
-
-
-
- var/move_to_z_str = pickweight(accessable_z_levels)
-
- var/move_to_z = text2num(move_to_z_str)
-
- if(!move_to_z)
- return
-
-
-
- A.z = move_to_z
-
-
- if(src.x <= 2)
- A.x = world.maxx - 2
-
- else if (A.x >= (world.maxx - 1))
- A.x = 3
-
- else if (src.y <= 2)
- A.y = world.maxy - 2
-
- else if (A.y >= (world.maxy - 1))
- A.y = 3
-
- spawn (0)
- if ((A && A.loc))
- A.loc.Entered(A)
-
-// if(istype(A, /obj/structure/closet/coffin))
-// coffinhandler.Add(A)
-
-/turf/space/proc/Sandbox_Spacemove(atom/movable/A as mob|obj)
- var/cur_x
- var/cur_y
- var/next_x
- var/next_y
- var/target_z
- var/list/y_arr
-
- if(src.x <= 1)
- if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
- del(A)
- return
-
- var/list/cur_pos = src.get_global_map_pos()
- if(!cur_pos) return
- cur_x = cur_pos["x"]
- cur_y = cur_pos["y"]
- next_x = (--cur_x||global_map.len)
- y_arr = global_map[next_x]
- target_z = y_arr[cur_y]
-/*
- //debug
- world << "Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]"
- world << "Target Z = [target_z]"
- world << "Next X = [next_x]"
- //debug
-*/
- if(target_z)
- A.z = target_z
- A.x = world.maxx - 2
- spawn (0)
- if ((A && A.loc))
- A.loc.Entered(A)
- else if (src.x >= world.maxx)
- if(istype(A, /obj/effect/meteor))
- del(A)
- return
-
- var/list/cur_pos = src.get_global_map_pos()
- if(!cur_pos) return
- cur_x = cur_pos["x"]
- cur_y = cur_pos["y"]
- next_x = (++cur_x > global_map.len ? 1 : cur_x)
- y_arr = global_map[next_x]
- target_z = y_arr[cur_y]
-/*
- //debug
- world << "Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]"
- world << "Target Z = [target_z]"
- world << "Next X = [next_x]"
- //debug
-*/
- if(target_z)
- A.z = target_z
- A.x = 3
- spawn (0)
- if ((A && A.loc))
- A.loc.Entered(A)
- else if (src.y <= 1)
- if(istype(A, /obj/effect/meteor))
- del(A)
- return
- var/list/cur_pos = src.get_global_map_pos()
- if(!cur_pos) return
- cur_x = cur_pos["x"]
- cur_y = cur_pos["y"]
- y_arr = global_map[cur_x]
- next_y = (--cur_y||y_arr.len)
- target_z = y_arr[next_y]
-/*
- //debug
- world << "Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]"
- world << "Next Y = [next_y]"
- world << "Target Z = [target_z]"
- //debug
-*/
- if(target_z)
- A.z = target_z
- A.y = world.maxy - 2
- spawn (0)
- if ((A && A.loc))
- A.loc.Entered(A)
-
- else if (src.y >= world.maxy)
- if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
- del(A)
- return
- var/list/cur_pos = src.get_global_map_pos()
- if(!cur_pos) return
- cur_x = cur_pos["x"]
- cur_y = cur_pos["y"]
- y_arr = global_map[cur_x]
- next_y = (++cur_y > y_arr.len ? 1 : cur_y)
- target_z = y_arr[next_y]
-/*
- //debug
- world << "Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]"
- world << "Next Y = [next_y]"
- world << "Target Z = [target_z]"
- //debug
-*/
- if(target_z)
- A.z = target_z
- A.y = 3
- spawn (0)
- if ((A && A.loc))
- A.loc.Entered(A)
- return
-
-/obj/effect/vaultspawner
- var/maxX = 6
- var/maxY = 6
- var/minX = 2
- var/minY = 2
-
-/obj/effect/vaultspawner/New(turf/location as turf,lX = minX,uX = maxX,lY = minY,uY = maxY,var/type = null)
- if(!type)
- type = pick("sandstone","rock","alien")
-
- var/lowBoundX = location.x
- var/lowBoundY = location.y
-
- var/hiBoundX = location.x + rand(lX,uX)
- var/hiBoundY = location.y + rand(lY,uY)
-
- var/z = location.z
-
- for(var/i = lowBoundX,i<=hiBoundX,i++)
- for(var/j = lowBoundY,j<=hiBoundY,j++)
- if(i == lowBoundX || i == hiBoundX || j == lowBoundY || j == hiBoundY)
- new /turf/simulated/wall/vault(locate(i,j,z),type)
- else
- new /turf/simulated/floor/vault(locate(i,j,z),type)
-
- del(src)
-
-/turf/proc/kill_creatures(mob/U = null)//Will kill people/creatures and damage mechs./N
-//Useful to batch-add creatures to the list.
- for(var/mob/living/M in src)
- if(M==U) continue//Will not harm U. Since null != M, can be excluded to kill everyone.
- spawn(0)
- M.gib()
- for(var/obj/mecha/M in src)//Mecha are not gibbed but are damaged.
- spawn(0)
- M.take_damage(100, "brute")
- for(var/obj/effect/critter/M in src)
- spawn(0)
- M.Die()
-
-/turf/proc/Bless()
- if(flags & NOJAUNT)
- return
- flags |= NOJAUNT
+/*
+/obj/vehicle/airtight
+ //inner atmos
+ var/use_internal_tank = 0
+ var/internal_tank_valve = ONE_ATMOSPHERE
+ var/obj/machinery/portable_atmospherics/canister/internal_tank
+ var/datum/gas_mixture/cabin_air
+ var/obj/machinery/atmospherics/portables_connector/connected_port = null
+
+ var/datum/global_iterator/pr_int_temp_processor //normalizes internal air mixture temperature
+ var/datum/global_iterator/pr_give_air //moves air from tank to cabin
+
+
+/obj/vehicle/airtight/New()
+ ..()
+ src.add_airtank()
+ src.add_cabin()
+ src.add_airtight_iterators()
+
+
+
+
+//######################################### Helpers for airtight vehicles #########################################
+
+/obj/vehicle/airtight/proc/add_cabin()
+ cabin_air = new
+ cabin_air.temperature = T20C
+ cabin_air.volume = 200
+ cabin_air.oxygen = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
+ cabin_air.nitrogen = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
+ return cabin_air
+
+/obj/vehicle/airtight/proc/add_airtank()
+ internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src)
+ return internal_tank
+
+/obj/vehicle/airtight/proc/add_airtight_iterators()
+ pr_int_temp_processor = new /datum/global_iterator/vehicle_preserve_temp(list(src))
+ pr_give_air = new /datum/global_iterator/vehicle_tank_give_air(list(src))
+
+
+//######################################### Specific datums for airtight vehicles #################################
+
+
+/datum/global_iterator/vehicle_preserve_temp //normalizing cabin air temperature to 20 degrees celsium
+ delay = 20
+
+ process(var/obj/vehicle/airtight/V)
+ if(V.cabin_air && V.cabin_air.return_volume() > 0)
+ var/delta = V.cabin_air.temperature - T20C
+ V.cabin_air.temperature -= max(-10, min(10, round(delta/4,0.1)))
+ return
+
+
+/datum/global_iterator/vehicle_tank_give_air
+ delay = 15
+
+ process(var/obj/vehicle/airtight/V)
+ if(V.internal_tank)
+ var/datum/gas_mixture/tank_air = V.internal_tank.return_air()
+ var/datum/gas_mixture/cabin_air = V.cabin_air
+
+ var/release_pressure = V.internal_tank_valve
+ var/cabin_pressure = cabin_air.return_pressure()
+ var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2)
+ var/transfer_moles = 0
+ if(pressure_delta > 0) //cabin pressure lower than release pressure
+ if(tank_air.return_temperature() > 0)
+ transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
+ var/datum/gas_mixture/removed = tank_air.remove(transfer_moles)
+ cabin_air.merge(removed)
+ else if(pressure_delta < 0) //cabin pressure higher than release pressure
+ var/datum/gas_mixture/t_air = V.get_turf_air()
+ pressure_delta = cabin_pressure - release_pressure
+ if(t_air)
+ pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta)
+ if(pressure_delta > 0) //if location pressure is lower than cabin pressure
+ transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
+ var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles)
+ if(t_air)
+ t_air.merge(removed)
+ else //just delete the cabin gas, we're in space or some shit
+ del(removed)
+ else
+ return stop()
+ return
+
+
+//######################################### Atmospherics for vehicles #############################################
+
+
+/obj/vehicle/proc/get_turf_air()
+ var/turf/T = get_turf(src)
+ if(T)
+ . = T.return_air()
+ return
+
+/obj/vehicle/airtight/remove_air(amount)
+ if(use_internal_tank)
+ return cabin_air.remove(amount)
+ else
+ var/turf/T = get_turf(src)
+ if(T)
+ return T.remove_air(amount)
+ return
+
+/obj/vehicle/airtight/return_air()
+ if(use_internal_tank)
+ return cabin_air
+ return get_turf_air()
+
+/obj/vehicle/airtight/proc/return_pressure()
+ . = 0
+ if(use_internal_tank)
+ . = cabin_air.return_pressure()
+ else
+ var/datum/gas_mixture/t_air = get_turf_air()
+ if(t_air)
+ . = t_air.return_pressure()
+ return
+
+
+/obj/vehicle/airtight/proc/return_temperature()
+ . = 0
+ if(use_internal_tank)
+ . = cabin_air.return_temperature()
+ else
+ var/datum/gas_mixture/t_air = get_turf_air()
+ if(t_air)
+ . = t_air.return_temperature()
+ return
+
+/obj/vehicle/airtight/proc/connect(obj/machinery/atmospherics/portables_connector/new_port)
+ //Make sure not already connected to something else
+ if(connected_port || !new_port || new_port.connected_device)
+ return 0
+
+ //Make sure are close enough for a valid connection
+ if(new_port.loc != src.loc)
+ return 0
+
+ //Perform the connection
+ connected_port = new_port
+ connected_port.connected_device = src
+
+ //Actually enforce the air sharing
+ var/datum/pipe_network/network = connected_port.return_network(src)
+ if(network && !(internal_tank.return_air() in network.gases))
+ network.gases += internal_tank.return_air()
+ network.update = 1
+ log_message("Vehicle airtank connected to external port.")
+ return 1
+
+/obj/vehicle/airtight/proc/disconnect()
+ if(!connected_port)
+ return 0
+
+ var/datum/pipe_network/network = connected_port.return_network(src)
+ if(network)
+ network.gases -= internal_tank.return_air()
+
+ connected_port.connected_device = null
+ connected_port = null
+ src.log_message("Vehicle airtank disconnected from external port.")
+ return 1
+
+
+
+
+/////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////
+
+
+
+/obj/vehicle
+ name = "Vehicle"
+ icon = 'icons/vehicles/vehicles.dmi'
+ density = 1
+ anchored = 1
+ unacidable = 1 //To avoid the pilot-deleting shit that came with mechas
+ layer = MOB_LAYER
+ //var/can_move = 1
+ var/mob/living/carbon/occupant = null
+ //var/step_in = 10 //make a step in step_in/10 sec.
+ //var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South.
+ //var/step_energy_drain = 10
+ var/health = 300 //health is health
+ //var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
+ //the values in this list show how much damage will pass through, not how much will be absorbed.
+ var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1)
+ var/obj/item/weapon/cell/cell //Our power source
+ var/state = 0
+ var/list/log = new
+ var/last_message = 0
+ var/add_req_access = 1
+ var/maint_access = 1
+ //var/dna //dna-locking the mech
+ var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference
+ var/datum/effect/effect/system/spark_spread/spark_system = new
+ var/lights = 0
+ var/lights_power = 6
+
+ //inner atmos //These go in airtight.dm, not all vehicles are space-faring -Agouri
+ //var/use_internal_tank = 0
+ //var/internal_tank_valve = ONE_ATMOSPHERE
+ //var/obj/machinery/portable_atmospherics/canister/internal_tank
+ //var/datum/gas_mixture/cabin_air
+ //var/obj/machinery/atmospherics/portables_connector/connected_port = null
+
+ var/obj/item/device/radio/radio = null
+
+ var/max_temperature = 2500
+ //var/internal_damage_threshold = 50 //health percentage below which internal damage is possible
+ var/internal_damage = 0 //contains bitflags
+
+ var/list/operation_req_access = list()//required access level for mecha operation
+ var/list/internals_req_access = list(access_engine,access_robotics)//required access level to open cell compartment
+
+ //var/datum/global_iterator/pr_int_temp_processor //normalizes internal air mixture temperature //In airtight.dm you go -Agouri
+ var/datum/global_iterator/pr_inertial_movement //controls intertial movement in spesss
+
+ //var/datum/global_iterator/pr_give_air //moves air from tank to cabin //Y-you too -Agouri
+
+ var/datum/global_iterator/pr_internal_damage //processes internal damage
+
+
+ var/wreckage
+
+ var/list/equipment = new
+ var/obj/selected
+ //var/max_equip = 3
+
+ var/datum/events/events
+
+
+
+/obj/vehicle/New()
+ ..()
+ events = new
+ icon_state += "-unmanned"
+ add_radio()
+ //add_cabin() //No cabin for non-airtights
+
+ spark_system.set_up(2, 0, src)
+ spark_system.attach(src)
+ add_cell()
+ add_iterators()
+ removeVerb(/obj/mecha/verb/disconnect_from_port)
+ removeVerb(/atom/movable/verb/pull)
+ log_message("[src.name]'s functions initialised. Work protocols active - Entering IDLE mode.")
+ loc.Entered(src)
+ return
+
+
+//################ Helpers ###########################################################
+
+
+/obj/vehicle/proc/removeVerb(verb_path)
+ verbs -= verb_path
+
+/obj/vehicle/proc/addVerb(verb_path)
+ verbs += verb_path
+
+/*/obj/vehicle/proc/add_airtank() //In airtight.dm -Agouri
+ internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src)
+ return internal_tank*/
+
+/obj/vehicle/proc/add_cell(var/obj/item/weapon/cell/C=null)
+ if(C)
+ C.forceMove(src)
+ cell = C
+ return
+ cell = new(src)
+ cell.charge = 15000
+ cell.maxcharge = 15000
+
+/*/obj/vehicle/proc/add_cabin() //In airtight.dm -Agouri
+ cabin_air = new
+ cabin_air.temperature = T20C
+ cabin_air.volume = 200
+ cabin_air.oxygen = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
+ cabin_air.nitrogen = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
+ return cabin_air*/
+
+/obj/vehicle/proc/add_radio()
+ radio = new(src)
+ radio.name = "[src] radio"
+ radio.icon = icon
+ radio.icon_state = icon_state
+ radio.subspace_transmission = 1
+
+/obj/vehicle/proc/add_iterators()
+ pr_inertial_movement = new /datum/global_iterator/vehicle_intertial_movement(null,0)
+ //pr_internal_damage = new /datum/global_iterator/vehicle_internal_damage(list(src),0)
+ //pr_int_temp_processor = new /datum/global_iterator/vehicle_preserve_temp(list(src)) //In airtight.dm's add_airtight_iterators -Agouri
+ //pr_give_air = new /datum/global_iterator/vehicle_tank_give_air(list(src) //Same here -Agouri
+
+/obj/vehicle/proc/check_for_support()
+ if(locate(/obj/structure/grille, orange(1, src)) || locate(/obj/structure/lattice, orange(1, src)) || locate(/turf/simulated, orange(1, src)) || locate(/turf/unsimulated, orange(1, src)))
+ return 1
+ else
+ return 0
+
+//################ Logs and messages ############################################
+
+
+/obj/vehicle/proc/log_message(message as text,red=null)
+ log.len++
+ log[log.len] = list("time"=world.timeofday,"message"="[red?"":null][message][red?"":null]")
+ return log.len
+
+
+
+//################ Global Iterator Datums ######################################
+
+
+/datum/global_iterator/vehicle_intertial_movement //inertial movement in space
+ delay = 7
+
+ process(var/obj/vehicle/V as obj, direction)
+ if(direction)
+ if(!step(V, direction)||V.check_for_support())
+ src.stop()
+ else
+ src.stop()
+ return
+
+
+/datum/global_iterator/mecha_internal_damage // processing internal damage
+
+ process(var/obj/mecha/mecha)
+ if(!mecha.hasInternalDamage())
+ return stop()
+ if(mecha.hasInternalDamage(MECHA_INT_FIRE))
+ if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5))
+ mecha.clearInternalDamage(MECHA_INT_FIRE)
+ if(mecha.internal_tank)
+ if(mecha.internal_tank.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)))
+ mecha.setInternalDamage(MECHA_INT_TANK_BREACH)
+ var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air()
+ if(int_tank_air && int_tank_air.return_volume()>0) //heat the air_contents
+ int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15))
+ if(mecha.cabin_air && mecha.cabin_air.return_volume()>0)
+ mecha.cabin_air.temperature = min(6000+T0C, mecha.cabin_air.return_temperature()+rand(10,15))
+ if(mecha.cabin_air.return_temperature()>mecha.max_temperature/2)
+ mecha.take_damage(4/round(mecha.max_temperature/mecha.cabin_air.return_temperature(),0.1),"fire")
+ if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum
+ mecha.pr_int_temp_processor.stop()
+ if(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)) //remove some air from internal tank
+ if(mecha.internal_tank)
+ var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air()
+ var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10)
+ if(mecha.loc && hascall(mecha.loc,"assume_air"))
+ mecha.loc.assume_air(leaked_gas)
+ else
+ del(leaked_gas)
+ if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT))
+ if(mecha.get_charge())
+ mecha.spark_system.start()
+ mecha.cell.charge -= min(20,mecha.cell.charge)
+ mecha.cell.maxcharge -= min(20,mecha.cell.maxcharge)
+ return
+
+
+*/
+
+
+
+
+
+/////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////
+
+
+
+
+/*/turf/DblClick()
+ if(istype(usr, /mob/living/silicon/ai))
+ return move_camera_by_click()
+ if(usr.stat || usr.restrained() || usr.lying)
+ return ..()
+
+ if(usr.hand && istype(usr.l_hand, /obj/item/weapon/flamethrower))
+ var/turflist = getline(usr,src)
+ var/obj/item/weapon/flamethrower/F = usr.l_hand
+ F.flame_turf(turflist)
+ else if(!usr.hand && istype(usr.r_hand, /obj/item/weapon/flamethrower))
+ var/turflist = getline(usr,src)
+ var/obj/item/weapon/flamethrower/F = usr.r_hand
+ F.flame_turf(turflist)
+
+ return ..()
+
+/turf/New()
+ ..()
+ for(var/atom/movable/AM as mob|obj in src)
+ spawn( 0 )
+ src.Entered(AM)
+ return
+ return
+
+/turf/ex_act(severity)
+ return 0
+
+
+/turf/bullet_act(var/obj/item/projectile/Proj)
+ if(istype(Proj ,/obj/item/projectile/beam/pulse))
+ src.ex_act(2)
+ ..()
+ return 0
+
+/turf/bullet_act(var/obj/item/projectile/Proj)
+ if(istype(Proj ,/obj/item/projectile/bullet/gyro))
+ explosion(src, -1, 0, 2)
+ ..()
+ return 0
+
+/turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area)
+ if (!mover || !isturf(mover.loc))
+ return 1
+
+
+ //First, check objects to block exit that are not on the border
+ for(var/obj/obstacle in mover.loc)
+ if((obstacle.flags & ~ON_BORDER) && (mover != obstacle) && (forget != obstacle))
+ if(!obstacle.CheckExit(mover, src))
+ mover.Bump(obstacle, 1)
+ return 0
+
+ //Now, check objects to block exit that are on the border
+ for(var/obj/border_obstacle in mover.loc)
+ if((border_obstacle.flags & ON_BORDER) && (mover != border_obstacle) && (forget != border_obstacle))
+ if(!border_obstacle.CheckExit(mover, src))
+ mover.Bump(border_obstacle, 1)
+ return 0
+
+ //Next, check objects to block entry that are on the border
+ for(var/obj/border_obstacle in src)
+ if(border_obstacle.flags & ON_BORDER)
+ if(!border_obstacle.CanPass(mover, mover.loc, 1, 0) && (forget != border_obstacle))
+ mover.Bump(border_obstacle, 1)
+ return 0
+
+ //Then, check the turf itself
+ if (!src.CanPass(mover, src))
+ mover.Bump(src, 1)
+ return 0
+
+ //Finally, check objects/mobs to block entry that are not on the border
+ for(var/atom/movable/obstacle in src)
+ if(obstacle.flags & ~ON_BORDER)
+ if(!obstacle.CanPass(mover, mover.loc, 1, 0) && (forget != obstacle))
+ mover.Bump(obstacle, 1)
+ return 0
+ return 1 //Nothing found to block so return success!
+
+
+/turf/Entered(atom/movable/M as mob|obj)
+ var/loopsanity = 100
+ if(ismob(M))
+ if(!M:lastarea)
+ M:lastarea = get_area(M.loc)
+ if(M:lastarea.has_gravity == 0)
+ inertial_drift(M)
+
+ /*
+ if(M.flags & NOGRAV)
+ inertial_drift(M)
+ */
+
+
+
+ else if(!istype(src, /turf/space))
+ M:inertia_dir = 0
+ ..()
+ var/objects = 0
+ for(var/atom/A as mob|obj|turf|area in src)
+ if(objects > loopsanity) break
+ objects++
+ spawn( 0 )
+ if ((A && M))
+ A.HasEntered(M, 1)
+ return
+ objects = 0
+ for(var/atom/A as mob|obj|turf|area in range(1))
+ if(objects > loopsanity) break
+ objects++
+ spawn( 0 )
+ if ((A && M))
+ A.HasProximity(M, 1)
+ return
+ return
+
+/turf/proc/inertial_drift(atom/movable/A as mob|obj)
+ if(!(A.last_move)) return
+ if((istype(A, /mob/) && src.x > 2 && src.x < (world.maxx - 1) && src.y > 2 && src.y < (world.maxy-1)))
+ var/mob/M = A
+ if(M.Process_Spacemove(1))
+ M.inertia_dir = 0
+ return
+ spawn(5)
+ if((M && !(M.anchored) && (M.loc == src)))
+ if(M.inertia_dir)
+ step(M, M.inertia_dir)
+ return
+ M.inertia_dir = M.last_move
+ step(M, M.inertia_dir)
+ return
+
+/turf/proc/levelupdate()
+ for(var/obj/O in src)
+ if(O.level == 1)
+ O.hide(src.intact)
+
+// override for space turfs, since they should never hide anything
+/turf/space/levelupdate()
+ for(var/obj/O in src)
+ if(O.level == 1)
+ O.hide(0)
+
+// Removes all signs of lattice on the pos of the turf -Donkieyo
+/turf/proc/RemoveLattice()
+ var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
+ if(L)
+ del L
+
+/turf/proc/ReplaceWithFloor(explode=0)
+ var/prior_icon = icon_old
+ var/old_dir = dir
+
+ var/turf/simulated/floor/W = new /turf/simulated/floor( locate(src.x, src.y, src.z) )
+
+ W.RemoveLattice()
+ W.dir = old_dir
+ if(prior_icon) W.icon_state = prior_icon
+ else W.icon_state = "floor"
+
+ if (!explode)
+ W.opacity = 1
+ W.sd_SetOpacity(0)
+ //This is probably gonna make lighting go a bit wonky in bombed areas, but sd_SetOpacity was the primary reason bombs have been so laggy. --NEO
+ W.levelupdate()
+ return W
+
+/turf/proc/ReplaceWithPlating()
+ var/prior_icon = icon_old
+ var/old_dir = dir
+
+ var/turf/simulated/floor/plating/W = new /turf/simulated/floor/plating( locate(src.x, src.y, src.z) )
+
+ W.RemoveLattice()
+ W.dir = old_dir
+ if(prior_icon) W.icon_state = prior_icon
+ else W.icon_state = "plating"
+ W.opacity = 1
+ W.sd_SetOpacity(0)
+ W.levelupdate()
+ return W
+
+/turf/proc/ReplaceWithEngineFloor()
+ var/old_dir = dir
+
+ var/turf/simulated/floor/engine/E = new /turf/simulated/floor/engine( locate(src.x, src.y, src.z) )
+
+ E.dir = old_dir
+ E.icon_state = "engine"
+
+/turf/simulated/Entered(atom/A, atom/OL)
+ if (istype(A,/mob/living/carbon))
+ var/mob/living/carbon/M = A
+ if(M.lying) return
+ if(istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ if(istype(H.shoes, /obj/item/clothing/shoes/clown_shoes))
+ if(H.m_intent == "run")
+ if(H.footstep >= 2)
+ H.footstep = 0
+ else
+ H.footstep++
+ if(H.footstep == 0)
+ playsound(src, "clownstep", 50, 1) // this will get annoying very fast.
+ else
+ playsound(src, "clownstep", 20, 1)
+
+ switch (src.wet)
+ if(1)
+ if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes
+ if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP))
+ M.stop_pulling()
+ step(M, M.dir)
+ M << "\blue You slipped on the wet floor!"
+ playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
+ M.Stun(8)
+ M.Weaken(5)
+ else
+ M.inertia_dir = 0
+ return
+ else if(!istype(M, /mob/living/carbon/slime))
+ if (M.m_intent == "run")
+ M.stop_pulling()
+ step(M, M.dir)
+ M << "\blue You slipped on the wet floor!"
+ playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
+ M.Stun(8)
+ M.Weaken(5)
+ else
+ M.inertia_dir = 0
+ return
+
+ if(2) //lube
+ if(!istype(M, /mob/living/carbon/slime))
+ M.stop_pulling()
+ step(M, M.dir)
+ spawn(1) step(M, M.dir)
+ spawn(2) step(M, M.dir)
+ spawn(3) step(M, M.dir)
+ spawn(4) step(M, M.dir)
+ M.take_organ_damage(2) // Was 5 -- TLE
+ M << "\blue You slipped on the floor!"
+ playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
+ M.Weaken(10)
+
+ ..()
+
+/turf/proc/ReplaceWithSpace()
+ var/old_dir = dir
+ var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) )
+ S.dir = old_dir
+ return S
+
+/turf/proc/ReplaceWithLattice()
+ var/old_dir = dir
+ var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) )
+ S.dir = old_dir
+ new /obj/structure/lattice( locate(src.x, src.y, src.z) )
+ return S
+
+/turf/proc/ReplaceWithWall()
+ var/old_icon = icon_state
+ var/turf/simulated/wall/S = new /turf/simulated/wall( locate(src.x, src.y, src.z) )
+ S.icon_old = old_icon
+ S.opacity = 0
+ S.sd_NewOpacity(1)
+ return S
+
+/turf/proc/ReplaceWithRWall()
+ var/old_icon = icon_state
+ var/turf/simulated/wall/r_wall/S = new /turf/simulated/wall/r_wall( locate(src.x, src.y, src.z) )
+ S.icon_old = old_icon
+ S.opacity = 0
+ S.sd_NewOpacity(1)
+ return S
+
+/turf/simulated/wall/New()
+ ..()
+
+/turf/simulated/wall/proc/dismantle_wall(devastated=0, explode=0)
+ if(istype(src,/turf/simulated/wall/r_wall))
+ if(!devastated)
+ playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
+ new /obj/structure/girder/reinforced(src)
+ new /obj/item/stack/sheet/plasteel( src )
+ else
+ new /obj/item/stack/sheet/metal( src )
+ new /obj/item/stack/sheet/metal( src )
+ new /obj/item/stack/sheet/plasteel( src )
+ else if(istype(src,/turf/simulated/wall/cult))
+ if(!devastated)
+ playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
+ new /obj/effect/decal/remains/human(src)
+ else
+ new /obj/effect/decal/remains/human(src)
+
+ else
+ if(!devastated)
+ playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
+ new /obj/structure/girder(src)
+ new /obj/item/stack/sheet/metal( src )
+ new /obj/item/stack/sheet/metal( src )
+ else
+ new /obj/item/stack/sheet/metal( src )
+ new /obj/item/stack/sheet/metal( src )
+ new /obj/item/stack/sheet/metal( src )
+
+ ReplaceWithPlating(explode)
+
+/turf/simulated/wall/examine()
+ set src in oview(1)
+
+ usr << "It looks like a regular wall."
+ return
+
+/turf/simulated/wall/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ //SN src = null
+ src.ReplaceWithSpace()
+ del(src)
+ return
+ if(2.0)
+ if (prob(50))
+ dismantle_wall(0,1)
+ else
+ dismantle_wall(1,1)
+ if(3.0)
+ var/proba
+ if (istype(src, /turf/simulated/wall/r_wall))
+ proba = 15
+ else
+ proba = 40
+ if (prob(proba))
+ dismantle_wall(0,1)
+ else
+ return
+
+/turf/simulated/wall/blob_act()
+ if(prob(50))
+ dismantle_wall()
+
+/turf/simulated/wall/attack_paw(mob/user as mob)
+ if ((user.mutations & HULK))
+ if (prob(40))
+ usr << text("\blue You smash through the wall.")
+ dismantle_wall(1)
+ return
+ else
+ usr << text("\blue You punch the wall.")
+ return
+
+ return src.attack_hand(user)
+
+
+/turf/simulated/wall/attack_animal(mob/living/simple_animal/M as mob)
+ if(M.wall_smash)
+ if (istype(src, /turf/simulated/wall/r_wall))
+ M << text("\blue This wall is far too strong for you to destroy.")
+ return
+ else
+ if (prob(40))
+ M << text("\blue You smash through the wall.")
+ dismantle_wall(1)
+ return
+ else
+ M << text("\blue You smash against the wall.")
+ return
+
+ M << "\blue You push the wall but nothing happens!"
+ return
+
+/turf/simulated/wall/attack_hand(mob/user as mob)
+ if ((user.mutations & HULK))
+ if (prob(40))
+ usr << text("\blue You smash through the wall.")
+ dismantle_wall(1)
+ return
+ else
+ usr << text("\blue You punch the wall.")
+ return
+
+ user << "\blue You push the wall but nothing happens!"
+ playsound(src.loc, 'sound/weapons/Genhit.ogg', 25, 1)
+ src.add_fingerprint(user)
+ return
+
+/turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob)
+
+ if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
+ usr << "\red You don't have the dexterity to do this!"
+ return
+
+ if (istype(W, /obj/item/weapon/weldingtool) && W:welding)
+ var/turf/T = get_turf(user)
+ if (!( istype(T, /turf) ))
+ return
+
+ if (thermite)
+ var/obj/effect/overlay/O = new/obj/effect/overlay( src )
+ O.name = "Thermite"
+ O.desc = "Looks hot."
+ O.icon = 'icons/effects/fire.dmi'
+ O.icon_state = "2"
+ O.anchored = 1
+ O.density = 1
+ O.layer = 5
+ var/turf/simulated/floor/F = ReplaceWithPlating()
+ F.burn_tile()
+ F.icon_state = "wall_thermite"
+ user << "\red The thermite melts the wall."
+ spawn(100) del(O)
+ F.sd_LumReset()
+ return
+
+ if (W:remove_fuel(0,user))
+ W:welding = 2
+ user << "\blue Now disassembling the outer wall plating."
+ playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
+ sleep(100)
+ if (W && istype(src, /turf/simulated/wall))
+ if ((get_turf(user) == T && user.equipped() == W))
+ user << "\blue You disassembled the outer wall plating."
+ dismantle_wall()
+ W:welding = 1
+ else
+ user << "\blue You need more welding fuel to complete this task."
+ return
+
+ else if (istype(W, /obj/item/weapon/pickaxe/plasmacutter))
+ var/turf/T = user.loc
+ if (!( istype(T, /turf) ))
+ return
+
+ if (thermite)
+ var/obj/effect/overlay/O = new/obj/effect/overlay( src )
+ O.name = "Thermite"
+ O.desc = "Looks hot."
+ O.icon = 'icons/effects/fire.dmi'
+ O.icon_state = "2"
+ O.anchored = 1
+ O.density = 1
+ O.layer = 5
+ var/turf/simulated/floor/F = ReplaceWithPlating()
+ F.burn_tile()
+ F.icon_state = "wall_thermite"
+ user << "\red The thermite melts the wall."
+ spawn(100) del(O)
+ F.sd_LumReset()
+ return
+
+ else
+ user << "\blue Now disassembling the outer wall plating."
+ playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
+ sleep(60)
+ if (W && istype(src, /turf/simulated/wall))
+ if ((get_turf(user) == T && user.equipped() == W))
+ user << "\blue You disassembled the outer wall plating."
+ dismantle_wall()
+ for(var/mob/O in viewers(user, 5))
+ O.show_message(text("\blue The wall was sliced apart by []!", user), 1, text("\red You hear metal being sliced apart."), 2)
+ return
+
+ else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill))
+ var/turf/T = user.loc
+ user << "\blue Now drilling through wall."
+ sleep(60)
+ if (W && istype(src, /turf/simulated/wall))
+ if ((user.loc == T && user.equipped() == W))
+ dismantle_wall(1)
+ for(var/mob/O in viewers(user, 5))
+ O.show_message(text("\blue The wall was drilled apart by []!", user), 1, text("\red You hear metal being drilled appart."), 2)
+ return
+
+ else if(istype(W, /obj/item/weapon/melee/energy/blade))
+ var/turf/T = user.loc
+ user << "\blue Now slicing through wall."
+ W:spark_system.start()
+ playsound(src.loc, "sparks", 50, 1)
+ sleep(70)
+ if (W && istype(src, /turf/simulated/wall))
+ if ((user.loc == T && user.equipped() == W))
+ W:spark_system.start()
+ playsound(src.loc, "sparks", 50, 1)
+ playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
+ dismantle_wall(1)
+ for(var/mob/O in viewers(user, 5))
+ O.show_message(text("\blue The wall was sliced apart by []!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
+ return
+
+ else if(istype(W,/obj/item/apc_frame))
+ var/obj/item/apc_frame/AH = W
+ AH.try_build(src)
+ else if(istype(W,/obj/item/weapon/contraband/poster))
+ var/obj/item/weapon/contraband/poster/P = W
+ if(P.resulting_poster)
+ var/check = 0
+ var/stuff_on_wall = 0
+ for( var/obj/O in src.contents) //Let's see if it already has a poster on it or too much stuff
+ if(istype(O,/obj/effect/decal/poster))
+ check = 1
+ break
+ stuff_on_wall++
+ if(stuff_on_wall==3)
+ check = 1
+ break
+
+ if(check)
+ user << "The wall is far too cluttered to place a poster!"
+ return
+
+ user << "You start placing the poster on the wall..." //Looks like it's uncluttered enough. Place the poster.
+
+ P.resulting_poster.loc = src
+ var/temp = P.resulting_poster.icon_state
+ var/temp_loc = user.loc
+ P.resulting_poster.icon_state = "poster_being_set"
+ playsound(P.resulting_poster.loc, 'sound/items/poster_being_created.ogg', 100, 1)
+ sleep(24)
+
+ if(user.loc == temp_loc)//Let's check if he still is there
+ user << "You place the poster!"
+ P.resulting_poster.icon_state = temp
+ src.contents += P.resulting_poster
+ del(P)
+ else
+ user << "You stop placing the poster."
+ P.resulting_poster.loc = P
+ P.resulting_poster.icon_state = temp
+ else
+ return attack_hand(user)
+ return
+
+
+/turf/simulated/wall/r_wall/attackby(obj/item/W as obj, mob/user as mob)
+
+ if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
+ usr << "\red You don't have the dexterity to do this!"
+ return
+
+ if(!istype(src, /turf/simulated/wall/r_wall))
+ return // this may seem stupid and redundant but apparently floors can call this attackby() proc, it was spamming shit up. -- Doohl
+
+
+ if (istype(W, /obj/item/weapon/weldingtool) && W:welding)
+ W:eyecheck(user)
+ var/turf/T = user.loc
+ if (!( istype(T, /turf) ))
+ return
+
+ if (thermite)
+ var/obj/effect/overlay/O = new/obj/effect/overlay( src )
+ O.name = "Thermite"
+ O.desc = "Looks hot."
+ O.icon = 'icons/effects/fire.dmi'
+ O.icon_state = "2"
+ O.anchored = 1
+ O.density = 1
+ O.layer = 5
+ var/turf/simulated/floor/F = ReplaceWithPlating()
+ F.burn_tile()
+ F.icon_state = "wall_thermite"
+ user << "\red The thermite melts the wall."
+ spawn(100) del(O)
+ F.sd_LumReset()
+ return
+
+ if (src.d_state == 2)
+ W:welding = 2
+ user << "\blue Slicing metal cover."
+ playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
+ sleep(60)
+ if ((user.loc == T && user.equipped() == W))
+ src.d_state = 3
+ user << "\blue You removed the metal cover."
+ W:welding = 1
+
+ else if (src.d_state == 5)
+ W:welding = 2
+ user << "\blue Removing support rods."
+ playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
+ sleep(100)
+ if ((user.loc == T && user.equipped() == W))
+ src.d_state = 6
+ new /obj/item/stack/rods( src )
+ user << "\blue You removed the support rods."
+ W:welding = 1
+
+ else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
+ var/turf/T = user.loc
+ if (!( istype(T, /turf) ))
+ return
+
+ if (thermite)
+ var/obj/effect/overlay/O = new/obj/effect/overlay( src )
+ O.name = "Thermite"
+ O.desc = "Looks hot."
+ O.icon = 'icons/effects/fire.dmi'
+ O.icon_state = "2"
+ O.anchored = 1
+ O.density = 1
+ O.layer = 5
+ var/turf/simulated/floor/F = ReplaceWithPlating()
+ F.burn_tile()
+ F.icon_state = "wall_thermite"
+ user << "\red The thermite melts the wall."
+ spawn(100) del(O)
+ F.sd_LumReset()
+ return
+
+ if (src.d_state == 2)
+ user << "\blue Slicing metal cover."
+ playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
+ sleep(40)
+ if ((user.loc == T && user.equipped() == W))
+ src.d_state = 3
+ user << "\blue You removed the metal cover."
+
+ else if (src.d_state == 5)
+ user << "\blue Removing support rods."
+ playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
+ sleep(70)
+ if ((user.loc == T && user.equipped() == W))
+ src.d_state = 6
+ new /obj/item/stack/rods( src )
+ user << "\blue You removed the support rods."
+
+ else if(istype(W, /obj/item/weapon/melee/energy/blade))
+ user << "\blue This wall is too thick to slice through. You will need to find a different path."
+ return
+
+ else if (istype(W, /obj/item/weapon/wrench))
+ if (src.d_state == 4)
+ var/turf/T = user.loc
+ user << "\blue Detaching support rods."
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
+ sleep(40)
+ if ((user.loc == T && user.equipped() == W))
+ src.d_state = 5
+ user << "\blue You detach the support rods."
+
+ else if (istype(W, /obj/item/weapon/wirecutters))
+ if (src.d_state == 0)
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
+ src.d_state = 1
+ new /obj/item/stack/rods( src )
+
+ else if (istype(W, /obj/item/weapon/screwdriver))
+ if (src.d_state == 1)
+ var/turf/T = user.loc
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
+ user << "\blue Removing support lines."
+ sleep(40)
+ if ((user.loc == T && user.equipped() == W))
+ src.d_state = 2
+ user << "\blue You removed the support lines."
+
+ else if (istype(W, /obj/item/weapon/crowbar))
+
+ if (src.d_state == 3)
+ var/turf/T = user.loc
+ user << "\blue Prying cover off."
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
+ sleep(100)
+ if ((user.loc == T && user.equipped() == W))
+ src.d_state = 4
+ user << "\blue You removed the cover."
+
+ else if (src.d_state == 6)
+ var/turf/T = user.loc
+ user << "\blue Prying outer sheath off."
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
+ sleep(100)
+ if(src)
+ if ((user.loc == T && user.equipped() == W))
+ user << "\blue You removed the outer sheath."
+ dismantle_wall()
+ return
+
+ else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill))
+ var/turf/T = user.loc
+ user << "\blue You begin to drill though, this will take some time."
+ sleep(200)
+ if(src)
+ if ((user.loc == T && user.equipped() == W))
+ user << "\blue Your drill tears though the reinforced plating."
+ dismantle_wall()
+ return
+
+ else if ((istype(W, /obj/item/stack/sheet/metal)) && (src.d_state))
+ var/turf/T = user.loc
+ user << "\blue Repairing wall."
+ sleep(100)
+ if ((user.loc == T && user.equipped() == W))
+ src.d_state = 0
+ src.icon_state = initial(src.icon_state)
+ user << "\blue You repaired the wall."
+ if (W:amount > 1)
+ W:amount--
+ else
+ del(W)
+
+ else if(istype(W,/obj/item/weapon/contraband/poster))
+ var/obj/item/weapon/contraband/poster/P = W
+ if(P.resulting_poster)
+ var/check = 0
+ var/stuff_on_wall = 0
+ for( var/obj/O in src.contents) //Let's see if it already has a poster on it or too much stuff
+ if(istype(O,/obj/effect/decal/poster))
+ check = 1
+ break
+ stuff_on_wall++
+ if(stuff_on_wall==3)
+ check = 1
+ break
+
+ if(check)
+ user << "The wall is far too cluttered to place a poster!"
+ return
+
+ user << "You start placing the poster on the wall..." //Looks like it's uncluttered enough. Place the poster.
+
+ P.resulting_poster.loc = src
+ var/temp = P.resulting_poster.icon_state
+ var/temp_loc = user.loc
+ P.resulting_poster.icon_state = "poster_being_set"
+ playsound(P.resulting_poster.loc, 'sound/items/poster_being_created.ogg', 100, 1)
+ sleep(24)
+
+ if(user.loc == temp_loc)//Let's check if he still is there
+ user << "You place the poster!"
+ P.resulting_poster.icon_state = temp
+ src.contents += P.resulting_poster
+ del(P)
+ else
+ user << "You stop placing the poster."
+ P.resulting_poster.loc = P
+ P.resulting_poster.icon_state = temp
+ return
+
+ if(istype(W,/obj/item/apc_frame))
+ var/obj/item/apc_frame/AH = W
+ AH.try_build(src)
+ return
+
+ if(src.d_state > 0)
+ src.icon_state = "r_wall-[d_state]"
+
+ else
+ return attack_hand(user)
+ return
+
+/turf/simulated/wall/meteorhit(obj/M as obj)
+ if (prob(15))
+ dismantle_wall()
+ else if(prob(70))
+ ReplaceWithPlating()
+ else
+ ReplaceWithLattice()
+ return 0
+
+
+//This is so damaged or burnt tiles or platings don't get remembered as the default tile
+var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","damaged4",
+ "damaged5","panelscorched","floorscorched1","floorscorched2","platingdmg1","platingdmg2",
+ "platingdmg3","plating","light_on","light_on_flicker1","light_on_flicker2",
+ "light_on_clicker3","light_on_clicker4","light_on_clicker5","light_broken",
+ "light_on_broken","light_off","wall_thermite","grass1","grass2","grass3","grass4",
+ "asteroid","asteroid_dug",
+ "asteroid0","asteroid1","asteroid2","asteroid3","asteroid4",
+ "asteroid5","asteroid6","asteroid7","asteroid8",
+ "burning","oldburning","light-on-r","light-on-y","light-on-g","light-on-b")
+
+var/list/plating_icons = list("plating","platingdmg1","platingdmg2","platingdmg3","asteroid","asteroid_dug")
+
+/turf/simulated/floor
+
+ //Note to coders, the 'intact' var can no longer be used to determine if the floor is a plating or not.
+ //Use the is_plating(), is_plasteel_floor() and is_light_floor() procs instead. --Errorage
+ name = "floor"
+ icon = 'icons/turf/floors.dmi'
+ icon_state = "floor"
+ var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default
+ var/icon_plating = "plating"
+ thermal_conductivity = 0.040
+ heat_capacity = 10000
+ var/broken = 0
+ var/burnt = 0
+ var/obj/item/stack/tile/floor_tile = new/obj/item/stack/tile/plasteel
+
+ airless
+ icon_state = "floor"
+ name = "airless floor"
+ oxygen = 0.01
+ nitrogen = 0.01
+ temperature = TCMB
+
+ New()
+ ..()
+ name = "floor"
+
+ light
+ name = "Light floor"
+ luminosity = 5
+ icon_state = "light_on"
+ floor_tile = new/obj/item/stack/tile/light
+
+ New()
+ floor_tile.New() //I guess New() isn't run on objects spawned without the definition of a turf to house them, ah well.
+ var/n = name //just in case commands rename it in the ..() call
+ ..()
+ spawn(4)
+ update_icon()
+ name = n
+
+ grass
+ name = "Grass patch"
+ icon_state = "grass1"
+ floor_tile = new/obj/item/stack/tile/grass
+
+ New()
+ floor_tile.New() //I guess New() isn't run on objects spawned without the definition of a turf to house them, ah well.
+ icon_state = "grass[pick("1","2","3","4")]"
+ ..()
+ spawn(4)
+ update_icon()
+ for(var/direction in cardinal)
+ if(istype(get_step(src,direction),/turf/simulated/floor))
+ var/turf/simulated/floor/FF = get_step(src,direction)
+ FF.update_icon() //so siding get updated properly
+
+/turf/simulated/floor/vault
+ icon_state = "rockvault"
+
+ New(location,type)
+ ..()
+ icon_state = "[type]vault"
+
+/turf/simulated/wall/vault
+ icon_state = "rockvault"
+
+ New(location,type)
+ ..()
+ icon_state = "[type]vault"
+
+/turf/simulated/floor/engine
+ name = "reinforced floor"
+ icon_state = "engine"
+ thermal_conductivity = 0.025
+ heat_capacity = 325000
+
+/turf/simulated/floor/engine/cult
+ name = "engraved floor"
+ icon_state = "cult"
+
+
+/turf/simulated/floor/engine/n20
+ New()
+ ..()
+ var/datum/gas_mixture/adding = new
+ var/datum/gas/sleeping_agent/trace_gas = new
+
+ trace_gas.moles = 2000
+ adding.trace_gases += trace_gas
+ adding.temperature = T20C
+
+ assume_air(adding)
+
+/turf/simulated/floor/engine/vacuum
+ name = "vacuum floor"
+ icon_state = "engine"
+ oxygen = 0
+ nitrogen = 0.001
+ temperature = TCMB
+
+/turf/simulated/floor/plating
+ name = "plating"
+ icon_state = "plating"
+ floor_tile = null
+ intact = 0
+
+/turf/simulated/floor/plating/airless
+ icon_state = "plating"
+ name = "airless plating"
+ oxygen = 0.01
+ nitrogen = 0.01
+ temperature = TCMB
+
+ New()
+ ..()
+ name = "plating"
+
+/turf/simulated/floor/grid
+ icon = 'icons/turf/floors.dmi'
+ icon_state = "circuit"
+
+/turf/simulated/floor/New()
+ ..()
+ if(icon_state in icons_to_ignore_at_floor_init) //so damaged/burned tiles or plating icons aren't saved as the default
+ icon_regular_floor = "floor"
+ else
+ icon_regular_floor = icon_state
+
+//turf/simulated/floor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+// if ((istype(mover, /obj/machinery/vehicle) && !(src.burnt)))
+// if (!( locate(/obj/machinery/mass_driver, src) ))
+// return 0
+// return ..()
+
+/turf/simulated/floor/ex_act(severity)
+ //set src in oview(1)
+ switch(severity)
+ if(1.0)
+ src.ReplaceWithSpace()
+ if(2.0)
+ switch(pick(1,2;75,3))
+ if (1)
+ src.ReplaceWithLattice()
+ if(prob(33)) new /obj/item/stack/sheet/metal(src)
+ if(2)
+ src.ReplaceWithSpace()
+ if(3)
+ if(prob(80))
+ src.break_tile_to_plating()
+ else
+ src.break_tile()
+ src.hotspot_expose(1000,CELL_VOLUME)
+ if(prob(33)) new /obj/item/stack/sheet/metal(src)
+ if(3.0)
+ if (prob(50))
+ src.break_tile()
+ src.hotspot_expose(1000,CELL_VOLUME)
+ return
+
+/turf/simulated/floor/blob_act()
+ return
+
+turf/simulated/floor/proc/update_icon()
+ if(is_plasteel_floor())
+ if(!broken && !burnt)
+ icon_state = icon_regular_floor
+ if(is_plating())
+ if(!broken && !burnt)
+ icon_state = icon_plating //Because asteroids are 'platings' too.
+ if(is_light_floor())
+ var/obj/item/stack/tile/light/T = floor_tile
+ if(T.on)
+ switch(T.state)
+ if(0)
+ icon_state = "light_on"
+ sd_SetLuminosity(5)
+ if(1)
+ var/num = pick("1","2","3","4")
+ icon_state = "light_on_flicker[num]"
+ sd_SetLuminosity(5)
+ if(2)
+ icon_state = "light_on_broken"
+ sd_SetLuminosity(5)
+ if(3)
+ icon_state = "light_off"
+ sd_SetLuminosity(0)
+ else
+ sd_SetLuminosity(0)
+ icon_state = "light_off"
+ if(is_grass_floor())
+ if(!broken && !burnt)
+ if(!(icon_state in list("grass1","grass2","grass3","grass4")))
+ icon_state = "grass[pick("1","2","3","4")]"
+ spawn(1)
+ if(istype(src,/turf/simulated/floor)) //Was throwing runtime errors due to a chance of it changing to space halfway through.
+ if(air)
+ update_visuals(air)
+
+turf/simulated/floor/return_siding_icon_state()
+ ..()
+ if(is_grass_floor())
+ var/dir_sum = 0
+ for(var/direction in cardinal)
+ var/turf/T = get_step(src,direction)
+ if(!(T.is_grass_floor()))
+ dir_sum += direction
+ if(dir_sum)
+ return "wood_siding[dir_sum]"
+ else
+ return 0
+
+
+/turf/simulated/floor/attack_paw(mob/user as mob)
+ return src.attack_hand(user)
+
+/turf/simulated/floor/attack_hand(mob/user as mob)
+ if (is_light_floor())
+ var/obj/item/stack/tile/light/T = floor_tile
+ T.on = !T.on
+ update_icon()
+ if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
+ return
+ if (user.pulling.anchored)
+ return
+ if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
+ return
+ if (ismob(user.pulling))
+ var/mob/M = user.pulling
+ var/mob/t = M.pulling
+ M.stop_pulling()
+ step(user.pulling, get_dir(user.pulling.loc, src))
+ M.start_pulling(t)
+ else
+ step(user.pulling, get_dir(user.pulling.loc, src))
+ return
+
+/turf/simulated/floor/engine/attackby(obj/item/weapon/C as obj, mob/user as mob)
+ if(!C)
+ return
+ if(!user)
+ return
+ if(istype(C, /obj/item/weapon/wrench))
+ user << "\blue Removing rods..."
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 80, 1)
+ if(do_after(user, 30))
+ new /obj/item/stack/rods(src, 2)
+ ReplaceWithFloor()
+ var/turf/simulated/floor/F = src
+ F.make_plating()
+ return
+
+/turf/simulated/floor/proc/gets_drilled()
+ return
+
+/turf/simulated/floor/proc/break_tile_to_plating()
+ if(!is_plating())
+ make_plating()
+ break_tile()
+
+/turf/simulated/floor/is_plasteel_floor()
+ if(istype(floor_tile,/obj/item/stack/tile/plasteel))
+ return 1
+ else
+ return 0
+
+/turf/simulated/floor/is_light_floor()
+ if(istype(floor_tile,/obj/item/stack/tile/light))
+ return 1
+ else
+ return 0
+
+/turf/simulated/floor/is_grass_floor()
+ if(istype(floor_tile,/obj/item/stack/tile/grass))
+ return 1
+ else
+ return 0
+
+/turf/simulated/floor/is_plating()
+ if(!floor_tile)
+ return 1
+ return 0
+
+/turf/simulated/floor/proc/break_tile()
+ if(istype(src,/turf/simulated/floor/engine)) return
+ if(istype(src,/turf/simulated/floor/mech_bay_recharge_floor))
+ src.ReplaceWithPlating()
+ if(broken) return
+ if(is_plasteel_floor())
+ src.icon_state = "damaged[pick(1,2,3,4,5)]"
+ broken = 1
+ else if(is_plasteel_floor())
+ src.icon_state = "light_broken"
+ broken = 1
+ else if(is_plating())
+ src.icon_state = "platingdmg[pick(1,2,3)]"
+ broken = 1
+ else if(is_grass_floor())
+ src.icon_state = "sand[pick("1","2","3")]"
+ broken = 1
+
+/turf/simulated/floor/proc/burn_tile()
+ if(istype(src,/turf/simulated/floor/engine)) return
+ if(broken || burnt) return
+ if(is_plasteel_floor())
+ src.icon_state = "damaged[pick(1,2,3,4,5)]"
+ burnt = 1
+ else if(is_plasteel_floor())
+ src.icon_state = "floorscorched[pick(1,2)]"
+ burnt = 1
+ else if(is_plating())
+ src.icon_state = "panelscorched"
+ burnt = 1
+ else if(is_grass_floor())
+ src.icon_state = "sand[pick("1","2","3")]"
+ burnt = 1
+
+//This proc will delete the floor_tile and the update_iocn() proc will then change the icon_state of the turf
+//This proc auto corrects the grass tiles' siding.
+/turf/simulated/floor/proc/make_plating()
+ if(istype(src,/turf/simulated/floor/engine)) return
+
+ if(is_grass_floor())
+ for(var/direction in cardinal)
+ if(istype(get_step(src,direction),/turf/simulated/floor))
+ var/turf/simulated/floor/FF = get_step(src,direction)
+ FF.update_icon() //so siding get updated properly
+
+ if(!floor_tile) return
+ del(floor_tile)
+ icon_plating = "plating"
+ sd_SetLuminosity(0)
+ floor_tile = null
+ intact = 0
+ broken = 0
+ burnt = 0
+
+ update_icon()
+ levelupdate()
+
+//This proc will make the turf a plasteel floor tile. The expected argument is the tile to make the turf with
+//If none is given it will make a new object. dropping or unequipping must be handled before or after calling
+//this proc.
+/turf/simulated/floor/proc/make_plasteel_floor(var/obj/item/stack/tile/plasteel/T = null)
+ broken = 0
+ burnt = 0
+ intact = 1
+ sd_SetLuminosity(0)
+ if(T)
+ if(istype(T,/obj/item/stack/tile/plasteel))
+ floor_tile = T
+ if (icon_regular_floor)
+ icon_state = icon_regular_floor
+ else
+ icon_state = "floor"
+ icon_regular_floor = icon_state
+ update_icon()
+ levelupdate()
+ return
+ //if you gave a valid parameter, it won't get thisf ar.
+ floor_tile = new/obj/item/stack/tile/plasteel
+ icon_state = "floor"
+ icon_regular_floor = icon_state
+
+ update_icon()
+ levelupdate()
+
+//This proc will make the turf a light floor tile. The expected argument is the tile to make the turf with
+//If none is given it will make a new object. dropping or unequipping must be handled before or after calling
+//this proc.
+/turf/simulated/floor/proc/make_light_floor(var/obj/item/stack/tile/light/T = null)
+ broken = 0
+ burnt = 0
+ intact = 1
+ if(T)
+ if(istype(T,/obj/item/stack/tile/light))
+ floor_tile = T
+ update_icon()
+ levelupdate()
+ return
+ //if you gave a valid parameter, it won't get thisf ar.
+ floor_tile = new/obj/item/stack/tile/light
+
+ update_icon()
+ levelupdate()
+
+//This proc will make a turf into a grass patch. Fun eh? Insert the grass tile to be used as the argument
+//If no argument is given a new one will be made.
+/turf/simulated/floor/proc/make_grass_floor(var/obj/item/stack/tile/grass/T = null)
+ broken = 0
+ burnt = 0
+ intact = 1
+ if(T)
+ if(istype(T,/obj/item/stack/tile/grass))
+ floor_tile = T
+ update_icon()
+ levelupdate()
+ return
+ //if you gave a valid parameter, it won't get thisf ar.
+ floor_tile = new/obj/item/stack/tile/grass
+
+ update_icon()
+ levelupdate()
+
+/turf/simulated/floor/attackby(obj/item/C as obj, mob/user as mob)
+
+ if(!C || !user)
+ return 0
+
+ if(istype(C,/obj/item/weapon/light/bulb)) //only for light tiles
+ if(is_light_floor())
+ var/obj/item/stack/tile/light/T = floor_tile
+ if(T.state)
+ user.u_equip(C)
+ del(C)
+ T.state = C //fixing it by bashing it with a light bulb, fun eh?
+ update_icon()
+ user << "\blue You replace the light bulb."
+ else
+ user << "\blue The lightbulb seems fine, no need to replace it."
+
+ if(istype(C, /obj/item/weapon/crowbar) && (!(is_plating())))
+ if(broken || burnt)
+ user << "\red You remove the broken plating."
+ else
+ user << "\red You remove the [floor_tile.name]."
+ new floor_tile.type(src)
+
+ make_plating()
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 80, 1)
+
+ return
+
+ if(istype(C, /obj/item/stack/rods))
+ var/obj/item/stack/rods/R = C
+ if (is_plating())
+ if (R.amount >= 2)
+ user << "\blue Reinforcing the floor..."
+ if(do_after(user, 30) && R && R.amount >= 2 && is_plating())
+ ReplaceWithEngineFloor()
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 80, 1)
+ R.use(2)
+ return
+ else
+ user << "\red You need more rods."
+ else
+ user << "\red You must remove the plating first."
+ return
+
+ if(istype(C, /obj/item/stack/tile))
+ if(is_plating())
+ if(!broken && !burnt)
+ var/obj/item/stack/tile/T = C
+ floor_tile = new T.type
+ intact = 1
+ if(istype(T,/obj/item/stack/tile/light))
+ var/obj/item/stack/tile/light/L = T
+ var/obj/item/stack/tile/light/F = floor_tile
+ F.state = L.state
+ F.on = L.on
+ if(istype(T,/obj/item/stack/tile/grass))
+ for(var/direction in cardinal)
+ if(istype(get_step(src,direction),/turf/simulated/floor))
+ var/turf/simulated/floor/FF = get_step(src,direction)
+ FF.update_icon() //so siding gets updated properly
+ T.use(1)
+ update_icon()
+ levelupdate()
+ playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1)
+ else
+ user << "\blue This section is too damaged to support a tile. Use a welder to fix the damage."
+
+
+ if(istype(C, /obj/item/stack/cable_coil))
+ if(is_plating())
+ var/obj/item/stack/cable_coil/coil = C
+ coil.turf_place(src, user)
+ else
+ user << "\red You must remove the plating first."
+
+ if(istype(C, /obj/item/weapon/shovel))
+ if(is_grass_floor())
+ new /obj/item/weapon/ore/glass(src)
+ new /obj/item/weapon/ore/glass(src) //Make some sand if you shovel grass
+ user << "\blue You shovel the grass."
+ make_plating()
+ else
+ user << "\red You cannot shovel this."
+
+ if(istype(C, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/welder = C
+ if(welder.welding && (is_plating()))
+ if(broken || burnt)
+ if(welder.remove_fuel(0,user))
+ user << "\red You fix some dents on the broken plating."
+ playsound(src.loc, 'sound/items/Welder.ogg', 80, 1)
+ icon_state = "plating"
+ burnt = 0
+ broken = 0
+ else
+ user << "\blue You need more welding fuel to complete this task."
+
+/turf/unsimulated/floor/attack_paw(user as mob)
+ return src.attack_hand(user)
+
+/turf/unsimulated/floor/attack_hand(var/mob/user as mob)
+ if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
+ return
+ if (user.pulling.anchored)
+ return
+ if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
+ return
+ if (ismob(user.pulling))
+ var/mob/M = user.pulling
+ var/mob/t = M.pulling
+ M.stop_pulling()
+ step(user.pulling, get_dir(user.pulling.loc, src))
+ M.start_pulling(t)
+ else
+ step(user.pulling, get_dir(user.pulling.loc, src))
+ return
+
+// imported from space.dm
+
+/turf/space/attack_paw(mob/user as mob)
+ return src.attack_hand(user)
+
+/turf/space/attack_hand(mob/user as mob)
+ if ((user.restrained() || !( user.pulling )))
+ return
+ if (user.pulling.anchored)
+ return
+ if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
+ return
+ if (ismob(user.pulling))
+ var/mob/M = user.pulling
+ var/atom/movable/t = M.pulling
+ M.stop_pulling()
+ step(user.pulling, get_dir(user.pulling.loc, src))
+ M.start_pulling(t)
+ else
+ step(user.pulling, get_dir(user.pulling.loc, src))
+ return
+
+/turf/space/attackby(obj/item/C as obj, mob/user as mob)
+
+ if (istype(C, /obj/item/stack/rods))
+ var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
+ if(L)
+ return
+ var/obj/item/stack/rods/R = C
+ user << "\blue Constructing support lattice ..."
+ playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1)
+ ReplaceWithLattice()
+ R.use(1)
+ return
+
+ if (istype(C, /obj/item/stack/tile/plasteel))
+ var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
+ if(L)
+ var/obj/item/stack/tile/plasteel/S = C
+ del(L)
+ playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1)
+ S.build(src)
+ S.use(1)
+ return
+ else
+ user << "\red The plating is going to need some support."
+ return
+
+
+// Ported from unstable r355
+
+/turf/space/Entered(atom/movable/A as mob|obj)
+ ..()
+ if ((!(A) || src != A.loc || istype(null, /obj/effect/beam))) return
+
+ inertial_drift(A)
+
+ if(ticker && ticker.mode)
+
+ // Okay, so let's make it so that people can travel z levels but not nuke disks!
+ // if(ticker.mode.name == "nuclear emergency") return
+
+ if(ticker.mode.name == "extended"||ticker.mode.name == "sandbox")
+ Sandbox_Spacemove(A)
+
+ else
+ if (src.x <= 2 || A.x >= (world.maxx - 1) || src.y <= 2 || A.y >= (world.maxy - 1))
+ if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
+ del(A)
+ return
+
+ if(istype(A, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks travel Z levels ... And moving this shit down here so it only fires when they're actually trying to change z-level.
+ return
+
+ if(!isemptylist(A.search_contents_for(/obj/item/weapon/disk/nuclear)))
+ if(istype(A, /mob/living))
+ var/mob/living/MM = A
+ if(MM.client)
+ MM << "\red Something you are carrying is preventing you from leaving. Don't play stupid; you know exactly what it is."
+ return
+
+
+
+ var/move_to_z_str = pickweight(accessable_z_levels)
+
+ var/move_to_z = text2num(move_to_z_str)
+
+ if(!move_to_z)
+ return
+
+
+
+ A.z = move_to_z
+
+
+ if(src.x <= 2)
+ A.x = world.maxx - 2
+
+ else if (A.x >= (world.maxx - 1))
+ A.x = 3
+
+ else if (src.y <= 2)
+ A.y = world.maxy - 2
+
+ else if (A.y >= (world.maxy - 1))
+ A.y = 3
+
+ spawn (0)
+ if ((A && A.loc))
+ A.loc.Entered(A)
+
+// if(istype(A, /obj/structure/closet/coffin))
+// coffinhandler.Add(A)
+
+/turf/space/proc/Sandbox_Spacemove(atom/movable/A as mob|obj)
+ var/cur_x
+ var/cur_y
+ var/next_x
+ var/next_y
+ var/target_z
+ var/list/y_arr
+
+ if(src.x <= 1)
+ if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
+ del(A)
+ return
+
+ var/list/cur_pos = src.get_global_map_pos()
+ if(!cur_pos) return
+ cur_x = cur_pos["x"]
+ cur_y = cur_pos["y"]
+ next_x = (--cur_x||global_map.len)
+ y_arr = global_map[next_x]
+ target_z = y_arr[cur_y]
+/*
+ //debug
+ world << "Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]"
+ world << "Target Z = [target_z]"
+ world << "Next X = [next_x]"
+ //debug
+*/
+ if(target_z)
+ A.z = target_z
+ A.x = world.maxx - 2
+ spawn (0)
+ if ((A && A.loc))
+ A.loc.Entered(A)
+ else if (src.x >= world.maxx)
+ if(istype(A, /obj/effect/meteor))
+ del(A)
+ return
+
+ var/list/cur_pos = src.get_global_map_pos()
+ if(!cur_pos) return
+ cur_x = cur_pos["x"]
+ cur_y = cur_pos["y"]
+ next_x = (++cur_x > global_map.len ? 1 : cur_x)
+ y_arr = global_map[next_x]
+ target_z = y_arr[cur_y]
+/*
+ //debug
+ world << "Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]"
+ world << "Target Z = [target_z]"
+ world << "Next X = [next_x]"
+ //debug
+*/
+ if(target_z)
+ A.z = target_z
+ A.x = 3
+ spawn (0)
+ if ((A && A.loc))
+ A.loc.Entered(A)
+ else if (src.y <= 1)
+ if(istype(A, /obj/effect/meteor))
+ del(A)
+ return
+ var/list/cur_pos = src.get_global_map_pos()
+ if(!cur_pos) return
+ cur_x = cur_pos["x"]
+ cur_y = cur_pos["y"]
+ y_arr = global_map[cur_x]
+ next_y = (--cur_y||y_arr.len)
+ target_z = y_arr[next_y]
+/*
+ //debug
+ world << "Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]"
+ world << "Next Y = [next_y]"
+ world << "Target Z = [target_z]"
+ //debug
+*/
+ if(target_z)
+ A.z = target_z
+ A.y = world.maxy - 2
+ spawn (0)
+ if ((A && A.loc))
+ A.loc.Entered(A)
+
+ else if (src.y >= world.maxy)
+ if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
+ del(A)
+ return
+ var/list/cur_pos = src.get_global_map_pos()
+ if(!cur_pos) return
+ cur_x = cur_pos["x"]
+ cur_y = cur_pos["y"]
+ y_arr = global_map[cur_x]
+ next_y = (++cur_y > y_arr.len ? 1 : cur_y)
+ target_z = y_arr[next_y]
+/*
+ //debug
+ world << "Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]"
+ world << "Next Y = [next_y]"
+ world << "Target Z = [target_z]"
+ //debug
+*/
+ if(target_z)
+ A.z = target_z
+ A.y = 3
+ spawn (0)
+ if ((A && A.loc))
+ A.loc.Entered(A)
+ return
+
+/obj/effect/vaultspawner
+ var/maxX = 6
+ var/maxY = 6
+ var/minX = 2
+ var/minY = 2
+
+/obj/effect/vaultspawner/New(turf/location as turf,lX = minX,uX = maxX,lY = minY,uY = maxY,var/type = null)
+ if(!type)
+ type = pick("sandstone","rock","alien")
+
+ var/lowBoundX = location.x
+ var/lowBoundY = location.y
+
+ var/hiBoundX = location.x + rand(lX,uX)
+ var/hiBoundY = location.y + rand(lY,uY)
+
+ var/z = location.z
+
+ for(var/i = lowBoundX,i<=hiBoundX,i++)
+ for(var/j = lowBoundY,j<=hiBoundY,j++)
+ if(i == lowBoundX || i == hiBoundX || j == lowBoundY || j == hiBoundY)
+ new /turf/simulated/wall/vault(locate(i,j,z),type)
+ else
+ new /turf/simulated/floor/vault(locate(i,j,z),type)
+
+ del(src)
+
+/turf/proc/kill_creatures(mob/U = null)//Will kill people/creatures and damage mechs./N
+//Useful to batch-add creatures to the list.
+ for(var/mob/living/M in src)
+ if(M==U) continue//Will not harm U. Since null != M, can be excluded to kill everyone.
+ spawn(0)
+ M.gib()
+ for(var/obj/mecha/M in src)//Mecha are not gibbed but are damaged.
+ spawn(0)
+ M.take_damage(100, "brute")
+ for(var/obj/effect/critter/M in src)
+ spawn(0)
+ M.Die()
+
+/turf/proc/Bless()
+ if(flags & NOJAUNT)
+ return
+ flags |= NOJAUNT
overlays += image('icons/effects/water.dmi',src,"holywater")*/
\ No newline at end of file
diff --git a/code/unused/cable_heavyduty.dm b/code/unused/cable_heavyduty.dm
index cefc3e253e6..36bd4f93eb7 100644
--- a/code/unused/cable_heavyduty.dm
+++ b/code/unused/cable_heavyduty.dm
@@ -1,28 +1,28 @@
-/obj/item/weapon/cable_coil/heavyduty
- name = "heavy cable coil"
- icon = 'icons/obj/power.dmi'
- icon_state = "wire"
-
-/obj/structure/cable/heavyduty
- icon = 'icons/obj/power_cond_heavy.dmi'
- name = "large power cable"
- desc = "This cable is tough. It cannot be cut with simple hand tools."
- layer = 2.39 //Just below pipes, which are at 2.4
-
-/obj/structure/cable/heavyduty/attackby(obj/item/W, mob/user)
-
- var/turf/T = src.loc
- if(T.intact)
- return
-
- if(istype(W, /obj/item/weapon/wirecutters))
- usr << "\blue These cables are too tough to be cut with those [W.name]."
- return
- else if(istype(W, /obj/item/weapon/cable_coil))
- usr << "\blue You will need heavier cables to connect to these."
- return
- else
- ..()
-
-/obj/structure/cable/heavyduty/cableColor(var/colorC)
+/obj/item/stack/cable_coil/heavyduty
+ name = "heavy cable coil"
+ icon = 'icons/obj/power.dmi'
+ icon_state = "wire"
+
+/obj/structure/cable/heavyduty
+ icon = 'icons/obj/power_cond_heavy.dmi'
+ name = "large power cable"
+ desc = "This cable is tough. It cannot be cut with simple hand tools."
+ layer = 2.39 //Just below pipes, which are at 2.4
+
+/obj/structure/cable/heavyduty/attackby(obj/item/W, mob/user)
+
+ var/turf/T = src.loc
+ if(T.intact)
+ return
+
+ if(istype(W, /obj/item/weapon/wirecutters))
+ usr << "\blue These cables are too tough to be cut with those [W.name]."
+ return
+ else if(istype(W, /obj/item/stack/cable_coil))
+ usr << "\blue You will need heavier cables to connect to these."
+ return
+ else
+ ..()
+
+/obj/structure/cable/heavyduty/cableColor(var/colorC)
return
\ No newline at end of file
diff --git a/code/unused/computer2/buildandrepair.dm b/code/unused/computer2/buildandrepair.dm
index 1e1a77afce8..2fde1740b77 100644
--- a/code/unused/computer2/buildandrepair.dm
+++ b/code/unused/computer2/buildandrepair.dm
@@ -1,150 +1,150 @@
-//Motherboard is just used in assembly/disassembly, doesn't exist in the actual computer object.
-/obj/item/weapon/motherboard
- name = "Computer mainboard"
- desc = "A computer motherboard."
- icon = 'icons/obj/module.dmi'
- icon_state = "mainboard"
- item_state = "electronic"
- w_class = 3
- var/created_name = null //If defined, result computer will have this name.
-
-/obj/computer2frame
- density = 1
- anchored = 0
- name = "Computer-frame"
- icon = 'icons/obj/stock_parts.dmi'
- icon_state = "0"
- var/state = 0
- var/obj/item/weapon/motherboard/mainboard = null
- var/obj/item/weapon/disk/data/fixed_disk/hd = null
- var/list/peripherals = list()
- var/created_icon_state = "aiupload"
-
-/obj/computer2frame/attackby(obj/item/P as obj, mob/user as mob)
- switch(state)
- if(0)
- if(istype(P, /obj/item/weapon/wrench))
- playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
- if(do_after(user, 20))
- user << "\blue You wrench the frame into place."
- src.anchored = 1
- src.state = 1
- if(istype(P, /obj/item/weapon/weldingtool))
- playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
- if(do_after(user, 20))
- user << "\blue You deconstruct the frame."
- new /obj/item/stack/sheet/metal( src.loc, 5 )
- del(src)
- if(1)
- if(istype(P, /obj/item/weapon/wrench))
- playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
- if(do_after(user, 20))
- user << "\blue You unfasten the frame."
- src.anchored = 0
- src.state = 0
- if(istype(P, /obj/item/weapon/motherboard) && !mainboard)
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- user << "\blue You place the mainboard inside the frame."
- src.icon_state = "1"
- src.mainboard = P
- user.drop_item()
- P.loc = src
- if(istype(P, /obj/item/weapon/screwdriver) && mainboard)
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "\blue You screw the mainboard into place."
- src.state = 2
- src.icon_state = "2"
- if(istype(P, /obj/item/weapon/crowbar) && mainboard)
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- user << "\blue You remove the mainboard."
- src.state = 1
- src.icon_state = "0"
- mainboard.loc = src.loc
- src.mainboard = null
- if(2)
- if(istype(P, /obj/item/weapon/screwdriver) && mainboard && (!peripherals.len))
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "\blue You unfasten the mainboard."
- src.state = 1
- src.icon_state = "1"
-
- if(istype(P, /obj/item/weapon/peripheral))
- if(src.peripherals.len < 3)
- user.drop_item()
- src.peripherals.Add(P)
- P.loc = src
- user << "\blue You add [P] to the frame."
- else
- user << "\red There is no more room for peripheral cards."
-
- if(istype(P, /obj/item/weapon/crowbar) && src.peripherals.len)
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- user << "\blue You remove the peripheral boards."
- for(var/obj/item/weapon/peripheral/W in src.peripherals)
- W.loc = src.loc
- src.peripherals.Remove(W)
-
- if(istype(P, /obj/item/weapon/cable_coil))
- if(P:amount >= 5)
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- if(do_after(user, 20))
- P:amount -= 5
- if(!P:amount) del(P)
- user << "\blue You add cables to the frame."
- src.state = 3
- src.icon_state = "3"
- if(3)
- if(istype(P, /obj/item/weapon/wirecutters))
- playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
- user << "\blue You remove the cables."
- src.state = 2
- src.icon_state = "2"
- var/obj/item/weapon/cable_coil/A = new /obj/item/weapon/cable_coil( src.loc )
- A.amount = 5
- if(src.hd)
- src.hd.loc = src.loc
- src.hd = null
-
- if(istype(P, /obj/item/weapon/disk/data/fixed_disk) && !src.hd)
- user.drop_item()
- src.hd = P
- P.loc = src
- user << "\blue You connect the drive to the cabling."
-
- if(istype(P, /obj/item/weapon/crowbar) && src.hd)
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- user << "\blue You remove the hard drive."
- src.hd.loc = src.loc
- src.hd = null
-
- if(istype(P, /obj/item/stack/sheet/glass))
- if(P:amount >= 2)
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- if(do_after(user, 20))
- P:use(2)
- user << "\blue You put in the glass panel."
- src.state = 4
- src.icon_state = "4"
- if(4)
- if(istype(P, /obj/item/weapon/crowbar))
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- user << "\blue You remove the glass panel."
- src.state = 3
- src.icon_state = "3"
- new /obj/item/stack/sheet/glass( src.loc, 2 )
- if(istype(P, /obj/item/weapon/screwdriver))
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "\blue You connect the monitor."
- var/obj/machinery/computer2/C= new /obj/machinery/computer2( src.loc )
- C.setup_drive_size = 0
- C.icon_state = src.created_icon_state
- if(mainboard.created_name) C.name = mainboard.created_name
- del(mainboard)
- if(hd)
- C.hd = hd
- hd.loc = C
- for(var/obj/item/weapon/peripheral/W in src.peripherals)
- W.loc = C
- W.host = C
- C.peripherals.Add(W)
+//Motherboard is just used in assembly/disassembly, doesn't exist in the actual computer object.
+/obj/item/weapon/motherboard
+ name = "Computer mainboard"
+ desc = "A computer motherboard."
+ icon = 'icons/obj/module.dmi'
+ icon_state = "mainboard"
+ item_state = "electronic"
+ w_class = 3
+ var/created_name = null //If defined, result computer will have this name.
+
+/obj/computer2frame
+ density = 1
+ anchored = 0
+ name = "Computer-frame"
+ icon = 'icons/obj/stock_parts.dmi'
+ icon_state = "0"
+ var/state = 0
+ var/obj/item/weapon/motherboard/mainboard = null
+ var/obj/item/weapon/disk/data/fixed_disk/hd = null
+ var/list/peripherals = list()
+ var/created_icon_state = "aiupload"
+
+/obj/computer2frame/attackby(obj/item/P as obj, mob/user as mob)
+ switch(state)
+ if(0)
+ if(istype(P, /obj/item/weapon/wrench))
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ if(do_after(user, 20))
+ user << "\blue You wrench the frame into place."
+ src.anchored = 1
+ src.state = 1
+ if(istype(P, /obj/item/weapon/weldingtool))
+ playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
+ if(do_after(user, 20))
+ user << "\blue You deconstruct the frame."
+ new /obj/item/stack/sheet/metal( src.loc, 5 )
+ del(src)
+ if(1)
+ if(istype(P, /obj/item/weapon/wrench))
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ if(do_after(user, 20))
+ user << "\blue You unfasten the frame."
+ src.anchored = 0
+ src.state = 0
+ if(istype(P, /obj/item/weapon/motherboard) && !mainboard)
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ user << "\blue You place the mainboard inside the frame."
+ src.icon_state = "1"
+ src.mainboard = P
+ user.drop_item()
+ P.loc = src
+ if(istype(P, /obj/item/weapon/screwdriver) && mainboard)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "\blue You screw the mainboard into place."
+ src.state = 2
+ src.icon_state = "2"
+ if(istype(P, /obj/item/weapon/crowbar) && mainboard)
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ user << "\blue You remove the mainboard."
+ src.state = 1
+ src.icon_state = "0"
+ mainboard.loc = src.loc
+ src.mainboard = null
+ if(2)
+ if(istype(P, /obj/item/weapon/screwdriver) && mainboard && (!peripherals.len))
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "\blue You unfasten the mainboard."
+ src.state = 1
+ src.icon_state = "1"
+
+ if(istype(P, /obj/item/weapon/peripheral))
+ if(src.peripherals.len < 3)
+ user.drop_item()
+ src.peripherals.Add(P)
+ P.loc = src
+ user << "\blue You add [P] to the frame."
+ else
+ user << "\red There is no more room for peripheral cards."
+
+ if(istype(P, /obj/item/weapon/crowbar) && src.peripherals.len)
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ user << "\blue You remove the peripheral boards."
+ for(var/obj/item/weapon/peripheral/W in src.peripherals)
+ W.loc = src.loc
+ src.peripherals.Remove(W)
+
+ if(istype(P, /obj/item/stack/cable_coil))
+ if(P:amount >= 5)
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ if(do_after(user, 20))
+ P:amount -= 5
+ if(!P:amount) del(P)
+ user << "\blue You add cables to the frame."
+ src.state = 3
+ src.icon_state = "3"
+ if(3)
+ if(istype(P, /obj/item/weapon/wirecutters))
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ user << "\blue You remove the cables."
+ src.state = 2
+ src.icon_state = "2"
+ var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc )
+ A.amount = 5
+ if(src.hd)
+ src.hd.loc = src.loc
+ src.hd = null
+
+ if(istype(P, /obj/item/weapon/disk/data/fixed_disk) && !src.hd)
+ user.drop_item()
+ src.hd = P
+ P.loc = src
+ user << "\blue You connect the drive to the cabling."
+
+ if(istype(P, /obj/item/weapon/crowbar) && src.hd)
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ user << "\blue You remove the hard drive."
+ src.hd.loc = src.loc
+ src.hd = null
+
+ if(istype(P, /obj/item/stack/sheet/glass))
+ if(P:amount >= 2)
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ if(do_after(user, 20))
+ P:use(2)
+ user << "\blue You put in the glass panel."
+ src.state = 4
+ src.icon_state = "4"
+ if(4)
+ if(istype(P, /obj/item/weapon/crowbar))
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ user << "\blue You remove the glass panel."
+ src.state = 3
+ src.icon_state = "3"
+ new /obj/item/stack/sheet/glass( src.loc, 2 )
+ if(istype(P, /obj/item/weapon/screwdriver))
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "\blue You connect the monitor."
+ var/obj/machinery/computer2/C= new /obj/machinery/computer2( src.loc )
+ C.setup_drive_size = 0
+ C.icon_state = src.created_icon_state
+ if(mainboard.created_name) C.name = mainboard.created_name
+ del(mainboard)
+ if(hd)
+ C.hd = hd
+ hd.loc = C
+ for(var/obj/item/weapon/peripheral/W in src.peripherals)
+ W.loc = C
+ W.host = C
+ C.peripherals.Add(W)
del(src)
\ No newline at end of file
diff --git a/code/unused/conveyor.dm b/code/unused/conveyor.dm
index d467503a454..0756be124f6 100644
--- a/code/unused/conveyor.dm
+++ b/code/unused/conveyor.dm
@@ -1,384 +1,384 @@
-// converyor belt
-
-// moves items/mobs/movables in set direction every ptick
-
-
-/obj/machinery/conveyor
- icon = 'icons/obj/recycling.dmi'
- icon_state = "conveyor0"
- name = "conveyor belt"
- desc = "A conveyor belt."
- anchored = 1
- var/operating = 0 // 1 if running forward, -1 if backwards, 0 if off
- var/operable = 1 // true if can operate (no broken segments in this belt run)
- var/basedir // this is the default (forward) direction, set by the map dir
- // note dir var can vary when the direction changes
-
- var/list/affecting // the list of all items that will be moved this ptick
- var/id = "" // the control ID - must match controller ID
- // following two only used if a diverter is present
- var/divert = 0 // if non-zero, direction to divert items
- var/divdir = 0 // if diverting, will be conveyer dir needed to divert (otherwise dense)
-
-
-
- // create a conveyor
-
-/obj/machinery/conveyor/New()
- ..()
- basedir = dir
- setdir()
-
- // set the dir and target turf depending on the operating direction
-
-/obj/machinery/conveyor/proc/setdir()
- if(operating == -1)
- dir = turn(basedir,180)
- else
- dir = basedir
- update()
-
-
- // update the icon depending on the operating condition
-
-/obj/machinery/conveyor/proc/update()
- if(stat & BROKEN)
- icon_state = "conveyor-b"
- operating = 0
- return
- if(!operable)
- operating = 0
- icon_state = "conveyor[(operating != 0) && !(stat & NOPOWER)]"
-
-
- // machine process
- // move items to the target location
-/obj/machinery/conveyor/process()
- if(stat & (BROKEN | NOPOWER))
- return
- if(!operating)
- return
- use_power(100)
-
- var/movedir = dir // base movement dir
- if(divert && dir==divdir) // update if diverter present
- movedir = divert
-
-
- affecting = loc.contents - src // moved items will be all in loc
- spawn(1) // slight delay to prevent infinite propagation due to map order
- var/items_moved = 0
- for(var/atom/movable/A in affecting)
- if(!A.anchored)
- if(isturf(A.loc)) // this is to prevent an ugly bug that forces a player to drop what they're holding if they recently pick it up from the conveyer belt
- if(ismob(A))
- var/mob/M = A
- if(M.buckled == src)
- var/obj/machinery/conveyor/C = locate() in get_step(src, dir)
- M.buckled = null
- step(M,dir)
- if(C)
- M.buckled = C
- else
- new/obj/item/weapon/cable_coil/cut(M.loc)
- else
- step(M,movedir)
- else
- step(A,movedir)
- items_moved++
- if(items_moved >= 10)
- break
-
-// attack with item, place item on conveyor
-
-/obj/machinery/conveyor/attackby(var/obj/item/I, mob/user)
- if(istype(I, /obj/item/weapon/grab)) // special handling if grabbing a mob
- var/obj/item/weapon/grab/G = I
- G.affecting.Move(src.loc)
- del(G)
- return
- else if(istype(I, /obj/item/weapon/cable_coil)) // if cable, see if a mob is present
- var/mob/M = locate() in src.loc
- if(M)
- if (M == user)
- src.visible_message("\blue [M] ties \himself to the conveyor.")
- // note don't check for lying if self-tying
- else
- if(M.lying)
- user.visible_message("\blue [M] has been tied to the conveyor by [user].", "\blue You tie [M] to the converyor!")
- else
- user << "\blue [M] must be lying down to be tied to the converyor!"
- return
- M.buckled = src
- src.add_fingerprint(user)
- I:use(1)
- M.lying = 1
- return
-
- // else if no mob in loc, then allow coil to be placed
-
- else if(istype(I, /obj/item/weapon/wirecutters))
- var/mob/M = locate() in src.loc
- if(M && M.buckled == src)
- M.buckled = null
- src.add_fingerprint(user)
- if (M == user)
- src.visible_message("\blue [M] cuts \himself free from the conveyor.")
- else
- src.visible_message("\blue [M] had been cut free from the conveyor by [user].")
- return
-
- if(isrobot(user))
- return
-
- // otherwise drop and place on conveyor
- user.drop_item()
- if(I && I.loc) I.loc = src.loc
- return
-
-// attack with hand, move pulled object onto conveyor
-
-/obj/machinery/conveyor/attack_hand(mob/user as mob)
- user.Move_Pulled(src)
-
-
-// make the conveyor broken
-// also propagate inoperability to any connected conveyor with the same ID
-/obj/machinery/conveyor/proc/broken()
- stat |= BROKEN
- update()
-
- var/obj/machinery/conveyor/C = locate() in get_step(src, basedir)
- if(C)
- C.set_operable(basedir, id, 0)
-
- C = locate() in get_step(src, turn(basedir,180))
- if(C)
- C.set_operable(turn(basedir,180), id, 0)
-
-
-//set the operable var if ID matches, propagating in the given direction
-
-/obj/machinery/conveyor/proc/set_operable(stepdir, match_id, op)
-
- if(id != match_id)
- return
- operable = op
-
- update()
- var/obj/machinery/conveyor/C = locate() in get_step(src, stepdir)
- if(C)
- C.set_operable(stepdir, id, op)
-
-/*
-/obj/machinery/conveyor/verb/destroy()
- set src in view()
- src.broken()
-*/
-
-/obj/machinery/conveyor/power_change()
- ..()
- update()
-
-
-// converyor diverter
-// extendable arm that can be switched so items on the conveyer are diverted sideways
-// situate in same turf as conveyor
-// only works if belts is running proper direction
-//
-//
-/obj/machinery/diverter
- icon = 'icons/obj/recycling.dmi'
- icon_state = "diverter0"
- name = "diverter"
- desc = "A diverter arm for a conveyor belt."
- anchored = 1
- layer = FLY_LAYER
- var/obj/machinery/conveyor/conv // the conveyor this diverter works on
- var/deployed = 0 // true if diverter arm is extended
- var/operating = 0 // true if arm is extending/contracting
- var/divert_to // the dir that diverted items will be moved
- var/divert_from // the dir items must be moving to divert
-
-
-// create a diverter
-// set up divert_to and divert_from directions depending on dir state
-/obj/machinery/diverter/New()
-
- ..()
-
- switch(dir)
- if(NORTH)
- divert_to = WEST // stuff will be moved to the west
- divert_from = NORTH // if entering from the north
- if(SOUTH)
- divert_to = EAST
- divert_from = NORTH
- if(EAST)
- divert_to = EAST
- divert_from = SOUTH
- if(WEST)
- divert_to = WEST
- divert_from = SOUTH
- if(NORTHEAST)
- divert_to = NORTH
- divert_from = EAST
- if(NORTHWEST)
- divert_to = NORTH
- divert_from = WEST
- if(SOUTHEAST)
- divert_to = SOUTH
- divert_from = EAST
- if(SOUTHWEST)
- divert_to = SOUTH
- divert_from = WEST
- spawn(2)
- // wait for map load then find the conveyor in this turf
- conv = locate() in src.loc
- if(conv) // divert_from dir must match possible conveyor movement
- if(conv.basedir != divert_from && conv.basedir != turn(divert_from,180) )
- del(src) // if no dir match, then delete self
- set_divert()
- update()
-
-// update the icon state depending on whether the diverter is extended
-/obj/machinery/diverter/proc/update()
- icon_state = "diverter[deployed]"
-
-// call to set the diversion vars of underlying conveyor
-/obj/machinery/diverter/proc/set_divert()
- if(conv)
- if(deployed)
- conv.divert = divert_to
- conv.divdir = divert_from
- else
- conv.divert= 0
-
-
-// *** TESTING click to toggle
-/obj/machinery/diverter/Click()
- toggle()
-
-
-// toggle between arm deployed and not deployed, showing animation
-//
-/obj/machinery/diverter/proc/toggle()
- if( stat & (NOPOWER|BROKEN))
- return
-
- if(operating)
- return
-
- use_power(50)
- operating = 1
- if(deployed)
- flick("diverter10",src)
- icon_state = "diverter0"
- sleep(10)
- deployed = 0
- else
- flick("diverter01",src)
- icon_state = "diverter1"
- sleep(10)
- deployed = 1
- operating = 0
- update()
- set_divert()
-
-// don't allow movement into the 'backwards' direction if deployed
-/obj/machinery/diverter/CanPass(atom/movable/O, var/turf/target)
- var/direct = get_dir(O, target)
- if(direct == divert_to) // prevent movement through body of diverter
- return 0
- if(!deployed)
- return 1
- return(direct != turn(divert_from,180))
-
-// don't allow movement through the arm if deployed
-/obj/machinery/diverter/CheckExit(atom/movable/O, var/turf/target)
- var/direct = get_dir(O, target)
- if(direct == turn(divert_to,180)) // prevent movement through body of diverter
- return 0
- if(!deployed)
- return 1
- return(direct != divert_from)
-
-
-
-
-
-// the conveyor control switch
-//
-//
-
-/obj/machinery/conveyor_switch
-
- name = "conveyor switch"
- desc = "A conveyor control switch."
- icon = 'icons/obj/recycling.dmi'
- icon_state = "switch-off"
- var/position = 0 // 0 off, -1 reverse, 1 forward
- var/last_pos = -1 // last direction setting
- var/operated = 1 // true if just operated
-
- var/id = "" // must match conveyor IDs to control them
-
- var/list/conveyors // the list of converyors that are controlled by this switch
- anchored = 1
-
-
-
-/obj/machinery/conveyor_switch/New()
- ..()
- update()
-
- spawn(5) // allow map load
- conveyors = list()
- for(var/obj/machinery/conveyor/C in world)
- if(C.id == id)
- conveyors += C
-
-// update the icon depending on the position
-
-/obj/machinery/conveyor_switch/proc/update()
- if(position<0)
- icon_state = "switch-rev"
- else if(position>0)
- icon_state = "switch-fwd"
- else
- icon_state = "switch-off"
-
-
-// timed process
-// if the switch changed, update the linked conveyors
-
-/obj/machinery/conveyor_switch/process()
- if(!operated)
- return
- operated = 0
-
- for(var/obj/machinery/conveyor/C in conveyors)
- C.operating = position
- C.setdir()
-
-// attack with hand, switch position
-/obj/machinery/conveyor_switch/attack_hand(mob/user)
- if(position == 0)
- if(last_pos < 0)
- position = 1
- last_pos = 0
- else
- position = -1
- last_pos = 0
- else
- last_pos = position
- position = 0
-
- operated = 1
- update()
-
- // find any switches with same id as this one, and set their positions to match us
- for(var/obj/machinery/conveyor_switch/S in world)
- if(S.id == src.id)
- S.position = position
- S.update()
+// converyor belt
+
+// moves items/mobs/movables in set direction every ptick
+
+
+/obj/machinery/conveyor
+ icon = 'icons/obj/recycling.dmi'
+ icon_state = "conveyor0"
+ name = "conveyor belt"
+ desc = "A conveyor belt."
+ anchored = 1
+ var/operating = 0 // 1 if running forward, -1 if backwards, 0 if off
+ var/operable = 1 // true if can operate (no broken segments in this belt run)
+ var/basedir // this is the default (forward) direction, set by the map dir
+ // note dir var can vary when the direction changes
+
+ var/list/affecting // the list of all items that will be moved this ptick
+ var/id = "" // the control ID - must match controller ID
+ // following two only used if a diverter is present
+ var/divert = 0 // if non-zero, direction to divert items
+ var/divdir = 0 // if diverting, will be conveyer dir needed to divert (otherwise dense)
+
+
+
+ // create a conveyor
+
+/obj/machinery/conveyor/New()
+ ..()
+ basedir = dir
+ setdir()
+
+ // set the dir and target turf depending on the operating direction
+
+/obj/machinery/conveyor/proc/setdir()
+ if(operating == -1)
+ dir = turn(basedir,180)
+ else
+ dir = basedir
+ update()
+
+
+ // update the icon depending on the operating condition
+
+/obj/machinery/conveyor/proc/update()
+ if(stat & BROKEN)
+ icon_state = "conveyor-b"
+ operating = 0
+ return
+ if(!operable)
+ operating = 0
+ icon_state = "conveyor[(operating != 0) && !(stat & NOPOWER)]"
+
+
+ // machine process
+ // move items to the target location
+/obj/machinery/conveyor/process()
+ if(stat & (BROKEN | NOPOWER))
+ return
+ if(!operating)
+ return
+ use_power(100)
+
+ var/movedir = dir // base movement dir
+ if(divert && dir==divdir) // update if diverter present
+ movedir = divert
+
+
+ affecting = loc.contents - src // moved items will be all in loc
+ spawn(1) // slight delay to prevent infinite propagation due to map order
+ var/items_moved = 0
+ for(var/atom/movable/A in affecting)
+ if(!A.anchored)
+ if(isturf(A.loc)) // this is to prevent an ugly bug that forces a player to drop what they're holding if they recently pick it up from the conveyer belt
+ if(ismob(A))
+ var/mob/M = A
+ if(M.buckled == src)
+ var/obj/machinery/conveyor/C = locate() in get_step(src, dir)
+ M.buckled = null
+ step(M,dir)
+ if(C)
+ M.buckled = C
+ else
+ new/obj/item/stack/cable_coil/cut(M.loc)
+ else
+ step(M,movedir)
+ else
+ step(A,movedir)
+ items_moved++
+ if(items_moved >= 10)
+ break
+
+// attack with item, place item on conveyor
+
+/obj/machinery/conveyor/attackby(var/obj/item/I, mob/user)
+ if(istype(I, /obj/item/weapon/grab)) // special handling if grabbing a mob
+ var/obj/item/weapon/grab/G = I
+ G.affecting.Move(src.loc)
+ del(G)
+ return
+ else if(istype(I, /obj/item/stack/cable_coil)) // if cable, see if a mob is present
+ var/mob/M = locate() in src.loc
+ if(M)
+ if (M == user)
+ src.visible_message("\blue [M] ties \himself to the conveyor.")
+ // note don't check for lying if self-tying
+ else
+ if(M.lying)
+ user.visible_message("\blue [M] has been tied to the conveyor by [user].", "\blue You tie [M] to the converyor!")
+ else
+ user << "\blue [M] must be lying down to be tied to the converyor!"
+ return
+ M.buckled = src
+ src.add_fingerprint(user)
+ I:use(1)
+ M.lying = 1
+ return
+
+ // else if no mob in loc, then allow coil to be placed
+
+ else if(istype(I, /obj/item/weapon/wirecutters))
+ var/mob/M = locate() in src.loc
+ if(M && M.buckled == src)
+ M.buckled = null
+ src.add_fingerprint(user)
+ if (M == user)
+ src.visible_message("\blue [M] cuts \himself free from the conveyor.")
+ else
+ src.visible_message("\blue [M] had been cut free from the conveyor by [user].")
+ return
+
+ if(isrobot(user))
+ return
+
+ // otherwise drop and place on conveyor
+ user.drop_item()
+ if(I && I.loc) I.loc = src.loc
+ return
+
+// attack with hand, move pulled object onto conveyor
+
+/obj/machinery/conveyor/attack_hand(mob/user as mob)
+ user.Move_Pulled(src)
+
+
+// make the conveyor broken
+// also propagate inoperability to any connected conveyor with the same ID
+/obj/machinery/conveyor/proc/broken()
+ stat |= BROKEN
+ update()
+
+ var/obj/machinery/conveyor/C = locate() in get_step(src, basedir)
+ if(C)
+ C.set_operable(basedir, id, 0)
+
+ C = locate() in get_step(src, turn(basedir,180))
+ if(C)
+ C.set_operable(turn(basedir,180), id, 0)
+
+
+//set the operable var if ID matches, propagating in the given direction
+
+/obj/machinery/conveyor/proc/set_operable(stepdir, match_id, op)
+
+ if(id != match_id)
+ return
+ operable = op
+
+ update()
+ var/obj/machinery/conveyor/C = locate() in get_step(src, stepdir)
+ if(C)
+ C.set_operable(stepdir, id, op)
+
+/*
+/obj/machinery/conveyor/verb/destroy()
+ set src in view()
+ src.broken()
+*/
+
+/obj/machinery/conveyor/power_change()
+ ..()
+ update()
+
+
+// converyor diverter
+// extendable arm that can be switched so items on the conveyer are diverted sideways
+// situate in same turf as conveyor
+// only works if belts is running proper direction
+//
+//
+/obj/machinery/diverter
+ icon = 'icons/obj/recycling.dmi'
+ icon_state = "diverter0"
+ name = "diverter"
+ desc = "A diverter arm for a conveyor belt."
+ anchored = 1
+ layer = FLY_LAYER
+ var/obj/machinery/conveyor/conv // the conveyor this diverter works on
+ var/deployed = 0 // true if diverter arm is extended
+ var/operating = 0 // true if arm is extending/contracting
+ var/divert_to // the dir that diverted items will be moved
+ var/divert_from // the dir items must be moving to divert
+
+
+// create a diverter
+// set up divert_to and divert_from directions depending on dir state
+/obj/machinery/diverter/New()
+
+ ..()
+
+ switch(dir)
+ if(NORTH)
+ divert_to = WEST // stuff will be moved to the west
+ divert_from = NORTH // if entering from the north
+ if(SOUTH)
+ divert_to = EAST
+ divert_from = NORTH
+ if(EAST)
+ divert_to = EAST
+ divert_from = SOUTH
+ if(WEST)
+ divert_to = WEST
+ divert_from = SOUTH
+ if(NORTHEAST)
+ divert_to = NORTH
+ divert_from = EAST
+ if(NORTHWEST)
+ divert_to = NORTH
+ divert_from = WEST
+ if(SOUTHEAST)
+ divert_to = SOUTH
+ divert_from = EAST
+ if(SOUTHWEST)
+ divert_to = SOUTH
+ divert_from = WEST
+ spawn(2)
+ // wait for map load then find the conveyor in this turf
+ conv = locate() in src.loc
+ if(conv) // divert_from dir must match possible conveyor movement
+ if(conv.basedir != divert_from && conv.basedir != turn(divert_from,180) )
+ del(src) // if no dir match, then delete self
+ set_divert()
+ update()
+
+// update the icon state depending on whether the diverter is extended
+/obj/machinery/diverter/proc/update()
+ icon_state = "diverter[deployed]"
+
+// call to set the diversion vars of underlying conveyor
+/obj/machinery/diverter/proc/set_divert()
+ if(conv)
+ if(deployed)
+ conv.divert = divert_to
+ conv.divdir = divert_from
+ else
+ conv.divert= 0
+
+
+// *** TESTING click to toggle
+/obj/machinery/diverter/Click()
+ toggle()
+
+
+// toggle between arm deployed and not deployed, showing animation
+//
+/obj/machinery/diverter/proc/toggle()
+ if( stat & (NOPOWER|BROKEN))
+ return
+
+ if(operating)
+ return
+
+ use_power(50)
+ operating = 1
+ if(deployed)
+ flick("diverter10",src)
+ icon_state = "diverter0"
+ sleep(10)
+ deployed = 0
+ else
+ flick("diverter01",src)
+ icon_state = "diverter1"
+ sleep(10)
+ deployed = 1
+ operating = 0
+ update()
+ set_divert()
+
+// don't allow movement into the 'backwards' direction if deployed
+/obj/machinery/diverter/CanPass(atom/movable/O, var/turf/target)
+ var/direct = get_dir(O, target)
+ if(direct == divert_to) // prevent movement through body of diverter
+ return 0
+ if(!deployed)
+ return 1
+ return(direct != turn(divert_from,180))
+
+// don't allow movement through the arm if deployed
+/obj/machinery/diverter/CheckExit(atom/movable/O, var/turf/target)
+ var/direct = get_dir(O, target)
+ if(direct == turn(divert_to,180)) // prevent movement through body of diverter
+ return 0
+ if(!deployed)
+ return 1
+ return(direct != divert_from)
+
+
+
+
+
+// the conveyor control switch
+//
+//
+
+/obj/machinery/conveyor_switch
+
+ name = "conveyor switch"
+ desc = "A conveyor control switch."
+ icon = 'icons/obj/recycling.dmi'
+ icon_state = "switch-off"
+ var/position = 0 // 0 off, -1 reverse, 1 forward
+ var/last_pos = -1 // last direction setting
+ var/operated = 1 // true if just operated
+
+ var/id = "" // must match conveyor IDs to control them
+
+ var/list/conveyors // the list of converyors that are controlled by this switch
+ anchored = 1
+
+
+
+/obj/machinery/conveyor_switch/New()
+ ..()
+ update()
+
+ spawn(5) // allow map load
+ conveyors = list()
+ for(var/obj/machinery/conveyor/C in world)
+ if(C.id == id)
+ conveyors += C
+
+// update the icon depending on the position
+
+/obj/machinery/conveyor_switch/proc/update()
+ if(position<0)
+ icon_state = "switch-rev"
+ else if(position>0)
+ icon_state = "switch-fwd"
+ else
+ icon_state = "switch-off"
+
+
+// timed process
+// if the switch changed, update the linked conveyors
+
+/obj/machinery/conveyor_switch/process()
+ if(!operated)
+ return
+ operated = 0
+
+ for(var/obj/machinery/conveyor/C in conveyors)
+ C.operating = position
+ C.setdir()
+
+// attack with hand, switch position
+/obj/machinery/conveyor_switch/attack_hand(mob/user)
+ if(position == 0)
+ if(last_pos < 0)
+ position = 1
+ last_pos = 0
+ else
+ position = -1
+ last_pos = 0
+ else
+ last_pos = position
+ position = 0
+
+ operated = 1
+ update()
+
+ // find any switches with same id as this one, and set their positions to match us
+ for(var/obj/machinery/conveyor_switch/S in world)
+ if(S.id == src.id)
+ S.position = position
+ S.update()
diff --git a/code/unused/hivebot/hive_modules.dm b/code/unused/hivebot/hive_modules.dm
index 404e5009510..abac6236910 100644
--- a/code/unused/hivebot/hive_modules.dm
+++ b/code/unused/hivebot/hive_modules.dm
@@ -1,57 +1,57 @@
-/obj/item/weapon/hive_module
- name = "hive robot module"
- icon = 'icons/obj/module.dmi'
- icon_state = "std_module"
- w_class = 2.0
- item_state = "electronic"
- flags = FPRINT|TABLEPASS | CONDUCT
- var/list/modules = list()
-
-/obj/item/weapon/hive_module/standard
- name = "give standard robot module"
-
-/obj/item/weapon/hive_module/engineering
- name = "HiveBot engineering robot module"
-
-/obj/item/weapon/hive_module/New()//Shit all the mods have
- src.modules += new /obj/item/device/flash(src)
-
-
-/obj/item/weapon/hive_module/standard/New()
- ..()
- src.modules += new /obj/item/weapon/melee/baton(src)
- src.modules += new /obj/item/weapon/extinguisher(src)
- //var/obj/item/weapon/gun/mp5/M = new /obj/item/weapon/gun/mp5(src)
- //M.weapon_lock = 0
- //src.modules += M
-
-
-/obj/item/weapon/hive_module/engineering/New()
-
- src.modules += new /obj/item/weapon/extinguisher(src)
- src.modules += new /obj/item/weapon/screwdriver(src)
- src.modules += new /obj/item/weapon/weldingtool(src)
- src.modules += new /obj/item/weapon/wrench(src)
- src.modules += new /obj/item/device/analyzer(src)
- src.modules += new /obj/item/device/flashlight(src)
-
- var/obj/item/weapon/rcd/R = new /obj/item/weapon/rcd(src)
- R.matter = 30
- src.modules += R
-
- src.modules += new /obj/item/device/t_scanner(src)
- src.modules += new /obj/item/weapon/crowbar(src)
- src.modules += new /obj/item/weapon/wirecutters(src)
- src.modules += new /obj/item/device/multitool(src)
-
- var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal(src)
- M.amount = 50
- src.modules += M
-
- var/obj/item/stack/sheet/rglass/G = new /obj/item/stack/sheet/rglass(src)
- G.amount = 50
- src.modules += G
-
- var/obj/item/weapon/cable_coil/W = new /obj/item/weapon/cable_coil(src)
- W.amount = 50
- src.modules += W
+/obj/item/weapon/hive_module
+ name = "hive robot module"
+ icon = 'icons/obj/module.dmi'
+ icon_state = "std_module"
+ w_class = 2.0
+ item_state = "electronic"
+ flags = FPRINT|TABLEPASS | CONDUCT
+ var/list/modules = list()
+
+/obj/item/weapon/hive_module/standard
+ name = "give standard robot module"
+
+/obj/item/weapon/hive_module/engineering
+ name = "HiveBot engineering robot module"
+
+/obj/item/weapon/hive_module/New()//Shit all the mods have
+ src.modules += new /obj/item/device/flash(src)
+
+
+/obj/item/weapon/hive_module/standard/New()
+ ..()
+ src.modules += new /obj/item/weapon/melee/baton(src)
+ src.modules += new /obj/item/weapon/extinguisher(src)
+ //var/obj/item/weapon/gun/mp5/M = new /obj/item/weapon/gun/mp5(src)
+ //M.weapon_lock = 0
+ //src.modules += M
+
+
+/obj/item/weapon/hive_module/engineering/New()
+
+ src.modules += new /obj/item/weapon/extinguisher(src)
+ src.modules += new /obj/item/weapon/screwdriver(src)
+ src.modules += new /obj/item/weapon/weldingtool(src)
+ src.modules += new /obj/item/weapon/wrench(src)
+ src.modules += new /obj/item/device/analyzer(src)
+ src.modules += new /obj/item/device/flashlight(src)
+
+ var/obj/item/weapon/rcd/R = new /obj/item/weapon/rcd(src)
+ R.matter = 30
+ src.modules += R
+
+ src.modules += new /obj/item/device/t_scanner(src)
+ src.modules += new /obj/item/weapon/crowbar(src)
+ src.modules += new /obj/item/weapon/wirecutters(src)
+ src.modules += new /obj/item/device/multitool(src)
+
+ var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal(src)
+ M.amount = 50
+ src.modules += M
+
+ var/obj/item/stack/sheet/rglass/G = new /obj/item/stack/sheet/rglass(src)
+ G.amount = 50
+ src.modules += G
+
+ var/obj/item/stack/cable_coil/W = new /obj/item/stack/cable_coil(src)
+ W.amount = 50
+ src.modules += W
diff --git a/code/unused/pipe_filter.dm b/code/unused/pipe_filter.dm
index 8c67b9031f1..f12b36be467 100644
--- a/code/unused/pipe_filter.dm
+++ b/code/unused/pipe_filter.dm
@@ -1,243 +1,243 @@
-// *** pipefilter
-
-/obj/machinery/pipefilter/New()
- ..()
- p_dir = (NORTH|SOUTH|EAST|WEST) ^ turn(dir, 180)
-
- src.gas = new /datum/gas_mixture/()
- src.ngas = new /datum/gas_mixture/()
-
- src.f_gas = new /datum/gas_mixture/()
- src.f_ngas = new /datum/gas_mixture/()
-
- gasflowlist += src
-
-/obj/machinery/pipefilter/buildnodes()
- var/turf/T = src.loc
-
- n1dir = turn(dir, 90)
- n2dir = turn(dir,-90)
-
- node1 = get_machine( level, T , n1dir ) // the main flow dir
- node2 = get_machine( level, T , n2dir )
- node3 = get_machine( level, T, dir ) // the ejector port
-
- if(node1) vnode1 = node1.getline()
- if(node2) vnode2 = node2.getline()
- if(node3) vnode3 = node3.getline()
-
-/obj/machinery/pipefilter/gas_flow()
- gas.copy_from(ngas)
- f_gas.copy_from(f_ngas)
-
-/obj/machinery/pipefilter/process()
-/* var/delta_gt
-
- if(vnode1)
- delta_gt = FLOWFRAC * ( vnode1.get_gas_val(src) - gas.total_moles() / capmult)
- calc_delta( src, gas, ngas, vnode1, delta_gt)
- else
- leak_to_turf(1)
- if(vnode2)
- delta_gt = FLOWFRAC * ( vnode2.get_gas_val(src) - gas.total_moles() / capmult)
- calc_delta( src, gas, ngas, vnode2, delta_gt)
- else
- leak_to_turf(2)
- if(vnode3)
- delta_gt = FLOWFRAC * ( vnode3.get_gas_val(src) - f_gas.total_moles() / capmult)
- calc_delta( src, f_gas, f_ngas, vnode3, delta_gt)
- else
- leak_to_turf(3)
-
- // transfer gas from ngas->f_ngas according to extraction rate, but only if we have power
- if(! (stat & NOPOWER) )
- use_power(min(src.f_per, 100),ENVIRON)
- var/datum/gas_mixture/ndelta = src.get_extract()
- ngas.sub_delta(ndelta)
- f_ngas.add_delta(ndelta)
- AutoUpdateAI(src)
- src.updateUsrDialog()*/ //TODO: FIX
-
-/obj/machinery/pipefilter/get_gas_val(from)
- return ((from == vnode3) ? f_gas.total_moles() : gas.total_moles())/capmult
-
-/obj/machinery/pipefilter/get_gas(from)
- return (from == vnode3) ? f_gas : gas
-
-/obj/machinery/pipefilter/proc/leak_to_turf(var/port)
- var/turf/T
-
- switch(port)
- if(1)
- T = get_step(src, n1dir)
- if(2)
- T = get_step(src, n2dir)
- if(3)
- T = get_step(src, dir)
- if(T.density)
- T = src.loc
- if(T.density)
- return
- flow_to_turf(f_gas, f_ngas, T)
- return
-
- if(T.density)
- T = src.loc
- if(T.density)
- return
-
- flow_to_turf(gas, ngas, T)
-
-/obj/machinery/pipefilter/proc/get_extract()
- /*
- var/datum/gas_mixture/ndelta = new()
- if (src.f_mask & GAS_O2)
- ndelta.oxygen = min(src.f_per, src.ngas.oxygen)
- if (src.f_mask & GAS_N2)
- ndelta.n2 = min(src.f_per, src.ngas.n2)
- if (src.f_mask & GAS_PL)
- ndelta.plasma = min(src.f_per, src.ngas.plasma)
- if (src.f_mask & GAS_CO2)
- ndelta.co2 = min(src.f_per, src.ngas.co2)
- if (src.f_mask & GAS_N2O)
- ndelta.sl_gas = min(src.f_per, src.ngas.sl_gas)
- return ndelta
- */ //TODO: FIX
-
-/obj/machinery/pipefilter/attackby(obj/item/weapon/W, mob/user as mob)
- if(istype(W, /obj/item/weapon/detective_scanner))
- return ..()
- if(istype(W, /obj/item/weapon/screwdriver))
- if(bypassed)
- user.show_message(text("\red Remove the foreign wires first!"), 1)
- return
- src.add_fingerprint(user)
- user.show_message(text("\red Now []securing the access system panel...", (src.locked) ? "un" : "re"), 1)
- sleep(30)
- locked =! locked
- user.show_message(text("\red Done!"),1)
- src.updateicon()
- return
- if(istype(W, /obj/item/weapon/cable_coil) && !bypassed)
- if(src.locked)
- user.show_message(text("\red You must remove the panel first!"),1)
- return
- var/obj/item/weapon/cable_coil/C = W
- if(C.use(4))
- user.show_message(text("\red You unravel some cable.."),1)
- else
- user.show_message(text("\red Not enough cable! (Requires four pieces)"),1)
- src.add_fingerprint(user)
- user.show_message(text("\red Now bypassing the access system... (This may take a while)"), 1)
- sleep(100)
- bypassed = 1
- src.updateicon()
- return
- if(istype(W, /obj/item/weapon/wirecutters) && bypassed)
- src.add_fingerprint(user)
- user.show_message(text("\red Now removing the bypass wires... (This may take a while)"), 1)
- sleep(50)
- bypassed = 0
- src.updateicon()
- return
- if(istype(W, /obj/item/weapon/card/emag) && (!emagged))
- emagged++
- src.add_fingerprint(user)
- for(var/mob/O in viewers(user, null))
- O.show_message(text("\red [] has shorted out the [] with an electromagnetic card!", user, src), 1)
- src.overlays += image('icons/obj/pipes2.dmi', "filter-spark")
- sleep(6)
- src.updateicon()
- return src.attack_hand(user)
- return src.attack_hand(user)
-
-// pipefilter interact/topic
-/obj/machinery/pipefilter/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
-/obj/machinery/pipefilter/attack_ai(mob/user as mob)
- return src.attack_hand(user)
-
-/obj/machinery/pipefilter/attack_hand(mob/user as mob)
-/* if(stat & NOPOWER)
- user << browse(null, "window=pipefilter")
- user.machine = null
- return
-
- var/list/gases = list("O2", "N2", "Plasma", "CO2", "N2O")
- user.machine = src
- var/dat = "Filter Release Rate:
\nM - - - - - [src.f_per] + + + + + M
\n"
- for (var/i = 1; i <= gases.len; i++)
- dat += "[gases[i]]: [(src.f_mask & 1 << (i - 1)) ? "Releasing" : "Passing"]
\n"
- if(gas.total_moles())
- var/totalgas = gas.total_moles()
- var/pressure = round(totalgas / gas.maximum * 100)
- var/nitrogen = gas.n2 / totalgas * 100
- var/oxygen = gas.oxygen / totalgas * 100
- var/plasma = gas.plasma / totalgas * 100
- var/co2 = gas.co2 / totalgas * 100
- var/no2 = gas.sl_gas / totalgas * 100
-
- dat += "
Gas Levels:
\nPressure: [pressure]%
\nNitrogen: [nitrogen]%
\nOxygen: [oxygen]%
\nPlasma: [plasma]%
\nCO2: [co2]%
\nN2O: [no2]%
\n"
- else
- dat += "
Gas Levels:
\nPressure: 0%
\nNitrogen: 0%
\nOxygen: 0%
\nPlasma: 0%
\nCO2: 0%
\nN2O: 0%
\n"
- dat += "
\nClose
\n"
-
- user << browse(dat, "window=pipefilter;size=300x365")*/ //TODO: FIX
- //onclose(user, "pipefilter")
-
-/obj/machinery/pipefilter/Topic(href, href_list)
- ..()
- if(usr.restrained() || usr.lying)
- return
- if ((((get_dist(src, usr) <= 1 || usr.telekinesis == 1) || istype(usr, /mob/living/silicon/ai)) && istype(src.loc, /turf)))
- usr.machine = src
- if (href_list["close"])
- usr << browse(null, "window=pipefilter;")
- usr.machine = null
- return
- if (src.allowed(usr) || src.emagged || src.bypassed)
- if (href_list["fp"])
- src.f_per = min(max(round(src.f_per + text2num(href_list["fp"])), 0), src.maxrate)
- else if (href_list["tg"])
- // toggle gas
- src.f_mask ^= text2num(href_list["tg"])
- src.updateicon()
- else
- usr.see("\red Access Denied ([src.name] operation restricted to authorized atmospheric technicians.)")
- AutoUpdateAI(src)
- src.updateUsrDialog()
- src.add_fingerprint(usr)
- else
- usr << browse(null, "window=pipefilter")
- usr.machine = null
- return
-
-/obj/machinery/pipefilter/power_change()
- if(powered(ENVIRON))
- stat &= ~NOPOWER
- else
- stat |= NOPOWER
- spawn(rand(1,15)) //so all the filters don't come on at once
- updateicon()
-
-/obj/machinery/pipefilter/proc/updateicon()
- src.overlays.Cut()
- if(stat & NOPOWER)
- icon_state = "filter-off"
- else
- icon_state = "filter"
- if(emagged) //only show if powered because presumeably its the interface that has been fried
- src.overlays += image('icons/obj/pipes2.dmi', "filter-emag")
- if (src.f_mask & (GAS_N2O|GAS_PL))
- src.overlays += image('icons/obj/pipes2.dmi', "filter-tox")
- if (src.f_mask & GAS_O2)
- src.overlays += image('icons/obj/pipes2.dmi', "filter-o2")
- if (src.f_mask & GAS_N2)
- src.overlays += image('icons/obj/pipes2.dmi', "filter-n2")
- if (src.f_mask & GAS_CO2)
- src.overlays += image('icons/obj/pipes2.dmi', "filter-co2")
- if(!locked)
- src.overlays += image('icons/obj/pipes2.dmi', "filter-open")
- if(bypassed) //should only be bypassed if unlocked
+// *** pipefilter
+
+/obj/machinery/pipefilter/New()
+ ..()
+ p_dir = (NORTH|SOUTH|EAST|WEST) ^ turn(dir, 180)
+
+ src.gas = new /datum/gas_mixture/()
+ src.ngas = new /datum/gas_mixture/()
+
+ src.f_gas = new /datum/gas_mixture/()
+ src.f_ngas = new /datum/gas_mixture/()
+
+ gasflowlist += src
+
+/obj/machinery/pipefilter/buildnodes()
+ var/turf/T = src.loc
+
+ n1dir = turn(dir, 90)
+ n2dir = turn(dir,-90)
+
+ node1 = get_machine( level, T , n1dir ) // the main flow dir
+ node2 = get_machine( level, T , n2dir )
+ node3 = get_machine( level, T, dir ) // the ejector port
+
+ if(node1) vnode1 = node1.getline()
+ if(node2) vnode2 = node2.getline()
+ if(node3) vnode3 = node3.getline()
+
+/obj/machinery/pipefilter/gas_flow()
+ gas.copy_from(ngas)
+ f_gas.copy_from(f_ngas)
+
+/obj/machinery/pipefilter/process()
+/* var/delta_gt
+
+ if(vnode1)
+ delta_gt = FLOWFRAC * ( vnode1.get_gas_val(src) - gas.total_moles() / capmult)
+ calc_delta( src, gas, ngas, vnode1, delta_gt)
+ else
+ leak_to_turf(1)
+ if(vnode2)
+ delta_gt = FLOWFRAC * ( vnode2.get_gas_val(src) - gas.total_moles() / capmult)
+ calc_delta( src, gas, ngas, vnode2, delta_gt)
+ else
+ leak_to_turf(2)
+ if(vnode3)
+ delta_gt = FLOWFRAC * ( vnode3.get_gas_val(src) - f_gas.total_moles() / capmult)
+ calc_delta( src, f_gas, f_ngas, vnode3, delta_gt)
+ else
+ leak_to_turf(3)
+
+ // transfer gas from ngas->f_ngas according to extraction rate, but only if we have power
+ if(! (stat & NOPOWER) )
+ use_power(min(src.f_per, 100),ENVIRON)
+ var/datum/gas_mixture/ndelta = src.get_extract()
+ ngas.sub_delta(ndelta)
+ f_ngas.add_delta(ndelta)
+ AutoUpdateAI(src)
+ src.updateUsrDialog()*/ //TODO: FIX
+
+/obj/machinery/pipefilter/get_gas_val(from)
+ return ((from == vnode3) ? f_gas.total_moles() : gas.total_moles())/capmult
+
+/obj/machinery/pipefilter/get_gas(from)
+ return (from == vnode3) ? f_gas : gas
+
+/obj/machinery/pipefilter/proc/leak_to_turf(var/port)
+ var/turf/T
+
+ switch(port)
+ if(1)
+ T = get_step(src, n1dir)
+ if(2)
+ T = get_step(src, n2dir)
+ if(3)
+ T = get_step(src, dir)
+ if(T.density)
+ T = src.loc
+ if(T.density)
+ return
+ flow_to_turf(f_gas, f_ngas, T)
+ return
+
+ if(T.density)
+ T = src.loc
+ if(T.density)
+ return
+
+ flow_to_turf(gas, ngas, T)
+
+/obj/machinery/pipefilter/proc/get_extract()
+ /*
+ var/datum/gas_mixture/ndelta = new()
+ if (src.f_mask & GAS_O2)
+ ndelta.oxygen = min(src.f_per, src.ngas.oxygen)
+ if (src.f_mask & GAS_N2)
+ ndelta.n2 = min(src.f_per, src.ngas.n2)
+ if (src.f_mask & GAS_PL)
+ ndelta.plasma = min(src.f_per, src.ngas.plasma)
+ if (src.f_mask & GAS_CO2)
+ ndelta.co2 = min(src.f_per, src.ngas.co2)
+ if (src.f_mask & GAS_N2O)
+ ndelta.sl_gas = min(src.f_per, src.ngas.sl_gas)
+ return ndelta
+ */ //TODO: FIX
+
+/obj/machinery/pipefilter/attackby(obj/item/weapon/W, mob/user as mob)
+ if(istype(W, /obj/item/weapon/detective_scanner))
+ return ..()
+ if(istype(W, /obj/item/weapon/screwdriver))
+ if(bypassed)
+ user.show_message(text("\red Remove the foreign wires first!"), 1)
+ return
+ src.add_fingerprint(user)
+ user.show_message(text("\red Now []securing the access system panel...", (src.locked) ? "un" : "re"), 1)
+ sleep(30)
+ locked =! locked
+ user.show_message(text("\red Done!"),1)
+ src.updateicon()
+ return
+ if(istype(W, /obj/item/stack/cable_coil) && !bypassed)
+ if(src.locked)
+ user.show_message(text("\red You must remove the panel first!"),1)
+ return
+ var/obj/item/stack/cable_coil/C = W
+ if(C.use(4))
+ user.show_message(text("\red You unravel some cable.."),1)
+ else
+ user.show_message(text("\red Not enough cable! (Requires four pieces)"),1)
+ src.add_fingerprint(user)
+ user.show_message(text("\red Now bypassing the access system... (This may take a while)"), 1)
+ sleep(100)
+ bypassed = 1
+ src.updateicon()
+ return
+ if(istype(W, /obj/item/weapon/wirecutters) && bypassed)
+ src.add_fingerprint(user)
+ user.show_message(text("\red Now removing the bypass wires... (This may take a while)"), 1)
+ sleep(50)
+ bypassed = 0
+ src.updateicon()
+ return
+ if(istype(W, /obj/item/weapon/card/emag) && (!emagged))
+ emagged++
+ src.add_fingerprint(user)
+ for(var/mob/O in viewers(user, null))
+ O.show_message(text("\red [] has shorted out the [] with an electromagnetic card!", user, src), 1)
+ src.overlays += image('icons/obj/pipes2.dmi', "filter-spark")
+ sleep(6)
+ src.updateicon()
+ return src.attack_hand(user)
+ return src.attack_hand(user)
+
+// pipefilter interact/topic
+/obj/machinery/pipefilter/attack_paw(mob/user as mob)
+ return src.attack_hand(user)
+
+/obj/machinery/pipefilter/attack_ai(mob/user as mob)
+ return src.attack_hand(user)
+
+/obj/machinery/pipefilter/attack_hand(mob/user as mob)
+/* if(stat & NOPOWER)
+ user << browse(null, "window=pipefilter")
+ user.machine = null
+ return
+
+ var/list/gases = list("O2", "N2", "Plasma", "CO2", "N2O")
+ user.machine = src
+ var/dat = "Filter Release Rate:
\nM - - - - - [src.f_per] + + + + + M
\n"
+ for (var/i = 1; i <= gases.len; i++)
+ dat += "[gases[i]]: [(src.f_mask & 1 << (i - 1)) ? "Releasing" : "Passing"]
\n"
+ if(gas.total_moles())
+ var/totalgas = gas.total_moles()
+ var/pressure = round(totalgas / gas.maximum * 100)
+ var/nitrogen = gas.n2 / totalgas * 100
+ var/oxygen = gas.oxygen / totalgas * 100
+ var/plasma = gas.plasma / totalgas * 100
+ var/co2 = gas.co2 / totalgas * 100
+ var/no2 = gas.sl_gas / totalgas * 100
+
+ dat += "
Gas Levels:
\nPressure: [pressure]%
\nNitrogen: [nitrogen]%
\nOxygen: [oxygen]%
\nPlasma: [plasma]%
\nCO2: [co2]%
\nN2O: [no2]%
\n"
+ else
+ dat += "
Gas Levels:
\nPressure: 0%
\nNitrogen: 0%
\nOxygen: 0%
\nPlasma: 0%
\nCO2: 0%
\nN2O: 0%
\n"
+ dat += "
\nClose
\n"
+
+ user << browse(dat, "window=pipefilter;size=300x365")*/ //TODO: FIX
+ //onclose(user, "pipefilter")
+
+/obj/machinery/pipefilter/Topic(href, href_list)
+ ..()
+ if(usr.restrained() || usr.lying)
+ return
+ if ((((get_dist(src, usr) <= 1 || usr.telekinesis == 1) || istype(usr, /mob/living/silicon/ai)) && istype(src.loc, /turf)))
+ usr.machine = src
+ if (href_list["close"])
+ usr << browse(null, "window=pipefilter;")
+ usr.machine = null
+ return
+ if (src.allowed(usr) || src.emagged || src.bypassed)
+ if (href_list["fp"])
+ src.f_per = min(max(round(src.f_per + text2num(href_list["fp"])), 0), src.maxrate)
+ else if (href_list["tg"])
+ // toggle gas
+ src.f_mask ^= text2num(href_list["tg"])
+ src.updateicon()
+ else
+ usr.see("\red Access Denied ([src.name] operation restricted to authorized atmospheric technicians.)")
+ AutoUpdateAI(src)
+ src.updateUsrDialog()
+ src.add_fingerprint(usr)
+ else
+ usr << browse(null, "window=pipefilter")
+ usr.machine = null
+ return
+
+/obj/machinery/pipefilter/power_change()
+ if(powered(ENVIRON))
+ stat &= ~NOPOWER
+ else
+ stat |= NOPOWER
+ spawn(rand(1,15)) //so all the filters don't come on at once
+ updateicon()
+
+/obj/machinery/pipefilter/proc/updateicon()
+ src.overlays.Cut()
+ if(stat & NOPOWER)
+ icon_state = "filter-off"
+ else
+ icon_state = "filter"
+ if(emagged) //only show if powered because presumeably its the interface that has been fried
+ src.overlays += image('icons/obj/pipes2.dmi', "filter-emag")
+ if (src.f_mask & (GAS_N2O|GAS_PL))
+ src.overlays += image('icons/obj/pipes2.dmi', "filter-tox")
+ if (src.f_mask & GAS_O2)
+ src.overlays += image('icons/obj/pipes2.dmi', "filter-o2")
+ if (src.f_mask & GAS_N2)
+ src.overlays += image('icons/obj/pipes2.dmi', "filter-n2")
+ if (src.f_mask & GAS_CO2)
+ src.overlays += image('icons/obj/pipes2.dmi', "filter-co2")
+ if(!locked)
+ src.overlays += image('icons/obj/pipes2.dmi', "filter-open")
+ if(bypassed) //should only be bypassed if unlocked
src.overlays += image('icons/obj/pipes2.dmi', "filter-bypass")
\ No newline at end of file
diff --git a/config/admins.txt b/config/admins.txt
index 68a07ebe030..c8846e169f8 100644
--- a/config/admins.txt
+++ b/config/admins.txt
@@ -1,57 +1,57 @@
-###############################################################################################
-# Basically, ckey goes first. Rank goes after the "=" #
-# Case is not important for ckey. #
-# Case IS important for the rank. #
-# All punctuation (spaces etc) EXCEPT '-', '_' and '@' will be stripped from rank names. #
-# Ranks can be anything defined in admin_ranks.txt #
-# NOTE: if the rank-name cannot be found in admin_ranks.txt, they will not be adminned! ~Carn #
-# NOTE: syntax was changed to allow hyphenation of ranknames, since spaces are stripped. #
-###############################################################################################
-
-rolan7 = Game Master
-quarxink = Game Master
-adrix89 = Game Master
-tle = Game Master
-xsi = Game Master
-scaredofshadows = Game Master
-neofite = Game Master
-trubblebass = Game Master
-mport2004 = Game Master
-deuryn = Game Master
-agouri = Game Master
-errorage = Game Master
-superxpdude = Game Master
-petethegoat = Game Master
-korphaeron = Game Master
-nodrak = Game Master
-carnwennan = Game Master
-ikarrus = Game Master
-cheridan = Game Master
-giacomand = Game Master
-rockdtben = Game Master
-sieve = Game Master
-aranclanos = Game Master
-intigracy = Game Master
-dumpdavidson = Game Master
-kazeespada = Game Master
-malkevin = Game Master
-incoming = Game Master
-demas = Game Master
-fleure = Game Master
-ricotez = Game Master
-misterperson = Game Master
-crimsonvision = Game Master
-iamgoofball = Game Master
-zelacks = Game Master
-androidsfv = Game Master
-miggles = Game Master
-jordie0608 = Game Master
-s0ldi3rkr4s0 = Game Master
-ergovisavi = Game Master
-vistapowa = Game Master
-miauw62 = Game Master
-kazeespada = Game Master
-rumia29 = Game Master
-bobylein = Game Master
-sirbayer = Game Master
+###############################################################################################
+# Basically, ckey goes first. Rank goes after the "=" #
+# Case is not important for ckey. #
+# Case IS important for the rank. #
+# All punctuation (spaces etc) EXCEPT '-', '_' and '@' will be stripped from rank names. #
+# Ranks can be anything defined in admin_ranks.txt #
+# NOTE: if the rank-name cannot be found in admin_ranks.txt, they will not be adminned! ~Carn #
+# NOTE: syntax was changed to allow hyphenation of ranknames, since spaces are stripped. #
+###############################################################################################
+razharas = Game Master
+rolan7 = Game Master
+quarxink = Game Master
+adrix89 = Game Master
+tle = Game Master
+xsi = Game Master
+scaredofshadows = Game Master
+neofite = Game Master
+trubblebass = Game Master
+mport2004 = Game Master
+deuryn = Game Master
+agouri = Game Master
+errorage = Game Master
+superxpdude = Game Master
+petethegoat = Game Master
+korphaeron = Game Master
+nodrak = Game Master
+carnwennan = Game Master
+ikarrus = Game Master
+cheridan = Game Master
+giacomand = Game Master
+rockdtben = Game Master
+sieve = Game Master
+aranclanos = Game Master
+intigracy = Game Master
+dumpdavidson = Game Master
+kazeespada = Game Master
+malkevin = Game Master
+incoming = Game Master
+demas = Game Master
+fleure = Game Master
+ricotez = Game Master
+misterperson = Game Master
+crimsonvision = Game Master
+iamgoofball = Game Master
+zelacks = Game Master
+androidsfv = Game Master
+miggles = Game Master
+jordie0608 = Game Master
+s0ldi3rkr4s0 = Game Master
+ergovisavi = Game Master
+vistapowa = Game Master
+miauw62 = Game Master
+kazeespada = Game Master
+rumia29 = Game Master
+bobylein = Game Master
+sirbayer = Game Master
hornygranny = Game Master
diff --git a/config/config.txt b/config/config.txt
index edbdf51675f..cb563b024cd 100644
--- a/config/config.txt
+++ b/config/config.txt
@@ -123,7 +123,7 @@ GUEST_BAN
##Toggle for having jobs load up from the .txt
# LOAD_JOBS_FROM_TXT
-##Remove the # mark infront of this to forbid admins from posssessing the singularity.
+##Remove the # mark infront of this to forbid admins from possessing the singularity.
#FORBID_SINGULO_POSSESSION
## Remove the # to show a popup 'reply to' window to every non-admin that recieves an adminPM.
@@ -143,4 +143,4 @@ TICKLAG 0.9
TICKCOMP 0
## Comment this out to disable automuting
-#AUTOMUTE_ON
\ No newline at end of file
+#AUTOMUTE_ON
diff --git a/config/game_options.txt b/config/game_options.txt
index 9c4818a3df2..4880ee16762 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -111,6 +111,9 @@ CHANGELING_SCALING_COEFF 10
## If late-joining players have a chance to become a traitor/changeling
ALLOW_LATEJOIN_ANTAGONISTS
+## Uncomment to allow players to see the set odds of different rounds in secret/random in the get server revision screen. This will NOT tell the current roundtype.
+#SHOW_GAME_TYPE_ODDS
+
### RANDOM EVENTS ###
## Comment this to disable random events during the round.
@@ -147,6 +150,9 @@ GATEWAY_DELAY 18000
## Uncomment to give everyone maint access.
#EVERYONE_HAS_MAINT_ACCESS
+## Comment this to make security officers spawn in departmental security posts
+SEC_START_BRIG
+
### GHOST INTERACTION ###
## Uncomment to let ghosts spin chairs. You may be wondering why this is a config option. Don't ask.
diff --git a/html/changelog.html b/html/changelog.html
index c18227ee22a..6e099fe64a0 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -1,1160 +1,1307 @@
-
-
-
- /tg/ Station 13 Changelog
-
-
-
-
-
-
-
-
-
-
- Traditional Games Space Station 13
-
-
- Visit our IRC channel: #tgstation13 on irc.rizon.net
-
-
-
-
-
-
-
- Current Project Maintainers: -Click Here-
- Currently Active GitHub contributor list: -Click Here-
- Coders: TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor, Polymorph, Carn, Nodrak, Donkie, Sieve, Giacom, Ikarrus, trubble_bass, Aranclanos, Cael_Aislinn, Cheridan, Intigracy, Malkevin, SuperSayu, DumpDavidson, Tastyfish, Yvar, Elo001, Fleure, ManeaterMildred, Miauw.
- Spriters: Agouri, Cheridan, Cruazy Guest, Deeaych, Deuryn, Matty406, Microwave, ShiftyEyesShady, Skie, Uhangi, Veyveyr, Petethegoat, Kor, Ricotez, Ausops, TankNut, Pewtershmitz, Firecage, Nienhaus2
- Sounds: Skie, Lasty/Vinyl
- Main Testers: Tenebrosity
- Thanks to: Baystation 12, CDK Station devs, FacepunchStation, GoonStation devs, the original SpaceStation developers and Invisty for the title image.
Also a thanks to anybody who has contributed who is not listed here :( Ask to be added here on irc.
-
Have a bug to report? Visit our Issue Tracker.
- Please ensure that the bug has not already been reported and use the template provided.
-
-
-
-
-
-
-
-
+
+
+
+ /tg/ Station 13 Changelog
+
+
+
+
+
+
+
+
+
+
+ Traditional Games Space Station 13
+
+
+ Visit our IRC channel: #tgstation13 on irc.rizon.net
+
+
+
+
+
+
+
+ Current Project Maintainers: -Click Here-
+ Currently Active GitHub contributor list: -Click Here-
+ Coders: TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor, Polymorph, Carn, Nodrak, Donkie, Sieve, Giacom, Ikarrus, trubble_bass, Aranclanos, Cael_Aislinn, Cheridan, Intigracy, Malkevin, SuperSayu, DumpDavidson, Tastyfish, Yvar, Elo001, Fleure, ManeaterMildred, Miauw.
+ Spriters: Agouri, Cheridan, Cruazy Guest, Deeaych, Deuryn, Matty406, Microwave, ShiftyEyesShady, Skie, Uhangi, Veyveyr, Petethegoat, Kor, Ricotez, Ausops, TankNut, Pewtershmitz, Firecage, Nienhaus2
+ Sounds: Skie, Lasty/Vinyl
+ Main Testers: Tenebrosity
+ Thanks to: Baystation 12, CDK Station devs, FacepunchStation, GoonStation devs, the original SpaceStation developers and Invisty for the title image.
Also a thanks to anybody who has contributed who is not listed here :( Ask to be added here on irc.
+
Have a bug to report? Visit our Issue Tracker.
+ Please ensure that the bug has not already been reported and use the template provided.
+
+
+
+
+
+
+
+
- 26 January 2014
- Balrog updated:
+ 9 February 2014
+ Demas updated:
- - Syndicate Playing Cards can now be found on the Syndicate Mothership and purchased from uplinks for 1 telecrystal.
- - Syndicate Playing Cards are lethal weapons both in melee and when thrown, but make the user's true allegiance to the Syndicate obvious.
- - Sprites are courtesy of Nienhaus.
+ - Banana peel size is based on banana size.
+ - Bigger peels slip for longer than smaller ones. Remember that produce size is based on potency.
+ - The clown now spawns with a decent sized banana.
+ - The banana mortar now shoots 65 potency peels.
- 25 januari 2014
- Miauw updated:
-
- - Adds changeling arm blades that cost 20 chems and do 25 brute damage.
- - Arm blades can pry open unpowered doors, replace surgical saws in brain removal, slice tables and smash computers.
-
-
-
-
-
- 24 January 2014
- Ergovisavi updated:
-
- - Gibtonite, the explosive ore, can now be found on the asteroid. It's very hard to tell between it and diamonds, at first glance.
- - Gibtonite deposits will blow up after a countdown when you attempt to mine it, but you can stop it with an analyzer at any time. It makes for a good mining explosive.
- - The closer you were to the explosion when you analyze the Gibtonite deposit, the better the Gibtonite you can get from it.
- - Once extracted, it must be struck with a pickaxe or drill to activate it, where it will go through its countdown again to explode!
- - Explosives will no longer destroy the ore inside of asteroid walls or lying on the floor.
-
-
-
-
-
- 21 January 2014
- MrPerson updated:
-
- - Mobs now lie down via turning icons rather than preturned sprites.
- - You can lie down facing up or down and the turn can be 90 degrees clockwise or counterclockwise.
- - Resting will always make you lie to the right so you look good on beds.
- - Please report any bugs you find with this system.
-
-
-
- 20 January 2014
- Petethegoat updated:
-
- - Increased the walk speed. Legcuffed speed is unaffected, and is still suffering.
- - Sped up alien drones, they are now the same speed as sentinels.
-
-
-
-
-
- 19 January 2014
- Rolan7 updated:
-
- - You can now sell mutant seeds, from hydroponics, to Centcom via the supply shuttle.
- - Fixes powersinks causing APCs to stop automatically recharging.
-
- KazeEspada updated:
-
- - The water cooler is now stocked with paper cups. You can refill the cups by putting paper in it.
-
-
-
-
-
- 17 January 2014
- ManeaterMildred updated:
-
- - Changed the way the Gygax worked. It now has less defense and shot deflection, but is faster and have less battery drain per step.
- - Nerfed the Carbine's brute damage and renamed it to FNX-99 "Hades" Carbine.
- - Nerfed the Gygax defense from 300 to 250.
- Nerfed the Gygax projectile deflection chance from 15 to 5.
- Buffed the Gygax speed from 3 to 2, making it faster.
- Reduced the battery use when moving from 5 to 3.
-
- The Mech Ion Rifle now has a faster cooldown, from 40 to 20.
- Nerfed the carbine's Brute Damage from 20 to 5.
-
- Please post feedback to these changes on the forums.
-
-
-
-
-
-
- 15 January 2014
- Dumpdavidson updated:
-
- - EMPs affect the equipment of a human again.
- - EMP flashlight now recharges over time and its description no longer reveals the illegal nature of the device.
- - EMP implant now has two uses.
EMP kit now contains two grenades.
-
-
-
-
-
- 14 January 2014
- SirBayer updated:
-
- - Armor now reduces damage by the protection percentage, instead of randomly deciding to half or full block damage by those percentages.
- - Shotguns, with buckshot shells, will fire a spread of pellets at your target, like a real shotgun blast.
-
- ManeaterMildred updated:
-
- - Updated research designs.
- - The Protolathe can now build a Ion Rifle.
- - The Exosuit Fabricator can now build a Mech Ion Rifle, a Mech Carbine and a Mech-Mounted Missile Rack.
-
- Fleure updated:
-
- - Added spider butchery.
- - Added spider meat, legs, and edible eggs.
- - Added new spider related meals.
-
- Giacom updated:
-
- - Because of an emagged cyborg's explosion, the MMI will die with it.
- - The self-respiration symptom will now properly keep you from dying of oxygen loss.
- - The Stimulant symptom's activation chance was increased so you had a constant flow of hyperzine.
-
- Incoming updated:
-
- - A new training bomb has been added to the armoury, which will allow you to train your wire cutting skills to disarm real syndicate bombs.
-
-
-
-
- 12 January 2014
- VistaPOWA updated:
-
- - Added Syndicate Cyborgs.
- - They can be ordered for 25 telecrystals by Nuclear Operatives. A ghost / observer with "Be Operative" ticked in their game options will be chosen to control it.
- - Their loadout is: Crowbar, Flash, Emag, Esword, Ebow, Laser Rifle. Each weapon costs 100 charge to fire, except the Esword, which has a 500 charge hitcost. Each borg is equipped with a 25k cell by default.
- - Syndicate borgs can hear the binary channel, but they won't show up on the Robotics Control computer or be visible to the AI. Their lawset is the standard emag one.
- - Added two cyborg recharging stations to the Syndicate Shuttle.
-
-
-
-
-
- 11 January 2014
- Errorage updated:
-
- - Cyborg modules now use a new UI, which is much quicker than a menu.
-
- Giacom updated:
-
- - The game will now have all background operations disabled, this will result in smoother gameplay but may result in some spike lags, before being set back to normal. The gradually increasing lag should now be gone.
- - You can now emag the crusher, in disposals, to remove the safety. You can use a screwdriver to reset it to the default factory settings.
- - The toxin compensation symptom will stop giving you toxin damage while at full health.
-
- Cheridan updated:
-
- - You can now upgrade laser pointers with micro laser parts. It will increase the chance of blinding people.
-
- JJRCop updated:
-
- - The new nuke toy can now be found in your local arcade machine.
-
-
-
-
- 10 January 2014
- Giacom updated:
-
- - You can whisper while in critical, but you will immediately die afterwards DRAMATICALLY. The closer you are to death, the less you can say.
- - The wizard won't spawn so much smoke after they blink.
- - The detective's forensic scanner was upgraded so that it can now scan from afar.
- - Made the ghost's follow button less buggy. Please make an issue report if it still bugs out.
-
- ChuckTheSheep updated:
-
- - Morgue Trays can detect players in their bodies and will now change colour depending on a few things. Red = Dead body with no player inside. Orange = No body but items. Green = A dead body with a player inside.
-
- Rumia29, Nienhaus updated:
-
- - A new alt RD uniform spawns in his locker.
-
-
-
-
- 7 January 2014
- Fleure updated:
-
- - Janitor now spawns with a service headset.
- - Backpack watertank slowdown decreased.
-
-
-
-
-
- 4 January 2014
- Razharas updated:
-
- - Constructable machines now depend on R&D parts!
- - DNA scanner: Laser quality lessens irradiation. Manipulator quality drastically improves precision (9x for best part) and scanner quality allows you to scan suicides/ling husks, with the best part enabling the cloner's autoprocess button, making it scan people in the scanner automatically.
- - Clone pod: Manipulator quality improves the speed of cloning. Scanning module quality affects with how much health people will be ejected, will they get negative mutation/no mutations/clean of all mutations/random good mutation, at best quality will enable clone console's autoprocess button and will try to clone all the dead people in records automatically, together with best DNA scanner parts cloning console will be able to work in full automatic regime autoscanning people and autocloning them.
- - Borg recharger: Capacitors' quality and powercell max charge affect the speed at which borgs recharge. Manipulator quality allows borg to be slowly repaired while inside the recharges, best manipulator allows even fire damage to be slowly repaired.
- - Portable power generators: Capacitors' quality produce more power. Better lasers consume less fuel and reduce heat production PACMAN with best parts can keep whole station powered with about sheet of plamsa per minute (approximately, wasn't potent enough to test).
- - Autolathe: Better manipulator reduces the production time and lowers the cost of things(they will also have less m_amt and g_amt to prevent production of infinity metal), stacks' cant be reduced in cost, because thatll make production of infinity metal/glass easy
- - Protolathe: Manipulators quality affects the cost of things(they will also have less m_amt and g_amt to prevent production of infinity metal), best manipulators reduces the cost 5 times (!)
- - Circuit imprinter: Manipulator quality affects the cost, best manipulator reduce cost(acid insluded) 4 times, i.e. 20 boards per 100 units of acid
- - Destructive analyzer: Better parts allow items with less reliability in. Redone how reliability is handled, you now see item reliability in the deconstruction menu and deconstructing items that has same or one point less research type level will rise the reliability of all known designs that has one or more research type requirements as the deconstructed item. Designs of the same type raise in reliability more. Critically broken things rise reliability of the design drastically. Whole reliability system is not used a lot but now at least on the R&D part it finally matters.
-
-
-
-
-
- 2 January 2014
- Demas updated:
-
- - Added different colours to departmental radio frequencies. Now you'll be able to filter out or pay attention to each frequency a lot easier.
-
-
-
-
- 2 January 2014
- Fleure updated:
-
- - Fixed bruisepacks and ointments not working.
- - Fixed injecting/stabbing mouth or eyes when only thick suit worn.
-
-
-
-
- 1 January 2014
- Errorage updated:
-
- - The damage overlay for humans starts a little later than before. It used to start at 10 points of fire + brute damage, it now starts at 35.
-
-
-
-
- 31 December 2013
- Fleure updated:
-
- - Paper no longer appears with words on it when blank input written or photocopied
- - Vending machine speaker toggle button now works
- - Building arcade machines works again
-
-
-
-
- 27 December 2013
- Giacom updated:
-
- - Light explosions will no longer gib dead bodies anymore. C4 will function the same and gib anything attached.
- - Syringe gun projectiles will now display a message when shots are deflected by space suits, biosuits and etc...
- - You can now move out of sleepers by moving, again.
-
- Miauw updated:
-
- - Monkeys now have a resist button on their HUD.
-
-
-
-
- 21 December 2013
- RobRichards, Validsalad updated:
-
- - Added new sprites for the sec-hailer, SWAT gear and riot armour.
-
- Giacom updated:
-
- - The Labor Camp has been changed based on feedback. Ore boxes added, internals added, safety pickaxes/shovels (might revert if unliked).
- - Labor Camp prisoners, who have earned enough points for freedom, will now have to be alone in the shuttle to move it and to open the middle door; this is in order to prevent free'd prisoners from releasing their comrades.
- - Monkeys no longer walk away when being pulled or grabbed.
- - Anti-breach shield generators have a greater range, and will cover more exposed space tiles.
-
- Bobylein updated:
-
- - Labcoats can now store bottles, beakers, pills, pill bottles and paper.
-
- Perakp updated:
-
- - You can no longer slip while laying down.
-
- Jordie updated:
-
- - Blowing up borgs from the Robotics Console will now actually make them explode. Emagged Cyborgs will explode even more.
-
- Nienhaus updated:
-
- - Added more poster.
-
-
-
-
-
- 18 December 2013
- JJRcop updated:
-
- - Transit tube tweaks. You can now put someone into a transit tube pod using grabs and you can empty a transit tube pod by clicking on it.
-
- Giacom updated:
-
- - THE REALISM: Injectors such as syringes, parapens and hypos will not penetrate coveralls with thick material, this includes space suits, biosuits, bombsuits, and their head slot equivalent. Injectors now also consider where you aim, if you aim for the head it will try to use it through the head slot, otherwise it will aim for the body. To clarify, if you are wearing a space helmet and a doctor tries to inject you while aiming at your head, it will protect you until they aim for the unprotected body; same story for wearing a space suit and not a helmet.
- - The syndicate shuttle has been heavily upgraded with a brand new technology which allows the blast doors to the entrance of the shuttle to AUTOMATICALLY close. Whoa. This brand new technology will help keep out those snoopy crew members.
- - Lowered the cooldown of creating virus cultures to 5 seconds. You now only need to mix one unit of synaptizine, in a blood full of an advance virus, to get it to remove a random symptom.
-
- Adrinus updated:
-
- - Playing cards, just like the real thing! Play poker, blackjack, go fish, the limits are limitless! Recommended to use space cash as the poker chips for now
-
- Incoming updated:
-
- - Rounds will no longer end when the wizard dies and there are still apprentices or traitors/survivors..
-
- Jordie0608 updated:
-
- - Replaced the digital valves in atmospherics with pumps.
-
-
-
-
-
- 14 December 2013
- Incoming updated:
-
- - Magic Mania! Powerful new magical tools and skills for wizard and crew alike!
- - Beware the new Summon Magic spell, which will grant the crew access to magical tools and spells and cause some to misuse it!
- - One Time Spellbooks that can be spawned during summon magic that can teach a low level magic skill to anyone! Beware the effects of reading pre-owned books, the magical rights management is potent!
-
- Magical Wands that can be spawned during Summon Magic! They come in a variety of effects that mimic both classical wizard spells and all new ones. They come precharged but lack the means to refill them once their magical energy is depleted... Fire efficently!
- - Be aware of the new Charge spell, which can take normally useless spent wands and give them new life! This mysterious effect has been found to wear down the overall magical potency of wands over time however. Beyond wands the clever magical user can find ways to use this spell on other things that may benefit from a magical charge...
- - The Staff of Resurrection, which holds intense healing magics able to defeat death itself! Look out for this invaluable magical tool during castings of Summon Magic.
- - Be on the lookout for a new apprentice! This noble mage is a different beast from most wizards, trained in the arts of defending and healing. Too bad he still works for the wizard!
-
-
-
-
-
- 9 December 2013
- Giacom updated:
-
- - New colourful ghost sprites for BYOND members. Sprites by anonus.
-
-
-
-
-
- 8 December 2013
- Rolan7 updated:
-
- - Leather gloves can be used to removes lights.
- - Plant, ore, and trash bags have a new option to pick up all items of single type
- - Creating astroturf now works like sandstone, converting all the grass at once.
- - Uranium and radium can be used instead of mutagen. 10 can mutate species, 5 or 2 mutate traits. Highly toxic.
- - Plants require a little light to live. Mushroom require even less (2 units vs 4) and take less damage.
-
-
-
-
- 5 December 2013
+ 8 February 2014
Razharas updated:
- - Reworked how ling stings are done, now when you click a sting in the changeling tab it becomes current active sting, the icon of that sting appears under the chem counter, alt+clicking anyone will sting them with current sting, clicking the icon of the sting will unset it.
- - Monkeys have ling chem counter and active sting icons in their UI.
- - Going monkey -> human will try to equip the human with everything on the ground below it.
-
-
-
-
-
- 2 December 2013
- Giacom updated:
-
- - A less annoying virology system! From now on, you can only get low level virus symptoms from virus food, medium level virus symptoms from unstable mutagen and high level virus symptoms from liquid plasma. You can find a list of symptoms, and which chemicals are required to get them, here: http://wiki.ss13.eu/index.php/Infections#Symptoms_Table
- - The virologist starts with a bottle of plasma in his smart fridge.
- - Made it so you cannot accidentally click in the gaps between chem masters.
-
-
-
-
-
- 1 December 2013
- cookingboy3 updated:
-
- - Added three new buttons to the sandbox panel.
- - Removed canister menu, replaced it with buttons.
- - Players can no longer spawn "dangerous" canisters in sandbox, such as Plasma, N20, CO2, and Nitrogen.
+ - Adds more constructible and deconstructable machines!
+ - Added constructible miniature chemical dispensers, upgradable
+ - Sleepers are now constructible and upgradable, open and close like DNA scanners, and don't require a console
+ - Cryogenic tubes are now constructible and upgradable, open and close like DNA scanners, and you can set the cryogenic tube's pipe's direction by opening its panel and wrenching it to connect it to piping
+ - Telescience pads are now constructible and upgradable
+ - Telescience consoles are now constructible
+ - Telescience tweaked (you can save data on GPS units now)
+ - Teleporters are now constructible and upgradable, the console has a new interface and you can lock onto places saved to GPS units in telescience
+ - Teleporters start unconnected. You need to manually reconnect the console, station and hub by opening the panel of the station and applying wire cutters to it.
+ - Biogenerators are now constructible and upgradable
+ - Atmospherics heaters and freezers are now constructible and upgradable and can be rotated with a wrench when their panel is open to connect them to pipes. Screw the board to switch between heater and freezer.
+ - Mech chargers are now constructible and upgradable
+ - Microwaves are now constructible and upgradable
+ - All kitchen machinery can now be wrenched free
+ - SMES are now constructible
+ - Dragging a human's sprite to a cryogenic tube or sleeper will put them inside and activate it if it's cryo
+ - Constructible newscasters, their frames are made with autolathes
+ - Constructible pandemics
+ - Constructible power turbines and their computers
+ - Constructible power compressors
+ - Constructible vending machines. Screw the board to switch vendor type.
+ - Constructible hydroponics trays
+ - Sprites for all this
+ - This update will have unforeseen bugs, please report those you find at https://github.com/tgstation/-tg-station/issues/new if you want them fixed.
+ - As usual, machines are deconstructed by screwing open their panels and crowbarring them. While constructing machines, examining them will tell you what parts you're missing.
- 28 November 2013
- Malkevin updated:
-
- - Made the suit storage on the Captain's Tunic more useful than just a place to store your e-o2 tank. You can now store the nuke disk, stamps, medal box, flashes and melee weapons (mainly intended for the Chain of Command), and of course - smoking paraphernalia
-
-
-
-
-
- 30 November 2013
- Yota updated:
-
- - The identification console will now require that ID and job names follow the same restrictions as player names.
- - NTSL scripts and parrots should now handle apostrophes and such properly. It's about time.
- - NTSL scripts now have a better sense of time.
-
-
-
-
- 27 November 2013
- RobRichards updated:
-
- - Nanotrasen surgeons are now certified to perform Limb replacements, The robotic parts used in construction of Nanotrasen Cyborgs are the only parts authorized for crew augmentation, these replacement limbs can be repaired with standard welding tools and cables.
-
-
-
-
-
- 17 November 2013
- Laharl Montgommery updated:
-
- - AI can now anchor and unanchor itself. In short, it means the AI can be dragged, if it wants to.
-
-
-
-
-
- 16 November 2013
- Kyrahabattoir updated:
-
- - Added restocking units for the snack, softdrinks, cigarettes, booze and hot drinks vending machines, can be ordered in cargo.
- - Vending machines need their service screwed on in order to dispense products.
-
-
-
-
-
- 15 November 2013
- Giacom updated:
-
- - Added bluespace crystals, mysterious crystals which have strange properties when you crush them in your hand or throw them at someone. You can make bluespace crystals via slimes or research.
- - Telescience Update! The telescience doesn't start 100% effecient anymore and you need to create bluespace crystals and put them into the telescience computer.
- - The telepad is now more random, along with power, bearing and angle will be randomly offset a bit.
-
-
-
-
-
- 11 November 2013
- Fleure updated:
-
- - Players can now escape from containers of various kinds, such as sleepers, mechs, gibbers, spider cocoons etc with the resist verb. In some cases this is the only way to escape and overrides movement or older eject verbs.
-
-
-
-9 November 2013
- Giacom, SuperSayu, Iamgoofball, VistaPOWA updated:
-
- - Added Telescience! I would explain how it works but then it wouldn't be very sciencey! Have fun figuring it out. The room is near Xenobiology.
-
-
-
-
-
- 9 November 2013
- Yota updated:
-
- - Along with a NanoUI upgrade, the human interface lock of APCs can now be toggled by the AI.
- - NanoUI dialogs will no longer steal keyboard focus when opened.
-
-
-
-
- 6 November 2013
- Cheridan updated:
-
- - Nuke Ops will now get an amount of telecrystals that scales with the round populaton. Their staging area has been equipped with telecrystal management consoles, which allow to transfer their TC among themselves. Try out the new items available in your uplink!
-
-
-
-
-
-
- 2 November 2013
- Drovidi Corv updated:
-
- - Added a forced labor camp to mining. A quota can be assigned to a prisoner's ID at a prisoner management console before he is sent to serve his sentence in the secure area of the labor camp shuttle. Laborers are advised that breaching space from the asteroid may be unwise.
-
-
-
-
-
- 27 October 2013
- Giacom updated:
-
- - Added the Female VOX AI Announcement System; a vocal announcement system for the AI to announce things on!
- - Thanks to /vg/ for the sounds and to JJRCop for trimming down the silence to make them sound natural(er).
- - The VOX Announcement system isn't to be abused, admins should warn AIs who misuse it and ban AIs who misuse it after being warned.
-
-
-
-
-
- 26 October 2013
- Giacom updated:
-
- - Service Cyborgs now have a violin module.
- - You can now examine Cyborgs to see their active module.
-
-
-
-
-
- 14 October 2013
- Giacom updated:
-
- - AIs can now use alt click to get a list of items on the tile, allowing the AI to interact with objects under it. They can also use this to bookmark tiles with valuable equipment, such as APCs, allowing them easy access to the tile, to interact with or to jump to.
- - New Malf Power: Malf AIs can override a single machine's programming to cause it to rise up and attack everyone in sight.
-
-
-
-
-
-
- 6 October 2013
- Giacom updated:
-
- - New blob features!
- - The blob will glow when it is being pulsed from a core/node. Resource/factories have depended on being pulsed to work, but you couldn't see; well now you can.
- - Overminds can talk! But only to other overminds, but ghosts can hear their conversations.
- - As a blob overmind you can now use shortcuts to help robust that assistant with the welding tank dangerously close to your core.
- - Expand = CTRL Click - Rally = Middle Mouse Click - Create Shield = Alt Click
-
-
-
-
-
- 8 October 2013
- Cael_Aislinn updated:
-
- - Terbs Fun Week Day 6: Centcomm will ask borrow the cargo shuttle for top secret shenanigans. They'll always return it though, and sometimes they'll even clean it too (new random event).
-
-
-
-
-
- 6 October 2013
- Ergovisavi updated:
-
- - Entering a Hotspot will cause you to ignite, but hot air was slightly reduced in deadliness. For every hotspot you enter, you get a little bit harder to be put out, so be wary.
-
-
-
-
-
- 29 September 2013
- RobRichards updated:
-
- - Nanotrasen Cyborg Upgrades:
-Standard issue Engineering cyborgs now come equipped with replacement floor tiles which they can replenish at recharge stations.
-
-
-
-
-
- 28 September 2013
- Ergovisavi updated:
-
- - Mobs can now be lit on fire. Wearing a full firesuit (or similar) will protect you. Extinguishers, Showers, Space, Cryo, Resisting, being splashed with water can all extinguish you. Being splashed with fuel/ethanol/plasma makes you more flammable. Water makes you less flammable.
-
-
-
-
-
- 26 September 2013
- Cheridan updated:
-
- - Nanotrasen Anomaly Primer:
- Unstable anomalies have been spotted in your region of space. These anomalies can be hazardous and destructive, though our initial encounters with these space oddities has discovered a method of neutralization. Method follows.
- Step 1. Upon confirmation of an anomaly sighting, report its location. Early detection is key.
- Step 2. Using an atmospheric analyzer at short range, determine the frequency that the anomaly's core is fluctuating at.
- Step 3. Send a signal through the frequency using a radio signaller. Note that non-specialized signaller devices may possibly lack the frequency range needed.
- With the anomaly neutralized and the station brought out of danger, inspect the area for any remnants of the anomaly. Properly researched, we believe these events could provide vast amounts of valuable data.
- Did you find this report helpful?
-
-
-
-
-
-
- 21 September 2013
- Malkevin updated:
-
- - Due to complaints about Security not announcing themselves before making arrests NT has now issued it's Sec team with loud hailer integrated gas masks, found in their standard equipment lockers. Users can adjust the mask's level of aggression with a screwdriver.
- - The sprites could be shaded better. Think you can do better? Post your submissions here.
-
-
-
-
-
- 19 September 2013
- Malkevin updated:
-
- - Juggernaut's ablative armor has been adjusted. They have a greater chance to reflect lasers however on reflection they take half damage instead of no damage, basically this adjustment means you should be able to kill a Juggernaut with two laser guns instead of four! Also their reflection spread has been greatly widened, enjoy the lightshow
- - Cargo can now order exile implants.
- - Checking a collector's last power output via analyzers has been moved to multitools, because that actually made sense (betcha didn't know this existed, I know I didn't)
- - Analyzers can now be used to check the gas level of the tank in a loaded radiation collector (yay no more crowbars), you can also use them on pipes to check gas levels (yay no more pipe meters)
-
-
-
-
- 17 September 2013
- SuperSayu updated:
-
- - You can no longer strip people through windows and windoors
- - You can open doors by hand even if there is a firedoor in the way, making firedoor+airlock no longer an unbeatable combination
- - Ghosts can now click on anything to examine it, or double click to jump to a turf. Double clicking a mob, bot, or (heaven forbid) singularity/Nar-Sie will let you follow it. Double clicking your own corpse re-enters it.
- - AI can double click a mob to follow it, as well as double clicking turfs to jump.
- - Ventcrawling mobs can alt-click a vent to start ventcrawling.
- - Telekinesis is now part of the click system. You can click on buttons, items, etc, without having a telekinetic throw in hand; the throw will appear when you click on something you can move (with your mind).
-
-
-
-
-
- 13 September 2013
- JJRcop updated:
-
- - We at Nanotrasen would like to assure you that we know the pain of waiting five minutes for the emergency shuttle to be dispatched in a high-alert situation due to our confirmation-of-distress policy. Therefore, we have amended our confirmation-of-distress policy so that, in the event of a red alert, the distress confirmation period is shortened to three minutes and we will hurry in preparing the shuttle for transit. This totals to 6 minutes, in hope that it will give our very expensive equipment a better chance of recovery.
-
-
-
-
-
- 3 September 2013
- Cael_Aislinn updated:
-
- - Terbs Fun Week Day 5: Chef gets a Nanotrasen-issued icecream machine with four pre-approved icecream flavours and two official cone types.
-
-
-
-
-
- 2 September 2013
- Cael_Aislinn updated:
-
- - Terbs Fun Week Day 4: Humans, aliens and cyborgs now show speech bubbles when they talk.
-
-
-
-
-
- 1 September 2013
- Cael_Aislinn updated:
-
- - Terbs Fun Week Day 3: Detective can reskin his gun to one of five variants: Leopard Spots, Gold Trim, Black Panther, Peacemaker and the Original.
-
-
-
-
-
- 12 September 2013
- AndroidSFV updated:
-
- - AI Photography: AIs now have two new verbs, Take Picture and View Picture. The pictures the AI takes are centered on the AI's eyeobj. You can use these pictures on a newscaster, and print them at a photocopier.
-
-
-
-
-
- 31 August 2013
- Cael_Aislinn updated:
-
- - Terbs Fun Week Day 2: RD, lawyers and librarians now spawn with a laser pointer. Don't point them in anyone's eyes!
-
-
-
-
-
- 30 August 2013
- Cael_Aislinn updated:
-
- - Terbs Fun Week Day 1: Added ghost chilis as a mutation of chili plants. Be careful, they're one of the hottest foods in the galaxy!
-
-
-
-
-
- 21 August 2013
- Dumpdavidson updated:
-
- - Replaced the EMP grenades from the uplink with an EMP kit. The kit contains a grenade, an implant and a flashlight with 5 uses that can EMP any object or mob in melee range.
-
-
-
-
-
- 18 August 2013
- Delicious updated:
-
- - Made time and date consistent across medical and security records, mecha logs and detective scanner reports
- - Added date to PDA
-
-
-
-
-
- 13 August 2013
- Giacom updated:
-
- - Malf AIs now have a new power which will spawn a "borging machine". This machine will turn living humans into loyal cyborgs which the AI can use to take over the station with. The AI will limit themselves by using this ability, such as no shunting, and the machine will have a long cooldown usage.
-
-
-
-
-
-
-
-
- 12 August 2013
- Giacom updated:
-
- - Changed the blob balance to make the blob start strong but grow slower, resulting in rounds where the blob doesn't instantly get killed off if found out and doesn't immediately dominate after being left alone long enough. AIs no longer have to quarantine the station.
-
-
-
-
-
- 10 August 2013
- Malkevin updated:
-
- - Cargo Overhaul: Phase 1
- - Ported Bay's cargo computer categoy system
- - Crates have been tweaked significantly. Crates have been reduced to single item types where possible, namely with expensive crates such as weapons and armor. A total of 28 new crates have been added, including chemical and tracking implants, and raw materials can also be bought from cargo for a significant number of points (subject to change)
- - This was a pretty large edit of repetitive data, so no doubt I've made a mistake or two. Please report any bugs to the usual place
-
-
-
-
-
- 6 August 2013
- Giacom updated:
-
- - NTSL no longer allows you to use a function within another function parameter. This was changed to help prevent server crashes; if your working script no longer compiles this is why.
-
-
-
-
-
- 5 August 2013
- Kaze Espada updated:
-
- - Nanotrasen has recentely had to change its provider of alcoholic beverages to a provider of lower quality. Cases of the old ailment known as alcohol poisoning have returned. Bar goers are to be weary of this new condition.
-
-
-
-
-
- 4 August 2013
- Giacom updated:
-
- - Nanotrasen has re-arranged the station blueprint designs to have non-essential APCs moved to the maintenance hallways. Non-essential rooms that aren't connected to a maintenance hallway will have their APC remain. Station Engineers will now have easy access to a room's APC without needing access themselves. Nanotrasen also wishes to remind you that you should not sabotage these easy to access APCs to cause distractions or to lockdown someone in a location. Thank you for reading.
-
-
-
-
-
- 31 July 2013
- Ricotez updated:
-
- - Atmospherics now has its own hardsuit. Instead of radiation protection it offers fire protection.
-
-
-
-
-
- 21 July 2013
- Malkevin updated:
-
- - Cultists now start with two words each, and the starting talisman no longer damages you when you use it
-
-
-
-
-
-
- 21 July 2013
- Cheridan updated:
-
- - Instead of a level-up system where it is possible to acquire all the skills, each skill now costs 1 point, and you can pick up to 5.Husking people, instead of giving you more XP to buy skills, now gives you a skill reset, allowing you to pick new ones.
- - DNA Extract Sting is now free, and is your main mode of acquiring DNA. You can hold up to 5 DNAs, and as you acquire more, the oldest one is removed. If you're currently using the oldest DNA strand, you will be required to transform before gaining more.
- - New abilities! An UI indicator for chemical storage! Fun!
-
-
-
-
-
- 16 July 2013
- Malkevin updated:
-
- - Summary of my recent changes: Added a muzzle and a box of Prisoner ID cards to the perma wing, RnD can make a new combined gas mask with welding visor, added some atmos analyzers to atmospherics, air alarm circuit boards have their own sprites, package wrapped objects will now loop back round to the mail chute instead of auto-rerouting to disposals, and the detective and captain have access to securitrons through their PDA cartridges.
-
-
-
-
- 15 July 2013
- Giacom updated:
-
- - A new item has been added to the syndicate catalog. The AI detector is a device disguised as a multitool; it is not only able to be used as a real multitool but when it detects an AI looking at it, or it's holder, it will turn red to indicate to the holder that he should cease supiscious activities. A great and cheap, to produce, tool for undercover operations involving an AI as the security system.
-
-
-
-
-
- 7 July 2013
- Giacom updated:
-
- - Revamped blob mode and the blob random event to spawn a player controlled overmind that can expand the blob and upgrade pieces that perform particular functions. This will use resources which the core can slowly generate or you can place blob pieces that will give you more resources.
-
-
-
-
- 27 June 2013
- Ikarrus updated:
-
- - Nanotrasen R&D released a new firmware patch for their station AIs. Included among the changes is the new ability for AIs to interact with fire doors. R&D officials state they feel giving station AIs more influence could only lead to good things.
-
-
-
-
- 16 June 2013
- Khub updated:
-
- - Job preferences menu now not only allows you to left-click the level (i.e. [Medium]) to raise it, but also to right-click it to lower it. That means you don't have to cycle through all the levels to get rid of a [Low].
-
-
-
-
-
- 15 June 2013
- Carnie updated:
-
- - DNA-scanner pods (DNA-modifier + cloning), now open and close in a similar fashion to closets. This means you click on them to open/close them. This change was to fix a number of issues, like items being lost in the scanner-pods.
- - As a side-effect, borgs can now clone humans. No harm can become a dead human, so they are not necessarily lawbound to clone them, and such tasks are probably best left to qualified genetics staff.
-
- Petethegoat updated:
-
- - Updated chemical grenades. The build process is much the same, except they require an igniter-X assembly instead of a single assembly item. You can also just use a cable coil to get regular grenade behaviour.
-
-
-
-
- 9 June 2013
- Ikarrus updated:
-
- - Server operators may now allow latejoiners to become antagonists. Check game_options.txt for more information.
- - Server operators may now set how traitors and changelings scale to population. Check game_options.txt for more information.
-
-
-
-
- 6 June 2013
- Giacom updated:
-
- - Emptying someone's pockets won't display a message. In theory you can now pickpocket!
-
-
-
-
-
- 4 June 2013
- Dumpdavidson updated:
-
- - Headsets can no longer broadcast into a channel that is disabled.
Headsets now have a button to turn off the power instead of the speaker. This button disables all communication functions.
EMPs now force affected radios off for about 20 seconds.
-
-
-
-
- 2 June 2013
- Ikarrus updated:
-
- - To reduce costs of security equipment, mounted flashers have been adjusted to use common handheld flashes as their flashbulbs. Although these flashbulbs are more prone to burnout, they can easily be replaced with wirecutters.
-
-
-
-
- 25 May 2013
- Ikarrus updated:
-
- - CentCom announced some minor restructuring within Space Station 13's command structure. Most notable of these changes is the removal of the Head of Personnel's access to the security radio channel. CentCom officials have stated the intention was to make the HoP's role more specialized and less partial towards security.
-
-
-
-
- 14 May 2013
- Ikarrus updated:
-
- - Nanotrasen seeks to further cut operating costs on experimental cyborg units.
-
-Cyborg chassis will now be made from a cheaper but less durable design.
-
-RCDs found on engineering models have been replaced with a smaller model to make room for a metal rods module.
-
-Cyborg arms will no longer be long enough to allow for self-repairs.
-
NOTE: A cyborg's individual modules have been found to become non-operational should the unit sustain too much structural damage.
-
-
-
-
- 11 May 2013
- Malkevin updated:
-
- - SecHuds now check for valid clearance before allowing you to change someone's arrest status. There is only one way to bypass the ID check, and its not the usual way.
-
-
-
-
-
- 7 May 2013
- Ikarrus updated:
-
- - As a part of the most recent round of budget cuts, toolboxes will now be made with a cheaper but heavier alloy. HR reminds employees to avoid being struck with toolboxes, as toolbox-related injuries are not covered under the company's standard health plan.
-
-
-
-
- 5 May 2013
- Rolan7 updated:
-
- - Cargo manifests from CentComm may contain errors. Stamp them DENIED for refunds. Doesn't apply to secure or large crates. Check the orders console for CentComm feedback.
-
-
-
-
- 2 May 2013
- Malkevin updated:
-
- - You can now weld four floor tiles together to make a metal sheet
- - The All-In-One Grinder can now grind Metal, Plasteel, Glass, Reinforced Glass, and Wood sheets
- - Made grey backpacks slightly less ugly
-
-
-
-
- 30 April 2013
- Ikarrus updated:
-
- - Researchers have discovered that glass shards are, in fact, dangerous due to their typically sharp nature. Our internal Safety Committee advises that glass shards only be handled while using Nanotrasen-approved hand-protective equipment.
-
-
-
-
- 24 April 2013
- Carnie updated:
-
- - DNA reworked: All SE blocks are randomised. DNA-modifier emitter strength affects the size of the change in the hex-character hit. Emitter duration makes it more likely to hit the character you click on. Almost all DNA-modifier functions are on one screen.
Balancing -will- be off a bit. Is getting halk to hard/easy? Please report bugs/balancing issues/concerns here: http://forums.nanotrasen.com/viewtopic.php?f=15&t=13083 <3
-
-
-
-
- 26 April 2013
- Aranclanos updated:
-
- - Exosuit fabricators will now need to be manually updated
-
- Ikarrus updated:
-
- - Commanding Officers of Nanotrasen Stations have been issued a box of medals to be awarded to crew members who display exemplary conduct.
-
-
-
-
-
- 23 April 2013
- Malkevin updated:
-
- - Replaced the captain's run of the mill armored vest with his very own unique vest. Offers slightly better bullet protection.
-
-
-
-
-
- 22 April 2013
- Malkevin updated:
-
- - Overhauled the thermal insulation system
- - All clothing that protected from one side of the thermal spectrum now protects from the other.
- - Armor (although most don't have full coverage) protects between 160 to 600 kelvin
- - Firesuits protect between 60 to 30,000 kelvin (Note: Hotspot damage still exists)
- - CE's hardsuit got its firesuit level protection back
- - Bomb suits function as ghetto riot gear
-
-
-
-
- 22 April 2013
- Cheridan updated:
-
- - Stungloves removed 5eva.
- - Don't rage yet. Makeshift stunprods(similar in function to stungloves) and spears are now craftable. Make them by using a rod on cable restraits, then adding something.
- - Stun batons/prods now work off power cells, which can be removed and replaced! Use a screwdriver to remove the battery.
-
-
-
-
-
- 17 April 2013
- Giacom updated:
-
- - If the configuration option is enabled, AIs and or Cyborgs will not be able to communicate vocally. This means they cannot talk normally and need to use alternative methods to do so
-
-
-
-
-
- 10 April 2013
- Cheridan updated:
-
- - You can now condense capsaicin into pepper spray with chemistry.
- - Pepper spray made slightly more effective.
- - Teargas grenades can be obtained in Weapons and Riot crates.
- - Riot crate comes with 2 sets of gear instead of 3, made cheaper. Beanbag crate removed entirely. Just make more at the autolathe instead. Bureaucracy crate cheaper, now has film roll.
- - NT bluespace engineers have ironed-out that little issue with the teleporter occasionally malfunctioning and dropping users into deep space. Please note, however, that bluespace teleporters are still sensitive experimental technology, and should be Test Fired before use to ensure proper function.
-
-
-
-
-
- 9 April 2013
- Ikarrus updated:
-
- - Liquid Plasma have been found to have strange and unexpected results on virion cultures. The executive chief science officer urges virologists to explore the possibilities this new discovery could bring.
- - After years or research, our scientists have engineered this cutting-edge technology born from the science of shaving. The Electric Space-Razor 5000! It uses moisturizers to refuel your face while you shave with not three, not four, but FIVE lazer-precise inner blades for maximum comfort.
-
-
-
-
- 4 April 2013
- Cheridan updated:
-
- - When an AI shunts into an APC, the pinpointer will begin tracking it. When the AI returns to its core, the pinpointer will go back to locating the nuke disc.
- - New sechud icons for sec officers/HoS, medical doctors, and loyalty implants.
-
-
-
-
- 28 March 2013
- Carnie updated:
-
- - Empty character slots in your preferences screen will now randomize. So they won't initialise as bald, diaper-clad, white-guys.
- - Reworked the savefile versioning/updating code. Your preferences data is less likely to be lost.
-
-
-
-
- 14 March 2013
- Major_sephiroth updated:
-
- - You can now light cigarettes with other cigarettes, and candles. And cigars. Light a cigar with a candle! It's possible now!
-
-
-
-
- 13 March 2013
- Elo001 updated:
-
- - You can now open and close job slots for some jobs at any IDcomputer. There is a cooldown when opening or closing a position.
-
-
-
-
- 8 March 2013
- Kor updated:
-
- - You can now construct/destroy bookcases. This is super exciting and game changing.
-
-
-
-
- 6 March 2013
- Petethegoat updated:
-
- - Petethegoat says, "Added a new feature involvi-GLORF"
- - Overhauled how grabs work. There aren't any interesting mechanical differences yet, but they should be a lot more effective already. You don't have to double click them anymore. Report any bugs with grabbing directly to me, or on the issue tracker.
-
-
-
-
- 24 February 2013
- Ikarrus updated:
-
- - AI has been moved back to the center of the station. Telecoms has been moved to engineering.
-
- Faerdan updated:
-
- - Competely new UI overhaul! Most user interface have been converted.
-
-
-GoonStation 13 Development Team
-
- Coders: Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion
- Spriters: Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No
-
-
-
Except where otherwise noted, Goon Station 13 is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.
Rights are currently extended to SomethingAwful Goons only.
-Some icons by Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 License.
-
-
-
+ 8 February 2014
+ MrPerson updated:
+
+ - Added a NanoUI for the SMES
+
+
+
+
+
+ 5 February 2014
+ Yota updated:
+
+ - Handling a couple flashlights will no longer transform you into the sun. Each light source will have deminishing returns.
+ - Inserting lights into containers should no longer dim other lights.
+
+
+
+
+
+ 3 February 2014
+ Demas updated:
+
+ - Changes windoor and newscaster attack messages to be consistent with windows and grilles. This removes the distracting boldness from windoor attack messages, which is reserved for userdanger, and names the attacker.
+ - Thrown items now play a sound effect on impact. The volume of the sound is based on the item's throwforce and/or weight class.
+ - The fireaxe now has 15 throwforce, when previously it had only 1. But why would you throw it away, anyway?
+ - Projectiles now play a sound upon impact. The volume of the sound depends on the damage done by the projectile. Damageless projectiles such as electrodes have static volumes. Practise laser and laser tag beams have no impact sound.
+ - Added sear.ogg for the impacts of damaging beams such as lasers. It may be replaced if player feedback proves negative.
+
+
+
+
+
+ 2 February 2014
+ Demas updated:
+
+ - Attack sounds for all melee weapons! No more silent attacks.
+ - The volume of an object's attack sound is based on the weapon's force and/or weight class.
+ - Welders, lighters, matches, cigarettes, energy swords and energy axes have different attack sounds based on whether they're on or off.
+ - Weapons that do no damage play a tap sound. The exceptions are the bike horn, which still honks, and the banhammer, which plays adminhelp.ogg. Surely nothing can go wrong with that last one.
+ - When you tap someone with an object, the message now uses "tapped" or "patted" instead of attacked. The horn still uses HONKED, and the banhammer still uses BANNED.
+ - You won't get the "armour has blocked an attack" message for harmless attacks anymore.
+ - Adds 5 force to the lighter when it's lit. Same as when you accidentally burn yourself lighting it.
+ - Removes boldness from item attack messages on non-human mobs. The attack is bolded for a player controlling a non-human mob. Now your eyes won't jump to the chat when it's Pun Pun who's being brutalised.
+ - Blood will no longer come out of non-human mobs if the attack is harmless.
+ - Adds a period at the end of the catatonic human examine message. That's been bugging me for years.
+ - The activation and deactivation sounds of toy swords, energy swords and energy shields are slightly quieter. Energy swords and shields are now slightly louder than toys.
+ - You can no longer light things with burnt matches.
+ - Match, cigarette and lighter attack verbs, forces and damage types change based on whether the object is lit or not.
+ - Fixes a bug with the energy blade that kept it at weight class 5 after it was deactivated. Who cares, it disappears upon deactivation.
+ - Changes the welder out of fuel message slightly to be less fragmented.
+ - Removes dead air from a lot of weapon sound effects to make them more responsive. In other words, the fire extinguisher attack sound will play a lot sooner after you attack than before.
+ - Equalised the peak volumes of most weapon sounds to be -0.1dB in an attempt to make volumes based on force more consistent across different sounds.
+
+
+
+
+ 1 February 2014
+ Ergovisavi updated:
+
+ - Walking Mushrooms will now attack and eat each other! They're all a little unique from each other, no two shrooms are exactly alike, and a better quality harvest means stronger Walking Shrooms. Pit them against each other for your entertainment.
+ - Each mushroom will have a different colored cap to identify them. When mushrooms eat each other, they get stronger. The resulting mushroom will drop more slices when cut down to harvest, and will have better quality slices.
+ - Don't hurt them yourself, though, or you'll bruise them, and mushrooms won't get stronger from eating a bruised mushroom. If your mushroom faints, feed it a mushroom such as a plump helmet to get it back on its feet. It will slowly regenerate to full health eventually.
+
+
+
+ ChuckTheSheep updated:
+
+ - You can use a screwdriver to hook up irrigation hoses between hydroponics trays.
+ - If you transfer more than 30 units to the tray, irrigation is triggered and the water is shared between all connected trays.
+
+
+
+
+
+ 30 January 2014
+ Demas updated:
+
+ - Updates box2550Away
+ - Anchors all computer frames
+ - Breaks vendors with the intent of preventing players hiding out there all round. Because it's that exciting. Go back to the station if you want to eat!
+ - Removes detective's camera TV which doesn't function off-station
+ - Removes the dead AI and dead slime as both had issues. They will return.
+ - Fixes beer keg and cola incorrect object paths.
+ - Fixes AI module incorrect object paths.
+ - Emags the maintenance door to and from the portal so those without maintenance can enter and exit the portal room.
+ - Removes all but one SWAT body armour from the armoury. Removes two of the SWAT helmets, leaving two behind. Q_Q
+
+
+
+ 28 January 2014
+ Demas updated:
+
+ - Adds thud sounds to falling over
+ - Known bug: Thuds play when cloning initialises or someone is put into cryo. This will be fixed.
+
+
+
+
+ 26 January 2014
+ Balrog updated:
+
+ - Syndicate Playing Cards can now be found on the Syndicate Mothership and purchased from uplinks for 1 telecrystal.
+ - Syndicate Playing Cards are lethal weapons both in melee and when thrown, but make the user's true allegiance to the Syndicate obvious.
+ - Sprites are courtesy of Nienhaus.
+
+
+
+
+
+ 25 januari 2014
+ Miauw updated:
+
+ - Adds changeling arm blades that cost 20 chems and do 25 brute damage.
+ - Arm blades can pry open unpowered doors, replace surgical saws in brain removal, slice tables and smash computers.
+
+
+
+
+
+ 24 January 2014
+ Ergovisavi updated:
+
+ - Gibtonite, the explosive ore, can now be found on the asteroid. It's very hard to tell between it and diamonds, at first glance.
+ - Gibtonite deposits will blow up after a countdown when you attempt to mine it, but you can stop it with an analyzer at any time. It makes for a good mining explosive.
+ - The closer you were to the explosion when you analyze the Gibtonite deposit, the better the Gibtonite you can get from it.
+ - Once extracted, it must be struck with a pickaxe or drill to activate it, where it will go through its countdown again to explode!
+ - Explosives will no longer destroy the ore inside of asteroid walls or lying on the floor.
+
+
+
+
+
+ 21 January 2014
+ MrPerson updated:
+
+ - Mobs now lie down via turning icons rather than preturned sprites.
+ - You can lie down facing up or down and the turn can be 90 degrees clockwise or counterclockwise.
+ - Resting will always make you lie to the right so you look good on beds.
+ - Please report any bugs you find with this system.
+
+
+
+ 20 January 2014
+ Petethegoat updated:
+
+ - Increased the walk speed. Legcuffed speed is unaffected, and is still suffering.
+ - Sped up alien drones, they are now the same speed as sentinels.
+
+
+
+
+
+ 19 January 2014
+ Rolan7 updated:
+
+ - You can now sell mutant seeds, from hydroponics, to Centcom via the supply shuttle.
+ - Fixes powersinks causing APCs to stop automatically recharging.
+
+ KazeEspada updated:
+
+ - The water cooler is now stocked with paper cups. You can refill the cups by putting paper in it.
+
+
+
+
+
+ 17 January 2014
+ ManeaterMildred updated:
+
+ - Changed the way the Gygax worked. It now has less defense and shot deflection, but is faster and have less battery drain per step.
+ - Nerfed the Carbine's brute damage and renamed it to FNX-99 "Hades" Carbine.
+ - Nerfed the Gygax defense from 300 to 250.
+ Nerfed the Gygax projectile deflection chance from 15 to 5.
+ Buffed the Gygax speed from 3 to 2, making it faster.
+ Reduced the battery use when moving from 5 to 3.
+
+ The Mech Ion Rifle now has a faster cooldown, from 40 to 20.
+ Nerfed the carbine's Brute Damage from 20 to 5.
+
+ Please post feedback to these changes on the forums.
+
+
+
+ Demas updated:
+
+ - Boxstation 2010 themed away mission! Now you walk amongst the elders.
+
+
+
+
+
+ 15 January 2014
+ Dumpdavidson updated:
+
+ - EMPs affect the equipment of a human again.
+ - EMP flashlight now recharges over time and its description no longer reveals the illegal nature of the device.
+ - EMP implant now has two uses.
EMP kit now contains two grenades.
+
+
+
+
+
+ 14 January 2014
+ SirBayer updated:
+
+ - Armor now reduces damage by the protection percentage, instead of randomly deciding to half or full block damage by those percentages.
+ - Shotguns, with buckshot shells, will fire a spread of pellets at your target, like a real shotgun blast.
+
+ ManeaterMildred updated:
+
+ - Updated research designs.
+ - The Protolathe can now build a Ion Rifle.
+ - The Exosuit Fabricator can now build a Mech Ion Rifle, a Mech Carbine and a Mech-Mounted Missile Rack.
+
+ Fleure updated:
+
+ - Added spider butchery.
+ - Added spider meat, legs, and edible eggs.
+ - Added new spider related meals.
+
+ Giacom updated:
+
+ - Because of an emagged cyborg's explosion, the MMI will die with it.
+ - The self-respiration symptom will now properly keep you from dying of oxygen loss.
+ - The Stimulant symptom's activation chance was increased so you had a constant flow of hyperzine.
+
+ Incoming updated:
+
+ - A new training bomb has been added to the armoury, which will allow you to train your wire cutting skills to disarm real syndicate bombs.
+
+
+
+
+ 12 January 2014
+ VistaPOWA updated:
+
+ - Added Syndicate Cyborgs.
+ - They can be ordered for 25 telecrystals by Nuclear Operatives. A ghost / observer with "Be Operative" ticked in their game options will be chosen to control it.
+ - Their loadout is: Crowbar, Flash, Emag, Esword, Ebow, Laser Rifle. Each weapon costs 100 charge to fire, except the Esword, which has a 500 charge hitcost. Each borg is equipped with a 25k cell by default.
+ - Syndicate borgs can hear the binary channel, but they won't show up on the Robotics Control computer or be visible to the AI. Their lawset is the standard emag one.
+ - Added two cyborg recharging stations to the Syndicate Shuttle.
+
+
+
+
+
+ 11 January 2014
+ Errorage updated:
+
+ - Cyborg modules now use a new UI, which is much quicker than a menu.
+
+ Giacom updated:
+
+ - The game will now have all background operations disabled, this will result in smoother gameplay but may result in some spike lags, before being set back to normal. The gradually increasing lag should now be gone.
+ - You can now emag the crusher, in disposals, to remove the safety. You can use a screwdriver to reset it to the default factory settings.
+ - The toxin compensation symptom will stop giving you toxin damage while at full health.
+
+ Cheridan updated:
+
+ - You can now upgrade laser pointers with micro laser parts. It will increase the chance of blinding people.
+
+ JJRCop updated:
+
+ - The new nuke toy can now be found in your local arcade machine.
+
+
+
+
+ 10 January 2014
+ Giacom updated:
+
+ - You can whisper while in critical, but you will immediately die afterwards DRAMATICALLY. The closer you are to death, the less you can say.
+ - The wizard won't spawn so much smoke after they blink.
+ - The detective's forensic scanner was upgraded so that it can now scan from afar.
+ - Made the ghost's follow button less buggy. Please make an issue report if it still bugs out.
+
+ ChuckTheSheep updated:
+
+ - Morgue Trays can detect players in their bodies and will now change colour depending on a few things. Red = Dead body with no player inside. Orange = No body but items. Green = A dead body with a player inside.
+
+ Rumia29, Nienhaus updated:
+
+ - A new alt RD uniform spawns in his locker.
+
+
+
+
+ 7 January 2014
+ Fleure updated:
+
+ - Janitor now spawns with a service headset.
+ - Backpack watertank slowdown decreased.
+
+
+
+
+
+ 4 January 2014
+ Razharas updated:
+
+ - Constructable machines now depend on R&D parts!
+ - DNA scanner: Laser quality lessens irradiation. Manipulator quality drastically improves precision (9x for best part) and scanner quality allows you to scan suicides/ling husks, with the best part enabling the cloner's autoprocess button, making it scan people in the scanner automatically.
+ - Clone pod: Manipulator quality improves the speed of cloning. Scanning module quality affects with how much health people will be ejected, will they get negative mutation/no mutations/clean of all mutations/random good mutation, at best quality will enable clone console's autoprocess button and will try to clone all the dead people in records automatically, together with best DNA scanner parts cloning console will be able to work in full automatic regime autoscanning people and autocloning them.
+ - Borg recharger: Capacitors' quality and powercell max charge affect the speed at which borgs recharge. Manipulator quality allows borg to be slowly repaired while inside the recharges, best manipulator allows even fire damage to be slowly repaired.
+ - Portable power generators: Capacitors' quality produce more power. Better lasers consume less fuel and reduce heat production PACMAN with best parts can keep whole station powered with about sheet of plamsa per minute (approximately, wasn't potent enough to test).
+ - Autolathe: Better manipulator reduces the production time and lowers the cost of things(they will also have less m_amt and g_amt to prevent production of infinity metal), stacks' cant be reduced in cost, because thatll make production of infinity metal/glass easy
+ - Protolathe: Manipulators quality affects the cost of things(they will also have less m_amt and g_amt to prevent production of infinity metal), best manipulators reduces the cost 5 times (!)
+ - Circuit imprinter: Manipulator quality affects the cost, best manipulator reduce cost(acid insluded) 4 times, i.e. 20 boards per 100 units of acid
+ - Destructive analyzer: Better parts allow items with less reliability in. Redone how reliability is handled, you now see item reliability in the deconstruction menu and deconstructing items that has same or one point less research type level will rise the reliability of all known designs that has one or more research type requirements as the deconstructed item. Designs of the same type raise in reliability more. Critically broken things rise reliability of the design drastically. Whole reliability system is not used a lot but now at least on the R&D part it finally matters.
+
+
+
+
+
+ 2 January 2014
+ Demas updated:
+
+ - Added different colours to departmental radio frequencies. Now you'll be able to filter out or pay attention to each frequency a lot easier.
+
+
+
+
+ 2 January 2014
+ Fleure updated:
+
+ - Fixed bruisepacks and ointments not working.
+ - Fixed injecting/stabbing mouth or eyes when only thick suit worn.
+
+
+
+
+ 1 January 2014
+ Errorage updated:
+
+ - The damage overlay for humans starts a little later than before. It used to start at 10 points of fire + brute damage, it now starts at 35.
+
+
+
+
+ 31 December 2013
+ Fleure updated:
+
+ - Paper no longer appears with words on it when blank input written or photocopied
+ - Vending machine speaker toggle button now works
+ - Building arcade machines works again
+
+
+
+
+ 27 December 2013
+ Giacom updated:
+
+ - Light explosions will no longer gib dead bodies anymore. C4 will function the same and gib anything attached.
+ - Syringe gun projectiles will now display a message when shots are deflected by space suits, biosuits and etc...
+ - You can now move out of sleepers by moving, again.
+
+ Miauw updated:
+
+ - Monkeys now have a resist button on their HUD.
+
+
+
+
+ 21 December 2013
+ RobRichards, Validsalad updated:
+
+ - Added new sprites for the sec-hailer, SWAT gear and riot armour.
+
+ Giacom updated:
+
+ - The Labor Camp has been changed based on feedback. Ore boxes added, internals added, safety pickaxes/shovels (might revert if unliked).
+ - Labor Camp prisoners, who have earned enough points for freedom, will now have to be alone in the shuttle to move it and to open the middle door; this is in order to prevent free'd prisoners from releasing their comrades.
+ - Monkeys no longer walk away when being pulled or grabbed.
+ - Anti-breach shield generators have a greater range, and will cover more exposed space tiles.
+
+ Bobylein updated:
+
+ - Labcoats can now store bottles, beakers, pills, pill bottles and paper.
+
+ Perakp updated:
+
+ - You can no longer slip while laying down.
+
+ Jordie updated:
+
+ - Blowing up borgs from the Robotics Console will now actually make them explode. Emagged Cyborgs will explode even more.
+
+ Nienhaus updated:
+
+ - Added more poster.
+
+
+
+
+
+ 18 December 2013
+ JJRcop updated:
+
+ - Transit tube tweaks. You can now put someone into a transit tube pod using grabs and you can empty a transit tube pod by clicking on it.
+
+ Giacom updated:
+
+ - THE REALISM: Injectors such as syringes, parapens and hypos will not penetrate coveralls with thick material, this includes space suits, biosuits, bombsuits, and their head slot equivalent. Injectors now also consider where you aim, if you aim for the head it will try to use it through the head slot, otherwise it will aim for the body. To clarify, if you are wearing a space helmet and a doctor tries to inject you while aiming at your head, it will protect you until they aim for the unprotected body; same story for wearing a space suit and not a helmet.
+ - The syndicate shuttle has been heavily upgraded with a brand new technology which allows the blast doors to the entrance of the shuttle to AUTOMATICALLY close. Whoa. This brand new technology will help keep out those snoopy crew members.
+ - Lowered the cooldown of creating virus cultures to 5 seconds. You now only need to mix one unit of synaptizine, in a blood full of an advance virus, to get it to remove a random symptom.
+
+ Adrinus updated:
+
+ - Playing cards, just like the real thing! Play poker, blackjack, go fish, the limits are limitless! Recommended to use space cash as the poker chips for now
+
+ Incoming updated:
+
+ - Rounds will no longer end when the wizard dies and there are still apprentices or traitors/survivors..
+
+ Jordie0608 updated:
+
+ - Replaced the digital valves in atmospherics with pumps.
+
+
+
+
+
+ 14 December 2013
+ Incoming updated:
+
+ - Magic Mania! Powerful new magical tools and skills for wizard and crew alike!
+ - Beware the new Summon Magic spell, which will grant the crew access to magical tools and spells and cause some to misuse it!
+ - One Time Spellbooks that can be spawned during summon magic that can teach a low level magic skill to anyone! Beware the effects of reading pre-owned books, the magical rights management is potent!
+
- Magical Wands that can be spawned during Summon Magic! They come in a variety of effects that mimic both classical wizard spells and all new ones. They come precharged but lack the means to refill them once their magical energy is depleted... Fire efficently!
+ - Be aware of the new Charge spell, which can take normally useless spent wands and give them new life! This mysterious effect has been found to wear down the overall magical potency of wands over time however. Beyond wands the clever magical user can find ways to use this spell on other things that may benefit from a magical charge...
+ - The Staff of Resurrection, which holds intense healing magics able to defeat death itself! Look out for this invaluable magical tool during castings of Summon Magic.
+ - Be on the lookout for a new apprentice! This noble mage is a different beast from most wizards, trained in the arts of defending and healing. Too bad he still works for the wizard!
+
+
+
+
+
+ 9 December 2013
+ Giacom updated:
+
+ - New colourful ghost sprites for BYOND members. Sprites by anonus.
+
+
+
+
+
+ 8 December 2013
+ Rolan7 updated:
+
+ - Leather gloves can be used to removes lights.
+ - Plant, ore, and trash bags have a new option to pick up all items of single type
+ - Creating astroturf now works like sandstone, converting all the grass at once.
+ - Uranium and radium can be used instead of mutagen. 10 can mutate species, 5 or 2 mutate traits. Highly toxic.
+ - Plants require a little light to live. Mushroom require even less (2 units vs 4) and take less damage.
+
+
+
+
+ 5 December 2013
+ Razharas updated:
+
+ - Reworked how ling stings are done, now when you click a sting in the changeling tab it becomes current active sting, the icon of that sting appears under the chem counter, alt+clicking anyone will sting them with current sting, clicking the icon of the sting will unset it.
+ - Monkeys have ling chem counter and active sting icons in their UI.
+ - Going monkey -> human will try to equip the human with everything on the ground below it.
+
+
+
+
+
+ 2 December 2013
+ Giacom updated:
+
+ - A less annoying virology system! From now on, you can only get low level virus symptoms from virus food, medium level virus symptoms from unstable mutagen and high level virus symptoms from liquid plasma. You can find a list of symptoms, and which chemicals are required to get them, here: http://wiki.ss13.eu/index.php/Infections#Symptoms_Table
+ - The virologist starts with a bottle of plasma in his smart fridge.
+ - Made it so you cannot accidentally click in the gaps between chem masters.
+
+
+
+
+
+ 1 December 2013
+ cookingboy3 updated:
+
+ - Added three new buttons to the sandbox panel.
+ - Removed canister menu, replaced it with buttons.
+ - Players can no longer spawn "dangerous" canisters in sandbox, such as Plasma, N20, CO2, and Nitrogen.
+
+
+
+
+ 28 November 2013
+ Malkevin updated:
+
+ - Made the suit storage on the Captain's Tunic more useful than just a place to store your e-o2 tank. You can now store the nuke disk, stamps, medal box, flashes and melee weapons (mainly intended for the Chain of Command), and of course - smoking paraphernalia
+
+
+
+
+
+ 30 November 2013
+ Yota updated:
+
+ - The identification console will now require that ID and job names follow the same restrictions as player names.
+ - NTSL scripts and parrots should now handle apostrophes and such properly. It's about time.
+ - NTSL scripts now have a better sense of time.
+
+
+
+
+ 27 November 2013
+ RobRichards updated:
+
+ - Nanotrasen surgeons are now certified to perform Limb replacements, The robotic parts used in construction of Nanotrasen Cyborgs are the only parts authorized for crew augmentation, these replacement limbs can be repaired with standard welding tools and cables.
+
+
+
+
+
+ 17 November 2013
+ Laharl Montgommery updated:
+
+ - AI can now anchor and unanchor itself. In short, it means the AI can be dragged, if it wants to.
+
+
+
+
+
+ 16 November 2013
+ Kyrahabattoir updated:
+
+ - Added restocking units for the snack, softdrinks, cigarettes, booze and hot drinks vending machines, can be ordered in cargo.
+ - Vending machines need their service screwed on in order to dispense products.
+
+
+
+
+
+ 15 November 2013
+ Giacom updated:
+
+ - Added bluespace crystals, mysterious crystals which have strange properties when you crush them in your hand or throw them at someone. You can make bluespace crystals via slimes or research.
+ - Telescience Update! The telescience doesn't start 100% effecient anymore and you need to create bluespace crystals and put them into the telescience computer.
+ - The telepad is now more random, along with power, bearing and angle will be randomly offset a bit.
+
+
+
+
+
+ 11 November 2013
+ Fleure updated:
+
+ - Players can now escape from containers of various kinds, such as sleepers, mechs, gibbers, spider cocoons etc with the resist verb. In some cases this is the only way to escape and overrides movement or older eject verbs.
+
+
+
+9 November 2013
+ Giacom, SuperSayu, Iamgoofball, VistaPOWA updated:
+
+ - Added Telescience! I would explain how it works but then it wouldn't be very sciencey! Have fun figuring it out. The room is near Xenobiology.
+
+
+
+
+
+ 9 November 2013
+ Yota updated:
+
+ - Along with a NanoUI upgrade, the human interface lock of APCs can now be toggled by the AI.
+ - NanoUI dialogs will no longer steal keyboard focus when opened.
+
+
+
+
+ 6 November 2013
+ Cheridan updated:
+
+ - Nuke Ops will now get an amount of telecrystals that scales with the round populaton. Their staging area has been equipped with telecrystal management consoles, which allow to transfer their TC among themselves. Try out the new items available in your uplink!
+
+
+
+
+
+
+ 2 November 2013
+ Drovidi Corv updated:
+
+ - Added a forced labor camp to mining. A quota can be assigned to a prisoner's ID at a prisoner management console before he is sent to serve his sentence in the secure area of the labor camp shuttle. Laborers are advised that breaching space from the asteroid may be unwise.
+
+
+
+
+
+ 27 October 2013
+ Giacom updated:
+
+ - Added the Female VOX AI Announcement System; a vocal announcement system for the AI to announce things on!
+ - Thanks to /vg/ for the sounds and to JJRCop for trimming down the silence to make them sound natural(er).
+ - The VOX Announcement system isn't to be abused, admins should warn AIs who misuse it and ban AIs who misuse it after being warned.
+
+
+
+
+
+ 26 October 2013
+ Giacom updated:
+
+ - Service Cyborgs now have a violin module.
+ - You can now examine Cyborgs to see their active module.
+
+
+
+
+
+ 14 October 2013
+ Giacom updated:
+
+ - AIs can now use alt click to get a list of items on the tile, allowing the AI to interact with objects under it. They can also use this to bookmark tiles with valuable equipment, such as APCs, allowing them easy access to the tile, to interact with or to jump to.
+ - New Malf Power: Malf AIs can override a single machine's programming to cause it to rise up and attack everyone in sight.
+
+
+
+
+
+
+ 6 October 2013
+ Giacom updated:
+
+ - New blob features!
+ - The blob will glow when it is being pulsed from a core/node. Resource/factories have depended on being pulsed to work, but you couldn't see; well now you can.
+ - Overminds can talk! But only to other overminds, but ghosts can hear their conversations.
+ - As a blob overmind you can now use shortcuts to help robust that assistant with the welding tank dangerously close to your core.
+ - Expand = CTRL Click - Rally = Middle Mouse Click - Create Shield = Alt Click
+
+
+
+
+
+ 8 October 2013
+ Cael_Aislinn updated:
+
+ - Terbs Fun Week Day 6: Centcomm will ask borrow the cargo shuttle for top secret shenanigans. They'll always return it though, and sometimes they'll even clean it too (new random event).
+
+
+
+
+
+ 6 October 2013
+ Ergovisavi updated:
+
+ - Entering a Hotspot will cause you to ignite, but hot air was slightly reduced in deadliness. For every hotspot you enter, you get a little bit harder to be put out, so be wary.
+
+
+
+
+
+ 29 September 2013
+ RobRichards updated:
+
+ - Nanotrasen Cyborg Upgrades:
+Standard issue Engineering cyborgs now come equipped with replacement floor tiles which they can replenish at recharge stations.
+
+
+
+
+
+ 28 September 2013
+ Ergovisavi updated:
+
+ - Mobs can now be lit on fire. Wearing a full firesuit (or similar) will protect you. Extinguishers, Showers, Space, Cryo, Resisting, being splashed with water can all extinguish you. Being splashed with fuel/ethanol/plasma makes you more flammable. Water makes you less flammable.
+
+
+
+
+
+ 26 September 2013
+ Cheridan updated:
+
+ - Nanotrasen Anomaly Primer:
+ Unstable anomalies have been spotted in your region of space. These anomalies can be hazardous and destructive, though our initial encounters with these space oddities has discovered a method of neutralization. Method follows.
+ Step 1. Upon confirmation of an anomaly sighting, report its location. Early detection is key.
+ Step 2. Using an atmospheric analyzer at short range, determine the frequency that the anomaly's core is fluctuating at.
+ Step 3. Send a signal through the frequency using a radio signaller. Note that non-specialized signaller devices may possibly lack the frequency range needed.
+ With the anomaly neutralized and the station brought out of danger, inspect the area for any remnants of the anomaly. Properly researched, we believe these events could provide vast amounts of valuable data.
+ Did you find this report helpful?
+
+
+
+
+
+
+ 21 September 2013
+ Malkevin updated:
+
+ - Due to complaints about Security not announcing themselves before making arrests NT has now issued it's Sec team with loud hailer integrated gas masks, found in their standard equipment lockers. Users can adjust the mask's level of aggression with a screwdriver.
+ - The sprites could be shaded better. Think you can do better? Post your submissions here.
+
+
+
+
+
+ 19 September 2013
+ Malkevin updated:
+
+ - Juggernaut's ablative armor has been adjusted. They have a greater chance to reflect lasers however on reflection they take half damage instead of no damage, basically this adjustment means you should be able to kill a Juggernaut with two laser guns instead of four! Also their reflection spread has been greatly widened, enjoy the lightshow
+ - Cargo can now order exile implants.
+ - Checking a collector's last power output via analyzers has been moved to multitools, because that actually made sense (betcha didn't know this existed, I know I didn't)
+ - Analyzers can now be used to check the gas level of the tank in a loaded radiation collector (yay no more crowbars), you can also use them on pipes to check gas levels (yay no more pipe meters)
+
+
+
+
+ 17 September 2013
+ SuperSayu updated:
+
+ - You can no longer strip people through windows and windoors
+ - You can open doors by hand even if there is a firedoor in the way, making firedoor+airlock no longer an unbeatable combination
+ - Ghosts can now click on anything to examine it, or double click to jump to a turf. Double clicking a mob, bot, or (heaven forbid) singularity/Nar-Sie will let you follow it. Double clicking your own corpse re-enters it.
+ - AI can double click a mob to follow it, as well as double clicking turfs to jump.
+ - Ventcrawling mobs can alt-click a vent to start ventcrawling.
+ - Telekinesis is now part of the click system. You can click on buttons, items, etc, without having a telekinetic throw in hand; the throw will appear when you click on something you can move (with your mind).
+
+
+
+
+
+ 13 September 2013
+ JJRcop updated:
+
+ - We at Nanotrasen would like to assure you that we know the pain of waiting five minutes for the emergency shuttle to be dispatched in a high-alert situation due to our confirmation-of-distress policy. Therefore, we have amended our confirmation-of-distress policy so that, in the event of a red alert, the distress confirmation period is shortened to three minutes and we will hurry in preparing the shuttle for transit. This totals to 6 minutes, in hope that it will give our very expensive equipment a better chance of recovery.
+
+
+
+
+
+ 3 September 2013
+ Cael_Aislinn updated:
+
+ - Terbs Fun Week Day 5: Chef gets a Nanotrasen-issued icecream machine with four pre-approved icecream flavours and two official cone types.
+
+
+
+
+
+ 2 September 2013
+ Cael_Aislinn updated:
+
+ - Terbs Fun Week Day 4: Humans, aliens and cyborgs now show speech bubbles when they talk.
+
+
+
+
+
+ 1 September 2013
+ Cael_Aislinn updated:
+
+ - Terbs Fun Week Day 3: Detective can reskin his gun to one of five variants: Leopard Spots, Gold Trim, Black Panther, Peacemaker and the Original.
+
+
+
+
+
+ 12 September 2013
+ AndroidSFV updated:
+
+ - AI Photography: AIs now have two new verbs, Take Picture and View Picture. The pictures the AI takes are centered on the AI's eyeobj. You can use these pictures on a newscaster, and print them at a photocopier.
+
+
+
+
+
+ 31 August 2013
+ Cael_Aislinn updated:
+
+ - Terbs Fun Week Day 2: RD, lawyers and librarians now spawn with a laser pointer. Don't point them in anyone's eyes!
+
+
+
+
+
+ 30 August 2013
+ Cael_Aislinn updated:
+
+ - Terbs Fun Week Day 1: Added ghost chilis as a mutation of chili plants. Be careful, they're one of the hottest foods in the galaxy!
+
+
+
+
+
+ 21 August 2013
+ Dumpdavidson updated:
+
+ - Replaced the EMP grenades from the uplink with an EMP kit. The kit contains a grenade, an implant and a flashlight with 5 uses that can EMP any object or mob in melee range.
+
+
+
+
+
+ 18 August 2013
+ Delicious updated:
+
+ - Made time and date consistent across medical and security records, mecha logs and detective scanner reports
+ - Added date to PDA
+
+
+
+
+
+ 13 August 2013
+ Giacom updated:
+
+ - Malf AIs now have a new power which will spawn a "borging machine". This machine will turn living humans into loyal cyborgs which the AI can use to take over the station with. The AI will limit themselves by using this ability, such as no shunting, and the machine will have a long cooldown usage.
+
+
+
+
+
+
+
+
+ 12 August 2013
+ Giacom updated:
+
+ - Changed the blob balance to make the blob start strong but grow slower, resulting in rounds where the blob doesn't instantly get killed off if found out and doesn't immediately dominate after being left alone long enough. AIs no longer have to quarantine the station.
+
+
+
+
+
+ 10 August 2013
+ Malkevin updated:
+
+ - Cargo Overhaul: Phase 1
+ - Ported Bay's cargo computer categoy system
+ - Crates have been tweaked significantly. Crates have been reduced to single item types where possible, namely with expensive crates such as weapons and armor. A total of 28 new crates have been added, including chemical and tracking implants, and raw materials can also be bought from cargo for a significant number of points (subject to change)
+ - This was a pretty large edit of repetitive data, so no doubt I've made a mistake or two. Please report any bugs to the usual place
+
+
+
+
+
+ 6 August 2013
+ Giacom updated:
+
+ - NTSL no longer allows you to use a function within another function parameter. This was changed to help prevent server crashes; if your working script no longer compiles this is why.
+
+
+
+
+
+ 5 August 2013
+ Kaze Espada updated:
+
+ - Nanotrasen has recentely had to change its provider of alcoholic beverages to a provider of lower quality. Cases of the old ailment known as alcohol poisoning have returned. Bar goers are to be weary of this new condition.
+
+
+
+
+
+ 4 August 2013
+ Giacom updated:
+
+ - Nanotrasen has re-arranged the station blueprint designs to have non-essential APCs moved to the maintenance hallways. Non-essential rooms that aren't connected to a maintenance hallway will have their APC remain. Station Engineers will now have easy access to a room's APC without needing access themselves. Nanotrasen also wishes to remind you that you should not sabotage these easy to access APCs to cause distractions or to lockdown someone in a location. Thank you for reading.
+
+
+
+
+
+ 31 July 2013
+ Ricotez updated:
+
+ - Atmospherics now has its own hardsuit. Instead of radiation protection it offers fire protection.
+
+
+
+
+
+ 21 July 2013
+ Malkevin updated:
+
+ - Cultists now start with two words each, and the starting talisman no longer damages you when you use it
+
+
+
+
+
+
+ 21 July 2013
+ Cheridan updated:
+
+ - Instead of a level-up system where it is possible to acquire all the skills, each skill now costs 1 point, and you can pick up to 5.Husking people, instead of giving you more XP to buy skills, now gives you a skill reset, allowing you to pick new ones.
+ - DNA Extract Sting is now free, and is your main mode of acquiring DNA. You can hold up to 5 DNAs, and as you acquire more, the oldest one is removed. If you're currently using the oldest DNA strand, you will be required to transform before gaining more.
+ - New abilities! An UI indicator for chemical storage! Fun!
+
+
+
+
+
+ 16 July 2013
+ Malkevin updated:
+
+ - Summary of my recent changes: Added a muzzle and a box of Prisoner ID cards to the perma wing, RnD can make a new combined gas mask with welding visor, added some atmos analyzers to atmospherics, air alarm circuit boards have their own sprites, package wrapped objects will now loop back round to the mail chute instead of auto-rerouting to disposals, and the detective and captain have access to securitrons through their PDA cartridges.
+
+
+
+
+ 15 July 2013
+ Giacom updated:
+
+ - A new item has been added to the syndicate catalog. The AI detector is a device disguised as a multitool; it is not only able to be used as a real multitool but when it detects an AI looking at it, or it's holder, it will turn red to indicate to the holder that he should cease supiscious activities. A great and cheap, to produce, tool for undercover operations involving an AI as the security system.
+
+
+
+
+
+ 7 July 2013
+ Giacom updated:
+
+ - Revamped blob mode and the blob random event to spawn a player controlled overmind that can expand the blob and upgrade pieces that perform particular functions. This will use resources which the core can slowly generate or you can place blob pieces that will give you more resources.
+
+
+
+
+ 27 June 2013
+ Ikarrus updated:
+
+ - Nanotrasen R&D released a new firmware patch for their station AIs. Included among the changes is the new ability for AIs to interact with fire doors. R&D officials state they feel giving station AIs more influence could only lead to good things.
+
+
+
+
+ 16 June 2013
+ Khub updated:
+
+ - Job preferences menu now not only allows you to left-click the level (i.e. [Medium]) to raise it, but also to right-click it to lower it. That means you don't have to cycle through all the levels to get rid of a [Low].
+
+
+
+
+
+ 15 June 2013
+ Carnie updated:
+
+ - DNA-scanner pods (DNA-modifier + cloning), now open and close in a similar fashion to closets. This means you click on them to open/close them. This change was to fix a number of issues, like items being lost in the scanner-pods.
+ - As a side-effect, borgs can now clone humans. No harm can become a dead human, so they are not necessarily lawbound to clone them, and such tasks are probably best left to qualified genetics staff.
+
+ Petethegoat updated:
+
+ - Updated chemical grenades. The build process is much the same, except they require an igniter-X assembly instead of a single assembly item. You can also just use a cable coil to get regular grenade behaviour.
+
+
+
+
+ 9 June 2013
+ Ikarrus updated:
+
+ - Server operators may now allow latejoiners to become antagonists. Check game_options.txt for more information.
+ - Server operators may now set how traitors and changelings scale to population. Check game_options.txt for more information.
+
+
+
+
+ 6 June 2013
+ Giacom updated:
+
+ - Emptying someone's pockets won't display a message. In theory you can now pickpocket!
+
+
+
+
+
+ 4 June 2013
+ Dumpdavidson updated:
+
+ - Headsets can no longer broadcast into a channel that is disabled.
Headsets now have a button to turn off the power instead of the speaker. This button disables all communication functions.
EMPs now force affected radios off for about 20 seconds.
+
+
+
+
+ 2 June 2013
+ Ikarrus updated:
+
+ - To reduce costs of security equipment, mounted flashers have been adjusted to use common handheld flashes as their flashbulbs. Although these flashbulbs are more prone to burnout, they can easily be replaced with wirecutters.
+
+
+
+
+ 25 May 2013
+ Ikarrus updated:
+
+ - CentCom announced some minor restructuring within Space Station 13's command structure. Most notable of these changes is the removal of the Head of Personnel's access to the security radio channel. CentCom officials have stated the intention was to make the HoP's role more specialized and less partial towards security.
+
+
+
+
+ 14 May 2013
+ Ikarrus updated:
+
+ - Nanotrasen seeks to further cut operating costs on experimental cyborg units.
+
-Cyborg chassis will now be made from a cheaper but less durable design.
+
-RCDs found on engineering models have been replaced with a smaller model to make room for a metal rods module.
+
-Cyborg arms will no longer be long enough to allow for self-repairs.
+
NOTE: A cyborg's individual modules have been found to become non-operational should the unit sustain too much structural damage.
+
+
+
+
+ 11 May 2013
+ Malkevin updated:
+
+ - SecHuds now check for valid clearance before allowing you to change someone's arrest status. There is only one way to bypass the ID check, and its not the usual way.
+
+
+
+
+
+ 7 May 2013
+ Ikarrus updated:
+
+ - As a part of the most recent round of budget cuts, toolboxes will now be made with a cheaper but heavier alloy. HR reminds employees to avoid being struck with toolboxes, as toolbox-related injuries are not covered under the company's standard health plan.
+
+
+
+
+ 5 May 2013
+ Rolan7 updated:
+
+ - Cargo manifests from CentComm may contain errors. Stamp them DENIED for refunds. Doesn't apply to secure or large crates. Check the orders console for CentComm feedback.
+
+
+
+
+ 2 May 2013
+ Malkevin updated:
+
+ - You can now weld four floor tiles together to make a metal sheet
+ - The All-In-One Grinder can now grind Metal, Plasteel, Glass, Reinforced Glass, and Wood sheets
+ - Made grey backpacks slightly less ugly
+
+
+
+
+ 30 April 2013
+ Ikarrus updated:
+
+ - Researchers have discovered that glass shards are, in fact, dangerous due to their typically sharp nature. Our internal Safety Committee advises that glass shards only be handled while using Nanotrasen-approved hand-protective equipment.
+
+
+
+
+ 24 April 2013
+ Carnie updated:
+
+ - DNA reworked: All SE blocks are randomised. DNA-modifier emitter strength affects the size of the change in the hex-character hit. Emitter duration makes it more likely to hit the character you click on. Almost all DNA-modifier functions are on one screen.
Balancing -will- be off a bit. Is getting halk to hard/easy? Please report bugs/balancing issues/concerns here: http://forums.nanotrasen.com/viewtopic.php?f=15&t=13083 <3
+
+
+
+
+ 26 April 2013
+ Aranclanos updated:
+
+ - Exosuit fabricators will now need to be manually updated
+
+ Ikarrus updated:
+
+ - Commanding Officers of Nanotrasen Stations have been issued a box of medals to be awarded to crew members who display exemplary conduct.
+
+
+
+
+
+ 23 April 2013
+ Malkevin updated:
+
+ - Replaced the captain's run of the mill armored vest with his very own unique vest. Offers slightly better bullet protection.
+
+
+
+
+
+ 22 April 2013
+ Malkevin updated:
+
+ - Overhauled the thermal insulation system
+ - All clothing that protected from one side of the thermal spectrum now protects from the other.
+ - Armor (although most don't have full coverage) protects between 160 to 600 kelvin
+ - Firesuits protect between 60 to 30,000 kelvin (Note: Hotspot damage still exists)
+ - CE's hardsuit got its firesuit level protection back
+ - Bomb suits function as ghetto riot gear
+
+
+
+
+ 22 April 2013
+ Cheridan updated:
+
+ - Stungloves removed 5eva.
+ - Don't rage yet. Makeshift stunprods(similar in function to stungloves) and spears are now craftable. Make them by using a rod on cable restraits, then adding something.
+ - Stun batons/prods now work off power cells, which can be removed and replaced! Use a screwdriver to remove the battery.
+
+
+
+
+
+ 17 April 2013
+ Giacom updated:
+
+ - If the configuration option is enabled, AIs and or Cyborgs will not be able to communicate vocally. This means they cannot talk normally and need to use alternative methods to do so
+
+
+
+
+
+ 10 April 2013
+ Cheridan updated:
+
+ - You can now condense capsaicin into pepper spray with chemistry.
+ - Pepper spray made slightly more effective.
+ - Teargas grenades can be obtained in Weapons and Riot crates.
+ - Riot crate comes with 2 sets of gear instead of 3, made cheaper. Beanbag crate removed entirely. Just make more at the autolathe instead. Bureaucracy crate cheaper, now has film roll.
+ - NT bluespace engineers have ironed-out that little issue with the teleporter occasionally malfunctioning and dropping users into deep space. Please note, however, that bluespace teleporters are still sensitive experimental technology, and should be Test Fired before use to ensure proper function.
+
+
+
+
+
+ 9 April 2013
+ Ikarrus updated:
+
+ - Liquid Plasma have been found to have strange and unexpected results on virion cultures. The executive chief science officer urges virologists to explore the possibilities this new discovery could bring.
+ - After years or research, our scientists have engineered this cutting-edge technology born from the science of shaving. The Electric Space-Razor 5000! It uses moisturizers to refuel your face while you shave with not three, not four, but FIVE lazer-precise inner blades for maximum comfort.
+
+
+
+
+ 4 April 2013
+ Cheridan updated:
+
+ - When an AI shunts into an APC, the pinpointer will begin tracking it. When the AI returns to its core, the pinpointer will go back to locating the nuke disc.
+ - New sechud icons for sec officers/HoS, medical doctors, and loyalty implants.
+
+
+
+
+ 28 March 2013
+ Carnie updated:
+
+ - Empty character slots in your preferences screen will now randomize. So they won't initialise as bald, diaper-clad, white-guys.
+ - Reworked the savefile versioning/updating code. Your preferences data is less likely to be lost.
+
+
+
+
+ 14 March 2013
+ Major_sephiroth updated:
+
+ - You can now light cigarettes with other cigarettes, and candles. And cigars. Light a cigar with a candle! It's possible now!
+
+
+
+
+ 13 March 2013
+ Elo001 updated:
+
+ - You can now open and close job slots for some jobs at any IDcomputer. There is a cooldown when opening or closing a position.
+
+
+
+
+ 8 March 2013
+ Kor updated:
+
+ - You can now construct/destroy bookcases. This is super exciting and game changing.
+
+
+
+
+ 6 March 2013
+ Petethegoat updated:
+
+ - Petethegoat says, "Added a new feature involvi-GLORF"
+ - Overhauled how grabs work. There aren't any interesting mechanical differences yet, but they should be a lot more effective already. You don't have to double click them anymore. Report any bugs with grabbing directly to me, or on the issue tracker.
+
+
+
+
+ 24 February 2013
+ Ikarrus updated:
+
+ - AI has been moved back to the center of the station. Telecoms has been moved to engineering.
+
+ Faerdan updated:
+
+ - Competely new UI overhaul! Most user interface have been converted.
+
+
+GoonStation 13 Development Team
+
+ Coders: Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion
+ Spriters: Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No
+
+
+
Except where otherwise noted, Goon Station 13 is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.
Rights are currently extended to SomethingAwful Goons only.
+Some icons by Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 License.
+
+
+
diff --git a/icons/mecha/mech_bay.dmi b/icons/mecha/mech_bay.dmi
index 332387bef89..ea6b79d1f9b 100644
Binary files a/icons/mecha/mech_bay.dmi and b/icons/mecha/mech_bay.dmi differ
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index c65effd266e..79ccdd4acc3 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 32540348373..987986a431b 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi
index bcad9ed0f64..074bb4c450e 100644
Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ
diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi
index 7d1f8da8325..dbd4f6fcdd7 100644
Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ
diff --git a/icons/mob/screen_full.dmi b/icons/mob/screen_full.dmi
index baf5ae5c16c..f5bd46f3622 100644
Binary files a/icons/mob/screen_full.dmi and b/icons/mob/screen_full.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index f6a3661f580..ba2e098d7a1 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/Cryogenic2.dmi b/icons/obj/Cryogenic2.dmi
index 91e301beded..80adbbf28aa 100644
Binary files a/icons/obj/Cryogenic2.dmi and b/icons/obj/Cryogenic2.dmi differ
diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi
index eed583070a3..80623d3166d 100644
Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ
diff --git a/icons/obj/biogenerator.dmi b/icons/obj/biogenerator.dmi
index c65a9571b09..02cf868a31f 100644
Binary files a/icons/obj/biogenerator.dmi and b/icons/obj/biogenerator.dmi differ
diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi
index 87551906078..8c3eee2a656 100644
Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 4e04bd647be..d1ec7683570 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index b92ff299e46..0899e659901 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/cryogenics.dmi b/icons/obj/cryogenics.dmi
index 5b5e55ca48b..b4f68b30bad 100644
Binary files a/icons/obj/cryogenics.dmi and b/icons/obj/cryogenics.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index b642689113d..0b236287b7c 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index bf9bc35bc62..30bf098b43c 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi
index 410284ab7e1..ee76458d822 100644
Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ
diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi
index 74ca3e93434..254db3659da 100644
Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ
diff --git a/icons/obj/pipes/transit_tube.dmi b/icons/obj/pipes/transit_tube.dmi
index 45b2abc3c3e..517a3b238cd 100644
Binary files a/icons/obj/pipes/transit_tube.dmi and b/icons/obj/pipes/transit_tube.dmi differ
diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi
index 7d65bc7e54e..8f6de142a0a 100644
Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ
diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi
index a2edc4cc054..d70ef8dac12 100644
Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ
diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi
index 42a212ab2c9..779ae57a030 100644
Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ
diff --git a/icons/obj/statue.dmi b/icons/obj/statue.dmi
index cfc1fbca9d3..46dec2a0033 100644
Binary files a/icons/obj/statue.dmi and b/icons/obj/statue.dmi differ
diff --git a/icons/obj/status_display.dmi b/icons/obj/status_display.dmi
index d27884a7225..9a1405c5b66 100644
Binary files a/icons/obj/status_display.dmi and b/icons/obj/status_display.dmi differ
diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi
index 86db6feb989..eeb1db6b29c 100644
Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ
diff --git a/icons/obj/telescience.dmi b/icons/obj/telescience.dmi
index 4e8251beac3..16ac0fef27a 100644
Binary files a/icons/obj/telescience.dmi and b/icons/obj/telescience.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index c102ff7a669..54387ecdb04 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ
diff --git a/nano/templates/cryo.tmpl b/nano/templates/cryo.tmpl
index 6867a2589c4..494ce895420 100644
--- a/nano/templates/cryo.tmpl
+++ b/nano/templates/cryo.tmpl
@@ -60,6 +60,10 @@ Used In File(s): \code\game\machinery\cryo.dm
{{:~string('{1} K', cellTemperatureStatus, cellTemperature)}}
+
+ {^{:~link('Open', 'unlocked', {'open' : 1}, isOpen ? 'selected' : null)}}{^{:~link('Close', 'locked', {'close' : 1}, isOpen ? null : 'selected')}}
+
+
Cryo Cell Operation
@@ -69,9 +73,7 @@ Used In File(s): \code\game\machinery\cryo.dm
{{:~link('On', 'power', {'switchOn' : 1}, isOperating ? 'selected' : null)}}{{:~link('Off', 'close', {'switchOff' : 1}, isOperating ? null : 'selected')}}
-
- {{:~link('Eject Occupant', 'arrowreturnthick-1-s', {'ejectOccupant' : 1}, hasOccupant ? null : 'disabled')}}
-
+
diff --git a/nano/templates/smes.tmpl b/nano/templates/smes.tmpl
new file mode 100644
index 00000000000..e45030b9ca2
--- /dev/null
+++ b/nano/templates/smes.tmpl
@@ -0,0 +1,152 @@
+
+ Superconducting Magnetic Energy Storage
+
+
+
+
+ Capacity
+
+
+ {{:~round(capacity)}} W
+
+
+
+
+ Total Charge
+
+
+ {{:~round(charge)}} W
+
+
+
+
+ {{:~displayBar(capacityPercent, 0, 100, capacityPercent >= 50 ? 'good' : capacityPercent >= 15 ? 'average' : 'bad')}}
+
+
+ {{:~round(capacityPercent*10)/10}}%
+
+
+
+
+
+
+ Input:
+ {{:~link('On', 'power', {'input_attempt' : 1}, inputAttempt ? 'selected' : null)}}
+ {{:~link('Off', 'close', {'input_attempt' : 0}, inputAttempt == 0 ? 'selected' : null)}}
+
+
+ {{if capacityPercent >= 99}}
+ Fully Charged
+ {{else inputting}}
+ Charging
+ {{else}}
+ Not Charging
+ {{/if}}
+
+
+
+
+ {{:~link('0', 'seek-start', {'set_input_level' : '0'}, inputLevel == 0 ? 'selected' : null)}}
+ {{:~link('', 'triangle-1-w', {'set_input_level' : 'minus'}, inputLevel == 0 ? 'disabled' : null)}}
+ {{:~link('Change', 'gear', {'set_input_level' : 'custom'}, null)}}
+ {{:~link('', 'triangle-1-e', {'set_input_level' : 'plus'}, inputLevel == inputLevelMax ? 'disabled' : null)}}
+ {{:~link('Maximize', 'seek-end', {'set_input_level' : 'max'}, inputLevel == inputLevelMax ? 'selected' : null)}}
+
+
+ Available
+
+
+ {{if inputAvailable > inputLevel}}
+
+ {{else}}
+
+ {{/if}}
+ {{:~round(inputAvailable)}} W
+
+
+
+
+ Setting
+
+
+ {{if inputLevel > outputLevel}}
+
+ {{else inputLevel == outputLevel}}
+
+ {{else}}
+
+ {{/if}}
+ {{:~round(inputLevel)}} W
+
+
+
+
+ Max
+
+
+ {{:~round(inputLevelMax)}} W
+
+
+
+
+
+
+
+ Output:
+ {{:~link('On', 'power', {'output_attempt' : 1}, outputAttempt ? 'selected' : null)}}
+ {{:~link('Off', 'close', {'output_attempt' : 0}, outputAttempt == 0 ? 'selected' : null)}}
+
+
+ {{if outputting}}
+ Sending Ouput
+ {{else charge > 0}}
+ Not Sending Output
+ {{else}}
+ No Charge to Output
+ {{/if}}
+
+
+
+
+ {{:~link('0', 'seek-start', {'set_output_level' : '0'}, outputLevel == 0 ? 'selected' : null)}}
+ {{:~link('', 'triangle-1-w', {'set_output_level' : 'minus'}, outputLevel == 0 ? 'disabled' : null)}}
+ {{:~link('Change', 'gear', {'set_output_level' : 'custom'}, null)}}
+ {{:~link('', 'triangle-1-e', {'set_output_level' : 'plus'}, outputLevel == outputLevelMax ? 'disabled' : null)}}
+ {{:~link('Maximize', 'seek-end', {'set_output_level' : 'max'}, outputLevel == outputLevelMax ? 'selected' : null)}}
+
+
+ Used
+
+
+ {{if outputUsed >= outputLevel}}
+
+ {{else}}
+
+ {{/if}}
+ {{:~round(outputUsed)}} W
+
+
+
+
+ Setting
+
+
+ {{if inputLevel > outputLevel}}
+
+ {{else inputLevel == outputLevel}}
+
+ {{else}}
+
+ {{/if}}
+ {{:~round(outputLevel)}} W
+
+
+
+
+ Max
+
+
+ {{:~round(outputLevelMax)}} W
+
+
+
\ No newline at end of file
diff --git a/sound/items/Welder.ogg b/sound/items/Welder.ogg
index 9e3339dc1e2..fac0cd93c97 100644
Binary files a/sound/items/Welder.ogg and b/sound/items/Welder.ogg differ
diff --git a/sound/weapons/blade1.ogg b/sound/weapons/blade1.ogg
index b590ffc9fd1..3ebc4241130 100644
Binary files a/sound/weapons/blade1.ogg and b/sound/weapons/blade1.ogg differ
diff --git a/sound/weapons/bladeslice.ogg b/sound/weapons/bladeslice.ogg
index 8f72857bd1d..d3cd812f450 100644
Binary files a/sound/weapons/bladeslice.ogg and b/sound/weapons/bladeslice.ogg differ
diff --git a/sound/weapons/genhit1.ogg b/sound/weapons/genhit1.ogg
index dfb47c88a97..64c727fd4a8 100644
Binary files a/sound/weapons/genhit1.ogg and b/sound/weapons/genhit1.ogg differ
diff --git a/sound/weapons/genhit2.ogg b/sound/weapons/genhit2.ogg
index e57752aaa67..f275e7d322c 100644
Binary files a/sound/weapons/genhit2.ogg and b/sound/weapons/genhit2.ogg differ
diff --git a/sound/weapons/genhit3.ogg b/sound/weapons/genhit3.ogg
index 9a8b0b1796d..5093f27c01e 100644
Binary files a/sound/weapons/genhit3.ogg and b/sound/weapons/genhit3.ogg differ
diff --git a/sound/weapons/sear.ogg b/sound/weapons/sear.ogg
new file mode 100644
index 00000000000..c6d5f6846c9
Binary files /dev/null and b/sound/weapons/sear.ogg differ
diff --git a/sound/weapons/smash.ogg b/sound/weapons/smash.ogg
index ba76cf89e6f..ee3d7a25204 100644
Binary files a/sound/weapons/smash.ogg and b/sound/weapons/smash.ogg differ
diff --git a/sound/weapons/tap.ogg b/sound/weapons/tap.ogg
new file mode 100644
index 00000000000..4cb31e91486
Binary files /dev/null and b/sound/weapons/tap.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index dc2e59f6fc1..103af01dd4e 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -233,6 +233,7 @@
#include "code\game\gamemodes\gameticker.dm"
#include "code\game\gamemodes\intercept_report.dm"
#include "code\game\gamemodes\objective.dm"
+#include "code\game\gamemodes\objective_items.dm"
#include "code\game\gamemodes\setupgame.dm"
#include "code\game\gamemodes\blob\blob.dm"
#include "code\game\gamemodes\blob\blob_finish.dm"
@@ -1016,7 +1017,6 @@
#include "code\modules\mob\living\simple_animal\friendly\farm_animals.dm"
#include "code\modules\mob\living\simple_animal\friendly\lizard.dm"
#include "code\modules\mob\living\simple_animal\friendly\mouse.dm"
-#include "code\modules\mob\living\simple_animal\friendly\mushroom.dm"
#include "code\modules\mob\living\simple_animal\friendly\pug.dm"
#include "code\modules\mob\living\simple_animal\friendly\slime.dm"
#include "code\modules\mob\living\simple_animal\friendly\tomato.dm"
@@ -1029,8 +1029,11 @@
#include "code\modules\mob\living\simple_animal\hostile\hivebot.dm"
#include "code\modules\mob\living\simple_animal\hostile\hostile.dm"
#include "code\modules\mob\living\simple_animal\hostile\mimic.dm"
+#include "code\modules\mob\living\simple_animal\hostile\mining_mobs.dm"
+#include "code\modules\mob\living\simple_animal\hostile\mushroom.dm"
#include "code\modules\mob\living\simple_animal\hostile\pirate.dm"
#include "code\modules\mob\living\simple_animal\hostile\russian.dm"
+#include "code\modules\mob\living\simple_animal\hostile\statue.dm"
#include "code\modules\mob\living\simple_animal\hostile\syndicate.dm"
#include "code\modules\mob\living\simple_animal\hostile\tree.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\bat.dm"
@@ -1063,7 +1066,6 @@
#include "code\modules\power\cell.dm"
#include "code\modules\power\engine.dm"
#include "code\modules\power\generator.dm"
-#include "code\modules\power\generator_type2.dm"
#include "code\modules\power\gravitygenerator.dm"
#include "code\modules\power\lighting.dm"
#include "code\modules\power\port_gen.dm"
diff --git a/tools/mapmerge/clean_map.bat b/tools/mapmerge/clean_map.bat
index 736b1547276..573b6c60655 100644
--- a/tools/mapmerge/clean_map.bat
+++ b/tools/mapmerge/clean_map.bat
@@ -1,5 +1,5 @@
set MAPFILE=tgstation.2.1.2.dmm
-java -jar MapPatcher.jar -clean ../../maps/%MAPFILE%.backup ../../maps/%MAPFILE% ../../maps/%MAPFILE%
+java -jar MapPatcher.jar -clean ../../_maps/map_files/%MAPFILE%.backup ../../_maps/map_files/%MAPFILE% ../../_maps/map_files/%MAPFILE%
pause
\ No newline at end of file
diff --git a/tools/mapmerge/prepare_map.bat b/tools/mapmerge/prepare_map.bat
index bda9fc204fb..4059a17bc51 100644
--- a/tools/mapmerge/prepare_map.bat
+++ b/tools/mapmerge/prepare_map.bat
@@ -1,6 +1,6 @@
set MAPFILE=tgstation.2.1.2.dmm
-cd ../../maps
+cd ../../_maps/map_files
copy %MAPFILE% %MAPFILE%.backup
pause